From 772f20abb0a3a0979c440114bf3a1cff5b3cef03 Mon Sep 17 00:00:00 2001 From: cvpcs Date: Wed, 2 Jun 2010 11:02:31 -0500 Subject: initial import of bash 4.1 --- doc/._fdl.texi | Bin 0 -> 4096 bytes doc/._fdl.txt | Bin 0 -> 4096 bytes doc/FAQ | 2199 ++++++++ doc/INTRO | 187 + doc/Makefile.in | 304 + doc/README | 36 + doc/article.ms | 1114 ++++ doc/article.pdf | Bin 0 -> 131900 bytes doc/article.ps | 1418 +++++ doc/article.txt | 1111 ++++ doc/bash.0 | 5358 ++++++++++++++++++ doc/bash.1 | 9720 ++++++++++++++++++++++++++++++++ doc/bash.html | 12571 +++++++++++++++++++++++++++++++++++++++++ doc/bash.pdf | Bin 0 -> 288296 bytes doc/bash.ps | 8202 +++++++++++++++++++++++++++ doc/bashbug.0 | 50 + doc/bashbug.1 | 64 + doc/bashbug.ps | 284 + doc/bashref.dvi | Bin 0 -> 663456 bytes doc/bashref.html | 16225 ++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/bashref.info | 10348 ++++++++++++++++++++++++++++++++++ doc/bashref.pdf | Bin 0 -> 559434 bytes doc/bashref.ps | 16298 +++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/bashref.texi | 7931 ++++++++++++++++++++++++++ doc/builtins.0 | 1579 ++++++ doc/builtins.1 | 17 + doc/builtins.ps | 2651 +++++++++ doc/fdl.texi | 506 ++ doc/fdl.txt | 451 ++ doc/htmlpost.sh | 19 + doc/infopost.sh | 8 + doc/rbash.0 | 59 + doc/rbash.1 | 8 + doc/rbash.ps | 280 + doc/rose94.pdf | Bin 0 -> 228533 bytes doc/rose94.ps | 1581 ++++++ doc/texinfo.tex | 9250 ++++++++++++++++++++++++++++++ doc/version.texi | 10 + 38 files changed, 109839 insertions(+) create mode 100644 doc/._fdl.texi create mode 100644 doc/._fdl.txt create mode 100644 doc/FAQ create mode 100644 doc/INTRO create mode 100644 doc/Makefile.in create mode 100644 doc/README create mode 100644 doc/article.ms create mode 100644 doc/article.pdf create mode 100644 doc/article.ps create mode 100644 doc/article.txt create mode 100644 doc/bash.0 create mode 100644 doc/bash.1 create mode 100644 doc/bash.html create mode 100644 doc/bash.pdf create mode 100644 doc/bash.ps create mode 100644 doc/bashbug.0 create mode 100644 doc/bashbug.1 create mode 100644 doc/bashbug.ps create mode 100644 doc/bashref.dvi create mode 100644 doc/bashref.html create mode 100644 doc/bashref.info create mode 100644 doc/bashref.pdf create mode 100644 doc/bashref.ps create mode 100644 doc/bashref.texi create mode 100644 doc/builtins.0 create mode 100644 doc/builtins.1 create mode 100644 doc/builtins.ps create mode 100644 doc/fdl.texi create mode 100644 doc/fdl.txt create mode 100755 doc/htmlpost.sh create mode 100755 doc/infopost.sh create mode 100644 doc/rbash.0 create mode 100644 doc/rbash.1 create mode 100644 doc/rbash.ps create mode 100644 doc/rose94.pdf create mode 100644 doc/rose94.ps create mode 100644 doc/texinfo.tex create mode 100644 doc/version.texi (limited to 'doc') diff --git a/doc/._fdl.texi b/doc/._fdl.texi new file mode 100644 index 0000000..3d0bb98 Binary files /dev/null and b/doc/._fdl.texi differ diff --git a/doc/._fdl.txt b/doc/._fdl.txt new file mode 100644 index 0000000..cf58b16 Binary files /dev/null and b/doc/._fdl.txt differ diff --git a/doc/FAQ b/doc/FAQ new file mode 100644 index 0000000..bef8106 --- /dev/null +++ b/doc/FAQ @@ -0,0 +1,2199 @@ +This is the Bash FAQ, version 4.11, for Bash version 4.1. + +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.ramey@case.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 4.1? +B2) Are there any user-visible incompatibilities between bash-4.1 and + previous bash versions? + +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? +E13) Why does filename completion misbehave if a colon appears in the filename? +E14) Why does quoting the pattern argument to the regular expression matching + conditional operator (=~) cause matching to stop working? +E15) Tell me more about the shell compatibility level. + +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 4.1, first made available on 31 December, 2009. + +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 4.1: + +ftp://ftp.gnu.org/pub/gnu/bash/bash-4.1.tar.gz +ftp://ftp.cwru.edu/pub/bash/bash-4.1.tar.gz + +Formatted versions of the documentation are available with the URLs: + +ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-4.1.tar.gz +ftp://ftp.cwru.edu/pub/bash/bash-doc-4.1.tar.gz + +Any patches for the current version are available with the URL: + +ftp://ftp.cwru.edu/pub/bash/bash-4.1-patches/ + +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 (now part of Red Hat) as part +of their CYGWIN project. For more information about the project, see +http://www.cygwin.com/. + +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 +ports of bash-3.2 and bash-4.0 to the CYGWIN environment, and both +are available as part of their current release. + +Bash-2.05b and later versions should require no local Cygnus changes to +build and run under CYGWIN. + +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 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 began to work with bash-2.05, but I don't know the current status. + +Bash-3.0 compiles and runs with no modifications under Microsoft's Services +for Unix (SFU), once known as Interix. I do not anticipate any problems +with building bash-4.1, but will gladly accept any patches that are needed. + +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 2004 Edition) 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 4.1? + +Bash-4.1 is the first revision to the fourth major release of bash. + +Bash-4.1 contains the following new features (see the manual page for +complete descriptions and the CHANGES and NEWS files in the bash-4.1 +distribution): + +o Here-documents within $(...) command substitutions may once more be + delimited by the closing right paren, instead of requiring a newline. + +o Bash's file status checks (executable, readable, etc.) now take file + system ACLs into account on file systems that support them. + +o Bash now passes environment variables with names that are not valid + shell variable names through into the environment passed to child + processes. + +o The `execute-unix-command' readline function now attempts to clear and + reuse the current line rather than move to a new one after the command + executes. + +o `printf -v' can now assign values to array indices. + +o New `complete -E' and `compopt -E' options that work on the "empty" + completion: completion attempted on an empty command line. + +o New complete/compgen/compopt -D option to define a `default' completion: + a completion to be invoked on command for which no completion has been + defined. If this function returns 124, programmable completion is + attempted again, allowing a user to dynamically build a set of completions + as completion is attempted by having the default completion function + install individual completion functions each time it is invoked. + +o When displaying associative arrays, subscripts are now quoted. + +o Changes to dabbrev-expand to make it more `emacs-like': no space appended + after matches, completions are not sorted, and most recent history entries + are presented first. + +o The [[ and (( commands are now subject to the setting of `set -e' and the + ERR trap. + +o The source/. builtin now removes NUL bytes from the file before attempting + to parse commands. + +o There is a new configuration option (in config-top.h) that forces bash to + forward all history entries to syslog. + +o A new variable $BASHOPTS to export shell options settable using `shopt' to + child processes. + +o There is a new confgure option that forces the extglob option to be + enabled by default. + +o New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace + output to that file descriptor. + +o If the optional left-hand-side of a redirection is of the form {var}, the + shell assigns the file descriptor used to $var or uses $var as the file + descriptor to move or close, depending on the redirection operator. + +o The < and > operators to the [[ conditional command now do string + comparison according to the current locale. + +o Programmable completion now uses the completion for `b' instead of `a' + when completion is attempted on a line like: a $(b c. + +o Force extglob on temporarily when parsing the pattern argument to + the == and != operators to the [[ command, for compatibility. + +o Changed the behavior of interrupting the wait builtin when a SIGCHLD is + received and a trap on SIGCHLD is set to be Posix-mode only. + +o The read builtin has a new `-N nchars' option, which reads exactly NCHARS + characters, ignoring delimiters like newline. + +o The mapfile/readarray builtin no longer stores the commands it invokes via + callbacks in the history list. + +o There is a new `compat40' shopt option. + +o The < and > operators to [[ do string comparisons using the current locale + only if the compatibility level is greater than 40 (set to 41 by default). + +o New bindable readline function: menu-complete-backward. + +o In the readline vi-mode insertion keymap, C-n is now bound to menu-complete + by default, and C-p to menu-complete-backward. + +o When in readline vi command mode, repeatedly hitting ESC now does nothing, + even when ESC introduces a bound key sequence. This is closer to how + historical vi behaves. + +o New bindable readline function: skip-csi-sequence. Can be used as a + default to consume key sequences generated by keys like Home and End + without having to bind all keys. + +o New bindable readline variable: skip-completed-text, active when + completing in the middle of a word. If enabled, it means that characters + in the completion that match characters in the remainder of the word are + "skipped" rather than inserted into the line. + +o The pre-readline-6.0 version of menu completion is available as + "old-menu-complete" for users who do not like the readline-6.0 version. + +o New bindable readline variable: echo-control-characters. If enabled, and + the tty ECHOCTL bit is set, controls the echoing of characters + corresponding to keyboard-generated signals. + +o New bindable readline variable: enable-meta-key. Controls whether or not + readline sends the smm/rmm sequences if the terminal indicates it has a + meta key that enables eight-bit characters. + +A short feature history dating from Bash-2.0: + +Bash-4.0 contained the following new features: + +o When using substring expansion on the positional parameters, a starting + index of 0 now causes $0 to be prefixed to the list. + +o There is a new variable, $BASHPID, which always returns the process id of + the current shell. + +o There is a new `autocd' option that, when enabled, causes bash to attempt + to `cd' to a directory name that is supplied as the first word of a + simple command. + +o There is a new `checkjobs' option that causes the shell to check for and + report any running or stopped jobs at exit. + +o The programmable completion code exports a new COMP_TYPE variable, set to + a character describing the type of completion being attempted. + +o The programmable completion code exports a new COMP_KEY variable, set to + the character that caused the completion to be invoked (e.g., TAB). + +o The programmable completion code now uses the same set of characters as + readline when breaking the command line into a list of words. + +o The block multiplier for the ulimit -c and -f options is now 512 when in + Posix mode, as Posix specifies. + +o Changed the behavior of the read builtin to save any partial input received + in the specified variable when the read builtin times out. This also + results in variables specified as arguments to read to be set to the empty + string when there is no input available. When the read builtin times out, + it returns an exit status greater than 128. + +o The shell now has the notion of a `compatibility level', controlled by + new variables settable by `shopt'. Setting this variable currently + restores the bash-3.1 behavior when processing quoted strings on the rhs + of the `=~' operator to the `[[' command. + +o The `ulimit' builtin now has new -b (socket buffer size) and -T (number + of threads) options. + +o There is a new `compopt' builtin that allows completion functions to modify + completion options for existing completions or the completion currently + being executed. + +o The `read' builtin has a new -i option which inserts text into the reply + buffer when using readline. + +o A new `-E' option to the complete builtin allows control of the default + behavior for completion on an empty line. + +o There is now limited support for completing command name words containing + globbing characters. + +o The `help' builtin now has a new -d option, to display a short description, + and a -m option, to print help information in a man page-like format. + +o There is a new `mapfile' builtin to populate an array with lines from a + given file. + +o If a command is not found, the shell attempts to execute a shell function + named `command_not_found_handle', supplying the command words as the + function arguments. + +o There is a new shell option: `globstar'. When enabled, the globbing code + treats `**' specially -- it matches all directories (and files within + them, when appropriate) recursively. + +o There is a new shell option: `dirspell'. When enabled, the filename + completion code performs spelling correction on directory names during + completion. + +o The `-t' option to the `read' builtin now supports fractional timeout + values. + +o Brace expansion now allows zero-padding of expanded numeric values and + will add the proper number of zeroes to make sure all values contain the + same number of digits. + +o There is a new bash-specific bindable readline function: `dabbrev-expand'. + It uses menu completion on a set of words taken from the history list. + +o The command assigned to a key sequence with `bind -x' now sets two new + variables in the environment of the executed command: READLINE_LINE_BUFFER + and READLINE_POINT. The command can change the current readline line + and cursor position by modifying READLINE_LINE_BUFFER and READLINE_POINT, + respectively. + +o There is a new >>& redirection operator, which appends the standard output + and standard error to the named file. + +o The parser now understands `|&' as a synonym for `2>&1 |', which redirects + the standard error for a command through a pipe. + +o The new `;&' case statement action list terminator causes execution to + continue with the action associated with the next pattern in the + statement rather than terminating the command. + +o The new `;;&' case statement action list terminator causes the shell to + test the next set of patterns after completing execution of the current + action, rather than terminating the command. + +o The shell understands a new variable: PROMPT_DIRTRIM. When set to an + integer value greater than zero, prompt expansion of \w and \W will + retain only that number of trailing pathname components and replace + the intervening characters with `...'. + +o There are new case-modifying word expansions: uppercase (^[^]) and + lowercase (,[,]). They can work on either the first character or + array element, or globally. They accept an optional shell pattern + that determines which characters to modify. There is an optionally- + configured feature to include capitalization operators. + +o The shell provides associative array variables, with the appropriate + support to create, delete, assign values to, and expand them. + +o The `declare' builtin now has new -l (convert value to lowercase upon + assignment) and -u (convert value to uppercase upon assignment) options. + There is an optionally-configurable -c option to capitalize a value at + assignment. + +o There is a new `coproc' reserved word that specifies a coprocess: an + asynchronous command run with two pipes connected to the creating shell. + Coprocs can be named. The input and output file descriptors and the + PID of the coprocess are available to the calling shell in variables + with coproc-specific names. + +o A value of 0 for the -t option to `read' now returns success if there is + input available to be read from the specified file descriptor. + +o CDPATH and GLOBIGNORE are ignored when the shell is running in privileged + mode. + +o New bindable readline functions shell-forward-word and shell-backward-word, + which move forward and backward words delimited by shell metacharacters + and honor shell quoting. + +o New bindable readline functions shell-backward-kill-word and shell-kill-word + which kill words backward and forward, but use the same word boundaries + as shell-forward-word and shell-backward-word. + +Bash-3.2 contained the following new features: + +o Bash-3.2 now checks shell scripts for NUL characters rather than non-printing + characters when deciding whether or not a script is a binary file. + +o Quoting the string argument to the [[ command's =~ (regexp) operator now + forces string matching, as with the other pattern-matching operators. + +Bash-3.1 contained the following new features: + +o Bash-3.1 may now be configured and built in a mode that enforces strict + POSIX compliance. + +o The `+=' assignment operator, which appends to the value of a string or + array variable, has been implemented. + +o It is now possible to ignore case when matching in contexts other than + filename generation using the new `nocasematch' shell option. + +Bash-3.0 contained the following new features: + +o Features to support the bash debugger have been implemented, and there + is a new `extdebug' option to turn the non-default options on + +o HISTCONTROL is now a colon-separated list of options and has been + extended with a new `erasedups' option that will result in only one + copy of a command being kept in the history list + +o Brace expansion has been extended with a new {x..y} form, producing + sequences of digits or characters + +o Timestamps are now kept with history entries, with an option to save + and restore them from the history file; there is a new HISTTIMEFORMAT + variable describing how to display the timestamps when listing history + entries + +o The `[[' command can now perform extended regular expression (egrep-like) + matching, with matched subexpressions placed in the BASH_REMATCH array + variable + +o A new `pipefail' option causes a pipeline to return a failure status if + any command in it fails + +o The `jobs', `kill', and `wait' builtins now accept job control notation + in their arguments even if job control is not enabled + +o The `gettext' package and libintl have been integrated, and the shell + messages may be translated into other languages + +Bash-2.05b introduced the following new features: + +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 + +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 $(, &>, >|, <<<, [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/-i/-N, + readonly -a/-f/name=value, trap -l, set +o, + set -b/-m/-o option/-h/-p/-B/-C/-H/-P, + unset -f/-v, ulimit -i/-m/-p/-q/-u/-x, + 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, compopt, mapfile + 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 and strict posix conformance + redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr, + /dev/tcp/host/port, /dev/udp/host/port + debugger support, including `caller' builtin and new variables + RETURN trap + the `+=' assignment operator + autocd shell option and behavior + command-not-found hook with command_not_found_handle shell function + globstar shell option and `**' globbing behavior + |& synonym for `2>&1 |' + ;& and ;;& case action list terminators + case-modifying word expansions and variable attributes + associative arrays + coprocesses using the `coproc' reserved word and variables + shell assignment of a file descriptor used in a redirection to a variable + +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, BASHPID, 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_DIRTRIM + 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/-N, 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 -i/-q/-u/-x, umask -S, alias -p, + shopt, disown, printf, complete, compgen, compopt, mapfile + `!' 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' + debugger support, including the `caller' builtin + RETURN trap + Timestamps in history entries + {x..y} brace expansion + The `+=' assignment operator + autocd shell option and behavior + command-not-found hook with command_not_found_handle shell function + globstar shell option and `**' globbing behavior + |& synonym for `2>&1 |' + ;& and ;;& case action list terminators + case-modifying word expansions and variable attributes + associative arrays + coprocesses using the `coproc' reserved word and variables + shell assignment of a file descriptor used in a redirection to a variable + +Things ksh88 has or uses that bash does not: + tracked aliases (alias -t) + variables: ERRNO, FPATH, EDITOR, VISUAL + co-processes (bash uses different syntax) + 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, newgrp, print, + read -p/-s/var?prompt, set -A/-o gmacs/ + -o bgnice/-o markdirs/-o trackall/-o viraw/-s, + typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-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? + +This list is current through ksh93t+ (05/05/2009) + +New things in ksh-93 not in bash-4.1: + 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 + 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 (match all instead of any) + exit statuses between 0 and 255 + FPATH and PATH mixing + lexical scoping for local variables in `ksh' functions + no scoping for local variables in `POSIX' functions + $'' \C[.collating-element.] escape sequence + -C/-I invocation options + print -f (bash uses printf) + `fc' has been renamed to `hist' + `.' can execute shell functions + getopts -a + printf %B, %H, %P, %R, %T, %Z modifiers, output base for %d, `=' flag + read -n/-N differ/-v + set -o showme/-o multiline (bash default) + `sleep' and `getconf' builtins (bash has loadable versions) + typeset -n and `nameref' variables + [[ -R name ]] (checks whether or not name is a nameref) + typeset -C/-S/-T/-X/-h/-s + experimental `type' definitions (a la typedef) using typeset + negative subscripts for indexed array variables + array expansions ${array[sub1..sub2]} and ${!array[sub1..sub2]} + associative array assignments using `;' as element separator + command substitution $(n<#) expands to current byte offset for fd N + new '${ ' form of command substitution, executed in current shell + new >;/<>;/<#pat/<##pat/<#/># redirections + brace expansion printf-like formats + [[ -v var ]] operators (checks whether or not var is set) + +New things in ksh-93 present in bash-4.1: + associative arrays + [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' + new $'...' and $"..." quoting + FIGNORE (but bash uses GLOBIGNORE), HISTCMD + brace expansion and set -B + changes to kill builtin + `command', `builtin', `disown' builtins + echo -e + exec -c/-a + read -A (bash uses read -a) + read -t/-d + trap -p + `.' restores the positional parameters when it completes + set -o notify/-C + set -o pipefail + set -G (-o globstar) and ** + POSIX.2 `test' + umask -S + unalias -a + command and arithmetic substitution performed on PS1, PS4, and ENV + command name completion, TAB displaying possible completions + ENV processed only for interactive shells + The `+=' assignment operator + the `;&' case statement "fallthrough" pattern list terminator + csh-style history expansion and set -H + negative offsets in ${param:offset:length} + redirection operators preceded with {varname} to store fd number in varname + DEBUG can force skipping following command + +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. Many Linux distributions +use GNU `which', which is a C program that can understand shell +aliases. + +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. + +As of bash-3.1, bash does not report SIGPIPE errors by default. You +can build a version of bash that will report such errors. + +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, even a builtin or shell function, +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 updated POSIX standard has 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. + +E13) Why does filename completion misbehave if a colon appears in the filename? + +Filename completion (and word completion in general) may appear to behave +improperly if there is a colon in the word to be completed. + +The colon is special to readline's word completion code: it is one of the +characters that breaks words for the completer. Readline uses these characters +in sort of the same way that bash uses $IFS: they break or separate the words +the completion code hands to the application-specific or default word +completion functions. The original intent was to make it easy to edit +colon-separated lists (such as $PATH in bash) in various applications using +readline for input. + +This is complicated by the fact that some versions of the popular +`bash-completion' programmable completion package have problems with the +default completion behavior in the presence of colons. + +The current set of completion word break characters is available in bash as +the value of the COMP_WORDBREAKS variable. Removing `:' from that value is +enough to make the colon not special to completion: + +COMP_WORDBREAKS=${COMP_WORDBREAKS//:} + +You can also quote the colon with a backslash to achieve the same result +temporarily. + +E14) Why does quoting the pattern argument to the regular expression matching + conditional operator (=~) cause regexp matching to stop working? + +In versions of bash prior to bash-3.2, the effect of quoting the regular +expression argument to the [[ command's =~ operator was not specified. +The practical effect was that double-quoting the pattern argument required +backslashes to quote special pattern characters, which interfered with the +backslash processing performed by double-quoted word expansion and was +inconsistent with how the == shell pattern matching operator treated +quoted characters. + +In bash-3.2, the shell was changed to internally quote characters in single- +and double-quoted string arguments to the =~ operator, which suppresses the +special meaning of the characters special to regular expression processing +(`.', `[', `\', `(', `), `*', `+', `?', `{', `|', `^', and `$') and forces +them to be matched literally. This is consistent with how the `==' pattern +matching operator treats quoted portions of its pattern argument. + +Since the treatment of quoted string arguments was changed, several issues +have arisen, chief among them the problem of white space in pattern arguments +and the differing treatment of quoted strings between bash-3.1 and bash-3.2. +Both problems may be solved by using a shell variable to hold the pattern. +Since word splitting is not performed when expanding shell variables in all +operands of the [[ command, this allows users to quote patterns as they wish +when assigning the variable, then expand the values to a single string that +may contain whitespace. The first problem may be solved by using backslashes +or any other quoting mechanism to escape the white space in the patterns. + +Bash-4.0 introduces the concept of a `compatibility level', controlled by +several options to the `shopt' builtin. If the `compat31' option is enabled, +bash reverts to the bash-3.1 behavior with respect to quoting the rhs of +the =~ operator. + +E15) Tell me more about the shell compatibility level. + +Bash-4.0 introduced the concept of a `shell compatibility level', specified +as a set of options to the shopt builtin (compat31, compat32, compat40 at +this writing). There is only one current compatibility level -- each +option is mutually exclusive. This list does not mention behavior that is +standard for a particular version (e.g., setting compat32 means that quoting +the rhs of the regexp matching operator quotes special regexp characters in +the word, which is default behavior in bash-3.2 and above). + +compat31 set + - the < and > operators to the [[ command do not consider the current + locale when comparing strings + - quoting the rhs of the regexp matching operator (=~) has no + special effect + +compat32 set + - the < and > operators to the [[ command do not consider the current + locale when comparing strings + +compat40 set + - the < and > operators to the [[ command do not consider the current + locale when comparing strings + - interrupting a command list such as "a ; b ; c" causes the execution + of the entire list to be aborted + +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 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. + +The script examples/scripts.noah/meta.bash encapsulates the bind +commands in a shell function. + +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. It's a variant of + + echo .[!.]* ..?* * + +(The ..?* catches files with names of three or more characters beginning +with `..') + +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 +of the third edition, published in March, 2005, is 0-596-00965-8. Look for +it in fine bookstores near you. This edition of the book has been updated +to cover bash-3.0. + +The GNU Bash Reference Manual has been published as a printed book by +Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Nov. 2006). It covers +bash-3.2 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. + +Arnold Robbins and Nelson Beebe have written ``Classic Shell Scripting'', +published by O'Reilly. The first edition, with ISBN number 0-596-00595-4, +was published in May, 2005. + +Chris F. A. Johnson, a frequent contributor to comp.unix.shell and +gnu.bash.bug, has written ``Shell Scripting Recipes: A Problem-Solution +Approach,'' a new book on shell scripting, concentrating on features of +the POSIX standard helpful to shell script writers. The first edition from +Apress, with ISBN number 1-59059-471-1, was published in May, 2005. + +H3) What's coming in future versions? + +These are features I hope to include in a future version of bash. + +Rocky Bernstein's bash debugger (support is included with bash-4.0) + +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 +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 `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 2010. Never make predictions. + +This document is Copyright 1995-2010 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. diff --git a/doc/INTRO b/doc/INTRO new file mode 100644 index 0000000..29f208a --- /dev/null +++ b/doc/INTRO @@ -0,0 +1,187 @@ + BASH - The Bourne-Again Shell + +Bash is the shell, or command language interpreter, that will appear +in the GNU operating system. Bash is an sh-compatible shell that +incorporates useful features from the Korn shell (ksh) and C shell +(csh). It is intended to conform to the IEEE POSIX P1003.2/ISO 9945.2 +Shell and Tools standard. It offers functional improvements over sh +for both programming and interactive use. In addition, most sh scripts +can be run by Bash without modification. + +Bash is quite portable. It uses a configuration system that discovers +characteristics of the compilation platform at build time, and may +therefore be built on nearly every version of UNIX. Ports to +UNIX-like systems such as QNX and Minix and to non-UNIX systems such +as OS/2, Windows 95, and Windows NT are available. + +Bash includes the following features: + +Editing and Completion + +Bash offers a command-line editing facility which permits users to +edit command lines using familiar emacs or vi-style editing commands. +Editing allows corrections to be made without having to erase back +to the point of error or start the command line anew. The editing +facilities include a feature that allows users to complete command and +file names. + +The Bash line editing library is fully customizable. Users may define +their own key bindings -- the action taken when a key is pressed. A +number of variables to fine-tune editing behavior are also available. + +History and Command Re-entry + +The Bash history feature remembers commands entered to the shell and +allows them to be recalled and re-executed. The history list may be +of unlimited size. Bash allows users to search for previous commands +and reuse portions of those commands when composing new ones. The +history list may be saved across shell sessions. + +Bash allows users to control which commands are saved on the history +list. + +Job Control + +On systems that support it, Bash provides an interface to the +operating system's job control facilities, which allow processes +to be suspended and restarted, and moved between the foreground +and background. Bash allows users to selectively `forget' about +background jobs. + +Shell Functions and Aliases + +These mechanisms are available to bind a user-selected identifier to a +list of commands that will be executed when the identifier is used as +a command name. Functions allow local variables and recursion, and +have access to the environment of the calling shell. Aliases may be +used to create a mnemonic for a command name, expand a single word to +a complex command, or ensure that a command is called with a basic set +of options. + +Arrays + +Bash-2.0 supports indexed arrays of unlimited size. The subscript for +an array is an arithmetic expression. Arrays may be assigned to with +a new compound assignment syntax, and several builtins have options to +operate on array variables. Bash includes a number of built-in array +variables. + +Arithmetic + +Bash allows users to perform integer arithmetic in any base from two +to sixty-four. Nearly all of the C language arithmetic operators are +available with the same syntax and precedence as in C. Arithmetic +expansion allows an arithmetic expression to be evaluated and the +result substituted into the command line. Shell variables can be used +as operands, and the value of an expression may be assigned to a +variable. + +An arithmetic expression may be used as a command; the exit status of +the command is the value of the expression. + +ANSI-C Quoting + +There is a new quoting syntax that allows backslash-escaped characters +in strings to be expanded according to the ANSI C standard. + +Tilde Expansion + +Users' home directories may be expanded using this feature. Words +beginning with a tilde may also be expanded to the current or previous +working directory. + +Brace Expansion + +Brace expansion is a convenient way to generate a list of strings that +share a common prefix or suffix. + +Substring Capabilities + +Bash allows new strings to be created by removing leading or trailing +substrings from existing variable values, or by specifying a starting +offset and length. Portions of variable values may be matched against +shell patterns and the matching portion removed or a new value +substituted. + +Indirect Variable Expansion + +Bash makes it easy to find the value of a shell variable whose name is +the value of another variable. + +Expanded I/O Capabilities + +Bash provides several input and output features not available in sh, +including the ability to: + + o specify a file or file descriptor for both input and output + o read from or write to asynchronous processes using named pipes + o read lines ending in backslash + o display a prompt on the terminal before a read + o format menus and interpret responses to them + o echo lines exactly as input without escape processing + +Control of Builtin Commands + +Bash implements several builtin commands to give users more control +over which commands are executed. The enable builtin allows other +builtin commands to be selectively enabled or disabled. The command +and builtin builtins change the order in which the shell searches for +commands. + +On systems that provide dynamic loading, new builtins may be loaded +into a running shell from a shared object file. These new builtins +have access to all of the shell facilities. + +Help + +Bash includes a built-in help facility. + +Shell Optional Behavior + +There is a great deal of customizable shell behavior. The shopt +builtin command provides a unified interface that allows users to +alter shell defaults. + +Prompt Customization + +Bash allows the primary and secondary prompts to be customized by +interpreting a number of backslash-escaped special characters. +Parameter and variable expansion is also performed on the values of +the primary and secondary prompt strings before they are displayed. + +Security + +Bash provides a restricted shell environment. It is also possible to +control the execution of setuid/setgid scripts. + +Directory Stack + +Bash provides a `directory stack', to which directories may be added +and removed. The current directory may be changed to any directory in +the stack. It is easy to toggle between two directories in the stack. +The directory stack may be saved and restored across different shell +invocations. + +POSIX Mode + +Bash is nearly completely conformant to POSIX.2. POSIX mode changes +those few areas where the Bash default behavior differs from the +standard to match the standard. In POSIX mode, Bash is POSIX.2 +compliant. + +Internationalization + +Bash provides a new quoting syntax that allows strings to be +translated according to the current locale. The locale in which the +shell itself runs may also be changed, so that the shell messages +themselves may be language-specific. + +The command-line editing facilities allow the input of eight-bit +characters, so most of the ISO-8859 family of character sets are +supported. + +Command Timing + +Bash allows external commands, shell builtin commands and shell functions +to be timed. The format used to display the timing information may be +changed by the user. diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..3e0e68b --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,304 @@ +# This Makefile is for the Bash/documentation directory -*- text -*-. +# +# Copyright (C) 2003-2009 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +PACKAGE = @PACKAGE_NAME@ +VERSION = @PACKAGE_VERSION@ + +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_VERSION = @PACKAGE_VERSION@ + +# +SHELL = @MAKE_SHELL@ +RM = rm -f + +topdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = .:@srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +datarootdir = @datarootdir@ + +infodir = @infodir@ + +# set this to a directory name to have the HTML files installed +htmldir = @htmldir@ + +# Support an alternate destination root directory for package building +DESTDIR = + +mandir = @mandir@ +manpfx = man + +man1ext = .1 +man1dir = $(mandir)/$(manpfx)1 +man3ext = .3 +man3dir = $(mandir)/$(manpfx)3 + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +BUILD_DIR = @BUILD_DIR@ + +SUPPORT_SRCDIR = $(topdir)/support + +# bad style +RL_LIBDIR = $(topdir)/lib/readline + +# unused +TEXINDEX = texindex +TEX = tex + +MAKEINFO = makeinfo +TEXI2DVI = ${SUPPORT_SRCDIR}/texi2dvi +TEXI2HTML = ${SUPPORT_SRCDIR}/texi2html +MAN2HTML = ${BUILD_DIR}/support/man2html +HTMLPOST = ${srcdir}/htmlpost.sh +INFOPOST = ${srcdir}/infopost.sh +QUIETPS = #set this to -q to shut up dvips +PAPERSIZE = letter # change to a4 for A4-size paper +PSDPI = 600 # could be 300 if you like +DVIPS = dvips -D ${PSDPI} $(QUIETPS) -t ${PAPERSIZE} -o $@ # tricky + +TEXINPUTDIR = $(RL_LIBDIR)/doc +SET_TEXINPUTS = TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS + +# These tools might not be available; they're not required +DVIPDF = dvipdfm -o $@ -p ${PAPERSIZE} +PSPDF = gs -sPAPERSIZE=${PAPERSIZE} -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ + +MKDIRS = ${SUPPORT_SRCDIR}/mkdirs + +# This should be a program that converts troff to an ascii-readable format +NROFF = groff -Tascii + +# This should be a program that converts troff to postscript +GROFF = groff + +HSUSER = $(RL_LIBDIR)/doc/hsuser.texi +RLUSER = $(RL_LIBDIR)/doc/rluser.texi + +BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi + +.SUFFIXES: .0 .1 .3 .ms .ps .txt .dvi .html .pdf + +.1.ps: + $(RM) $@ + -${GROFF} -man $< > $@ + +.1.0: + $(RM) $@ + -${NROFF} -man $< > $@ + +.1.html: + $(RM) $@ + -${MAN2HTML} $< | ${HTMLPOST} > $@ + +.ms.ps: + $(RM) $@ + -${GROFF} -ms $< > $@ + +.ms.txt: + $(RM) $@ + -${NROFF} -ms $< > $@ + +.3.ps: + $(RM) $@ + -${GROFF} -man $< > $@ + +.3.0: + $(RM) $@ + -${NROFF} -man $< > $@ + +.3.html: + $(RM) $@ + -${MAN2HTML} $< > $@ + +.ps.pdf: + $(RM) $@ + -${PSPDF} $< + +.dvi.pdf: + $(RM) $@ + -${DVIPDF} $< + +.dvi.ps: + ${RM} $@ + -${DVIPS} $< + +all: ps info dvi text html +nodvi: ps info text html +everything: all pdf + +PSFILES = bash.ps bashbug.ps article.ps builtins.ps rbash.ps +DVIFILES = bashref.dvi bashref.ps +INFOFILES = bashref.info +MAN0FILES = bash.0 bashbug.0 builtins.0 rbash.0 +HTMLFILES = bashref.html bash.html +PDFFILES = bash.pdf bashref.pdf article.pdf rose94.pdf + +ps: ${PSFILES} +dvi: ${DVIFILES} +info: ${INFOFILES} +text: ${MAN0FILES} +html: ${HTMLFILES} +pdf: ${PDFFILES} + +bashref.dvi: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + ${SET_TEXINPUTS} $(TEXI2DVI) $(srcdir)/bashref.texi + +bashref.info: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + $(MAKEINFO) --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi + +bashref.html: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/bashref.texi + +bash.info: bashref.info + ${SHELL} ${INFOPOST} < $(srcdir)/bashref.info > $@ ; \ + +bash.txt: bash.1 +bash.ps: bash.1 +bash.html: bash.1 $(MAN2HTML) +bashbug.ps: bashbug.1 +builtins.ps: builtins.1 bash.1 +rbash.ps: rbash.1 bash.1 +bash.0: bash.1 +bashbug.0: bashbug.1 +builtins.0: builtins.1 bash.1 +rbash.0: rbash.1 bash.1 +article.ps: article.ms + +bashref.ps: bashref.dvi + +article.pdf: article.ps +bashref.pdf: bashref.dvi +bash.pdf: bash.ps +rose94.pdf: rose94.ps + +$(MAN2HTML): ${topdir}/support/man2html.c + -( cd ${BUILD_DIR}/support ; ${MAKE} ${MFLAGS} man2html) + +clean: + $(RM) *.aux *.bak *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps \ + *.pgs *.bt *.bts *.rw *.rws *.fns *.kys *.tps *.vrs *.o + ${RM} core *.core + +mostlyclean: clean + $(RM) Makefile + +distclean: clean maybe-clean + $(RM) Makefile + +maintainer-clean: clean + ${RM} ${PSFILES} ${DVIFILES} ${INFOFILES} ${MAN0FILES} ${HTMLFILES} + ${RM} ${CREATED_FAQ} + $(RM) Makefile + +maybe-clean: + -if test "X$(topdir)" != "X$(BUILD_DIR)"; then \ + $(RM) ${PSFILES} ${DVIFILES} ${INFOFILES} ${MAN0FILES} ${HTMLFILES}; \ + fi + +installdirs: + -$(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(man1dir) + -$(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(infodir) + -if test -n "$(htmldir)" ; then \ + $(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(htmldir) ; \ + fi + +install: info installdirs bash.info + -$(INSTALL_DATA) $(srcdir)/bash.1 $(DESTDIR)$(man1dir)/bash${man1ext} + -$(INSTALL_DATA) $(srcdir)/bashbug.1 $(DESTDIR)$(man1dir)/bashbug${man1ext} +# uncomment the next lines to install the builtins man page +# sed 's:bash\.1:man1/&:' $(srcdir)/builtins.1 > $${TMPDIR:-/var/tmp}/builtins.1 +# -$(INSTALL_DATA) $${TMPDIR:-/var/tmp}/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext} +# -$(RM) $${TMPDIR:-/var/tmp}/builtins.1 + -if test -f bash.info; then d=.; else d=$(srcdir); fi; \ + $(INSTALL_DATA) $$d/bash.info $(DESTDIR)$(infodir)/bash.info +# run install-info if it is present to update the info directory + if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + install-info --dir-file=$(DESTDIR)$(infodir)/dir $(DESTDIR)$(infodir)/bash.info; \ + else true; fi +# if htmldir is set, install the html files into that directory + -if test -n "${htmldir}" ; then \ + $(INSTALL_DATA) $(srcdir)/bash.html $(DESTDIR)$(htmldir) ; \ + $(INSTALL_DATA) $(srcdir)/bashref.html $(DESTDIR)$(htmldir) ; \ + fi + +install_builtins: installdirs + sed 's:bash\.1:man1/&:' $(srcdir)/builtins.1 > $${TMPDIR:-/var/tmp}/builtins.1 + -$(INSTALL_DATA) $${TMPDIR:-/var/tmp}/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext} + -$(RM) $${TMPDIR:-/var/tmp}/builtins.1 + +install_everything: install install_builtins + +uninstall: + -$(RM) $(DESTDIR)$(man1dir)/bash${man1ext} $(DESTDIR)$(man1dir)/bashbug${man1ext} + -$(RM) $(DESTDIR)$(man1dir)/bash_builtins${man1ext} + $(RM) $(DESTDIR)$(infodir)/bash.info + -if test -n "$(htmldir)" ; then \ + $(RM) $(DESTDIR)$(htmldir)/bash.html ; \ + $(RM) $(DESTDIR)$(htmldir)/bashref.html ; \ + fi + +# for use by chet +CREATED_FAQ = faq.news faq.news2 faq.mail faq.version + +faq: ${CREATED_FAQ} + +faq.version: FAQ.version FAQ + sh mkfaqvers FAQ.version > $@ + +faq.headers.mail: FAQ.headers.mail FAQ + sh mkfaqvers FAQ.headers.mail > $@ + +faq.headers.news: FAQ.headers.news FAQ + sh mkfaqvers FAQ.headers.news > $@ + +faq.headers.news2: FAQ.headers.news2 FAQ + sh mkfaqvers FAQ.headers.news2 > $@ + +faq.news: FAQ faq.headers.news faq.version + $(RM) $@ + cat faq.headers.news faq.version FAQ > $@ + +faq.news2: FAQ faq.headers.news2 faq.version + $(RM) $@ + cat faq.headers.news2 faq.version FAQ > $@ + +faq.mail: FAQ faq.headers.mail faq.version + $(RM) $@ + cat faq.headers.mail faq.version FAQ > $@ + +inst: bashref.texi + $(SHELL) ./mkinstall + cmp -s INSTALL ../INSTALL || mv INSTALL ../INSTALL + $(RM) INSTALL + +posix: bashref.texi + $(SHELL) ./mkposix + cmp -s POSIX ../POSIX || mv POSIX ../POSIX + $(RM) POSIX + +rbash: bashref.texi + $(SH) ./mkrbash + cmp -s RBASH ../RBASH || mv RBASH ../RBASH + $(RM) RBASH + +xdist: pdf inst posix rbash diff --git a/doc/README b/doc/README new file mode 100644 index 0000000..e3a1d24 --- /dev/null +++ b/doc/README @@ -0,0 +1,36 @@ +This directory contains the bash documentation. + +FAQ - a set of frequently-asked questions about Bash with answers +INTRO - a short introduction to bash +article.ms - an article I wrote about bash for The Linux Journal +bash.1 - the bash man page +builtins.1 - a man page that documents the builtins, extracted from bash.1 +bashref.texi - the `bash reference manual' +bashref.info - the `bash reference manual' processed by `makeinfo' +readline.3 - the readline man page + +The `.ps' files are postscript versions of the above. The `.html' +files are HTML versions of the man page and reference manual. The +`.0' files are formatted manual pages. The `.txt' versions are +ascii -- the output of `groff -Tascii'. + +The rest of this file explains how to use the `builtins.1' man page. + +For each command in the list of builtins create a file in man/man1 called: + +${command}.1 + +eg. +for.1 +type.1 +alias.1 +etc. + +All these files are identical as follows: + +jaws@jaws(264)$ cat alias.1 +.so man1/builtins.1 +jaws@jaws(265)$ + +Make sure you adjust the .so line in builtins.1 to reflect where you +put it. diff --git a/doc/article.ms b/doc/article.ms new file mode 100644 index 0000000..517155a --- /dev/null +++ b/doc/article.ms @@ -0,0 +1,1114 @@ +.de SE \" start example +.sp .5 +.RS +.ft CR +.nf +.. +.de EE \" end example +.fi +.sp .5 +.RE +.ft R +.. +.TL +Bash \- The GNU shell* +.AU +Chet Ramey +Case Western Reserve University +chet@po.cwru.edu +.FS +*An earlier version of this article appeared in The Linux Journal. +.FE +.NH 1 +Introduction +.PP +.B Bash +is the shell, or command language interpreter, +that will appear in the GNU operating system. +The name is an acronym for +the \*QBourne-Again SHell\*U, a pun on Steve Bourne, the author +of the direct ancestor of the current +.UX +shell \fI/bin/sh\fP, +which appeared in the Seventh Edition Bell Labs Research version +of \s-1UNIX\s+1. +.PP +Bash is an \fBsh\fP\-compatible shell that incorporates useful +features from the Korn shell (\fBksh\fP) and the C shell (\fBcsh\fP), +described later in this article. It is ultimately intended to be a +conformant implementation of the IEEE POSIX Shell and Utilities +specification (IEEE Working Group 1003.2). It offers functional +improvements over sh for both interactive and programming use. +.PP +While the GNU operating system will most likely include a version +of the Berkeley shell csh, Bash will be the default shell. +Like other GNU software, Bash is quite portable. It currently runs +on nearly every version of +.UX +and a few other operating systems \- an independently-supported +port exists for OS/2, and there are rumors of ports to DOS and +Windows NT. Ports to \s-1UNIX\s+1-like systems such as QNX and Minix +are part of the distribution. +.PP +The original author of Bash +was Brian Fox, an employee of the Free Software Foundation. The +current developer and maintainer is Chet Ramey, a volunteer who +works at Case Western Reserve University. +.NH 1 +What's POSIX, anyway? +.PP +.I POSIX +is a name originally coined by Richard Stallman for a family of open +system standards based on \s-1UNIX\s+1. There are a number of aspects of \s-1UNIX\s+1 +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. +.PP +The POSIX Shell and Utilities standard has been developed by IEEE Working +Group 1003.2 (POSIX.2).\(dd +.FS +\(ddIEEE, \fIIEEE Standard for Information Technology -- Portable +Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, +1992. +.FE +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. +There are four primary areas of work in the 1003.2 standard: +.IP \(bu +Aspects of the shell's syntax and command language. +A number of special builtins such as +.B cd +and +.B exec +are being specified as part of the shell, since their +functionality usually cannot be implemented by a separate executable; +.IP \(bu +A set of utilities to be called by shell scripts and applications. +Examples are programs like +.I sed, +.I tr, +and +.I awk. +Utilities commonly implemented as shell builtins +are described in this section, such as +.B test +and +.B kill . +An expansion of this section's scope, termed the User Portability +Extension, or UPE, has standardized interactive programs such as +.I vi +and +.I mailx; +.IP \(bu +A group of functional interfaces to services provided by the +shell, such as the traditional \f(CRsystem()\fP +C library function. There are functions to perform shell word +expansions, perform filename expansion (\fIglobbing\fP), obtain values +of POSIX.2 system configuration variables, retrieve values of +environment variables (\f(CRgetenv()\fP\^), and other services; +.IP \(bu +A suite of \*Qdevelopment\*U utilities such as +.I c89 +(the POSIX.2 version of \fIcc\fP), +and +.I yacc. +.PP +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 +.I 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 +.B eval +and +.B 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 +.B read +and +.B test . +POSIX.2 also specifies aspects of the shell's +interactive behavior as part of +the UPE, including job control and command line editing. +Interestingly enough, only \fIvi\fP-style line editing commands +have been standardized; \fIemacs\fP editing commands were left +out due to objections. +.PP +While POSIX.2 includes much of what the shell has traditionally +provided, some important things have been omitted as being +\*Qbeyond its scope.\*U There is, for instance, no mention of +a difference between a +.I login +shell and any other interactive shell (since POSIX.2 does not +specify a login program). No fixed startup files are defined, +either \- the standard does not mention +.I .profile . +.NH 1 +Basic Bash features +.PP +Since the Bourne shell +provides Bash with most of its philosophical underpinnings, +Bash inherits most of its features and functionality from sh. +Bash implements all of the traditional sh flow +control constructs (\fIfor\fP, \fIif\fP, \fIwhile\fP, etc.). +All of the Bourne shell builtins, including those not specified in +the POSIX.2 standard, appear in Bash. Shell \fIfunctions\fP, +introduced in the SVR2 version of the Bourne shell, +are similar to shell scripts, but are defined using a special +syntax and are executed in the same process as the calling shell. +Bash has shell functions +which behave in a fashion upward-compatible with sh functions. +There are certain shell +variables that Bash interprets in the same way as sh, such as +.B PS1 , +.B IFS , +and +.B PATH . +Bash implements essentially the same grammar, parameter and +variable expansion semantics, redirection, and quoting as the +Bourne shell. Where differences appear between the POSIX.2 +standard and traditional sh behavior, Bash follows POSIX. +.PP +The Korn Shell (\fBksh\fP) is a descendent of the Bourne shell written +at AT&T Bell Laboratories by David Korn\(dg. It provides a number of +useful features that POSIX and Bash have adopted. Many of the +interactive facilities in POSIX.2 have their roots in the ksh: +for example, the POSIX and ksh job control facilities are nearly +identical. Bash includes features from the Korn Shell for both +interactive use and shell programming. For programming, Bash provides +variables such as +.B RANDOM +and +.B REPLY , +the +.B typeset +builtin, +the ability to remove substrings from variables based on patterns, +and shell arithmetic. +.FS +\(dgMorris Bolsky and David Korn, \fIThe KornShell Command and +Programming Language\fP, Prentice Hall, 1989. +.FE +.B RANDOM +expands to a random number each time it is referenced; assigning a +value to +.B RANDOM +seeds the random number generator. +.B REPLY +is the default variable used by the +.B read +builtin when no variable names are supplied as arguments. +The +.B typeset +builtin is used to define variables and give them attributes +such as \fBreadonly\fP. +Bash arithmetic allows the evaluation of an expression and the +substitution of the result. Shell variables may be used as operands, +and the result of an expression may be assigned to a variable. +Nearly all of the operators from the C language are available, +with the same precedence rules: +.SE +$ echo $((3 + 5 * 32)) +163 +.EE +.LP +For interactive use, Bash implements ksh-style aliases and builtins +such as +.B fc +(discussed below) and +.B jobs . +Bash aliases allow a string to be substituted for a command name. +They can be used to create a mnemonic for a \s-1UNIX\s+1 command +name (\f(CRalias del=rm\fP), to expand a single word to a complex command +(\f(CRalias news='xterm -g 80x45 -title trn -e trn -e -S1 -N &'\fP), or to +ensure that a command is invoked with a basic set of options +(\f(CRalias ls="/bin/ls -F"\fP). +.PP +The C shell (\fBcsh\fP)\(dg, originally written by Bill Joy while at +Berkeley, is widely used and quite popular for its interactive +facilities. Bash includes a csh-compatible history expansion +mechanism (\*Q! history\*U), brace expansion, access to a stack +of directories via the +.B pushd , +.B popd , +and +.B dirs +builtins, and tilde expansion, to generate users' home directories. +Tilde expansion has also been adopted by both the Korn Shell and +POSIX.2. +.FS +\(dgBill Joy, An Introduction to the C Shell, \fIUNIX User's Supplementary +Documents\fP, University of California at Berkeley, 1986. +.FE +.PP +There were certain areas in which POSIX.2 felt standardization +was necessary, but no existing implementation provided the proper +behavior. The working group invented and standardized functionality +in these areas, which Bash implements. The +.B command +builtin was invented so that shell functions could be written to +replace builtins; it makes the capabilities of the builtin +available to the function. The reserved word \*Q!\*U was added +to negate the return value of a command or pipeline; it was nearly +impossible to express \*Qif not x\*U cleanly using the sh language. +There exist multiple incompatible implementations of the +.B test +builtin, which tests files for type and other attributes and performs +arithmetic and string comparisons. +POSIX considered none of these correct, so the standard +behavior was specified in terms of the number of arguments to the +command. POSIX.2 dictates exactly what will happen when four or +fewer arguments are given to +.B test , +and leaves the behavior undefined when more arguments are supplied. +Bash uses the POSIX.2 algorithm, which was conceived by David Korn. +.NH 2 +Features not in the Bourne Shell +.PP +There are a number of minor differences between Bash and the +version of sh present on most other versions of \s-1UNIX\s+1. The majority +of these are due to the POSIX standard, but some are the result of +Bash adopting features from other shells. For instance, Bash +includes the new \*Q!\*U reserved word, the +.B command +builtin, the ability of the +.B read +builtin to correctly return a line ending with a backslash, symbolic +arguments to the +.B umask +builtin, variable substring removal, a way to get the length of a variable, +and the new algorithm for the +.B test +builtin from the POSIX.2 standard, none of which appear in sh. +.PP +Bash also implements the \*Q$(...)\*U command substitution syntax, +which supersedes the sh `...` construct. +The \*Q$(...)\*U construct expands to the output of the command +contained within the +parentheses, with trailing newlines removed. The sh syntax is +accepted for backwards compatibility, but the \*Q$(...)\*U form +is preferred because its quoting rules are much simpler and it +is easier to nest. +.PP +The Bourne shell does not provide such features as brace expansion, +the ability +to define a variable and a function with the same name, local variables +in shell functions, the ability to enable and disable individual +builtins or write a function to replace a builtin, or a means to +export a shell function to a child process. +.PP +Bash has closed +a long-standing shell security hole by not using the +.B $IFS +variable to split each word read by the shell, but splitting only +the results of expansion (ksh and the 4.4 BSD sh have fixed this +as well). Useful behavior such as a means to abort +execution of a script read with the \*Q.\*U command using the +\fBreturn\fP builtin or automatically +exporting variables in the shell's environment to children is also +not present in the Bourne shell. Bash provides a much more powerful +environment for both interactive use and programming. +.NH 1 +Bash-specific Features +.PP +This section details a few of the features which make Bash unique. +Most of them provide improved interactive use, but a few programming +improvements are present as well. Full descriptions of these +features can be found in the Bash documentation. +.NH 2 +Startup Files +.PP +Bash executes startup files differently than other shells. The Bash +behavior is a compromise between the csh principle of startup files +with fixed names executed for each shell and the sh +\*Qminimalist\*U behavior. An interactive instance of Bash started +as a login shell reads and executes +.I ~/.bash_profile +(the file .bash_profile in the user's home directory), if it exists. +An interactive non-login shell reads and executes +.I ~/.bashrc . +A non-interactive shell (one begun to execute a shell script, for +example) reads no fixed startup file, but uses the value of the variable +.B $ENV , +if set, as the name of a startup file. The ksh practice of reading +.B $ENV +for every shell, with the accompanying difficulty of defining the +proper variables and functions for interactive and non-interactive +shells or having the file read only for interactive shells, was +considered too complex. Ease of use won out here. Interestingly, +the next release of ksh will change to reading +.B $ENV +only for interactive shells. +.NH 2 +New Builtin Commands +.PP +There are a few builtins which are new or have been extended in Bash. +The +.B enable +builtin allows builtin commands to be turned on and off arbitrarily. +To use the version of +.I echo +found in a user's search path rather than the Bash builtin, +\f(CRenable -n echo\fP suffices. The +.B help +builtin provides +quick synopses of the shell facilities without requiring +access to a manual page. +.B Builtin +is similar to +.B command +in that it bypasses shell functions and directly executes builtin +commands. Access to a csh-style stack of directories is provided +via the +.B pushd , +.B popd , +and +.B dirs +builtins. +.B Pushd +and +.B popd +insert and remove directories from the stack, respectively, and +.B dirs +lists the stack contents. On systems that allow fine-grained control +of resources, the +.B ulimit +builtin can be used to tune these settings. +.B Ulimit +allows a user to control, +among other things, whether core dumps are to be generated, +how much memory the shell or a child process is allowed to allocate, +and how large a file created by a child process can grow. The +.B suspend +command will stop the shell process when job control is active; most +other shells do not allow themselves to be stopped like that. +.B Type, +the Bash answer to +.B which +and +.B whence, +shows what will happen when a word is typed as a command: +.SE +$ type export +export is a shell builtin +$ type -t export +builtin +$ type bash +bash is /bin/bash +$ type cd +cd is a function +cd () +{ + builtin cd ${1+"$@"} && xtitle $HOST: $PWD +} +.EE +.LP +Various +modes tell what a command word is (reserved word, alias, function, builtin, +or file) or which version of a command will be executed based on +a user's search path. Some of this functionality has been adopted +by POSIX.2 and folded into the +.B command +utility. +.NH 2 +Editing and Completion +.PP +One area in which Bash shines is command line editing. Bash uses the +.I readline +library to read and edit lines when interactive. Readline is a +powerful and flexible input facility that a user can configure to +individual tastes. It allows lines to be edited using either emacs +or vi commands, where those commands are appropriate. The full +capability of emacs is not present \- there is no way to execute +a named command with M-x, for instance \- but the existing commands +are more than adequate. The vi mode is compliant with +the command line editing standardized by POSIX.2. +.PP +Readline is fully customizable. In addition to the basic commands +and key bindings, the library allows users to define additional +key bindings using a startup file. The +.I inputrc +file, which defaults to the file +.I ~/.inputrc , +is read each time readline initializes, permitting users to +maintain a consistent interface across a set of programs. Readline +includes an extensible interface, so each program using the +library can add its own bindable commands and program-specific +key bindings. Bash uses this facility to add bindings +that perform history expansion or shell word expansions on the current +input line. +.PP +Readline interprets a number of +variables which further tune its behavior. Variables +exist to control whether or not eight-bit characters are directly +read as input or converted to meta-prefixed key sequences (a +meta-prefixed key sequence consists of the character with the +eighth bit zeroed, preceded by the +.I meta-prefix +character, usually escape, which selects an alternate keymap), to +decide whether to output characters with the eighth bit set +directly or as a meta-prefixed key sequence, whether or not to +wrap to a new screen line when a line being edited is longer than +the screen width, the keymap to which subsequent key bindings should +apply, or even what happens when readline wants to +ring the terminal's bell. All of these variables can be set in +the inputrc file. +.PP +The startup file understands a set of C +preprocessor-like conditional constructs which allow variables or +key bindings to be assigned based on the application using readline, +the terminal currently being used, or the editing mode. Users can +add program-specific bindings to make their lives easier: I have +bindings that let me edit the value of +.B $PATH +and double-quote the current or previous word: +.SE +# Macros that are convenient for shell interaction +$if Bash +# edit the path +"\eC-xp": "PATH=${PATH}\ee\eC-e\eC-a\eef\eC-f" +# prepare to type a quoted word -- insert open and close double +# quotes and move to just after the open quote +"\eC-x\e"": "\e"\e"\eC-b" +# Quote the current or previous word +"\eC-xq": "\eeb\e"\eef\e"" +$endif +.EE +.LP +There is a readline +command to re-read the file, so users can edit the file, change +some bindings, and begin to use them almost immediately. +.PP +Bash implements the +.B bind +builtin for more dyamic control of readline than the startup file +permits. +.B Bind +is used in several ways. In +.I list +mode, it can display the current key bindings, list all the +readline editing directives available for binding, list which keys +invoke a given directive, or output the current set of key +bindings in a format that can be incorporated directly into an inputrc +file. In +.I batch +mode, it reads a series of key bindings directly from a file and +passes them to readline. In its most common usage, +.B bind +takes a single string and passes it directly to readline, which +interprets the line as if it had just been read from the inputrc file. +Both key bindings and variable assignments may appear in the +string given to +.B bind . +.PP +The readline library also provides an interface for \fIword completion\fP. +When the +.I completion +character (usually TAB) is typed, readline looks at the word currently +being entered and computes the set of filenames of which the current +word is a valid prefix. +If there is only one possible completion, the +rest of the characters are inserted directly, otherwise the +common prefix of the set of filenames is added to the current word. +A second TAB character entered immediately after a non-unique +completion causes readline to list the possible completions; there is +an option to have the list displayed immediately. +Readline provides hooks so that applications can provide specific types +of completion before the default filename completion is attempted. +This is quite flexible, though it is not completely user-programmable. +Bash, for example, can complete filenames, command names (including aliases, +builtins, shell reserved words, shell functions, and executables found +in the file system), shell variables, usernames, and hostnames. It +uses a set of heuristics that, while not perfect, is generally quite +good at determining what type of completion to attempt. +.NH 2 +History +.PP +Access to the list of commands previously entered (the \fIcommand history\fP) +is provided jointly by Bash and the readline library. Bash provides +variables (\fB$HISTFILE\fP, \fB$HISTSIZE\fP, and \fB$HISTCONTROL\fP) +and the +.B history +and +.B fc +builtins to manipulate the history list. +The value of +.B $HISTFILE +specifes the file where Bash writes the command history on exit and +reads it on startup. +.B $HISTSIZE +is used to limit the number of commands saved in the history. +.B $HISTCONTROL +provides a crude form of control over which commands are saved on +the history list: a value of +.I ignorespace +means to not save commands which begin with a space; a value of +.I ignoredups +means to not save commands identical to the last command saved. +\fB$HISTCONTROL\fP was named \fB$history_control\fP in earlier +versions of Bash; the old name is still accepted for backwards +compatibility. The +.B history +command can read or write files containing the history list +and display the current list contents. The +.B fc +builtin, adopted from POSIX.2 and the Korn Shell, allows display +and re-execution, with optional editing, +of commands from the history list. The readline +library offers a set of commands to search the history list for +a portion of the current input line or a string typed by the user. +Finally, the +.I history +library, generally incorporated directly into the readline library, +implements a facility for history recall, expansion, and re-execution +of previous commands very similar to csh +(\*Qbang history\*U, so called because the exclamation point +introduces a history substitution): +.SE +$ echo a b c d e +a b c d e +$ !! f g h i +echo a b c d e f g h i +a b c d e f g h i +$ !-2 +echo a b c d e +a b c d e +$ echo !-2:1-4 +echo a b c d +a b c d +.EE +.LP +The command history is only +saved when the shell is interactive, so it is not available for use +by shell scripts. +.NH 2 +New Shell Variables +.PP +There are a number of convenience variables that Bash interprets +to make life easier. These include +.B FIGNORE , +which is a set of filename suffixes identifying files to exclude when +completing filenames; +.B HOSTTYPE , +which is automatically set to a string describing the type of +hardware on which Bash is currently executing; +.B command_oriented_history , +which directs Bash to save all lines of a multiple-line +command such as a \fIwhile\fP or \fIfor\fP loop in a single +history entry, allowing easy re-editing; and +.B IGNOREEOF , +whose value indicates the number of consecutive EOF characters that +an interactive shell will read before exiting \- an easy way to keep +yourself from being logged out accidentally. The +.B auto_resume +variable alters the way the shell treats simple command names: +if job control is active, and this variable is set, single-word +simple commands without redirections cause the shell to first +look for and restart a suspended job with that name before +starting a new process. +.NH 2 +Brace Expansion +.PP +Since sh offers no convenient way to generate arbitrary strings that +share a common prefix or suffix (filename expansion requires that +the filenames exist), Bash implements \fIbrace expansion\fP, a +capability picked up from csh. +Brace expansion is similar to filename expansion, but the strings +generated need not correspond to existing files. A brace expression +consists of an optional +.I preamble , +followed by a pair of braces enclosing a series of comma-separated +strings, and an optional +.I postamble . +The preamble is prepended to each string within the braces, and the +postamble is then appended to each resulting string: +.SE +$ echo a{d,c,b}e +ade ace abe +.EE +.LP +As this example demonstrates, the results of brace expansion are not +sorted, as they are by filename expansion. +.NH 2 +Process Substitution +.PP +On systems that can support it, Bash provides a facility known as +\fIprocess substitution\fP. Process substitution is similar to command +substitution in that its specification includes a command to execute, +but the shell does not collect the command's output and insert it into +the command line. Rather, Bash opens a pipe to the command, which +is run in the background. The shell uses named pipes (FIFOs) or the +.I /dev/fd +method of naming open files to expand the process +substitution to a filename which connects to the pipe when opened. +This filename becomes the result of the expansion. Process substitution +can be used to compare the outputs of two different versions of an +application as part of a regression test: +.SE +$ cmp <(old_prog) <(new_prog) +.EE +.NH 2 +Prompt Customization +.PP +One of the more popular interactive features that Bash provides is +the ability to customize the prompt. Both +.B $PS1 +and +.B $PS2, +the primary and secondary prompts, are expanded before being +displayed. Parameter and variable expansion is performed when +the prompt string is expanded, so any shell variable can be +put into the prompt (e.g., +.B $SHLVL , +which indicates how deeply the current shell is nested). +Bash specially interprets characters in the prompt string +preceded by a backslash. Some of these backslash escapes are +replaced with +the current time, the date, the current working directory, +the username, and the command number or history number of the command +being entered. There is even a backslash escape to cause the shell +to change its prompt when running as root after an \fIsu\fP. +Before printing each primary prompt, Bash expands the variable +.B $PROMPT_COMMAND +and, if it has a value, executes the expanded value as a command, +allowing additional prompt customization. For example, this assignment +causes the current user, the current host, the time, the last +component of the current working directory, the level of shell +nesting, and the history number of the current command to be embedded +into the primary prompt: +.SE +$ PS1='\eu@\eh [\et] \eW($SHLVL:\e!)\e$ ' +chet@odin [21:03:44] documentation(2:636)$ cd .. +chet@odin [21:03:54] src(2:637)$ +.EE +.LP +The string being assigned is surrounded by single quotes so that if +it is exported, the value of +.B $SHLVL +will be updated by a child shell: +.SE +chet@odin [21:17:35] src(2:638)$ export PS1 +chet@odin [21:17:40] src(2:639)$ bash +chet@odin [21:17:46] src(3:696)$ +.EE +.LP +The \fP\e$\fP escape is displayed +as \*Q\fB$\fP\*U when running as a normal user, but as \*Q\fB#\fP\*U when +running as root. +.NH 2 +File System Views +.PP +Since Berkeley introduced symbolic links in 4.2 BSD, one of their most +annoying properties has been the \*Qwarping\*U to a completely +different area of the file system when using +.B cd , +and the resultant non-intuitive behavior of \*Q\fBcd ..\fP\*U. +The \s-1UNIX\s+1 kernel treats symbolic links +.I physically . +When the kernel is translating a pathname +in which one component is a symbolic link, it replaces all or part +of the pathname while processing the link. If the contents of the symbolic +link begin with a slash, the kernel replaces the +pathname entirely; if not, the link contents replace +the current component. In either case, the symbolic link +is visible. If the link value is an absolute pathname, +the user finds himself in a completely different part of the file +system. +.PP +Bash provides a +.I logical +view of the file system. In this default mode, command and filename +completion and builtin commands such as +.B cd +and +.B pushd +which change the current working directory transparently follow +symbolic links as if they were directories. +The +.B $PWD +variable, which holds the shell's idea of the current working directory, +depends on the path used to reach the directory rather than its +physical location in the local file system hierarchy. For example: +.SE +$ cd /usr/local/bin +$ echo $PWD +/usr/local/bin +$ pwd +/usr/local/bin +$ /bin/pwd +/net/share/sun4/local/bin +$ cd .. +$ pwd +/usr/local +$ /bin/pwd +/net/share/sun4/local +$ cd .. +$ pwd +/usr +$ /bin/pwd +/usr +.EE +.LP +One problem with this, of +course, arises when programs that do not understand the shell's logical +notion of the file system interpret \*Q..\*U differently. This generally +happens when Bash completes filenames containing \*Q..\*U according to a +logical hierarchy which does not correspond to their physical location. +For users who find this troublesome, a corresponding +.I physical +view of the file system is available: +.SE +$ cd /usr/local/bin +$ pwd +/usr/local/bin +$ set -o physical +$ pwd +/net/share/sun4/local/bin +.EE +.NH 2 +Internationalization +.PP +One of the most significant improvements in version 1.13 of Bash was the +change to \*Qeight-bit cleanliness\*U. Previous versions used the +eighth bit of characters to mark whether or not they were +quoted when performing word expansions. While this did not affect +the majority of users, most of whom used only seven-bit ASCII characters, +some found it confining. Beginning with version 1.13, Bash +implemented a different quoting mechanism that did not alter the +eighth bit of characters. This allowed Bash +to manipulate files with \*Qodd\*U characters in their names, but +did nothing to help users enter those names, so +version 1.13 introduced changes to readline that +made it eight-bit clean as well. Options exist that force readline to +attach no special significance to characters with the eighth bit set +(the default behavior is to convert these characters to meta-prefixed +key sequences) and to output these characters without conversion to +meta-prefixed sequences. These changes, along with the expansion of +keymaps to a full eight bits, enable readline to work with most of the +ISO-8859 family of character sets, used by many European countries. +.NH 2 +POSIX Mode +.PP +Although Bash is intended to be POSIX.2 conformant, there are areas in +which the default behavior is not compatible with the standard. For +users who wish to operate in a strict POSIX.2 environment, Bash +implements a \fIPOSIX mode\fP. When this mode is active, Bash modifies +its default operation where it differs from POSIX.2 to match the +standard. POSIX mode is entered when Bash is started with the +.B -posix +option. This feature is also available as an option to the +\fBset\fP builtin, \fBset -o posix\fP. +For compatibility with other GNU software that attempts to be POSIX.2 +compliant, Bash also enters POSIX mode if the variable +.B $POSIXLY_CORRECT +is set when Bash is started or assigned a value during execution. +.B $POSIX_PEDANTIC +is accepted as well, to be compatible with some older GNU utilities. +When Bash is started in POSIX mode, for example, it sources the +file named by the value of +.B $ENV +rather than the \*Qnormal\*U startup files, and does not allow +reserved words to be aliased. +.NH 1 +New Features and Future Plans +.PP +There are several features introduced in the current +version of Bash, version 1.14, and a number under consideration +for future releases. This section will briefly detail the new +features in version 1.14 and describe several features +that may appear in later versions. +.NH 2 +New Features in Bash-1.14 +.PP +The new features available in Bash-1.14 answer several of +the most common requests for enhancements. Most notably, there +is a mechanism +for including non-visible character sequences in prompts, such as +those which cause a terminal to print characters in different +colors or in standout mode. There was nothing preventing the use +of these sequences in earlier +versions, but the readline redisplay algorithm assumed each +character occupied physical screen space and would wrap lines +prematurely. +.PP +Readline has a few new +variables, several new bindable commands, and some additional +emacs mode default key bindings. A new history search +mode has been implemented: in this mode, readline searches the +history for lines beginning with the characters between the +beginning of the current line and the cursor. The existing readline +incremental search commands no longer match identical lines more +than once. +Filename completion now expands variables in directory names. +The history expansion facilities are now nearly +completely csh-compatible: missing modifiers have been added and +history substitution has been extended. +.PP +Several of the features described earlier, such as +.B "set -o posix" +and +.B $POSIX_PEDANTIC , +are new in version 1.14. +There is a new shell variable, +.B OSTYPE , +to which Bash assigns a value that identifies the +version of \s-1UNIX\s+1 it's +running on (great for putting architecture-specific binary directories +into the \fB$PATH\fP). +Two variables have been renamed: +.B $HISTCONTROL +replaces +.B $history_control , +and +.B $HOSTFILE +replaces +.B $hostname_completion_file . +In both cases, the old names are accepted for backwards +compatibility. The ksh +.I select +construct, which allows the generation of simple menus, +has been implemented. New capabilities have been added +to existing variables: +.B $auto_resume +can now take values of +.I exact +or +.I substring , +and +.B $HISTCONTROL +understands the value +.I ignoreboth , +which combines the two previously acceptable values. The +.B dirs +builtin has acquired options to print out specific members of the +directory stack. The +.B $nolinks +variable, which forces a physical view of the file system, +has been superseded by the +.B \-P +option to the +.B set +builtin (equivalent to \fBset -o physical\fP); the variable is retained +for backwards compatibility. The version string contained in +.B $BASH_VERSION +now includes an indication of the patch level as well as the +\*Qbuild version\*U. +Some little-used features have +been removed: the +.B bye +synonym for +.B exit +and the +.B $NO_PROMPT_VARS +variable are gone. There is now an organized test suite that can be +run as a regression test when building a new version of Bash. +.PP +The documentation has been thoroughly overhauled: +there is a new manual page on the readline library and the \fIinfo\fP +file has been updated to reflect the current version. +As always, as many bugs as possible have been fixed, although some +surely remain. +.NH 2 +Other Features +.PP +There are a few features that I hope to include in later Bash releases. +Some are based on work already done in other shells. +.PP +In addition to simple variables, a future release of Bash will include +one-dimensional arrays, using the ksh +implementation of arrays as a model. Additions to the ksh syntax, +such as \fIvarname\fP=( ... ) to assign a list of words directly to +an array and a mechanism to allow +the +.B read +builtin to read a list of values directly into an array, would be +desirable. Given those extensions, the ksh +.B "set \-A" +syntax may not be worth supporting (the +.B \-A +option assigns a list of values to an array, but is a rather +peculiar special case). +.PP +Some shells include a means of \fIprogrammable\fP word +completion, where the user specifies on a per-command basis how the +arguments of the command are to be treated when completion is attempted: +as filenames, hostnames, executable files, and so on. The other +aspects of the current Bash implementation could remain as-is; the +existing heuristics would still be valid. Only when completing the +arguments to a simple command would the programmable completion be +in effect. +.PP +It would also be nice to give the user finer-grained +control over which commands are saved onto the history list. One +proposal is for a variable, tentatively named +.B HISTIGNORE , +which would contain a colon-separated list of commands. Lines beginning +with these commands, after the restrictions of +.B $HISTCONTROL +have been applied, would not be placed onto the history list. The +shell pattern-matching capabilities could also be available when +specifying the contents of +.B $HISTIGNORE . +.PP +One thing that newer shells such as +.B wksh +(also known as +.B dtksh ) +provide is a command to dynamically load code +implementing additional builtin commands into a running shell. +This new builtin would take an object file or shared library +implementing the \*Qbody\*U of the +builtin (\fIxxx_builtin()\fP for those familiar with Bash internals) +and a structure containing the name of the new command, the function +to call when the new builtin is invoked (presumably defined in the +shared object specified as an argument), and the documentation to be +printed by the +.B help +command (possibly present in the shared object as well). It would +manage the details of extending the internal table of builtins. +.PP +A few other builtins would also be desirable: two are the POSIX.2 +.B getconf +command, which prints the values of system configuration variables +defined by POSIX.2, and a +.B disown +builtin, which causes a shell running +with job control active to \*Qforget about\*U one or more +background jobs in its internal jobs table. Using +.B getconf , +for example, a user could retrieve a value for +.B $PATH +guaranteed to find all of the POSIX standard utilities, or +find out how long filenames may be in the file system containing +a specified directory. +.PP +There are no implementation timetables for any of these features, nor +are there concrete plans to include them. If anyone has comments on +these proposals, feel free to send me electronic mail. +.NH 1 +Reflections and Lessons Learned +.PP +The lesson that has been repeated most often during Bash +development is that there are dark corners in the Bourne shell, +and people use all of them. In the original description of the +Bourne shell, quoting and the shell grammar are both poorly +specified and incomplete; subsequent descriptions have not helped +much. The grammar presented in Bourne's paper describing +the shell distributed with the Seventh Edition of \s-1UNIX\s+1\(dg +is so far off that it does not allow the command \f(CWwho|wc\fP. +In fact, as Tom Duff states: +.QP +Nobody really knows what the +Bourne shell's grammar is. Even examination of the source code is +little help.\(dd +.FS +\(dgS. R. Bourne, \*QUNIX Time-Sharing System: The UNIX Shell\*U, +\fIBell System Technical Journal\fP, 57(6), July-August, 1978, pp. 1971-1990. +.FE +.FS +\(ddTom Duff, \*QRc \- A Shell for Plan 9 and \s-1UNIX\s+1 systems\*U, +\fIProc. of the Summer 1990 EUUG Conference\fP, London, July, 1990, +pp. 21-33. +.FE +.LP +The POSIX.2 standard includes a \fIyacc\fP grammar that comes close +to capturing the Bourne shell's behavior, but it disallows some +constructs which sh accepts without complaint \- and there are +scripts out there that use them. It took a few versions and +several bug reports before Bash implemented sh-compatible quoting, +and there are still some \*Qlegal\*U sh constructs which Bash flags as +syntax errors. Complete sh compatibility is a tough nut. +.PP +The shell is bigger and slower than I would like, though the current +version is substantially faster than previously. The readline library +could stand a substantial rewrite. A hand-written parser to replace +the current \fIyacc\fP-generated one would probably result in a speedup, +and would solve one glaring problem: the shell could parse +commands in \*Q$(...)\*U constructs +as they are entered, rather than reporting errors when the construct +is expanded. +.PP +As always, there is some chaff to go with the wheat. +Areas of duplicated functionality need to be cleaned +up. There are several cases where Bash treats a variable specially to +enable functionality available another way (\fB$notify\fP vs. +\fBset -o notify\fP and \fB$nolinks\fP vs. \fBset -o physical\fP, for +instance); the special treatment of the variable name should probably +be removed. A few more things could stand removal; the +.B $allow_null_glob_expansion +and +.B $glob_dot_filenames +variables are of particularly questionable value. +The \fB$[...]\fP arithmetic evaluation syntax is redundant now that +the POSIX-mandated \fB$((...))\fP construct has been implemented, +and could be deleted. +It would be nice if the text output by the +.B help +builtin were external to the shell rather than compiled into it. +The behavior enabled by +.B $command_oriented_history , +which causes the shell to attempt to save all lines of a multi-line +command in a single history entry, should be made the default and +the variable removed. +.NH 1 +Availability +.PP +As with all other +GNU software, Bash is available for anonymous FTP from +.I prep.ai.mit.edu:/pub/gnu +and from other GNU software mirror sites. The current version is in +.I bash-1.14.1.tar.gz +in that directory. Use +.I archie +to find the nearest archive site. The +latest version is always available for FTP from +.I bash.CWRU.Edu:/pub/dist. +Bash documentation is available for FTP from +.I bash.CWRU.Edu:/pub/bash. +.PP +The Free Software Foundation sells tapes and CD-ROMs +containing Bash; send electronic mail to +\f(CRgnu@prep.ai.mit.edu\fP or call \f(CR+1-617-876-3296\fP +for more information. +.PP +Bash is also distributed with several versions of \s-1UNIX\s+1-compatible +systems. It is included as /bin/sh and /bin/bash on several Linux +distributions (more about the difference in a moment), and as contributed +software in BSDI's BSD/386* and FreeBSD. +.FS +*BSD/386 is a trademark of Berkeley Software Design, Inc. +.FE +.PP +The Linux distribution deserves special mention. There are two +configurations included in the standard Bash distribution: a +\*Qnormal\*U configuration, in which all of the standard features +are included, and a \*Qminimal\*U configuration, which omits job +control, aliases, history and command line editing, the directory +stack and +.B pushd/popd/dirs, +process substitution, prompt string special character decoding, and the +.I select +construct. This minimal version is designed to be a drop-in replacement +for the traditional \s-1UNIX\s+1 /bin/sh, and is included as the Linux +/bin/sh in several packagings. +.NH 1 +Conclusion +.PP +Bash is a worthy successor to sh. +It is sufficiently portable +to run on nearly every version of \s-1UNIX\s+1 from +4.3 BSD to SVR4.2, and several \s-1UNIX\s+1 workalikes. +It is robust enough to replace sh on most of those systems, +and provides more functionality. It has several thousand regular users, +and their feedback has helped to make it as good as it is today \- a +testament to the benefits of free software. diff --git a/doc/article.pdf b/doc/article.pdf new file mode 100644 index 0000000..d2aaf9e Binary files /dev/null and b/doc/article.pdf differ diff --git a/doc/article.ps b/doc/article.ps new file mode 100644 index 0000000..3aadf2f --- /dev/null +++ b/doc/article.ps @@ -0,0 +1,1418 @@ +%!PS-Adobe-3.0 +%%Creator: groff version 1.16.1 +%%CreationDate: Mon Nov 19 13:06:55 2001 +%%DocumentNeededResources: font Times-Bold +%%+ font Times-Italic +%%+ font Times-Roman +%%+ font Courier +%%DocumentSuppliedResources: procset grops 1.16 1 +%%Pages: 11 +%%PageOrder: Ascend +%%Orientation: Portrait +%%EndComments +%%BeginProlog +%%BeginResource: procset grops 1.16 1 +/setpacking where{ +pop +currentpacking +true setpacking +}if +/grops 120 dict dup begin +/SC 32 def +/A/show load def +/B{0 SC 3 -1 roll widthshow}bind def +/C{0 exch ashow}bind def +/D{0 exch 0 SC 5 2 roll awidthshow}bind def +/E{0 rmoveto show}bind def +/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def +/G{0 rmoveto 0 exch ashow}bind def +/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/I{0 exch rmoveto show}bind def +/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def +/K{0 exch rmoveto 0 exch ashow}bind def +/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/M{rmoveto show}bind def +/N{rmoveto 0 SC 3 -1 roll widthshow}bind def +/O{rmoveto 0 exch ashow}bind def +/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/Q{moveto show}bind def +/R{moveto 0 SC 3 -1 roll widthshow}bind def +/S{moveto 0 exch ashow}bind def +/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/SF{ +findfont exch +[exch dup 0 exch 0 exch neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/MF{ +findfont +[5 2 roll +0 3 1 roll +neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/level0 0 def +/RES 0 def +/PL 0 def +/LS 0 def +/MANUAL{ +statusdict begin/manualfeed true store end +}bind def +/PLG{ +gsave newpath clippath pathbbox grestore +exch pop add exch pop +}bind def +/BP{ +/level0 save def +1 setlinecap +1 setlinejoin +72 RES div dup scale +LS{ +90 rotate +}{ +0 PL translate +}ifelse +1 -1 scale +}bind def +/EP{ +level0 restore +showpage +}bind def +/DA{ +newpath arcn stroke +}bind def +/SN{ +transform +.25 sub exch .25 sub exch +round .25 add exch round .25 add exch +itransform +}bind def +/DL{ +SN +moveto +SN +lineto stroke +}bind def +/DC{ +newpath 0 360 arc closepath +}bind def +/TM matrix def +/DE{ +TM currentmatrix pop +translate scale newpath 0 0 .5 0 360 arc closepath +TM setmatrix +}bind def +/RC/rcurveto load def +/RL/rlineto load def +/ST/stroke load def +/MT/moveto load def +/CL/closepath load def +/FL{ +currentgray exch setgray fill setgray +}bind def +/BL/fill load def +/LW/setlinewidth load def +/RE{ +findfont +dup maxlength 1 index/FontName known not{1 add}if dict begin +{ +1 index/FID ne{def}{pop pop}ifelse +}forall +/Encoding exch def +dup/FontName exch def +currentdict end definefont pop +}bind def +/DEFS 0 def +/EBEGIN{ +moveto +DEFS begin +}bind def +/EEND/end load def +/CNT 0 def +/level1 0 def +/PBEGIN{ +/level1 save def +translate +div 3 1 roll div exch scale +neg exch neg exch translate +0 setgray +0 setlinecap +1 setlinewidth +0 setlinejoin +10 setmiterlimit +[]0 setdash +/setstrokeadjust where{ +pop +false setstrokeadjust +}if +/setoverprint where{ +pop +false setoverprint +}if +newpath +/CNT countdictstack def +userdict begin +/showpage{}def +}bind def +/PEND{ +clear +countdictstack CNT sub{end}repeat +level1 restore +}bind def +end def +/setpacking where{ +pop +setpacking +}if +%%EndResource +%%IncludeResource: font Times-Bold +%%IncludeResource: font Times-Italic +%%IncludeResource: font Times-Roman +%%IncludeResource: font Courier +grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 +def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron +/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent +/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen +/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon +/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O +/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex +/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y +/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft +/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl +/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut +/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash +/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen +/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft +/logicalnot/minus/registered/macron/degree/plusminus/twosuperior +/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior +/ordmasculine/guilsinglright/onequarter/onehalf/threequarters +/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE +/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn +/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash +/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def +/Courier@0 ENC0/Courier RE/Times-Roman@0 ENC0/Times-Roman RE +/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 12/Times-Bold@0 SF(Bash \255 The GNU shell*)227.904 123 Q/F1 10 +/Times-Italic@0 SF(Chet Rame)263.85 147 Q(y)-.3 E(Case W)221.72 159 Q +(estern Reserve Univer)-.92 E(sity)-.1 E -.15(ch)250.425 171 S +(et@po.cwru.edu).15 E/F2 10/Times-Bold@0 SF 2.5(1. Intr)72 207 R +(oduction)-.18 E(Bash)97 222.6 Q/F3 10/Times-Roman@0 SF .904 +(is the shell, or command language interpreter)3.404 F 3.404(,t)-.4 G +.904(hat will appear in the GNU operating system.)-3.404 F 1.075 +(The name is an acron)72 234.6 R 1.075(ym for the \231Bourne-Ag)-.15 F +1.075(ain SHell\232, a pun on Ste)-.05 F 1.375 -.15(ve B)-.25 H 1.075 +(ourne, the author of the direct).15 F .206(ancestor of the current)72 +246.6 R/F4 8/Times-Roman@0 SF(UNIX)2.706 E F3 2.706C(hell)-2.706 E +F1(/bin/sh)2.706 E F3 2.706(,w)C .205(hich appeared in the Se)-2.706 F +-.15(ve)-.25 G .205(nth Edition Bell Labs Research v).15 F(er)-.15 E(-) +-.2 E(sion of)72 258.6 Q/F5 9/Times-Roman@0 SF(UNIX)2.5 E F3(.)A .387 +(Bash is an)97 274.2 R F2(sh)2.887 E F3 .387 +(\255compatible shell that incorporates useful features from the K)B +.388(orn shell \()-.35 F F2(ksh)A F3 2.888(\)a)C .388(nd the C)-2.888 F +.023(shell \()72 286.2 R F2(csh)A F3 .023 +(\), described later in this article.)B .022 +(It is ultimately intended to be a conformant implementation of the) +5.022 F 3.568(IEEE POSIX Shell and Utilities speci\214cation \(IEEE W)72 +298.2 R 3.568(orking Group 1003.2\).)-.8 F 3.569(It of)8.569 F 3.569 +(fers functional)-.25 F(impro)72 310.2 Q -.15(ve)-.15 G(ments o).15 E +-.15(ve)-.15 G 2.5(rs).15 G 2.5(hf)-2.5 G(or both interacti)-2.5 E .3 +-.15(ve a)-.25 H(nd programming use.).15 E .697 +(While the GNU operating system will most lik)97 325.8 R .697 +(ely include a v)-.1 F .697(ersion of the Berk)-.15 F(ele)-.1 E 3.197 +(ys)-.15 G .696(hell csh, Bash)-3.197 F .015(will be the def)72 337.8 R +.015(ault shell.)-.1 F(Lik)5.015 E 2.515(eo)-.1 G .015(ther GNU softw) +-2.515 F .016(are, Bash is quite portable.)-.1 F .016 +(It currently runs on nearly e)5.016 F -.15(ve)-.25 G(ry).15 E -.15(ve) +72 349.8 S .523(rsion of).15 F F4(UNIX)3.023 E F3 .523(and a fe)3.023 F +3.023(wo)-.25 G .523 +(ther operating systems \255 an independently-supported port e)-3.023 F +.523(xists for OS/2, and)-.15 F .706 +(there are rumors of ports to DOS and W)72 361.8 R(indo)-.4 E .706 +(ws NT)-.25 F 5.706(.P)-.74 G .706(orts to)-5.706 F F5(UNIX)3.206 E F3 +(-lik)A 3.206(es)-.1 G .706(ystems such as QNX and Minix)-3.206 F +(are part of the distrib)72 373.8 Q(ution.)-.2 E .405 +(The original author of Bash w)97 389.4 R .405(as Brian F)-.1 F .405 +(ox, an emplo)-.15 F .405(yee of the Free Softw)-.1 F .405(are F)-.1 F +2.905(oundation. The)-.15 F(cur)2.905 E(-)-.2 E(rent de)72 401.4 Q -.15 +(ve)-.25 G(loper and maintainer is Chet Rame).15 E 1.3 -.65(y, a v)-.15 +H(olunteer who w).45 E(orks at Case W)-.1 E(estern Reserv)-.8 E 2.5(eU) +-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E(.)-.65 E F2 2.5(2. What')72 +425.4 R 2.5(sP)-.37 G(OSIX, anyway?)-2.5 E F1(POSIX)97 441 Q F3 .343 +(is a name originally coined by Richard Stallman for a f)2.843 F .343 +(amily of open system standards based)-.1 F(on)72 453 Q F5(UNIX)3.24 E +F3 5.74(.T)C .74(here are a number of aspects of)-5.74 F F5(UNIX)3.24 E +F3 .74(under consideration for standardization, from the basic)3.24 F +.192(system services at the system call and C library le)72 465 R -.15 +(ve)-.25 G 2.692(lt).15 G 2.692(oa)-2.692 G .192 +(pplications and tools to system administration and)-2.692 F 2.5 +(management. Each)72 477 R(area of standardization is assigned to a w) +2.5 E(orking group in the 1003 series.)-.1 E 2.814 +(The POSIX Shell and Utilities standard has been de)97 492.6 R -.15(ve) +-.25 G 2.814(loped by IEEE W).15 F 2.813(orking Group 1003.2)-.8 F .254 +(\(POSIX.2\).\210 It concentrates on the command interpreter interf)72 +504.6 R .253(ace and utility programs commonly e)-.1 F -.15(xe)-.15 G +(cuted).15 E 1.112(from the command line or by other programs.)72 516.6 +R 1.112(An initial v)6.112 F 1.113 +(ersion of the standard has been appro)-.15 F -.15(ve)-.15 G 3.613(da) +.15 G(nd)-3.613 E .365(published by the IEEE, and w)72 528.6 R .365 +(ork is currently underw)-.1 F .365(ay to update it.)-.1 F .365 +(There are four primary areas of w)5.365 F(ork)-.1 E +(in the 1003.2 standard:)72 540.6 Q 21.5<8341>72 556.2 S .835 +(spects of the shell')-21.5 F 3.335(ss)-.55 G .835 +(yntax and command language.)-3.335 F 3.335(An)5.835 G .835 +(umber of special b)-3.335 F .835(uiltins such as)-.2 F F2(cd)3.335 E F3 +(and)3.335 E F2(exec)97 568.2 Q F3 .545(are being speci\214ed as part o\ +f the shell, since their functionality usually cannot be implemented) +3.046 F(by a separate e)97 580.2 Q -.15(xe)-.15 G(cutable;).15 E 21.5 +<8341>72 595.8 S .926 +(set of utilities to be called by shell scripts and applications.) +-18.074 F .927(Examples are programs lik)5.927 F(e)-.1 E F1 .927 +(sed, tr)3.427 F(,)-1.11 E F3(and)97 607.8 Q F1(awk.)2.797 E F3 .297 +(Utilities commonly implemented as shell b)5.297 F .296 +(uiltins are described in this section, such as)-.2 F F2(test)2.796 E F3 +(and)97 619.8 Q F2(kill)3.422 E F3 5.922(.A)C 3.422(ne)-5.922 G .922 +(xpansion of this section')-3.572 F 3.423(ss)-.55 G .923 +(cope, termed the User Portability Extension, or UPE, has)-3.423 F +(standardized interacti)97 631.8 Q .3 -.15(ve p)-.25 H(rograms such as) +.15 E F1(vi)2.5 E F3(and)2.5 E F1(mailx;)2.5 E F3 21.5<8341>72 647.4 S +.288(group of functional interf)-18.712 F .287(aces to services pro)-.1 +F .287(vided by the shell, such as the traditional)-.15 F/F6 10 +/Courier@0 SF(system\(\))2.787 E F3 3.289(Cl)97 659.4 S .789 +(ibrary function.)-3.289 F .789(There are functions to perform shell w) +5.789 F .789(ord e)-.1 F .79(xpansions, perform \214lename e)-.15 F +(xpan-)-.15 E .324(sion \()97 671.4 R F1(globbing)A F3 .324 +(\), obtain v)B .323(alues of POSIX.2 system con\214guration v)-.25 F +.323(ariables, retrie)-.25 F .623 -.15(ve v)-.25 H .323(alues of en)-.1 +F(viron-)-.4 E(ment v)97 683.4 Q(ariables \()-.25 E F6(getenv\(\))A F3 +(\), and other services;).833 E .32 LW 144 691.4 72 691.4 DL F4 +(*An earlier v)72 703.2 Q +(ersion of this article appeared in The Linux Journal.)-.12 E(\210IEEE,) +72 715 Q/F7 8/Times-Italic@0 SF 1.231(IEEE Standar)3.231 F 3.231(df) +-.296 G 1.231(or Information T)-3.231 F(ec)-.736 E(hnolo)-.12 E 1.231 +(gy -- P)-.08 F 1.231(ortable Oper)-.64 F 1.232 +(ating System Interface \(POSIX\) P)-.12 F 1.232(art 2:)-.64 F +(Shell and Utilities)72 725 Q F4 2(,1)C(992.)-2 E EP +%%Page: 2 2 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-2-)282.17 48 Q 21.5<8341>72 84 S +(suite of \231de)-19 E -.15(ve)-.25 G(lopment\232 utilities such as).15 +E/F1 10/Times-Italic@0 SF(c89)2.5 E F0(\(the POSIX.2 v)2.5 E(ersion of) +-.15 E F1(cc)2.5 E F0(\), and)A F1(yacc.)2.5 E F0 .483 +(Bash is concerned with the aspects of the shell')97 99.6 R 2.983(sb) +-.55 G(eha)-2.983 E .484(vior de\214ned by POSIX.2.)-.2 F .484 +(The shell command)5.484 F 1.439 +(language has of course been standardized, including the basic \215o)72 +111.6 R 3.938(wc)-.25 G 1.438(ontrol and program e)-3.938 F -.15(xe)-.15 +G 1.438(cution con-).15 F 1.284 +(structs, I/O redirection and pipelining, ar)72 123.6 R 1.284 +(gument handling, v)-.18 F 1.284(ariable e)-.25 F 1.284 +(xpansion, and quoting.)-.15 F(The)6.285 E F1(special)3.785 E F0 -.2(bu) +72 135.6 S .676 +(iltins, which must be implemented as part of the shell to pro).2 F .676 +(vide the desired functionality)-.15 F 3.176(,a)-.65 G .676 +(re speci\214ed)-3.176 F .7(as being part of the shell; e)72 147.6 R .7 +(xamples of these are)-.15 F/F2 10/Times-Bold@0 SF -2.3 -.15(ev a)3.201 +H(l).15 E F0(and)3.201 E F2(export)3.201 E F0 5.701(.O)C .701 +(ther utilities appear in the sections of)-5.701 F .256(POSIX.2 not de) +72 159.6 R -.2(vo)-.25 G .256(ted to the shell which are commonly \(and\ + in some cases must be\) implemented as b).2 F(uiltin)-.2 E .213 +(commands, such as)72 171.6 R F2 -.18(re)2.713 G(ad).18 E F0(and)2.713 E +F2(test)2.713 E F0 5.213(.P)C .213 +(OSIX.2 also speci\214es aspects of the shell')-5.213 F 2.713(si)-.55 G +(nteracti)-2.713 E .513 -.15(ve b)-.25 H(eha).15 E .214(vior as part)-.2 +F .598(of the UPE, including job control and command line editing.)72 +183.6 R .598(Interestingly enough, only)5.598 F F1(vi)3.098 E F0 .598 +(-style line edit-)B(ing commands ha)72 195.6 Q .3 -.15(ve b)-.2 H +(een standardized;).15 E F1(emacs)2.5 E F0 +(editing commands were left out due to objections.)2.5 E 1.128 +(While POSIX.2 includes much of what the shell has traditionally pro)97 +211.2 R 1.129(vided, some important things)-.15 F(ha)72 223.2 Q .344 +-.15(ve b)-.2 H .044(een omitted as being \231be).15 F .044 +(yond its scope.)-.15 F 5.043<9a54>-.7 G .043 +(here is, for instance, no mention of a dif)-5.043 F .043 +(ference between a)-.25 F F1(lo)72 235.2 Q(gin)-.1 E F0 1.445 +(shell and an)3.945 F 3.945(yo)-.15 G 1.445(ther interacti)-3.945 F +1.745 -.15(ve s)-.25 H 1.446 +(hell \(since POSIX.2 does not specify a login program\).).15 F 1.446 +(No \214x)6.446 F(ed)-.15 E(startup \214les are de\214ned, either \255 \ +the standard does not mention)72 247.2 Q F1(.pr)2.5 E(o\214le)-.45 E F0 +(.)A F2 2.5(3. Basic)72 271.2 R(Bash featur)2.5 E(es)-.18 E F0 1.448 +(Since the Bourne shell pro)97 286.8 R 1.448 +(vides Bash with most of its philosophical underpinnings, Bash inherits) +-.15 F .64(most of its features and functionality from sh.)72 298.8 R +.641(Bash implements all of the traditional sh \215o)5.641 F 3.141(wc) +-.25 G .641(ontrol con-)-3.141 F .8(structs \()72 310.8 R F1(for)A F0(,) +A F1(if)3.3 E F0(,)A F1(while)3.3 E F0 3.3(,e)C 3.3(tc.\). All)-3.3 F +.799(of the Bourne shell b)3.3 F .799 +(uiltins, including those not speci\214ed in the POSIX.2)-.2 F .536 +(standard, appear in Bash.)72 322.8 R(Shell)5.536 E F1(functions)3.036 E +F0 3.036(,i)C .536(ntroduced in the SVR2 v)-3.036 F .537 +(ersion of the Bourne shell, are similar)-.15 F .779 +(to shell scripts, b)72 334.8 R .779 +(ut are de\214ned using a special syntax and are e)-.2 F -.15(xe)-.15 G +.779(cuted in the same process as the calling).15 F 2.841(shell. Bash)72 +346.8 R .341(has shell functions which beha)2.841 F .641 -.15(ve i)-.2 H +2.841(naf).15 G .341(ashion upw)-2.941 F .342 +(ard-compatible with sh functions.)-.1 F .342(There are)5.342 F 1.447 +(certain shell v)72 358.8 R 1.446 +(ariables that Bash interprets in the same w)-.25 F 1.446 +(ay as sh, such as)-.1 F F2(PS1)3.946 E F0(,)A F2(IFS)3.946 E F0 3.946 +(,a)C(nd)-3.946 E F2 -.74(PA)3.946 G(TH)-.21 E F0 6.446(.B)C(ash)-6.446 +E 1.423(implements essentially the same grammar)72 370.8 R 3.924(,p)-.4 +G 1.424(arameter and v)-3.924 F 1.424(ariable e)-.25 F 1.424 +(xpansion semantics, redirection, and)-.15 F 1.06 +(quoting as the Bourne shell.)72 382.8 R 1.06(Where dif)6.06 F 1.06 +(ferences appear between the POSIX.2 standard and traditional sh)-.25 F +(beha)72 394.8 Q(vior)-.2 E 2.5(,B)-.4 G(ash follo)-2.5 E(ws POSIX.)-.25 +E 1.608(The K)97 410.4 R 1.608(orn Shell \()-.35 F F2(ksh)A F0 4.108 +(\)i)C 4.108(sad)-4.108 G 1.608 +(escendent of the Bourne shell written at A)-4.108 F 1.609 +(T&T Bell Laboratories by)-1.11 F(Da)72 422.4 Q 1.059(vid K)-.2 F 3.559 +(orn\207. It)-.35 F(pro)3.559 E 1.059 +(vides a number of useful features that POSIX and Bash ha)-.15 F 1.359 +-.15(ve a)-.2 H 3.558(dopted. Man).15 F 3.558(yo)-.15 G 3.558(ft)-3.558 +G(he)-3.558 E(interacti)72 434.4 Q 1.312 -.15(ve f)-.25 H 1.012 +(acilities in POSIX.2 ha).05 F 1.312 -.15(ve t)-.2 H 1.012 +(heir roots in the ksh: for e).15 F 1.013 +(xample, the POSIX and ksh job control)-.15 F -.1(fa)72 446.4 S .513 +(cilities are nearly identical. Bash includes features from the K).1 F +.513(orn Shell for both interacti)-.35 F .813 -.15(ve u)-.25 H .513 +(se and shell).15 F 3.905(programming. F)72 458.4 R 1.405 +(or programming, Bash pro)-.15 F 1.405(vides v)-.15 F 1.405 +(ariables such as)-.25 F F2(RANDOM)3.905 E F0(and)3.905 E F2(REPL)3.905 +E(Y)-.92 E F0 3.905(,t)C(he)-3.905 E F2(typeset)3.905 E F0 -.2(bu)72 +470.4 S .398(iltin, the ability to remo).2 F .698 -.15(ve s)-.15 H .398 +(ubstrings from v).15 F .398 +(ariables based on patterns, and shell arithmetic.)-.25 F F2(RANDOM) +5.397 E F0 -.15(ex)72 482.4 S .489 +(pands to a random number each time it is referenced; assigning a v).15 +F .49(alue to)-.25 F F2(RANDOM)2.99 E F0 .49(seeds the random)2.99 F +.055(number generator)72 494.4 R(.)-.55 E F2(REPL)5.055 E(Y)-.92 E F0 +.054(is the def)2.554 F .054(ault v)-.1 F .054(ariable used by the)-.25 +F F2 -.18(re)2.554 G(ad).18 E F0 -.2(bu)2.554 G .054(iltin when no v).2 +F .054(ariable names are sup-)-.25 F .742(plied as ar)72 506.4 R 3.243 +(guments. The)-.18 F F2(typeset)3.243 E F0 -.2(bu)3.243 G .743 +(iltin is used to de\214ne v).2 F .743(ariables and gi)-.25 F 1.043 -.15 +(ve t)-.25 H .743(hem attrib).15 F .743(utes such as)-.2 F F2 -.18(re) +3.243 G(ad-).18 E(only)72 518.4 Q F0 5.512(.B)C .512 +(ash arithmetic allo)-5.512 F .512(ws the e)-.25 F -.25(va)-.25 G .511 +(luation of an e).25 F .511 +(xpression and the substitution of the result.)-.15 F .511(Shell v)5.511 +F(ari-)-.25 E .222 +(ables may be used as operands, and the result of an e)72 530.4 R .222 +(xpression may be assigned to a v)-.15 F 2.722(ariable. Nearly)-.25 F +.222(all of)2.722 F(the operators from the C language are a)72 542.4 Q +-.25(va)-.2 G(ilable, with the same precedence rules:).25 E/F3 10 +/Courier@0 SF 6($e)97 560.4 S(cho $\(\(3 + 5 * 32\)\))-6 E(163)97 572.4 +Q F0 -.15(Fo)72 594 S 3.24(ri).15 G(nteracti)-3.24 E 1.04 -.15(ve u)-.25 +H .74(se, Bash implements ksh-style aliases and b).15 F .74 +(uiltins such as)-.2 F F2(fc)3.24 E F0 .74(\(discussed belo)3.24 F .74 +(w\) and)-.25 F F2(jobs)3.24 E F0(.)A .291(Bash aliases allo)72 606 R +2.791(was)-.25 G .291(tring to be substituted for a command name.)-2.791 +F(The)5.291 E 2.791(yc)-.15 G .291(an be used to create a mnemonic) +-2.791 F .568(for a)72 618 R/F4 9/Times-Roman@0 SF(UNIX)3.068 E F0 .568 +(command name \()3.068 F F3 .568(alias del=rm)B F0 .568(\), to e)B .567 +(xpand a single w)-.15 F .567(ord to a comple)-.1 F 3.067(xc)-.15 G .567 +(ommand \()-3.067 F F3(alias)A .255 +(news='xterm -g 80x45 -title trn -e trn -e -S1 -N &')72 630 R F0 .255 +(\), or to ensure that a command)B(is in)72 642 Q -.2(vo)-.4 G -.1(ke).2 +G 2.5(dw).1 G(ith a basic set of options \()-2.5 E F3 +(alias ls="/bin/ls -F")A F0(\).)A .293(The C shell \()97 657.6 R F2(csh) +A F0 .293(\)\207, originally written by Bill Jo)B 2.792(yw)-.1 G .292 +(hile at Berk)-2.792 F(ele)-.1 E 1.592 -.65(y, i)-.15 H 2.792(sw).65 G +.292(idely used and quite popular)-2.792 F 1.499(for its interacti)72 +669.6 R 1.799 -.15(ve f)-.25 H 3.999(acilities. Bash).05 F 1.499 +(includes a csh-compatible history e)3.999 F 1.5 +(xpansion mechanism \(\231! history\232\),)-.15 F .019(brace e)72 681.6 +R .018(xpansion, access to a stack of directories via the)-.15 F F2 +(pushd)2.518 E F0(,)A F2(popd)2.518 E F0 2.518(,a)C(nd)-2.518 E F2(dirs) +2.518 E F0 -.2(bu)2.518 G .018(iltins, and tilde e).2 F(xpansion,)-.15 E +1.293(to generate users' home directories.)72 693.6 R -.35(Ti)6.294 G +1.294(lde e).35 F 1.294(xpansion has also been adopted by both the K) +-.15 F 1.294(orn Shell and)-.35 F .32 LW 144 708.2 72 708.2 DL/F5 8 +/Times-Roman@0 SF(\207Morris Bolsk)72 720 Q 2(ya)-.12 G(nd Da)-2 E +(vid K)-.16 E(orn,)-.28 E/F6 8/Times-Italic@0 SF(The K)2 E +(ornShell Command and Pr)-.32 E -.08(og)-.36 G -.12(ra).08 G +(mming Langua).12 E -.08(ge)-.08 G F5 2(,P).08 G(rentice Hall, 1989.)-2 +E EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-3-)282.17 48 Q(POSIX.2.)72 84 Q .148 +(There were certain areas in which POSIX.2 felt standardization w)97 +99.6 R .149(as necessary)-.1 F 2.649(,b)-.65 G .149(ut no e)-2.849 F +.149(xisting imple-)-.15 F 1.598(mentation pro)72 111.6 R 1.598 +(vided the proper beha)-.15 F(vior)-.2 E 6.598(.T)-.55 G 1.598(he w) +-6.598 F 1.597(orking group in)-.1 F -.15(ve)-.4 G 1.597 +(nted and standardized functionality in).15 F .674 +(these areas, which Bash implements.)72 123.6 R(The)5.674 E/F1 10 +/Times-Bold@0 SF(command)3.174 E F0 -.2(bu)3.174 G .674(iltin w).2 F +.674(as in)-.1 F -.15(ve)-.4 G .674 +(nted so that shell functions could be).15 F .996(written to replace b) +72 135.6 R .996(uiltins; it mak)-.2 F .996(es the capabilities of the b) +-.1 F .995(uiltin a)-.2 F -.25(va)-.2 G .995(ilable to the function.).25 +F .995(The reserv)5.995 F(ed)-.15 E -.1(wo)72 147.6 S 1.731 +(rd \231!\232 w).1 F 1.731(as added to ne)-.1 F -.05(ga)-.15 G 1.731 +(te the return v).05 F 1.731(alue of a command or pipeline; it w)-.25 F +1.732(as nearly impossible to)-.1 F -.15(ex)72 159.6 S .286 +(press \231if not x\232 cleanly using the sh language.).15 F .286 +(There e)5.286 F .286(xist multiple incompatible implementations of the) +-.15 F F1(test)72 171.6 Q F0 -.2(bu)3.163 G .663 +(iltin, which tests \214les for type and other attrib).2 F .664 +(utes and performs arithmetic and string comparisons.)-.2 F .5 +(POSIX considered none of these correct, so the standard beha)72 183.6 R +.5(vior w)-.2 F .5(as speci\214ed in terms of the number of)-.1 F(ar)72 +195.6 Q .412(guments to the command.)-.18 F .412(POSIX.2 dictates e) +5.412 F .412(xactly what will happen when four or fe)-.15 F .412(wer ar) +-.25 F .412(guments are)-.18 F(gi)72 207.6 Q -.15(ve)-.25 G 5.01(nt).15 +G(o)-5.01 E F1(test)5.01 E F0 5.01(,a)C 2.51(nd lea)-5.01 F -.15(ve)-.2 +G 5.01(st).15 G 2.51(he beha)-5.01 F 2.51(vior unde\214ned when more ar) +-.2 F 2.51(guments are supplied.)-.18 F 2.51(Bash uses the)7.51 F +(POSIX.2 algorithm, which w)72 219.6 Q(as concei)-.1 E -.15(ve)-.25 G +2.5(db).15 G 2.5(yD)-2.5 G -.2(av)-2.5 G(id K).2 E(orn.)-.35 E F1 2.5 +(3.1. F)72 243.6 R(eatur)-.25 E(es not in the Bour)-.18 E(ne Shell)-.15 +E F0 .718(There are a number of minor dif)97 259.2 R .719 +(ferences between Bash and the v)-.25 F .719 +(ersion of sh present on most other)-.15 F -.15(ve)72 271.2 S .874 +(rsions of).15 F/F2 9/Times-Roman@0 SF(UNIX)3.374 E F0 5.873(.T)C .873 +(he majority of these are due to the POSIX standard, b)-5.873 F .873 +(ut some are the result of Bash)-.2 F .386 +(adopting features from other shells.)72 283.2 R -.15(Fo)5.386 G 2.886 +(ri).15 G .386(nstance, Bash includes the ne)-2.886 F 2.886<7799>-.25 G +.386(!\232 reserv)-2.886 F .386(ed w)-.15 F .386(ord, the)-.1 F F1 +(command)2.886 E F0 -.2(bu)72 295.2 S .116(iltin, the ability of the).2 +F F1 -.18(re)2.616 G(ad).18 E F0 -.2(bu)2.615 G .115 +(iltin to correctly return a line ending with a backslash, symbolic ar) +.2 F(guments)-.18 E .798(to the)72 307.2 R F1(umask)3.298 E F0 -.2(bu) +3.298 G .798(iltin, v).2 F .798(ariable substring remo)-.25 F -.25(va) +-.15 G .798(l, a w).25 F .799(ay to get the length of a v)-.1 F .799 +(ariable, and the ne)-.25 F 3.299(wa)-.25 G(lgo-)-3.299 E(rithm for the) +72 319.2 Q F1(test)2.5 E F0 -.2(bu)2.5 G +(iltin from the POSIX.2 standard, none of which appear in sh.).2 E 1.225 +(Bash also implements the \231$\(...\)\232 command substitution syntax,\ + which supersedes the sh `...` con-)97 334.8 R 2.851(struct. The)72 +346.8 R .351(\231$\(...\)\232 construct e)2.851 F .351(xpands to the ou\ +tput of the command contained within the parentheses, with)-.15 F .664 +(trailing ne)72 358.8 R .664(wlines remo)-.25 F -.15(ve)-.15 G 3.164 +(d. The).15 F .664(sh syntax is accepted for backw)3.164 F .664 +(ards compatibility)-.1 F 3.164(,b)-.65 G .664 +(ut the \231$\(...\)\232 form is)-3.364 F(preferred because its quoting\ + rules are much simpler and it is easier to nest.)72 370.8 Q .772 +(The Bourne shell does not pro)97 386.4 R .772 +(vide such features as brace e)-.15 F .772 +(xpansion, the ability to de\214ne a v)-.15 F(ariable)-.25 E .283 +(and a function with the same name, local v)72 398.4 R .282 +(ariables in shell functions, the ability to enable and disable indi-) +-.25 F .547(vidual b)72 410.4 R .547 +(uiltins or write a function to replace a b)-.2 F .547 +(uiltin, or a means to e)-.2 F .547 +(xport a shell function to a child pro-)-.15 F(cess.)72 422.4 Q .32 +(Bash has closed a long-standing shell security hole by not using the)97 +438 R F1($IFS)2.82 E F0 -.25(va)2.82 G .32(riable to split each w).25 F +(ord)-.1 E 1.254(read by the shell, b)72 450 R 1.254 +(ut splitting only the results of e)-.2 F 1.255 +(xpansion \(ksh and the 4.4 BSD sh ha)-.15 F 1.555 -.15(ve \214)-.2 H +-.15(xe).15 G 3.755(dt).15 G 1.255(his as)-3.755 F 2.907(well\). Useful) +72 462 R(beha)2.907 E .407(vior such as a means to abort e)-.2 F -.15 +(xe)-.15 G .407(cution of a script read with the \231.).15 F 2.906<9a63> +-.7 G .406(ommand using the)-2.906 F F1 -.18(re)72 474 S(tur).18 E(n) +-.15 E F0 -.2(bu)2.742 G .242(iltin or automatically e).2 F .242 +(xporting v)-.15 F .243(ariables in the shell')-.25 F 2.743(se)-.55 G +-.4(nv)-2.743 G .243(ironment to children is also not present).4 F .969 +(in the Bourne shell.)72 486 R .968(Bash pro)5.968 F .968 +(vides a much more po)-.15 F .968(werful en)-.25 F .968 +(vironment for both interacti)-.4 F 1.268 -.15(ve u)-.25 H .968 +(se and pro-).15 F(gramming.)72 498 Q F1 2.5(4. Bash-speci\214c)72 522 R +-.25(Fe)2.5 G(atur).25 E(es)-.18 E F0 .491(This section details a fe)97 +537.6 R 2.991(wo)-.25 G 2.991(ft)-2.991 G .491(he features which mak) +-2.991 F 2.991(eB)-.1 G .491(ash unique.)-2.991 F .492(Most of them pro) +5.491 F .492(vide impro)-.15 F -.15(ve)-.15 G(d).15 E(interacti)72 549.6 +Q 1.182 -.15(ve u)-.25 H .882(se, b).15 F .882(ut a fe)-.2 F 3.382(wp) +-.25 G .882(rogramming impro)-3.382 F -.15(ve)-.15 G .882 +(ments are present as well.).15 F .882(Full descriptions of these fea-) +5.882 F(tures can be found in the Bash documentation.)72 561.6 Q F1 2.5 +(4.1. Startup)72 585.6 R(Files)2.5 E F0 .161(Bash e)97 601.2 R -.15(xe) +-.15 G .161(cutes startup \214les dif).15 F .161 +(ferently than other shells.)-.25 F .162(The Bash beha)5.161 F .162 +(vior is a compromise between)-.2 F .29 +(the csh principle of startup \214les with \214x)72 613.2 R .29 +(ed names e)-.15 F -.15(xe)-.15 G .29 +(cuted for each shell and the sh \231minimalist\232 beha).15 F(vior)-.2 +E(.)-.55 E 2.955(An interacti)72 625.2 R 3.255 -.15(ve i)-.25 H 2.955 +(nstance of Bash started as a login shell reads and e).15 F -.15(xe)-.15 +G(cutes).15 E/F3 10/Times-Italic@0 SF(~/.bash_pr)5.456 E(o\214le)-.45 E +F0 2.956(\(the \214le)5.456 F .954(.bash_pro\214le in the user')72 637.2 +R 3.454(sh)-.55 G .953(ome directory\), if it e)-3.454 F 3.453 +(xists. An)-.15 F(interacti)3.453 E 1.253 -.15(ve n)-.25 H .953 +(on-login shell reads and e).15 F -.15(xe)-.15 G(cutes).15 E F3 +(~/.bashr)72 649.2 Q(c)-.37 E F0 5.641(.A)C(non-interacti)-2.5 E .942 +-.15(ve s)-.25 H .642(hell \(one be).15 F .642(gun to e)-.15 F -.15(xe) +-.15 G .642(cute a shell script, for e).15 F .642 +(xample\) reads no \214x)-.15 F .642(ed startup)-.15 F .342(\214le, b)72 +661.2 R .342(ut uses the v)-.2 F .342(alue of the v)-.25 F(ariable)-.25 +E F1($ENV)2.842 E F0 2.841(,i)C 2.841(fs)-2.841 G .341 +(et, as the name of a startup \214le.)-2.841 F .341 +(The ksh practice of read-)5.341 F(ing)72 673.2 Q F1($ENV)3.114 E F0 +.614(for e)3.114 F -.15(ve)-.25 G .614(ry shell, with the accompan).15 F +.615(ying dif)-.15 F .615(\214culty of de\214ning the proper v)-.25 F +.615(ariables and functions)-.25 F .721(for interacti)72 685.2 R 1.021 +-.15(ve a)-.25 H .721(nd non-interacti).15 F 1.021 -.15(ve s)-.25 H .721 +(hells or ha).15 F .721(ving the \214le read only for interacti)-.2 F +1.02 -.15(ve s)-.25 H .72(hells, w).15 F .72(as considered)-.1 F .158 +(too comple)72 697.2 R 2.658(x. Ease)-.15 F .158(of use w)2.658 F .158 +(on out here.)-.1 F(Interestingly)5.158 E 2.658(,t)-.65 G .158(he ne) +-2.658 F .159(xt release of ksh will change to reading)-.15 F F1($ENV) +2.659 E .32 LW 144 705.2 72 705.2 DL/F4 8/Times-Roman@0 SF .559 +(\207Bill Jo)72 717 R 1.599 -.52(y, A)-.08 H 2.559(nI).52 G .559 +(ntroduction to the C Shell,)-2.559 F/F5 8/Times-Italic@0 SF .558 +(UNIX User')2.558 F 2.558(sS)-.32 G .558(upplementary Documents)-2.558 F +F4 2.558(,U)C(ni)-2.558 E -.12(ve)-.2 G .558(rsity of California at).12 +F(Berk)72 727 Q(ele)-.08 E 1.04 -.52(y, 1)-.12 H(986.).52 E EP +%%Page: 4 4 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-4-)282.17 48 Q(only for interacti)72 84 Q .3 +-.15(ve s)-.25 H(hells.).15 E/F1 10/Times-Bold@0 SF 2.5(4.2. New)72 108 +R(Builtin Commands)2.5 E F0 1.02(There are a fe)97 123.6 R 3.52(wb)-.25 +G 1.02(uiltins which are ne)-3.72 F 3.52(wo)-.25 G 3.52(rh)-3.52 G -2.25 +-.2(av e)-3.52 H 1.02(been e)3.72 F 1.02(xtended in Bash.)-.15 F(The) +6.02 E F1(enable)3.52 E F0 -.2(bu)3.52 G 1.02(iltin allo).2 F(ws)-.25 E +-.2(bu)72 135.6 S .824(iltin commands to be turned on and of).2 F 3.324 +(fa)-.25 G(rbitrarily)-3.324 E 5.824(.T)-.65 G 3.324(ou)-6.624 G .824 +(se the v)-3.324 F .824(ersion of)-.15 F/F2 10/Times-Italic@0 SF(ec) +3.324 E(ho)-.15 E F0 .825(found in a user')3.324 F 3.325(ss)-.55 G +(earch)-3.325 E .625(path rather than the Bash b)72 147.6 R(uiltin,)-.2 +E/F3 10/Courier@0 SF .625(enable -n echo)3.125 F F0(suf)3.125 E 3.125 +(\214ces. The)-.25 F F1(help)3.124 E F0 -.2(bu)3.124 G .624(iltin pro).2 +F .624(vides quick synopses)-.15 F .703(of the shell f)72 159.6 R .704 +(acilities without requiring access to a manual page.)-.1 F F1(Builtin) +5.704 E F0 .704(is similar to)3.204 F F1(command)3.204 E F0 .704 +(in that it)3.204 F .342(bypasses shell functions and directly e)72 +171.6 R -.15(xe)-.15 G .342(cutes b).15 F .342(uiltin commands.)-.2 F +.342(Access to a csh-style stack of directories)5.342 F .072(is pro)72 +183.6 R .073(vided via the)-.15 F F1(pushd)2.573 E F0(,)A F1(popd)2.573 +E F0 2.573(,a)C(nd)-2.573 E F1(dirs)2.573 E F0 -.2(bu)2.573 G(iltins.).2 +E F1(Pushd)5.073 E F0(and)2.573 E F1(popd)2.573 E F0 .073 +(insert and remo)2.573 F .373 -.15(ve d)-.15 H .073(irectories from the) +.15 F 2.858(stack, respecti)72 195.6 R -.15(ve)-.25 G(ly).15 E 5.358(,a) +-.65 G(nd)-5.358 E F1(dirs)5.358 E F0 2.858(lists the stack contents.) +5.358 F 2.858(On systems that allo)7.858 F 5.358<778c>-.25 G 2.857 +(ne-grained control of)-5.358 F 1.339(resources, the)72 207.6 R F1 +(ulimit)3.839 E F0 -.2(bu)3.839 G 1.339 +(iltin can be used to tune these settings.).2 F F1(Ulimit)6.34 E F0 +(allo)3.84 E 1.34(ws a user to control, among)-.25 F 1.086 +(other things, whether core dumps are to be generated, ho)72 219.6 R +3.586(wm)-.25 G 1.086(uch memory the shell or a child process is)-3.586 +F(allo)72 231.6 Q .496(wed to allocate, and ho)-.25 F 2.996(wl)-.25 G +(ar)-2.996 E .496(ge a \214le created by a child process can gro)-.18 F +4.296 -.65(w. T)-.25 H(he).65 E F1(suspend)2.996 E F0 .497(command will) +2.997 F .744(stop the shell process when job control is acti)72 243.6 R +-.15(ve)-.25 G 3.243(;m).15 G .743(ost other shells do not allo)-3.243 F +3.243(wt)-.25 G(hemselv)-3.243 E .743(es to be stopped)-.15 F(lik)72 +255.6 Q 2.717(et)-.1 G(hat.)-2.717 E F1 -.74(Ty)5.217 G(pe,).74 E F0 +.217(the Bash answer to)2.717 F F1(which)2.717 E F0(and)2.717 E F1 +(whence,)2.717 E F0(sho)2.717 E .218(ws what will happen when a w)-.25 F +.218(ord is typed as a)-.1 F(command:)72 267.6 Q F3 6($t)97 285.6 S +(ype export)-6 E(export is a shell builtin)97 297.6 Q 6($t)97 309.6 S +(ype -t export)-6 E(builtin)97 321.6 Q 6($t)97 333.6 S(ype bash)-6 E +(bash is /bin/bash)97 345.6 Q 6($t)97 357.6 S(ype cd)-6 E +(cd is a function)97 369.6 Q(cd \(\))97 381.6 Q({)97 393.6 Q +(builtin cd ${1+"$@"} && xtitle $HOST: $PWD)121 405.6 Q(})97 417.6 Q F0 +-1.11(Va)72 439.2 S .682(rious modes tell what a command w)1.11 F .681 +(ord is \(reserv)-.1 F .681(ed w)-.15 F .681(ord, alias, function, b)-.1 +F .681(uiltin, or \214le\) or which v)-.2 F(er)-.15 E(-)-.2 E 1.15 +(sion of a command will be e)72 451.2 R -.15(xe)-.15 G 1.15 +(cuted based on a user').15 F 3.65(ss)-.55 G 1.15(earch path.)-3.65 F +1.15(Some of this functionality has been)6.15 F +(adopted by POSIX.2 and folded into the)72 463.2 Q F1(command)2.5 E F0 +(utility)2.5 E(.)-.65 E F1 2.5(4.3. Editing)72 487.2 R(and Completion) +2.5 E F0 .682(One area in which Bash shines is command line editing.)97 +502.8 R .682(Bash uses the)5.682 F F2 -.37(re)3.182 G(adline).37 E F0 +.681(library to read and)3.181 F .942(edit lines when interacti)72 514.8 +R -.15(ve)-.25 G 5.942(.R).15 G .942(eadline is a po)-5.942 F .942 +(werful and \215e)-.25 F .942(xible input f)-.15 F .943 +(acility that a user can con\214gure to)-.1 F(indi)72 526.8 Q .732 +(vidual tastes.)-.25 F .732(It allo)5.732 F .732(ws lines to be edited \ +using either emacs or vi commands, where those commands)-.25 F .2 +(are appropriate.)72 538.8 R .2 +(The full capability of emacs is not present \255 there is no w)5.2 F .2 +(ay to e)-.1 F -.15(xe)-.15 G .2(cute a named command).15 F 1.15 +(with M-x, for instance \255 b)72 550.8 R 1.15(ut the e)-.2 F 1.149 +(xisting commands are more than adequate.)-.15 F 1.149 +(The vi mode is compliant)6.149 F +(with the command line editing standardized by POSIX.2.)72 562.8 Q 1.69 +(Readline is fully customizable.)97 578.4 R 1.691 +(In addition to the basic commands and k)6.69 F 1.991 -.15(ey b)-.1 H +1.691(indings, the library).15 F(allo)72 590.4 Q .028 +(ws users to de\214ne additional k)-.25 F .327 -.15(ey b)-.1 H .027 +(indings using a startup \214le.).15 F(The)5.027 E F2(inputr)2.527 E(c) +-.37 E F0 .027(\214le, which def)2.527 F .027(aults to the \214le)-.1 F +F2(~/.inputr)72 602.4 Q(c)-.37 E F0 3.002(,i)C 3.002(sr)-3.002 G .503(e\ +ad each time readline initializes, permitting users to maintain a consi\ +stent interf)-3.002 F .503(ace across a)-.1 F .893(set of programs.)72 +614.4 R .893(Readline includes an e)5.893 F .893(xtensible interf)-.15 F +.892(ace, so each program using the library can add its)-.1 F -.25(ow)72 +626.4 S 3.56(nb).25 G 1.06(indable commands and program-speci\214c k) +-3.56 F 1.361 -.15(ey b)-.1 H 3.561(indings. Bash).15 F 1.061 +(uses this f)3.561 F 1.061(acility to add bindings that)-.1 F +(perform history e)72 638.4 Q(xpansion or shell w)-.15 E(ord e)-.1 E +(xpansions on the current input line.)-.15 E .707 +(Readline interprets a number of v)97 654 R .706 +(ariables which further tune its beha)-.25 F(vior)-.2 E 5.706(.V)-.55 G +.706(ariables e)-6.816 F .706(xist to control)-.15 F .157 +(whether or not eight-bit characters are directly read as input or con) +72 666 R -.15(ve)-.4 G .158(rted to meta-pre\214x).15 F .158(ed k)-.15 F +.458 -.15(ey s)-.1 H .158(equences \(a).15 F(meta-pre\214x)72 678 Q .082 +(ed k)-.15 F .382 -.15(ey s)-.1 H .081(equence consists of the characte\ +r with the eighth bit zeroed, preceded by the).15 F F2(meta-pr)2.581 E +(e\214x)-.37 E F0(character)72 690 Q 3.233(,u)-.4 G .733 +(sually escape, which selects an alternate k)-3.233 F -.15(ey)-.1 G .734 +(map\), to decide whether to output characters with).15 F .624 +(the eighth bit set directly or as a meta-pre\214x)72 702 R .624(ed k) +-.15 F .924 -.15(ey s)-.1 H .623 +(equence, whether or not to wrap to a ne).15 F 3.123(ws)-.25 G .623 +(creen line)-3.123 F 1.196 +(when a line being edited is longer than the screen width, the k)72 714 +R -.15(ey)-.1 G 1.196(map to which subsequent k).15 F 1.496 -.15(ey b) +-.1 H(indings).15 E .531(should apply)72 726 R 3.031(,o)-.65 G 3.031(re) +-3.031 G -.15(ve)-3.281 G 3.031(nw).15 G .531 +(hat happens when readline w)-3.031 F .531(ants to ring the terminal') +-.1 F 3.03(sb)-.55 G 3.03(ell. All)-3.03 F .53(of these v)3.03 F +(ariables)-.25 E EP +%%Page: 5 5 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-5-)282.17 48 Q +(can be set in the inputrc \214le.)72 84 Q .284 +(The startup \214le understands a set of C preprocessor)97 99.6 R(-lik) +-.2 E 2.785(ec)-.1 G .285(onditional constructs which allo)-2.785 F +2.785(wv)-.25 G(ariables)-3.035 E .12(or k)72 111.6 R .42 -.15(ey b)-.1 +H .119(indings to be assigned based on the application using readline, \ +the terminal currently being used, or).15 F .338(the editing mode.)72 +123.6 R .338(Users can add program-speci\214c bindings to mak)5.338 F +2.838(et)-.1 G .338(heir li)-2.838 F -.15(ve)-.25 G 2.838(se).15 G 2.838 +(asier: I)-2.838 F(ha)2.838 E .639 -.15(ve b)-.2 H .339(indings that).15 +F(let me edit the v)72 135.6 Q(alue of)-.25 E/F1 10/Times-Bold@0 SF($P) +2.5 E -.95(AT)-.74 G(H).95 E F0(and double-quote the current or pre)2.5 +E(vious w)-.25 E(ord:)-.1 E/F2 10/Courier@0 SF 6(#M)97 153.6 S +(acros that are convenient for shell interaction)-6 E($if Bash)97 165.6 +Q 6(#e)97 177.6 S(dit the path)-6 E +("\\C-xp": "PATH=${PATH}\\e\\C-e\\C-a\\ef\\C-f")97 189.6 Q 6(#p)97 201.6 +S(repare to type a quoted word -- insert open and close double)-6 E 6 +(#q)97 213.6 S(uotes and move to just after the open quote)-6 E +("\\C-x\\"": "\\"\\"\\C-b")97 225.6 Q 6(#Q)97 237.6 S +(uote the current or previous word)-6 E("\\C-xq": "\\eb\\"\\ef\\"")97 +249.6 Q($endif)97 261.6 Q F0 .322(There is a readline command to re-rea\ +d the \214le, so users can edit the \214le, change some bindings, and b\ +e)72 283.2 R(gin)-.15 E(to use them almost immediately)72 295.2 Q(.)-.65 +E .851(Bash implements the)97 310.8 R F1(bind)3.351 E F0 -.2(bu)3.351 G +.851(iltin for more dyamic control of readline than the startup \214le \ +permits.).2 F F1(Bind)72 322.8 Q F0 .25(is used in se)2.75 F -.15(ve) +-.25 G .25(ral w).15 F 2.75(ays. In)-.1 F/F3 10/Times-Italic@0 SF(list) +2.75 E F0 .25(mode, it can display the current k)2.75 F .55 -.15(ey b) +-.1 H .25(indings, list all the readline edit-).15 F .149(ing directi)72 +334.8 R -.15(ve)-.25 G 2.649(sa).15 G -.25(va)-2.849 G .149 +(ilable for binding, list which k).25 F -.15(ey)-.1 G 2.649(si).15 G +-1.9 -.4(nv o)-2.649 H .349 -.1(ke a g).4 H -2.15 -.25(iv e).1 H 2.65 +(nd).25 G(irecti)-2.65 E -.15(ve)-.25 G 2.65(,o).15 G 2.65(ro)-2.65 G +.15(utput the current set of k)-2.65 F -.15(ey)-.1 G .042(bindings in a\ + format that can be incorporated directly into an inputrc \214le.)72 +346.8 R(In)5.041 E F3(batc)2.541 E(h)-.15 E F0 .041 +(mode, it reads a series of)2.541 F -.1(ke)72 358.8 S 2.858(yb)-.05 G +.359(indings directly from a \214le and passes them to readline.)-2.858 +F .359(In its most common usage,)5.359 F F1(bind)2.859 E F0(tak)2.859 E +.359(es a sin-)-.1 F 1.117(gle string and passes it directly to readlin\ +e, which interprets the line as if it had just been read from the)72 +370.8 R(inputrc \214le.)72 382.8 Q(Both k)5 E .3 -.15(ey b)-.1 H +(indings and v).15 E(ariable assignments may appear in the string gi) +-.25 E -.15(ve)-.25 G 2.5(nt).15 G(o)-2.5 E F1(bind)2.5 E F0(.)A .53 +(The readline library also pro)97 398.4 R .53(vides an interf)-.15 F .53 +(ace for)-.1 F F3(wor)3.03 E 3.03(dc)-.37 G(ompletion)-3.03 E F0 5.53 +(.W)C .53(hen the)-5.53 F F3(completion)3.03 E F0(character)3.03 E 1.261 +(\(usually T)72 410.4 R 1.261(AB\) is typed, readline looks at the w) +-.93 F 1.26(ord currently being entered and computes the set of \214le-) +-.1 F .523(names of which the current w)72 422.4 R .523(ord is a v)-.1 F +.523(alid pre\214x.)-.25 F .524 +(If there is only one possible completion, the rest of the)5.523 F .358 +(characters are inserted directly)72 434.4 R 2.858(,o)-.65 G .358(therw\ +ise the common pre\214x of the set of \214lenames is added to the curre\ +nt)-2.858 F -.1(wo)72 446.4 S 3.199(rd. A).1 F .699(second T)3.199 F +.699(AB character entered immediately after a non-unique completion cau\ +ses readline to list)-.93 F 1.814 +(the possible completions; there is an option to ha)72 458.4 R 2.113 +-.15(ve t)-.2 H 1.813(he list displayed immediately).15 F 6.813(.R)-.65 +G 1.813(eadline pro)-6.813 F(vides)-.15 E .482 +(hooks so that applications can pro)72 470.4 R .482 +(vide speci\214c types of completion before the def)-.15 F .483 +(ault \214lename completion)-.1 F .132(is attempted.)72 482.4 R .132 +(This is quite \215e)5.132 F .132 +(xible, though it is not completely user)-.15 F 2.632 +(-programmable. Bash,)-.2 F .132(for e)2.632 F .132(xample, can)-.15 F +.37(complete \214lenames, command names \(including aliases, b)72 494.4 +R .37(uiltins, shell reserv)-.2 F .37(ed w)-.15 F .37 +(ords, shell functions, and)-.1 F -.15(exe)72 506.4 S .424 +(cutables found in the \214le system\), shell v).15 F .424 +(ariables, usernames, and hostnames.)-.25 F .423 +(It uses a set of heuristics)5.424 F(that, while not perfect, is genera\ +lly quite good at determining what type of completion to attempt.)72 +518.4 Q F1 2.5(4.4. History)72 542.4 R F0 .144 +(Access to the list of commands pre)97 558 R .144(viously entered \(the) +-.25 F F3 .144(command history)2.644 F F0 2.644(\)i)C 2.644(sp)-2.644 G +(ro)-2.644 E .144(vided jointly by Bash)-.15 F .078 +(and the readline library)72 570 R 5.077(.B)-.65 G .077(ash pro)-5.077 F +.077(vides v)-.15 F .077(ariables \()-.25 F F1($HISTFILE)A F0(,)A F1 +($HISTSIZE)2.577 E F0 2.577(,a)C(nd)-2.577 E F1($HISTCONTR)2.577 E(OL) +-.3 E F0 2.577(\)a)C(nd)-2.577 E(the)72 582 Q F1(history)2.89 E F0(and) +2.89 E F1(fc)2.89 E F0 -.2(bu)2.89 G .39 +(iltins to manipulate the history list.).2 F .391(The v)5.391 F .391 +(alue of)-.25 F F1($HISTFILE)2.891 E F0 .391(specifes the \214le where) +2.891 F .49(Bash writes the command history on e)72 594 R .489 +(xit and reads it on startup.)-.15 F F1($HISTSIZE)5.489 E F0 .489 +(is used to limit the number)2.989 F .642(of commands sa)72 606 R -.15 +(ve)-.2 G 3.142(di).15 G 3.142(nt)-3.142 G .642(he history)-3.142 F(.) +-.65 E F1($HISTCONTR)5.642 E(OL)-.3 E F0(pro)3.142 E .642 +(vides a crude form of control o)-.15 F -.15(ve)-.15 G 3.142(rw).15 G +.642(hich com-)-3.142 F .025(mands are sa)72 618 R -.15(ve)-.2 G 2.525 +(do).15 G 2.525(nt)-2.525 G .025(he history list: a v)-2.525 F .025 +(alue of)-.25 F F3(ignor)2.525 E(espace)-.37 E F0 .025(means to not sa) +2.525 F .324 -.15(ve c)-.2 H .024(ommands which be).15 F .024 +(gin with a)-.15 F .927(space; a v)72 630 R .927(alue of)-.25 F F3 +(ignor)3.427 E(edups)-.37 E F0 .927(means to not sa)3.427 F 1.228 -.15 +(ve c)-.2 H .928(ommands identical to the last command sa).15 F -.15(ve) +-.2 G(d.).15 E F1($HIST)5.928 E(-)-.92 E(CONTR)72 642 Q(OL)-.3 E F0 -.1 +(wa)3.778 G 3.778(sn).1 G(amed)-3.778 E F1($history_contr)3.778 E(ol) +-.18 E F0 1.278(in earlier v)3.778 F 1.278 +(ersions of Bash; the old name is still accepted for)-.15 F(backw)72 654 +Q .575(ards compatibility)-.1 F 5.575(.T)-.65 G(he)-5.575 E F1(history) +3.075 E F0 .575 +(command can read or write \214les containing the history list and dis-) +3.075 F .167(play the current list contents.)72 666 R(The)5.167 E F1(fc) +2.667 E F0 -.2(bu)2.667 G .167(iltin, adopted from POSIX.2 and the K).2 +F .167(orn Shell, allo)-.35 F .167(ws display and)-.25 F(re-e)72 678 Q +-.15(xe)-.15 G .58 +(cution, with optional editing, of commands from the history list.).15 F +.58(The readline library of)5.58 F .58(fers a set of)-.25 F 1.255(comma\ +nds to search the history list for a portion of the current input line \ +or a string typed by the user)72 690 R(.)-.55 E(Finally)72 702 Q 2.535 +(,t)-.65 G(he)-2.535 E F3(history)2.535 E F0(library)2.535 E 2.535(,g) +-.65 G .036(enerally incorporated directly into the readline library) +-2.535 F 2.536(,i)-.65 G .036(mplements a f)-2.536 F .036(acility for) +-.1 F 1.023(history recall, e)72 714 R 1.022(xpansion, and re-e)-.15 F +-.15(xe)-.15 G 1.022(cution of pre).15 F 1.022(vious commands v)-.25 F +1.022(ery similar to csh \(\231bang history\232, so)-.15 F +(called because the e)72 726 Q +(xclamation point introduces a history substitution\):)-.15 E EP +%%Page: 6 6 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-6-)282.17 48 Q/F1 10/Courier@0 SF 6($e)97 84 S +(cho a b c d e)-6 E 6(abcde)97 96 S 6($!)97 108 S 6(!fghi)-6 G +(echo a b c d e f g h i)97 120 Q 6(abcdefghi)97 132 S 6($!)97 144 S(-2) +-6 E(echo a b c d e)97 156 Q 6(abcde)97 168 S 6($e)97 180 S(cho !-2:1-4) +-6 E(echo a b c d)97 192 Q 6(abcd)97 204 S F0 1.456 +(The command history is only sa)72 225.6 R -.15(ve)-.2 G 3.957(dw).15 G +1.457(hen the shell is interacti)-3.957 F -.15(ve)-.25 G 3.957(,s).15 G +3.957(oi)-3.957 G 3.957(ti)-3.957 G 3.957(sn)-3.957 G 1.457(ot a)-3.957 +F -.25(va)-.2 G 1.457(ilable for use by shell).25 F(scripts.)72 237.6 Q +/F2 10/Times-Bold@0 SF 2.5(4.5. New)72 261.6 R(Shell V)2.5 E(ariables) +-.92 E F0 .59(There are a number of con)97 277.2 R -.15(ve)-.4 G .589 +(nience v).15 F .589(ariables that Bash interprets to mak)-.25 F 3.089 +(el)-.1 G .589(ife easier)-3.089 F 5.589(.T)-.55 G .589(hese include) +-5.589 F F2(FIGNORE)72 289.2 Q F0 3.973(,w)C 1.473 +(hich is a set of \214lename suf)-3.973 F<8c78>-.25 E 1.474 +(es identifying \214les to e)-.15 F 1.474 +(xclude when completing \214lenames;)-.15 F F2(HOSTTYPE)72 301.2 Q F0 +2.932(,w)C .432 +(hich is automatically set to a string describing the type of hardw) +-2.932 F .431(are on which Bash is cur)-.1 F(-)-.2 E .335(rently e)72 +313.2 R -.15(xe)-.15 G(cuting;).15 E F2(command_oriented_history)2.835 E +F0 2.835(,w)C .335(hich directs Bash to sa)-2.835 F .635 -.15(ve a)-.2 H +.336(ll lines of a multiple-line com-).15 F 1.071(mand such as a)72 +325.2 R/F3 10/Times-Italic@0 SF(while)3.571 E F0(or)3.571 E F3(for)3.571 +E F0 1.071(loop in a single history entry)3.571 F 3.57(,a)-.65 G(llo) +-3.57 E 1.07(wing easy re-editing; and)-.25 F F2(IGNOREEOF)3.57 E F0(,)A +.747(whose v)72 337.2 R .747(alue indicates the number of consecuti)-.25 +F 1.047 -.15(ve E)-.25 H .747(OF characters that an interacti).15 F +1.048 -.15(ve s)-.25 H .748(hell will read before).15 F -.15(ex)72 349.2 +S 1.432(iting \255 an easy w).15 F 1.432(ay to k)-.1 F 1.432 +(eep yourself from being logged out accidentally)-.1 F 6.432(.T)-.65 G +(he)-6.432 E F2(auto_r)3.932 E(esume)-.18 E F0 -.25(va)3.932 G(riable) +.25 E .571(alters the w)72 361.2 R .571 +(ay the shell treats simple command names: if job control is acti)-.1 F +-.15(ve)-.25 G 3.071(,a).15 G .571(nd this v)-3.071 F .571 +(ariable is set, sin-)-.25 F(gle-w)72 373.2 Q .239(ord simple commands \ +without redirections cause the shell to \214rst look for and restart a \ +suspended job)-.1 F(with that name before starting a ne)72 385.2 Q 2.5 +(wp)-.25 G(rocess.)-2.5 E F2 2.5(4.6. Brace)72 409.2 R(Expansion)2.5 E +F0 .653(Since sh of)97 424.8 R .653(fers no con)-.25 F -.15(ve)-.4 G +.653(nient w).15 F .653 +(ay to generate arbitrary strings that share a common pre\214x or suf) +-.1 F<8c78>-.25 E 2.124(\(\214lename e)72 436.8 R 2.124 +(xpansion requires that the \214lenames e)-.15 F 2.123 +(xist\), Bash implements)-.15 F F3(br)4.623 E 2.123(ace e)-.15 F +(xpansion)-.2 E F0 4.623(,ac)C(apability)-4.623 E(pick)72 448.8 Q .773 +(ed up from csh.)-.1 F .774(Brace e)5.773 F .774 +(xpansion is similar to \214lename e)-.15 F .774(xpansion, b)-.15 F .774 +(ut the strings generated need not)-.2 F 1.211(correspond to e)72 460.8 +R 1.211(xisting \214les.)-.15 F 3.711(Ab)6.211 G 1.211(race e)-3.711 F +1.211(xpression consists of an optional)-.15 F F3(pr)3.71 E(eamble)-.37 +E F0 3.71(,f)C(ollo)-3.71 E 1.21(wed by a pair of)-.25 F 2.938 +(braces enclosing a series of comma-separated strings, and an optional) +72 472.8 R F3(postamble)5.438 E F0 7.938(.T)C 2.938(he preamble is) +-7.938 F(prepended to each string within the braces, and the postamble \ +is then appended to each resulting string:)72 484.8 Q F1 6($e)97 502.8 S +(cho a{d,c,b}e)-6 E(ade ace abe)97 514.8 Q F0 .306(As this e)72 536.4 R +.306(xample demonstrates, the results of brace e)-.15 F .305 +(xpansion are not sorted, as the)-.15 F 2.805(ya)-.15 G .305 +(re by \214lename e)-2.805 F(xpan-)-.15 E(sion.)72 548.4 Q F2 2.5 +(4.7. Pr)72 572.4 R(ocess Substitution)-.18 E F0 .457 +(On systems that can support it, Bash pro)97 588 R .457(vides a f)-.15 F +.457(acility kno)-.1 F .458(wn as)-.25 F F3(pr)2.958 E .458 +(ocess substitution)-.45 F F0 5.458(.P)C .458(rocess sub-)-5.458 F .347 +(stitution is similar to command substitution in that its speci\214cati\ +on includes a command to e)72 600 R -.15(xe)-.15 G .346(cute, b).15 F +.346(ut the)-.2 F .181(shell does not collect the command')72 612 R +2.681(so)-.55 G .181(utput and insert it into the command line.)-2.681 F +(Rather)5.181 E 2.681(,B)-.4 G .182(ash opens a pipe)-2.681 F 1.861 +(to the command, which is run in the background.)72 624 R 1.861 +(The shell uses named pipes \(FIFOs\) or the)6.861 F F3(/de)4.361 E +(v/fd)-.15 E F0 .961(method of naming open \214les to e)72 636 R .962(x\ +pand the process substitution to a \214lename which connects to the pip\ +e)-.15 F .104(when opened.)72 648 R .103 +(This \214lename becomes the result of the e)5.104 F 2.603 +(xpansion. Process)-.15 F .103(substitution can be used to com-)2.603 F +(pare the outputs of tw)72 660 Q 2.5(od)-.1 G(if)-2.5 E(ferent v)-.25 E +(ersions of an application as part of a re)-.15 E(gression test:)-.15 E +F1 6($c)97 678 S(mp <\(old_prog\) <\(new_prog\))-6 E EP +%%Page: 7 7 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-7-)282.17 48 Q/F1 10/Times-Bold@0 SF 2.5 +(4.8. Pr)72 84 R(ompt Customization)-.18 E F0 2.229 +(One of the more popular interacti)97 99.6 R 2.529 -.15(ve f)-.25 H +2.229(eatures that Bash pro).15 F 2.23 +(vides is the ability to customize the)-.15 F 3.234(prompt. Both)72 +111.6 R F1($PS1)3.234 E F0(and)3.234 E F1($PS2,)3.234 E F0 .734 +(the primary and secondary prompts, are e)3.234 F .733 +(xpanded before being displayed.)-.15 F -.15(Pa)72 123.6 S .804 +(rameter and v).15 F .804(ariable e)-.25 F .805 +(xpansion is performed when the prompt string is e)-.15 F .805 +(xpanded, so an)-.15 F 3.305(ys)-.15 G .805(hell v)-3.305 F(ariable)-.25 +E .729(can be put into the prompt \(e.g.,)72 135.6 R F1($SHL)3.228 E(VL) +-.92 E F0 3.228(,w)C .728(hich indicates ho)-3.228 F 3.228(wd)-.25 G +.728(eeply the current shell is nested\).)-3.228 F(Bash)5.728 E 1.895(s\ +pecially interprets characters in the prompt string preceded by a backs\ +lash.)72 147.6 R 1.895(Some of these backslash)6.895 F .874 +(escapes are replaced with the current time, the date, the current w)72 +159.6 R .874(orking directory)-.1 F 3.373(,t)-.65 G .873 +(he username, and the)-3.373 F .78 +(command number or history number of the command being entered.)72 171.6 +R .781(There is e)5.781 F -.15(ve)-.25 G 3.281(nab).15 G .781 +(ackslash escape to)-3.281 F .007 +(cause the shell to change its prompt when running as root after an)72 +183.6 R/F2 10/Times-Italic@0 SF(su)2.507 E F0 5.007(.B)C .007 +(efore printing each primary prompt,)-5.007 F .305(Bash e)72 195.6 R +.305(xpands the v)-.15 F(ariable)-.25 E F1($PR)2.805 E(OMPT_COMMAND)-.3 +E F0 .305(and, if it has a v)2.805 F .306(alue, e)-.25 F -.15(xe)-.15 G +.306(cutes the e).15 F .306(xpanded v)-.15 F .306(alue as)-.25 F 3.735 +(ac)72 207.6 S 1.235(ommand, allo)-3.735 F 1.234 +(wing additional prompt customization.)-.25 F -.15(Fo)6.234 G 3.734(re) +.15 G 1.234(xample, this assignment causes the current)-3.884 F(user)72 +219.6 Q 2.917(,t)-.4 G .417 +(he current host, the time, the last component of the current w)-2.917 F +.417(orking directory)-.1 F 2.917(,t)-.65 G .418(he le)-2.917 F -.15(ve) +-.25 G 2.918(lo).15 G 2.918(fs)-2.918 G .418(hell nest-)-2.918 F(ing, a\ +nd the history number of the current command to be embedded into the pr\ +imary prompt:)72 231.6 Q/F3 10/Courier@0 SF 6($P)97 249.6 S +(S1='\\u@\\h [\\t] \\W\($SHLVL:\\!\)\\$ ')-6 E +(chet@odin [21:03:44] documentation\(2:636\)$ cd ..)97 261.6 Q +(chet@odin [21:03:54] src\(2:637\)$)97 273.6 Q F0 .146(The string being\ + assigned is surrounded by single quotes so that if it is e)72 295.2 R +.146(xported, the v)-.15 F .146(alue of)-.25 F F1($SHL)2.646 E(VL)-.92 E +F0(will)2.646 E(be updated by a child shell:)72 307.2 Q F3 +(chet@odin [21:17:35] src\(2:638\)$ export PS1)97 325.2 Q +(chet@odin [21:17:40] src\(2:639\)$ bash)97 337.2 Q +(chet@odin [21:17:46] src\(3:696\)$)97 349.2 Q F0 +(The \\$ escape is displayed as \231)72 370.8 Q F1($)A F0 2.5<9a77>C +(hen running as a normal user)-2.5 E 2.5(,b)-.4 G(ut as \231)-2.7 E F1 +(#)A F0 2.5<9a77>C(hen running as root.)-2.5 E F1 2.5(4.9. File)72 394.8 +R(System V)2.5 E(iews)-.37 E F0 .029(Since Berk)97 410.4 R(ele)-.1 E +2.529(yi)-.15 G .029 +(ntroduced symbolic links in 4.2 BSD, one of their most anno)-2.529 F +.03(ying properties has been)-.1 F .764(the \231w)72 422.4 R .764 +(arping\232 to a completely dif)-.1 F .764 +(ferent area of the \214le system when using)-.25 F F1(cd)3.263 E F0 +3.263(,a)C .763(nd the resultant non-intu-)-3.263 F(iti)72 434.4 Q .704 +-.15(ve b)-.25 H(eha).15 E .405(vior of \231)-.2 F F1 .405(cd ..)B F0 +2.905(\232. The)B/F4 9/Times-Roman@0 SF(UNIX)2.905 E F0 -.1(ke)2.905 G +.405(rnel treats symbolic links).1 F F2(physically)2.905 E F0 5.405(.W)C +.405(hen the k)-5.405 F .405(ernel is translating)-.1 F 3.223(ap)72 +446.4 S .723(athname in which one component is a symbolic link, it repl\ +aces all or part of the pathname while pro-)-3.223 F .668 +(cessing the link.)72 458.4 R .668 +(If the contents of the symbolic link be)5.668 F .669 +(gin with a slash, the k)-.15 F .669(ernel replaces the pathname)-.1 F +.219(entirely; if not, the link contents replace the current component.) +72 470.4 R .219(In either case, the symbolic link is visible.)5.219 F +.058(If the link v)72 482.4 R .058(alue is an absolute pathname, the us\ +er \214nds himself in a completely dif)-.25 F .059 +(ferent part of the \214le sys-)-.25 F(tem.)72 494.4 Q .704(Bash pro)97 +510 R .704(vides a)-.15 F F2(lo)3.203 E(gical)-.1 E F0(vie)3.203 E 3.203 +(wo)-.25 G 3.203(ft)-3.203 G .703(he \214le system.)-3.203 F .703 +(In this def)5.703 F .703(ault mode, command and \214lename com-)-.1 F +.522(pletion and b)72 522 R .522(uiltin commands such as)-.2 F F1(cd) +3.022 E F0(and)3.022 E F1(pushd)3.022 E F0 .522 +(which change the current w)3.022 F .522(orking directory transpar)-.1 F +(-)-.2 E .127(ently follo)72 534 R 2.627(ws)-.25 G .127 +(ymbolic links as if the)-2.627 F 2.627(yw)-.15 G .127(ere directories.) +-2.627 F(The)5.126 E F1($PWD)2.626 E F0 -.25(va)2.626 G .126 +(riable, which holds the shell').25 F 2.626(si)-.55 G .126(dea of)-2.626 +F .366(the current w)72 546 R .366(orking directory)-.1 F 2.866(,d)-.65 +G .367 +(epends on the path used to reach the directory rather than its ph) +-2.866 F .367(ysical loca-)-.05 F +(tion in the local \214le system hierarch)72 558 Q 3.8 -.65(y. F)-.05 H +(or e).5 E(xample:)-.15 E F3 6($c)97 576 S 6(d/)-6 G(usr/local/bin)-6 E +6($e)97 588 S(cho $PWD)-6 E(/usr/local/bin)97 600 Q 6($p)97 612 S(wd)-6 +E(/usr/local/bin)97 624 Q 6($/)97 636 S(bin/pwd)-6 E +(/net/share/sun4/local/bin)97 648 Q 6($c)97 660 S 6(d.)-6 G(.)-6 E 6($p) +97 672 S(wd)-6 E(/usr/local)97 684 Q 6($/)97 696 S(bin/pwd)-6 E +(/net/share/sun4/local)97 708 Q 6($c)97 720 S 6(d.)-6 G(.)-6 E EP +%%Page: 8 8 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-8-)282.17 48 Q/F1 10/Courier@0 SF 6($p)97 84 S +(wd)-6 E(/usr)97 96 Q 6($/)97 108 S(bin/pwd)-6 E(/usr)97 120 Q F0 .3(On\ +e problem with this, of course, arises when programs that do not unders\ +tand the shell')72 141.6 R 2.8(sl)-.55 G .3(ogical notion of)-2.8 F .217 +(the \214le system interpret \231..)72 153.6 R 2.718<9a64>-.7 G(if) +-2.718 E(ferently)-.25 E 5.218(.T)-.65 G .218 +(his generally happens when Bash completes \214lenames containing)-5.218 +F(\231..)72 165.6 Q 3.384<9a61>-.7 G .884 +(ccording to a logical hierarch)-3.384 F 3.384(yw)-.05 G .884 +(hich does not correspond to their ph)-3.384 F .883(ysical location.) +-.05 F -.15(Fo)5.883 G 3.383(ru).15 G .883(sers who)-3.383 F +(\214nd this troublesome, a corresponding)72 177.6 Q/F2 10 +/Times-Italic@0 SF(physical)2.5 E F0(vie)2.5 E 2.5(wo)-.25 G 2.5(ft)-2.5 +G(he \214le system is a)-2.5 E -.25(va)-.2 G(ilable:).25 E F1 6($c)97 +195.6 S 6(d/)-6 G(usr/local/bin)-6 E 6($p)97 207.6 S(wd)-6 E +(/usr/local/bin)97 219.6 Q 6($s)97 231.6 S(et -o physical)-6 E 6($p)97 +243.6 S(wd)-6 E(/net/share/sun4/local/bin)97 255.6 Q/F3 10/Times-Bold@0 +SF 2.5(4.10. Inter)72 285.6 R(nationalization)-.15 E F0 .145 +(One of the most signi\214cant impro)97 301.2 R -.15(ve)-.15 G .145 +(ments in v).15 F .145(ersion 1.13 of Bash w)-.15 F .145 +(as the change to \231eight-bit clean-)-.1 F 2.933(liness\232. Pre)72 +313.2 R .433(vious v)-.25 F .432 +(ersions used the eighth bit of characters to mark whether or not the) +-.15 F 2.932(yw)-.15 G .432(ere quoted when)-2.932 F 1.495(performing w) +72 325.2 R 1.495(ord e)-.1 F 3.995(xpansions. While)-.15 F 1.495 +(this did not af)3.995 F 1.496 +(fect the majority of users, most of whom used only)-.25 F(se)72 337.2 Q +-.15(ve)-.25 G 1.236(n-bit ASCII characters, some found it con\214ning.) +.15 F(Be)6.236 E 1.236(ginning with v)-.15 F 1.236 +(ersion 1.13, Bash implemented a)-.15 F(dif)72 349.2 Q .02(ferent quoti\ +ng mechanism that did not alter the eighth bit of characters.)-.25 F +.021(This allo)5.021 F .021(wed Bash to manipulate)-.25 F .427 +(\214les with \231odd\232 characters in their names, b)72 361.2 R .427 +(ut did nothing to help users enter those names, so v)-.2 F .426 +(ersion 1.13)-.15 F 1.458 +(introduced changes to readline that made it eight-bit clean as well.)72 +373.2 R 1.458(Options e)6.458 F 1.458(xist that force readline to)-.15 F +.744(attach no special signi\214cance to characters with the eighth bit\ + set \(the def)72 385.2 R .744(ault beha)-.1 F .744(vior is to con)-.2 F +-.15(ve)-.4 G .744(rt these).15 F .641(characters to meta-pre\214x)72 +397.2 R .641(ed k)-.15 F .941 -.15(ey s)-.1 H .642 +(equences\) and to output these characters without con).15 F -.15(ve)-.4 +G .642(rsion to meta-pre-).15 F<8c78>72 409.2 Q .008(ed sequences.)-.15 +F .007(These changes, along with the e)5.007 F .007(xpansion of k)-.15 F +-.15(ey)-.1 G .007(maps to a full eight bits, enable readline to).15 F +-.1(wo)72 421.2 S(rk with most of the ISO-8859 f).1 E +(amily of character sets, used by man)-.1 E 2.5(yE)-.15 G +(uropean countries.)-2.5 E F3 2.5(4.11. POSIX)72 445.2 R(Mode)2.5 E F0 +.584(Although Bash is intended to be POSIX.2 conformant, there are area\ +s in which the def)97 460.8 R .584(ault beha)-.1 F(vior)-.2 E .463 +(is not compatible with the standard.)72 472.8 R -.15(Fo)5.463 G 2.962 +(ru).15 G .462(sers who wish to operate in a strict POSIX.2 en)-2.962 F +.462(vironment, Bash)-.4 F .505(implements a)72 484.8 R F2 .505 +(POSIX mode)3.005 F F0 5.505(.W)C .505(hen this mode is acti)-5.505 F +-.15(ve)-.25 G 3.005(,B).15 G .505(ash modi\214es its def)-3.005 F .505 +(ault operation where it dif)-.1 F(fers)-.25 E .267 +(from POSIX.2 to match the standard.)72 496.8 R .266 +(POSIX mode is entered when Bash is started with the)5.267 F F3(-posix) +2.766 E F0(option.)2.766 E .149(This feature is also a)72 508.8 R -.25 +(va)-.2 G .149(ilable as an option to the).25 F F3(set)2.649 E F0 -.2 +(bu)2.649 G(iltin,).2 E F3 .149(set -o posix)2.649 F F0 5.149(.F)C .149 +(or compatibility with other GNU)-5.299 F(softw)72 520.8 Q 4.02(are tha\ +t attempts to be POSIX.2 compliant, Bash also enters POSIX mode if the \ +v)-.1 F(ariable)-.25 E F3($POSIXL)72 532.8 Q(Y_CORRECT)-.92 E F0 5.824 +(is set when Bash is started or assigned a v)8.324 F 5.825 +(alue during e)-.25 F -.15(xe)-.15 G(cution.).15 E F3($POSIX_PED)72 +544.8 Q(ANTIC)-.35 E F0 .27 +(is accepted as well, to be compatible with some older GNU utilities.) +2.77 F .27(When Bash is)5.27 F .506(started in POSIX mode, for e)72 +556.8 R .506(xample, it sources the \214le named by the v)-.15 F .507 +(alue of)-.25 F F3($ENV)3.007 E F0 .507(rather than the \231nor)3.007 F +(-)-.2 E(mal\232 startup \214les, and does not allo)72 568.8 Q 2.5(wr) +-.25 G(eserv)-2.5 E(ed w)-.15 E(ords to be aliased.)-.1 E F3 2.5(5. New) +72 592.8 R -.25(Fe)2.5 G(atur).25 E(es and Futur)-.18 E 2.5(eP)-.18 G +(lans)-2.5 E F0 1.632(There are se)97 608.4 R -.15(ve)-.25 G 1.632 +(ral features introduced in the current v).15 F 1.631(ersion of Bash, v) +-.15 F 1.631(ersion 1.14, and a number)-.15 F .241 +(under consideration for future releases.)72 620.4 R .242 +(This section will brie\215y detail the ne)5.242 F 2.742(wf)-.25 G .242 +(eatures in v)-2.742 F .242(ersion 1.14 and)-.15 F(describe se)72 632.4 +Q -.15(ve)-.25 G(ral features that may appear in later v).15 E(ersions.) +-.15 E F3 2.5(5.1. New)72 656.4 R -.25(Fe)2.5 G(atur).25 E +(es in Bash-1.14)-.18 E F0 .884(The ne)97 672 R 3.384(wf)-.25 G .884 +(eatures a)-3.384 F -.25(va)-.2 G .884(ilable in Bash-1.14 answer se).25 +F -.15(ve)-.25 G .883(ral of the most common requests for enhance-).15 F +2.931(ments. Most)72 684 R(notably)2.931 E 2.931(,t)-.65 G .432(here is\ + a mechanism for including non-visible character sequences in prompts, \ +such)-2.931 F .136 +(as those which cause a terminal to print characters in dif)72 696 R +.135(ferent colors or in standout mode.)-.25 F .135(There w)5.135 F .135 +(as noth-)-.1 F .558(ing pre)72 708 R -.15(ve)-.25 G .558 +(nting the use of these sequences in earlier v).15 F .559(ersions, b) +-.15 F .559(ut the readline redisplay algorithm assumed)-.2 F +(each character occupied ph)72 720 Q(ysical screen space and w)-.05 E +(ould wrap lines prematurely)-.1 E(.)-.65 E EP +%%Page: 9 9 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-9-)282.17 48 Q .13(Readline has a fe)97 84 R +2.63(wn)-.25 G .63 -.25(ew va)-2.63 H .13(riables, se).25 F -.15(ve)-.25 +G .13(ral ne).15 F 2.63(wb)-.25 G .13 +(indable commands, and some additional emacs mode)-2.63 F(def)72 96 Q +.918(ault k)-.1 F 1.218 -.15(ey b)-.1 H 3.418(indings. A).15 F(ne)3.418 +E 3.418(wh)-.25 G .919(istory search mode has been implemented: in this\ + mode, readline searches)-3.418 F .336(the history for lines be)72 108 R +.336(ginning with the characters between the be)-.15 F .336 +(ginning of the current line and the cursor)-.15 F(.)-.55 E .555(The e) +72 120 R .556(xisting readline incremental search commands no longer ma\ +tch identical lines more than once.)-.15 F(File-)5.556 E 1.979 +(name completion no)72 132 R 4.479(we)-.25 G 1.979(xpands v)-4.629 F +1.979(ariables in directory names.)-.25 F 1.978(The history e)6.978 F +1.978(xpansion f)-.15 F 1.978(acilities are no)-.1 F(w)-.25 E 1.449 +(nearly completely csh-compatible: missing modi\214ers ha)72 144 R 1.749 +-.15(ve b)-.2 H 1.449(een added and history substitution has been).15 F +-.15(ex)72 156 S(tended.).15 E(Se)97 171.6 Q -.15(ve)-.25 G .474 +(ral of the features described earlier).15 F 2.973(,s)-.4 G .473(uch as) +-2.973 F/F1 10/Times-Bold@0 SF .473(set -o posix)2.973 F F0(and)2.973 E +F1($POSIX_PED)2.973 E(ANTIC)-.35 E F0 2.973(,a)C .473(re ne)-2.973 F +2.973(wi)-.25 G(n)-2.973 E -.15(ve)72 183.6 S .106(rsion 1.14.).15 F +.106(There is a ne)5.106 F 2.606(ws)-.25 G .106(hell v)-2.606 F +(ariable,)-.25 E F1(OSTYPE)2.606 E F0 2.606(,t)C 2.606(ow)-2.606 G .106 +(hich Bash assigns a v)-2.606 F .106(alue that identi\214es the v)-.25 F +(er)-.15 E(-)-.2 E 1.38(sion of)72 195.6 R/F2 9/Times-Roman@0 SF(UNIX) +3.88 E F0(it')3.88 E 3.879(sr)-.55 G 1.379(unning on \(great for puttin\ +g architecture-speci\214c binary directories into the)-3.879 F F1($P) +3.879 E -.95(AT)-.74 G(H).95 E F0(\).)A -1 -.8(Tw o)72 207.6 T -.25(va) +6.215 G 2.915(riables ha).25 F 3.215 -.15(ve b)-.2 H 2.915(een renamed:) +.15 F F1($HISTCONTR)5.416 E(OL)-.3 E F0(replaces)5.416 E F1 +($history_contr)5.416 E(ol)-.18 E F0 5.416(,a)C(nd)-5.416 E F1 +($HOSTFILE)5.416 E F0(replaces)72 219.6 Q F1 +($hostname_completion_\214le)2.521 E F0 5.021(.I)C 2.521(nb)-5.021 G +.021(oth cases, the old names are accepted for backw)-2.521 F .02 +(ards compatibil-)-.1 F(ity)72 231.6 Q 5.788(.T)-.65 G .788(he ksh) +-5.788 F/F3 10/Times-Italic@0 SF(select)3.288 E F0 .788 +(construct, which allo)3.288 F .788 +(ws the generation of simple menus, has been implemented.)-.25 F(Ne) +5.788 E(w)-.25 E 1.496(capabilities ha)72 243.6 R 1.796 -.15(ve b)-.2 H +1.496(een added to e).15 F 1.495(xisting v)-.15 F(ariables:)-.25 E F1 +($auto_r)3.995 E(esume)-.18 E F0 1.495(can no)3.995 F 3.995(wt)-.25 G +(ak)-3.995 E 3.995(ev)-.1 G 1.495(alues of)-4.245 F F3 -.2(ex)3.995 G +(act).2 E F0(or)3.995 E F3(sub-)3.995 E(string)72 255.6 Q F0 4.843(,a)C +(nd)-4.843 E F1($HISTCONTR)4.843 E(OL)-.3 E F0 2.343(understands the v) +4.843 F(alue)-.25 E F3(ignor)4.844 E(eboth)-.37 E F0 4.844(,w)C 2.344 +(hich combines the tw)-4.844 F 4.844(op)-.1 G(re)-4.844 E(viously)-.25 E +1.556(acceptable v)72 267.6 R 4.056(alues. The)-.25 F F1(dirs)4.056 E F0 +-.2(bu)4.056 G 1.556(iltin has acquired options to print out speci\214c\ + members of the directory).2 F 3.062(stack. The)72 279.6 R F1($nolinks) +3.062 E F0 -.25(va)3.062 G .562(riable, which forces a ph).25 F .562 +(ysical vie)-.05 F 3.062(wo)-.25 G 3.062(ft)-3.062 G .563 +(he \214le system, has been superseded by the)-3.062 F F172 291.6 +Q F0 .494(option to the)2.994 F F1(set)2.994 E F0 -.2(bu)2.994 G .494 +(iltin \(equi).2 F -.25(va)-.25 G .494(lent to).25 F F1 .494(set -o ph) +2.994 F(ysical)-.15 E F0 .493(\); the v)B .493 +(ariable is retained for backw)-.25 F .493(ards compati-)-.1 F(bility)72 +303.6 Q 5.196(.T)-.65 G .196(he v)-5.196 F .196 +(ersion string contained in)-.15 F F1($B)2.696 E(ASH_VERSION)-.3 E F0 +(no)2.696 E 2.696(wi)-.25 G .196(ncludes an indication of the patch le) +-2.696 F -.15(ve)-.25 G 2.696(la).15 G(s)-2.696 E .85(well as the \231b) +72 315.6 R .85(uild v)-.2 F 3.35(ersion\232. Some)-.15 F .85 +(little-used features ha)3.35 F 1.15 -.15(ve b)-.2 H .85(een remo).15 F +-.15(ve)-.15 G 3.35(d: the).15 F F1(by)3.35 E(e)-.1 E F0(synon)3.35 E +.85(ym for)-.15 F F1(exit)3.35 E F0(and)3.35 E(the)72 327.6 Q F1($NO_PR) +3.498 E(OMPT_V)-.3 E(ARS)-1.35 E F0 -.25(va)3.498 G .998 +(riable are gone.).25 F .998(There is no)5.998 F 3.498(wa)-.25 G 3.498 +(no)-3.498 G -2.19 -.18(rg a)-3.498 H .998 +(nized test suite that can be run as a).18 F(re)72 339.6 Q +(gression test when b)-.15 E(uilding a ne)-.2 E 2.5(wv)-.25 G +(ersion of Bash.)-2.65 E 1.696(The documentation has been thoroughly o) +97 355.2 R -.15(ve)-.15 G 1.696(rhauled: there is a ne).15 F 4.196(wm) +-.25 G 1.695(anual page on the readline)-4.196 F .467(library and the)72 +367.2 R F3(info)2.967 E F0 .467 +(\214le has been updated to re\215ect the current v)2.967 F 2.968 +(ersion. As)-.15 F(al)2.968 E -.1(wa)-.1 G .468(ys, as man).1 F 2.968 +(yb)-.15 G .468(ugs as possi-)-3.168 F(ble ha)72 379.2 Q .3 -.15(ve b) +-.2 H(een \214x).15 E(ed, although some surely remain.)-.15 E F1 2.5 +(5.2. Other)72 403.2 R -.25(Fe)2.5 G(atur).25 E(es)-.18 E F0 1.68 +(There are a fe)97 418.8 R 4.18(wf)-.25 G 1.68 +(eatures that I hope to include in later Bash releases.)-4.18 F 1.68 +(Some are based on w)6.68 F(ork)-.1 E(already done in other shells.)72 +430.8 Q .958(In addition to simple v)97 446.4 R .959(ariables, a future\ + release of Bash will include one-dimensional arrays, using)-.25 F .206 +(the ksh implementation of arrays as a model.)72 458.4 R .205 +(Additions to the ksh syntax, such as)5.205 F F3(varname)2.705 E F0 .205 +(=\( ... \) to assign)B 2.587(al)72 470.4 S .087(ist of w)-2.587 F .088 +(ords directly to an array and a mechanism to allo)-.1 F 2.588(wt)-.25 G +(he)-2.588 E F1 -.18(re)2.588 G(ad).18 E F0 -.2(bu)2.588 G .088 +(iltin to read a list of v).2 F .088(alues directly)-.25 F .092 +(into an array)72 482.4 R 2.592(,w)-.65 G .092(ould be desirable.)-2.692 +F(Gi)5.092 E -.15(ve)-.25 G 2.592(nt).15 G .092(hose e)-2.592 F .092 +(xtensions, the ksh)-.15 F F1 .092(set \255A)2.592 F F0 .091 +(syntax may not be w)2.591 F .091(orth support-)-.1 F(ing \(the)72 494.4 +Q F12.5 E F0(option assigns a list of v)2.5 E(alues to an array) +-.25 E 2.5(,b)-.65 G(ut is a rather peculiar special case\).)-2.7 E .76 +(Some shells include a means of)97 510 R F3(pr)3.26 E -.1(og)-.45 G -.15 +(ra).1 G(mmable).15 E F0 -.1(wo)3.26 G .76 +(rd completion, where the user speci\214es on a per).1 F(-)-.2 E .163 +(command basis ho)72 522 R 2.663(wt)-.25 G .163(he ar)-2.663 F .163(gum\ +ents of the command are to be treated when completion is attempted: as \ +\214le-)-.18 F .194(names, hostnames, e)72 534 R -.15(xe)-.15 G .194 +(cutable \214les, and so on.).15 F .195 +(The other aspects of the current Bash implementation could)5.195 F .482 +(remain as-is; the e)72 546 R .482(xisting heuristics w)-.15 F .481 +(ould still be v)-.1 F 2.981(alid. Only)-.25 F .481 +(when completing the ar)2.981 F .481(guments to a simple)-.18 F +(command w)72 558 Q(ould the programmable completion be in ef)-.1 E +(fect.)-.25 E .479(It w)97 573.6 R .479(ould also be nice to gi)-.1 F +.779 -.15(ve t)-.25 H .479(he user \214ner).15 F .479 +(-grained control o)-.2 F -.15(ve)-.15 G 2.98(rw).15 G .48 +(hich commands are sa)-2.98 F -.15(ve)-.2 G 2.98(do).15 G .48(nto the) +-2.98 F 1.786(history list.)72 585.6 R 1.786(One proposal is for a v) +6.786 F 1.786(ariable, tentati)-.25 F -.15(ve)-.25 G 1.786(ly named).15 +F F1(HISTIGNORE)4.286 E F0 4.285(,w)C 1.785(hich w)-4.285 F 1.785 +(ould contain a)-.1 F .496(colon-separated list of commands.)72 597.6 R +.496(Lines be)5.496 F .496 +(ginning with these commands, after the restrictions of)-.15 F F1($HIST) +2.997 E(-)-.92 E(CONTR)72 609.6 Q(OL)-.3 E F0(ha)2.65 E .45 -.15(ve b) +-.2 H .15(een applied, w).15 F .15 +(ould not be placed onto the history list.)-.1 F .15 +(The shell pattern-matching capa-)5.15 F(bilities could also be a)72 +621.6 Q -.25(va)-.2 G(ilable when specifying the contents of).25 E F1 +($HISTIGNORE)2.5 E F0(.)A .729(One thing that ne)97 637.2 R .729 +(wer shells such as)-.25 F F1(wksh)3.229 E F0 .729(\(also kno)3.229 F +.729(wn as)-.25 F F1(dtksh)3.23 E F0 3.23(\)p)C(ro)-3.23 E .73 +(vide is a command to dynami-)-.15 F 1.189 +(cally load code implementing additional b)72 649.2 R 1.189 +(uiltin commands into a running shell.)-.2 F 1.188(This ne)6.188 F 3.688 +(wb)-.25 G 1.188(uiltin w)-3.888 F(ould)-.1 E(tak)72 661.2 Q 2.875(ea) +-.1 G 2.875(no)-2.875 G .375 +(bject \214le or shared library implementing the \231body\232 of the b) +-2.875 F .375(uiltin \()-.2 F F3(xxx_b)A(uiltin\(\))-.2 E F0 .375 +(for those f)2.875 F(amiliar)-.1 E .052 +(with Bash internals\) and a structure containing the name of the ne)72 +673.2 R 2.552(wc)-.25 G .051(ommand, the function to call when the) +-2.552 F(ne)72 685.2 Q 3.458(wb)-.25 G .958(uiltin is in)-3.658 F -.2 +(vo)-.4 G -.1(ke).2 G 3.458(d\().1 G .959 +(presumably de\214ned in the shared object speci\214ed as an ar)-3.458 F +.959(gument\), and the docu-)-.18 F 1.352 +(mentation to be printed by the)72 697.2 R F1(help)3.851 E F0 1.351 +(command \(possibly present in the shared object as well\).)3.851 F +1.351(It w)6.351 F(ould)-.1 E(manage the details of e)72 709.2 Q +(xtending the internal table of b)-.15 E(uiltins.)-.2 E EP +%%Page: 10 10 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-10-)279.67 48 Q 3.291(Af)97 84 S 1.291 -.25 +(ew o)-3.291 H .791(ther b).25 F .791(uiltins w)-.2 F .791 +(ould also be desirable: tw)-.1 F 3.291(oa)-.1 G .791(re the POSIX.2) +-3.291 F/F1 10/Times-Bold@0 SF(getconf)3.292 E F0 .792 +(command, which prints)3.292 F 1.412(the v)72 96 R 1.412 +(alues of system con\214guration v)-.25 F 1.411 +(ariables de\214ned by POSIX.2, and a)-.25 F F1(diso)3.911 E(wn)-.1 E F0 +-.2(bu)3.911 G 1.411(iltin, which causes a).2 F 1.347 +(shell running with job control acti)72 108 R 1.647 -.15(ve t)-.25 H +3.847<6f99>.15 G(for)-3.847 E 1.347 +(get about\232 one or more background jobs in its internal jobs)-.18 F +3.465(table. Using)72 120 R F1(getconf)3.465 E F0 3.465(,f)C .965(or e) +-3.465 F .965(xample, a user could retrie)-.15 F 1.264 -.15(ve a v)-.25 +H .964(alue for)-.1 F F1($P)3.464 E -.95(AT)-.74 G(H).95 E F0 .964 +(guaranteed to \214nd all of the)3.464 F .884 +(POSIX standard utilities, or \214nd out ho)72 132 R 3.385(wl)-.25 G +.885 +(ong \214lenames may be in the \214le system containing a speci\214ed) +-3.385 F(directory)72 144 Q(.)-.65 E 1.521 +(There are no implementation timetables for an)97 159.6 R 4.021(yo)-.15 +G 4.021(ft)-4.021 G 1.52(hese features, nor are there concrete plans to) +-4.021 F(include them.)72 171.6 Q(If an)5 E(yone has comments on these \ +proposals, feel free to send me electronic mail.)-.15 E F1 2.5 +(6. Re\215ections)72 195.6 R(and Lessons Lear)2.5 E(ned)-.15 E F0 .433 +(The lesson that has been repeated most often during Bash de)97 211.2 R +-.15(ve)-.25 G .433(lopment is that there are dark corners).15 F .181 +(in the Bourne shell, and people use all of them.)72 223.2 R .18 +(In the original description of the Bourne shell, quoting and)5.181 F +.073(the shell grammar are both poorly speci\214ed and incomplete; subs\ +equent descriptions ha)72 235.2 R .373 -.15(ve n)-.2 H .073 +(ot helped much.).15 F 1.856(The grammar presented in Bourne')72 247.2 R +4.356(sp)-.55 G 1.856(aper describing the shell distrib)-4.356 F 1.855 +(uted with the Se)-.2 F -.15(ve)-.25 G 1.855(nth Edition of).15 F/F2 9 +/Times-Roman@0 SF(UNIX)72 259.2 Q F0 2.5<8769>C 2.5(ss)-2.5 G 2.5(of) +-2.5 G(ar of)-2.6 E 2.5(ft)-.25 G(hat it does not allo)-2.5 E 2.5(wt) +-.25 G(he command)-2.5 E/F3 10/Courier@0 SF(who|wc)2.5 E F0 5(.I)C 2.5 +(nf)-5 G(act, as T)-2.6 E(om Duf)-.8 E 2.5(fs)-.25 G(tates:)-2.5 E 1.375 +(Nobody really kno)97 274.8 R 1.375(ws what the Bourne shell')-.25 F +3.875(sg)-.55 G 1.375(rammar is.)-3.875 F(Ev)6.376 E 1.376(en e)-.15 F +1.376(xamination of the source)-.15 F(code is little help.\210)97 286.8 +Q .382(The POSIX.2 standard includes a)72 302.4 R/F4 10/Times-Italic@0 +SF(yacc)2.882 E F0 .382 +(grammar that comes close to capturing the Bourne shell')2.882 F 2.882 +(sb)-.55 G(eha)-2.882 E(vior)-.2 E(,)-.4 E -.2(bu)72 314.4 S 3.246(ti).2 +G 3.246(td)-3.246 G(isallo)-3.246 E .747(ws some constructs which sh ac\ +cepts without complaint \255 and there are scripts out there that)-.25 F +.501(use them.)72 326.4 R .501(It took a fe)5.501 F 3.001(wv)-.25 G .501 +(ersions and se)-3.151 F -.15(ve)-.25 G .501(ral b).15 F .5 +(ug reports before Bash implemented sh-compatible quoting,)-.2 F .279 +(and there are still some \231le)72 338.4 R -.05(ga)-.15 G .279 +(l\232 sh constructs which Bash \215ags as syntax errors.).05 F .28 +(Complete sh compatibility)5.28 F(is a tough nut.)72 350.4 Q 1.231 +(The shell is bigger and slo)97 366 R 1.231(wer than I w)-.25 F 1.231 +(ould lik)-.1 F 1.23(e, though the current v)-.1 F 1.23 +(ersion is substantially f)-.15 F(aster)-.1 E .086(than pre)72 378 R +(viously)-.25 E 5.086(.T)-.65 G .087 +(he readline library could stand a substantial re)-5.086 F 2.587 +(write. A)-.25 F .087(hand-written parser to replace the)2.587 F +(current)72 390 Q F4(yacc)2.978 E F0 .478(-generated one w)B .477 +(ould probably result in a speedup, and w)-.1 F .477(ould solv)-.1 F +2.977(eo)-.15 G .477(ne glaring problem:)-2.977 F(the)5.477 E .384 +(shell could parse commands in \231$\(...\)\232 constructs as the)72 402 +R 2.884(ya)-.15 G .385 +(re entered, rather than reporting errors when the)-2.884 F +(construct is e)72 414 Q(xpanded.)-.15 E 1.064(As al)97 429.6 R -.1(wa) +-.1 G 1.064(ys, there is some chaf).1 F 3.564(ft)-.25 G 3.564(og)-3.564 +G 3.564(ow)-3.564 G 1.064(ith the wheat.)-3.564 F 1.063 +(Areas of duplicated functionality need to be)6.063 F .382(cleaned up.) +72 441.6 R .382(There are se)5.382 F -.15(ve)-.25 G .382 +(ral cases where Bash treats a v).15 F .382 +(ariable specially to enable functionality a)-.25 F -.25(va)-.2 G +(ilable).25 E .185(another w)72 453.6 R .185(ay \()-.1 F F1($notify)A F0 +(vs.)2.684 E F1 .184(set -o notify)5.184 F F0(and)2.684 E F1($nolinks) +2.684 E F0(vs.)2.684 E F1 .184(set -o ph)2.684 F(ysical)-.15 E F0 2.684 +(,f)C .184(or instance\); the special treatment)-2.684 F 3.421(of the v) +72 465.6 R 3.421(ariable name should probably be remo)-.25 F -.15(ve) +-.15 G 5.921(d. A).15 F(fe)5.921 E 5.921(wm)-.25 G 3.422 +(ore things could stand remo)-5.921 F -.25(va)-.15 G 3.422(l; the).25 F +F1($allo)72 477.6 Q(w_null_glob_expansion)-.1 E F0(and)4.112 E F1 +($glob_dot_\214lenames)4.112 E F0 -.25(va)4.111 G 1.611 +(riables are of particularly questionable v).25 F(alue.)-.25 E(The)72 +489.6 Q F1($[...])3.977 E F0 1.477(arithmetic e)3.977 F -.25(va)-.25 G +1.478(luation syntax is redundant no).25 F 3.978(wt)-.25 G 1.478 +(hat the POSIX-mandated)-3.978 F F1($\(\(...\)\))3.978 E F0 1.478 +(construct has)3.978 F .326(been implemented, and could be deleted.)72 +501.6 R .326(It w)5.326 F .326(ould be nice if the te)-.1 F .326 +(xt output by the)-.15 F F1(help)2.825 E F0 -.2(bu)2.825 G .325 +(iltin were e).2 F(xter)-.15 E(-)-.2 E .061 +(nal to the shell rather than compiled into it.)72 513.6 R .062 +(The beha)5.062 F .062(vior enabled by)-.2 F F1 +($command_oriented_history)2.562 E F0 2.562(,w)C(hich)-2.562 E 1.125 +(causes the shell to attempt to sa)72 525.6 R 1.424 -.15(ve a)-.2 H +1.124(ll lines of a multi-line command in a single history entry).15 F +3.624(,s)-.65 G 1.124(hould be)-3.624 F(made the def)72 537.6 Q +(ault and the v)-.1 E(ariable remo)-.25 E -.15(ve)-.15 G(d.).15 E F1 2.5 +(7. A)72 561.6 R -.1(va)-1 G(ilability).1 E F0 .047 +(As with all other GNU softw)97 577.2 R .047(are, Bash is a)-.1 F -.25 +(va)-.2 G .047(ilable for anon).25 F .047(ymous FTP from)-.15 F F4(pr) +2.547 E(ep.ai.mit.edu:/pub/gnu)-.37 E F0 1.05(and from other GNU softw) +72 589.2 R 1.05(are mirror sites.)-.1 F 1.049(The current v)6.049 F +1.049(ersion is in)-.15 F F4(bash-1.14.1.tar)3.549 E(.gz)-1.11 E F0 +1.049(in that directory)3.549 F(.)-.65 E(Use)72 601.2 Q F4(ar)5.965 E +-.15(ch)-.37 G(ie).15 E F0 3.465(to \214nd the nearest archi)5.965 F +3.766 -.15(ve s)-.25 H 5.966(ite. The).15 F 3.466(latest v)5.966 F 3.466 +(ersion is al)-.15 F -.1(wa)-.1 G 3.466(ys a).1 F -.25(va)-.2 G 3.466 +(ilable for FTP from).25 F F4(bash.CWR)72 613.2 Q -.25(U.)-.4 G +(Edu:/pub/dist.).25 E F0(Bash documentation is a)5 E -.25(va)-.2 G +(ilable for FTP from).25 E F4(bash.CWR)2.5 E -.25(U.)-.4 G +(Edu:/pub/bash.).25 E F0 1.169(The Free Softw)97 628.8 R 1.169(are F)-.1 +F 1.169(oundation sells tapes and CD-R)-.15 F 1.168 +(OMs containing Bash; send electronic mail to)-.4 F F3 +(gnu@prep.ai.mit.edu)72 640.8 Q F0(or call)2.5 E F3(+1-617-876-3296)2.5 +E F0(for more information.)2.5 E .694(Bash is also distrib)97 656.4 R +.694(uted with se)-.2 F -.15(ve)-.25 G .694(ral v).15 F .694(ersions of) +-.15 F F2(UNIX)3.194 E F0 .694(-compatible systems.)B .695 +(It is included as /bin/sh)5.694 F .948(and /bin/bash on se)72 668.4 R +-.15(ve)-.25 G .948(ral Linux distrib).15 F .948 +(utions \(more about the dif)-.2 F .948 +(ference in a moment\), and as contrib)-.25 F(uted)-.2 E .32 LW 144 +676.4 72 676.4 DL/F5 8/Times-Roman@0 SF .781 +(\207S. R. Bourne, \231UNIX T)72 688.2 R .781(ime-Sharing System:)-.28 F +.781(The UNIX Shell\232,)4.781 F/F6 8/Times-Italic@0 SF .78 +(Bell System T)2.78 F(ec)-.736 E .78(hnical J)-.12 F(ournal)-.2 E F5 +2.78(,5)C .78(7\(6\), July-)-2.78 F(August, 1978, pp. 1971-1990.)72 +698.2 Q<8854>72 710 Q .431(om Duf)-.64 F .431 +(f, \231Rc \255 A Shell for Plan 9 and)-.2 F/F7 7/Times-Roman@0 SF(UNIX) +2.432 E F5(systems\232,)2.432 E F6(Pr)2.432 E .432 +(oc. of the Summer 1990 EUUG Confer)-.36 F(ence)-.296 E F5 2.432(,L)C +(on-)-2.432 E(don, July)72 720 Q 2(,1)-.52 G(990, pp. 21-33.)-2 E EP +%%Page: 11 11 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-11-)279.67 48 Q(softw)72 84 Q(are in BSDI')-.1 +E 2.5(sB)-.55 G(SD/386* and FreeBSD.)-2.5 E .598(The Linux distrib)97 +99.6 R .598(ution deserv)-.2 F .598(es special mention.)-.15 F .598 +(There are tw)5.598 F 3.099(oc)-.1 G .599 +(on\214gurations included in the stan-)-3.099 F .733(dard Bash distrib) +72 111.6 R .732(ution: a \231normal\232 con\214guration, in which all o\ +f the standard features are included, and a)-.2 F .519(\231minimal\232 \ +con\214guration, which omits job control, aliases, history and command \ +line editing, the directory)72 123.6 R .886(stack and)72 135.6 R/F1 10 +/Times-Bold@0 SF(pushd/popd/dirs,)3.386 E F0 .886(process substitution,\ + prompt string special character decoding, and the)3.386 F/F2 10 +/Times-Italic@0 SF(select)3.385 E F0 3.368(construct. This)72 147.6 R +.868(minimal v)3.368 F .869 +(ersion is designed to be a drop-in replacement for the traditional)-.15 +F/F3 9/Times-Roman@0 SF(UNIX)3.369 E F0(/bin/sh,)3.369 E +(and is included as the Linux /bin/sh in se)72 159.6 Q -.15(ve)-.25 G +(ral packagings.).15 E F1 2.5(8. Conclusion)72 183.6 R F0 .8 +(Bash is a w)97 199.2 R(orth)-.1 E 3.3(ys)-.05 G .8(uccessor to sh.)-3.3 +F .8(It is suf)5.8 F .8(\214ciently portable to run on nearly e)-.25 F +-.15(ve)-.25 G .8(ry v).15 F .8(ersion of)-.15 F F3(UNIX)3.299 E F0 .31 +(from 4.3 BSD to SVR4.2, and se)72 211.2 R -.15(ve)-.25 G(ral).15 E F3 +(UNIX)2.81 E F0 -.1(wo)2.81 G(rkalik).1 E 2.81(es. It)-.1 F .311(is rob) +2.81 F .311(ust enough to replace sh on most of those)-.2 F 1.515 +(systems, and pro)72 223.2 R 1.515(vides more functionality)-.15 F 6.515 +(.I)-.65 G 4.015(th)-6.515 G 1.515(as se)-4.015 F -.15(ve)-.25 G 1.515 +(ral thousand re).15 F 1.515(gular users, and their feedback has)-.15 F +(helped to mak)72 235.2 Q 2.5(ei)-.1 G 2.5(ta)-2.5 G 2.5(sg)-2.5 G +(ood as it is today \255 a testament to the bene\214ts of free softw) +-2.5 E(are.)-.1 E .32 LW 144 708.2 72 708.2 DL/F4 8/Times-Roman@0 SF +(*BSD/386 is a trademark of Berk)72 720 Q(ele)-.08 E 2(yS)-.12 G(oftw)-2 +E(are Design, Inc.)-.08 E EP +%%Trailer +end +%%EOF diff --git a/doc/article.txt b/doc/article.txt new file mode 100644 index 0000000..c19ff92 --- /dev/null +++ b/doc/article.txt @@ -0,0 +1,1111 @@ + + + + + + + + + + Bash - The GNU shell* + + + Chet Ramey + Case Western Reserve University + chet@po.cwru.edu + + + + + + +_1. _I_n_t_r_o_d_u_c_t_i_o_n + + _B_a_s_h is the shell, or command language interpreter, +that will appear in the GNU operating system. The name is +an acronym for the "Bourne-Again SHell", a pun on Steve +Bourne, the author of the direct ancestor of the current +UNIX|- shell /_b_i_n/_s_h, which appeared in the Seventh Edition +Bell Labs Research version of UNIX. + + Bash is an sh-compatible shell that incorporates useful +features from the Korn shell (ksh) and the C shell (csh), +described later in this article. It is ultimately intended +to be a conformant implementation of the IEEE POSIX Shell +and Utilities specification (IEEE Working Group 1003.2). It +offers functional improvements over sh for both interactive +and programming use. + + While the GNU operating system will most likely include +a version of the Berkeley shell csh, Bash will be the +default shell. Like other GNU software, Bash is quite port- +able. It currently runs on nearly every version of UNIX and +a few other operating systems - an independently-supported +port exists for OS/2, and there are rumors of ports to DOS +and Windows NT. Ports to UNIX-like systems such as QNX and +Minix are part of the distribution. + + The original author of Bash was Brian Fox, an employee +of the Free Software Foundation. The current developer and +maintainer is Chet Ramey, a volunteer who works at Case +Western Reserve University. + +_2. _W_h_a_t'_s _P_O_S_I_X, _a_n_y_w_a_y? + + _P_O_S_I_X is a name originally coined by Richard Stallman +_________________________ +*An earlier version of this article appeared in The +Linux Journal. +|- UNIX is a trademark of Bell Laboratories. + + + + + October 28, 1994 + + + + + + - 2 - + + +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 sys- +tem call and C library level to applications and tools to +system administration and management. Each area of stan- +dardization 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 con- +centrates 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. There are four primary areas of work +in the 1003.2 standard: + +o+ Aspects of the shell's syntax and command language. A + number of special builtins such as _c_d and _e_x_e_c are + being specified as part of the shell, since their func- + tionality usually cannot be implemented by a separate + executable; + +o+ A set of utilities to be called by shell scripts and + applications. Examples are programs like _s_e_d, _t_r, and + _a_w_k. Utilities commonly implemented as shell builtins + are described in this section, such as _t_e_s_t and _k_i_l_l. + An expansion of this section's scope, termed the User + Portability Extension, or UPE, has standardized + interactive programs such as _v_i and _m_a_i_l_x; + +o+ A group of functional interfaces to services provided + by the shell, such as the traditional system() C + library function. There are functions to perform shell + word expansions, perform filename expansion (_g_l_o_b_b_i_n_g), + obtain values of POSIX.2 system configuration vari- + ables, retrieve values of environment variables + (getenv()), _a_n_d _o_t_h_e_r _s_e_r_v_i_c_e_s; + +o+ A suite of "development" utilities such as _c_8_9 (the + POSIX.2 version of _c_c), and _y_a_c_c. + + 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 con- +trol and program execution constructs, I/O redirection and +pipelining, argument handling, variable expansion, and quot- +ing. The _s_p_e_c_i_a_l builtins, which must be implemented as +part of the shell to provide the desired functionality, are +_________________________ +|=IEEE, _I_E_E_E _S_t_a_n_d_a_r_d _f_o_r _I_n_f_o_r_m_a_t_i_o_n _T_e_c_h_n_o_l_o_g_y -- +_P_o_r_t_a_b_l_e _O_p_e_r_a_t_i_n_g _S_y_s_t_e_m _I_n_t_e_r_f_a_c_e (_P_O_S_I_X) _P_a_r_t _2: +_S_h_e_l_l _a_n_d _U_t_i_l_i_t_i_e_s, 1992. + + + + + October 28, 1994 + + + + + + - 3 - + + +specified as being part of the shell; examples of these are +_e_v_a_l and _e_x_p_o_r_t. 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 +_r_e_a_d and _t_e_s_t. POSIX.2 also specifies aspects of the +shell's interactive behavior as part of the UPE, including +job control and command line editing. Interestingly enough, +only _v_i-style line editing commands have been standardized; +_e_m_a_c_s editing commands were left out due to objections. + + While POSIX.2 includes much of what the shell has trad- +itionally provided, some important things have been omitted +as being "beyond its scope." There is, for instance, no +mention of a difference between a _l_o_g_i_n shell and any other +interactive shell (since POSIX.2 does not specify a login +program). No fixed startup files are defined, either - the +standard does not mention ._p_r_o_f_i_l_e. + +_3. _B_a_s_i_c _B_a_s_h _f_e_a_t_u_r_e_s + + Since the Bourne shell provides Bash with most of its +philosophical underpinnings, Bash inherits most of its +features and functionality from sh. Bash implements all of +the traditional sh flow control constructs (_f_o_r, _i_f, _w_h_i_l_e, +etc.). All of the Bourne shell builtins, including those +not specified in the POSIX.2 standard, appear in Bash. +Shell _f_u_n_c_t_i_o_n_s, introduced in the SVR2 version of the +Bourne shell, are similar to shell scripts, but are defined +using a special syntax and are executed in the same process +as the calling shell. Bash has shell functions which behave +in a fashion upward-compatible with sh functions. There are +certain shell variables that Bash interprets in the same way +as sh, such as _P_S_1, _I_F_S, and _P_A_T_H. Bash implements essen- +tially the same grammar, parameter and variable expansion +semantics, redirection, and quoting as the Bourne shell. +Where differences appear between the POSIX.2 standard and +traditional sh behavior, Bash follows POSIX. + + The Korn Shell (ksh) is a descendent of the Bourne +shell written at AT&T Bell Laboratories by David Korn|-. It +provides a number of useful features that POSIX and Bash +have adopted. Many of the interactive facilities in POSIX.2 +have their roots in the ksh: for example, the POSIX and ksh +job control facilities are nearly identical. Bash includes +features from the Korn Shell for both interactive use and +shell programming. For programming, Bash provides variables +such as _R_A_N_D_O_M and _R_E_P_L_Y, the _t_y_p_e_s_e_t builtin, the ability +to remove substrings from variables based on patterns, and +shell arithmetic. _R_A_N_D_O_M expands to a random number each +time it is referenced; assigning a value to _R_A_N_D_O_M seeds the +_________________________ +|-Morris Bolsky and David Korn, _T_h_e _K_o_r_n_S_h_e_l_l _C_o_m_m_a_n_d +_a_n_d _P_r_o_g_r_a_m_m_i_n_g _L_a_n_g_u_a_g_e, Prentice Hall, 1989. + + + + + October 28, 1994 + + + + + + - 4 - + + +random number generator. _R_E_P_L_Y is the default variable used +by the _r_e_a_d builtin when no variable names are supplied as +arguments. The _t_y_p_e_s_e_t builtin is used to define variables +and give them attributes such as readonly. Bash arithmetic +allows the evaluation of an expression and the substitution +of the result. Shell variables may be used as operands, and +the result of an expression may be assigned to a variable. +Nearly all of the operators from the C language are avail- +able, with the same precedence rules: +9 $ echo $((3 + 5 * 32)) + 163 +9 +For interactive use, Bash implements ksh-style aliases and +builtins such as _f_c (discussed below) and _j_o_b_s. Bash +aliases allow a string to be substituted for a command name. +They can be used to create a mnemonic for a UNIX command +name (alias del=rm), to expand a single word to a complex +command (alias news='xterm -g 80x45 -title trn -e trn -e -S1 +-N &'), or to ensure that a command is invoked with a basic +set of options (alias ls="/bin/ls -F"). + + The C shell (csh)|-, originally written by Bill Joy +while at Berkeley, is widely used and quite popular for its +interactive facilities. Bash includes a csh-compatible his- +tory expansion mechanism ("! history"), brace expansion, +access to a stack of directories via the _p_u_s_h_d, _p_o_p_d, and +_d_i_r_s builtins, and tilde expansion, to generate users' home +directories. Tilde expansion has also been adopted by both +the Korn Shell and POSIX.2. + + There were certain areas in which POSIX.2 felt stan- +dardization was necessary, but no existing implementation +provided the proper behavior. The working group invented +and standardized functionality in these areas, which Bash +implements. The _c_o_m_m_a_n_d builtin was invented so that shell +functions could be written to replace builtins; it makes the +capabilities of the builtin available to the function. The +reserved word "!" was added to negate the return value of a +command or pipeline; it was nearly impossible to express "if +not x" cleanly using the sh language. There exist multiple +incompatible implementations of the _t_e_s_t builtin, which +tests files for type and other attributes and performs +arithmetic and string comparisons. POSIX considered none of +these correct, so the standard behavior was specified in +terms of the number of arguments to the command. POSIX.2 +dictates exactly what will happen when four or fewer argu- +ments are given to _t_e_s_t, and leaves the behavior undefined +when more arguments are supplied. Bash uses the POSIX.2 +_________________________ +|-Bill Joy, An Introduction to the C Shell, _U_N_I_X _U_s_e_r'_s +_S_u_p_p_l_e_m_e_n_t_a_r_y _D_o_c_u_m_e_n_t_s, University of California at +Berkeley, 1986. + + + + + October 28, 1994 + + + + + + - 5 - + + +algorithm, which was conceived by David Korn. + +_3._1. _F_e_a_t_u_r_e_s _n_o_t _i_n _t_h_e _B_o_u_r_n_e _S_h_e_l_l + + There are a number of minor differences between Bash +and the version of sh present on most other versions of +UNIX. The majority of these are due to the POSIX standard, +but some are the result of Bash adopting features from other +shells. For instance, Bash includes the new "!" reserved +word, the _c_o_m_m_a_n_d builtin, the ability of the _r_e_a_d builtin +to correctly return a line ending with a backslash, symbolic +arguments to the _u_m_a_s_k builtin, variable substring removal, +a way to get the length of a variable, and the new algorithm +for the _t_e_s_t builtin from the POSIX.2 standard, none of +which appear in sh. + + Bash also implements the "$(...)" command substitution +syntax, which supersedes the sh `...` construct. The +"$(...)" construct expands to the output of the command con- +tained within the parentheses, with trailing newlines +removed. The sh syntax is accepted for backwards compati- +bility, but the "$(...)" form is preferred because its quot- +ing rules are much simpler and it is easier to nest. + + The Bourne shell does not provide such features as +brace expansion, the ability to define a variable and a +function with the same name, local variables in shell func- +tions, the ability to enable and disable individual builtins +or write a function to replace a builtin, or a means to +export a shell function to a child process. + + Bash has closed a long-standing shell security hole by +not using the $_I_F_S variable to split each word read by the +shell, but splitting only the results of expansion (ksh and +the 4.4 BSD sh have fixed this as well). Useful behavior +such as a means to abort execution of a script read with the +"." command using the return builtin or automatically +exporting variables in the shell's environment to children +is also not present in the Bourne shell. Bash provides a +much more powerful environment for both interactive use and +programming. + +_4. _B_a_s_h-_s_p_e_c_i_f_i_c _F_e_a_t_u_r_e_s + + This section details a few of the features which make +Bash unique. Most of them provide improved interactive use, +but a few programming improvements are present as well. +Full descriptions of these features can be found in the Bash +documentation. + +_4._1. _S_t_a_r_t_u_p _F_i_l_e_s + + Bash executes startup files differently than other +shells. The Bash behavior is a compromise between the csh + + + + October 28, 1994 + + + + + + - 6 - + + +principle of startup files with fixed names executed for +each shell and the sh "minimalist" behavior. An interactive +instance of Bash started as a login shell reads and executes +~/._b_a_s_h__p_r_o_f_i_l_e (the file .bash_profile in the user's home +directory), if it exists. An interactive non-login shell +reads and executes ~/._b_a_s_h_r_c. A non-interactive shell (one +begun to execute a shell script, for example) reads no fixed +startup file, but uses the value of the variable $_E_N_V, if +set, as the name of a startup file. The ksh practice of +reading $_E_N_V for every shell, with the accompanying diffi- +culty of defining the proper variables and functions for +interactive and non-interactive shells or having the file +read only for interactive shells, was considered too com- +plex. Ease of use won out here. Interestingly, the next +release of ksh will change to reading $_E_N_V only for interac- +tive shells. + +_4._2. _N_e_w _B_u_i_l_t_i_n _C_o_m_m_a_n_d_s + + There are a few builtins which are new or have been +extended in Bash. The _e_n_a_b_l_e builtin allows builtin com- +mands to be turned on and off arbitrarily. To use the ver- +sion of _e_c_h_o found in a user's search path rather than the +Bash builtin, enable -n echo suffices. The _h_e_l_p builtin +provides quick synopses of the shell facilities without +requiring access to a manual page. _B_u_i_l_t_i_n is similar to +_c_o_m_m_a_n_d in that it bypasses shell functions and directly +executes builtin commands. Access to a csh-style stack of +directories is provided via the _p_u_s_h_d, _p_o_p_d, and _d_i_r_s buil- +tins. _P_u_s_h_d and _p_o_p_d insert and remove directories from the +stack, respectively, and _d_i_r_s lists the stack contents. On +systems that allow fine-grained control of resources, the +_u_l_i_m_i_t builtin can be used to tune these settings. _U_l_i_m_i_t +allows a user to control, among other things, whether core +dumps are to be generated, how much memory the shell or a +child process is allowed to allocate, and how large a file +created by a child process can grow. The _s_u_s_p_e_n_d command +will stop the shell process when job control is active; most +other shells do not allow themselves to be stopped like +that. _T_y_p_e, the Bash answer to _w_h_i_c_h and _w_h_e_n_c_e, shows what +will happen when a word is typed as a command: +9 $ type export + export is a shell builtin + $ type -t export + builtin + $ type bash + bash is /bin/bash + $ type cd + cd is a function + cd () + { + builtin cd ${1+"$@"} && xtitle $HOST: $PWD + } +9 + + + October 28, 1994 + + + + + + - 7 - + + +Various modes tell what a command word is (reserved word, +alias, function, builtin, or file) or which version of a +command will be executed based on a user's search path. +Some of this functionality has been adopted by POSIX.2 and +folded into the _c_o_m_m_a_n_d utility. + +_4._3. _E_d_i_t_i_n_g _a_n_d _C_o_m_p_l_e_t_i_o_n + + One area in which Bash shines is command line editing. +Bash uses the _r_e_a_d_l_i_n_e library to read and edit lines when +interactive. Readline is a powerful and flexible input +facility that a user can configure to individual tastes. It +allows lines to be edited using either emacs or vi commands, +where those commands are appropriate. The full capability +of emacs is not present - there is no way to execute a named +command with M-x, for instance - but the existing commands +are more than adequate. The vi mode is compliant with the +command line editing standardized by POSIX.2. + + Readline is fully customizable. In addition to the +basic commands and key bindings, the library allows users to +define additional key bindings using a startup file. The +_i_n_p_u_t_r_c file, which defaults to the file ~/._i_n_p_u_t_r_c, is read +each time readline initializes, permitting users to maintain +a consistent interface across a set of programs. Readline +includes an extensible interface, so each program using the +library can add its own bindable commands and program- +specific key bindings. Bash uses this facility to add bind- +ings that perform history expansion or shell word expansions +on the current input line. + + Readline interprets a number of variables which further +tune its behavior. Variables exist to control whether or +not eight-bit characters are directly read as input or con- +verted to meta-prefixed key sequences (a meta-prefixed key +sequence consists of the character with the eighth bit +zeroed, preceded by the _m_e_t_a-_p_r_e_f_i_x character, usually +escape, which selects an alternate keymap), to decide +whether to output characters with the eighth bit set +directly or as a meta-prefixed key sequence, whether or not +to wrap to a new screen line when a line being edited is +longer than the screen width, the keymap to which subsequent +key bindings should apply, or even what happens when read- +line wants to ring the terminal's bell. All of these vari- +ables can be set in the inputrc file. + + The startup file understands a set of C preprocessor- +like conditional constructs which allow variables or key +bindings to be assigned based on the application using read- +line, the terminal currently being used, or the editing +mode. Users can add program-specific bindings to make their +lives easier: I have bindings that let me edit the value of +$_P_A_T_H and double-quote the current or previous word: +9 # Macros that are convenient for shell interaction + + +9 October 28, 1994 + + + + + + - 8 - + + + $if Bash + # edit the path + "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" + # prepare to type a quoted word -- insert open and close double + # quotes and move to just after the open quote + "\C-x\"": "\"\"\C-b" + # Quote the current or previous word + "\C-xq": "\eb\"\ef\"" + $endif +9 +There is a readline command to re-read the file, so users +can edit the file, change some bindings, and begin to use +them almost immediately. + + Bash implements the _b_i_n_d builtin for more dyamic con- +trol of readline than the startup file permits. _B_i_n_d is +used in several ways. In _l_i_s_t mode, it can display the +current key bindings, list all the readline editing direc- +tives available for binding, list which keys invoke a given +directive, or output the current set of key bindings in a +format that can be incorporated directly into an inputrc +file. In _b_a_t_c_h mode, it reads a series of key bindings +directly from a file and passes them to readline. In its +most common usage, _b_i_n_d takes a single string and passes it +directly to readline, which interprets the line as if it had +just been read from the inputrc file. Both key bindings and +variable assignments may appear in the string given to _b_i_n_d. + + The readline library also provides an interface for +_w_o_r_d _c_o_m_p_l_e_t_i_o_n. When the _c_o_m_p_l_e_t_i_o_n character (usually +TAB) is typed, readline looks at the word currently being +entered and computes the set of filenames of which the +current word is a valid prefix. If there is only one possi- +ble completion, the rest of the characters are inserted +directly, otherwise the common prefix of the set of +filenames is added to the current word. A second TAB char- +acter entered immediately after a non-unique completion +causes readline to list the possible completions; there is +an option to have the list displayed immediately. Readline +provides hooks so that applications can provide specific +types of completion before the default filename completion +is attempted. This is quite flexible, though it is not com- +pletely user-programmable. Bash, for example, can complete +filenames, command names (including aliases, builtins, shell +reserved words, shell functions, and executables found in +the file system), shell variables, usernames, and hostnames. +It uses a set of heuristics that, while not perfect, is gen- +erally quite good at determining what type of completion to +attempt. + +_4._4. _H_i_s_t_o_r_y + + Access to the list of commands previously entered (the +_c_o_m_m_a_n_d _h_i_s_t_o_r_y) is provided jointly by Bash and the + + +9 October 28, 1994 + + + + + + - 9 - + + +readline library. Bash provides variables ($HISTFILE, +$HISTSIZE, and $HISTCONTROL) and the _h_i_s_t_o_r_y and _f_c builtins +to manipulate the history list. The value of $_H_I_S_T_F_I_L_E +specifes the file where Bash writes the command history on +exit and reads it on startup. $_H_I_S_T_S_I_Z_E is used to limit +the number of commands saved in the history. $_H_I_S_T_C_O_N_T_R_O_L +provides a crude form of control over which commands are +saved on the history list: a value of _i_g_n_o_r_e_s_p_a_c_e means to +not save commands which begin with a space; a value of +_i_g_n_o_r_e_d_u_p_s means to not save commands identical to the last +command saved. $HISTCONTROL was named $history_control in +earlier versions of Bash; the old name is still accepted for +backwards compatibility. The _h_i_s_t_o_r_y command can read or +write files containing the history list and display the +current list contents. The _f_c builtin, adopted from POSIX.2 +and the Korn Shell, allows display and re-execution, with +optional editing, of commands from the history list. The +readline library offers a set of commands to search the his- +tory list for a portion of the current input line or a +string typed by the user. Finally, the _h_i_s_t_o_r_y library, +generally incorporated directly into the readline library, +implements a facility for history recall, expansion, and +re-execution of previous commands very similar to csh ("bang +history", so called because the exclamation point introduces +a history substitution): +9 $ echo a b c d e + a b c d e + $ !! f g h i + echo a b c d e f g h i + a b c d e f g h i + $ !-2 + echo a b c d e + a b c d e + $ echo !-2:1-4 + echo a b c d + a b c d +9 +The command history is only saved when the shell is interac- +tive, so it is not available for use by shell scripts. + +_4._5. _N_e_w _S_h_e_l_l _V_a_r_i_a_b_l_e_s + + There are a number of convenience variables that Bash +interprets to make life easier. These include _F_I_G_N_O_R_E, +which is a set of filename suffixes identifying files to +exclude when completing filenames; _H_O_S_T_T_Y_P_E, which is +automatically set to a string describing the type of +hardware on which Bash is currently executing; +_c_o_m_m_a_n_d__o_r_i_e_n_t_e_d__h_i_s_t_o_r_y, which directs Bash to save all +lines of a multiple-line command such as a _w_h_i_l_e or _f_o_r loop +in a single history entry, allowing easy re-editing; and +_I_G_N_O_R_E_E_O_F, whose value indicates the number of consecutive +EOF characters that an interactive shell will read before + + + + October 28, 1994 + + + + + + - 10 - + + +exiting - an easy way to keep yourself from being logged out +accidentally. The _a_u_t_o__r_e_s_u_m_e variable alters the way the +shell treats simple command names: if job control is active, +and this variable is set, single-word simple commands +without redirections cause the shell to first look for and +restart a suspended job with that name before starting a new +process. + +_4._6. _B_r_a_c_e _E_x_p_a_n_s_i_o_n + + Since sh offers no convenient way to generate arbitrary +strings that share a common prefix or suffix (filename +expansion requires that the filenames exist), Bash imple- +ments _b_r_a_c_e _e_x_p_a_n_s_i_o_n, a capability picked up from csh. +Brace expansion is similar to filename expansion, but the +strings generated need not correspond to existing files. A +brace expression consists of an optional _p_r_e_a_m_b_l_e, followed +by a pair of braces enclosing a series of comma-separated +strings, and an optional _p_o_s_t_a_m_b_l_e. The preamble is +prepended to each string within the braces, and the postam- +ble is then appended to each resulting string: +9 $ echo a{d,c,b}e + ade ace abe +9 +As this example demonstrates, the results of brace expansion +are not sorted, as they are by filename expansion. + +_4._7. _P_r_o_c_e_s_s _S_u_b_s_t_i_t_u_t_i_o_n + + On systems that can support it, Bash provides a facil- +ity known as _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. Process substitution is +similar to command substitution in that its specification +includes a command to execute, but the shell does not col- +lect the command's output and insert it into the command +line. Rather, Bash opens a pipe to the command, which is +run in the background. The shell uses named pipes (FIFOs) +or the /_d_e_v/_f_d method of naming open files to expand the +process substitution to a filename which connects to the +pipe when opened. This filename becomes the result of the +expansion. Process substitution can be used to compare the +outputs of two different versions of an application as part +of a regression test: +9 $ cmp <(old_prog) <(new_prog) +9 +_4._8. _P_r_o_m_p_t _C_u_s_t_o_m_i_z_a_t_i_o_n + + One of the more popular interactive features that Bash +provides is the ability to customize the prompt. Both $_P_S_1 +and $_P_S_2, the primary and secondary prompts, are expanded +before being displayed. Parameter and variable expansion is +performed when the prompt string is expanded, so any shell +variable can be put into the prompt (e.g., $_S_H_L_V_L, which + + + + October 28, 1994 + + + + + + - 11 - + + +indicates how deeply the current shell is nested). Bash +specially interprets characters in the prompt string pre- +ceded by a backslash. Some of these backslash escapes are +replaced with the current time, the date, the current work- +ing directory, the username, and the command number or his- +tory number of the command being entered. There is even a +backslash escape to cause the shell to change its prompt +when running as root after an _s_u. Before printing each pri- +mary prompt, Bash expands the variable $_P_R_O_M_P_T__C_O_M_M_A_N_D and, +if it has a value, executes the expanded value as a command, +allowing additional prompt customization. For example, this +assignment causes the current user, the current host, the +time, the last component of the current working directory, +the level of shell nesting, and the history number of the +current command to be embedded into the primary prompt: +9 $ PS1='\u@\h [\t] \W($SHLVL:\!)\$ ' + chet@odin [21:03:44] documentation(2:636)$ cd .. + chet@odin [21:03:54] src(2:637)$ +9 +The string being assigned is surrounded by single quotes so +that if it is exported, the value of $_S_H_L_V_L will be updated +by a child shell: +9 chet@odin [21:17:35] src(2:638)$ export PS1 + chet@odin [21:17:40] src(2:639)$ bash + chet@odin [21:17:46] src(3:696)$ +9 +The \$ escape is displayed as "$" when running as a normal +user, but as "#" when running as root. + +_4._9. _F_i_l_e _S_y_s_t_e_m _V_i_e_w_s + + Since Berkeley introduced symbolic links in 4.2 BSD, +one of their most annoying properties has been the "warping" +to a completely different area of the file system when using +_c_d, and the resultant non-intuitive behavior of "cd ..". +The UNIX kernel treats symbolic links _p_h_y_s_i_c_a_l_l_y. When the +kernel is translating a pathname in which one component is a +symbolic link, it replaces all or part of the pathname while +processing the link. If the contents of the symbolic link +begin with a slash, the kernel replaces the pathname +entirely; if not, the link contents replace the current com- +ponent. In either case, the symbolic link is visible. If +the link value is an absolute pathname, the user finds him- +self in a completely different part of the file system. + + Bash provides a _l_o_g_i_c_a_l view of the file system. In +this default mode, command and filename completion and buil- +tin commands such as _c_d and _p_u_s_h_d which change the current +working directory transparently follow symbolic links as if +they were directories. The $_P_W_D variable, which holds the +shell's idea of the current working directory, depends on +the path used to reach the directory rather than its + + + + October 28, 1994 + + + + + + - 12 - + + +physical location in the local file system hierarchy. For +example: +9 $ cd /usr/local/bin + $ echo $PWD + /usr/local/bin + $ pwd + /usr/local/bin + $ /bin/pwd + /net/share/sun4/local/bin + $ cd .. + $ pwd + /usr/local + $ /bin/pwd + /net/share/sun4/local + $ cd .. + $ pwd + /usr + $ /bin/pwd + /usr +9 +One problem with this, of course, arises when programs that +do not understand the shell's logical notion of the file +system interpret ".." differently. This generally happens +when Bash completes filenames containing ".." according to a +logical hierarchy which does not correspond to their physi- +cal location. For users who find this troublesome, a +corresponding _p_h_y_s_i_c_a_l view of the file system is available: +9 $ cd /usr/local/bin + $ pwd + /usr/local/bin + $ set -o physical + $ pwd + /net/share/sun4/local/bin +9 +_4._1_0. _I_n_t_e_r_n_a_t_i_o_n_a_l_i_z_a_t_i_o_n + + One of the most significant improvements in version +1.13 of Bash was the change to "eight-bit cleanliness". +Previous versions used the eighth bit of characters to mark +whether or not they were quoted when performing word expan- +sions. While this did not affect the majority of users, +most of whom used only seven-bit ASCII characters, some +found it confining. Beginning with version 1.13, Bash +implemented a different quoting mechanism that did not alter +the eighth bit of characters. This allowed Bash to manipu- +late files with "odd" characters in their names, but did +nothing to help users enter those names, so version 1.13 +introduced changes to readline that made it eight-bit clean +as well. Options exist that force readline to attach no +special significance to characters with the eighth bit set +(the default behavior is to convert these characters to +meta-prefixed key sequences) and to output these characters + + + + October 28, 1994 + + + + + + - 13 - + + +without conversion to meta-prefixed sequences. These +changes, along with the expansion of keymaps to a full eight +bits, enable readline to work with most of the ISO-8859 fam- +ily of character sets, used by many European countries. + +_4._1_1. _P_O_S_I_X _M_o_d_e + + Although Bash is intended to be POSIX.2 conformant, +there are areas in which the default behavior is not compa- +tible with the standard. For users who wish to operate in a +strict POSIX.2 environment, Bash implements a _P_O_S_I_X _m_o_d_e. +When this mode is active, Bash modifies its default opera- +tion where it differs from POSIX.2 to match the standard. +POSIX mode is entered when Bash is started with the -_p_o_s_i_x +option. This feature is also available as an option to the +set builtin, set -o posix. For compatibility with other GNU +software that attempts to be POSIX.2 compliant, Bash also +enters POSIX mode if the variable $_P_O_S_I_X_L_Y__C_O_R_R_E_C_T is set +when Bash is started or assigned a value during execution. +$_P_O_S_I_X__P_E_D_A_N_T_I_C is accepted as well, to be compatible with +some older GNU utilities. When Bash is started in POSIX +mode, for example, it sources the file named by the value of +$_E_N_V rather than the "normal" startup files, and does not +allow reserved words to be aliased. + +_5. _N_e_w _F_e_a_t_u_r_e_s _a_n_d _F_u_t_u_r_e _P_l_a_n_s + + There are several features introduced in the current +version of Bash, version 1.14, and a number under considera- +tion for future releases. This section will briefly detail +the new features in version 1.14 and describe several +features that may appear in later versions. + +_5._1. _N_e_w _F_e_a_t_u_r_e_s _i_n _B_a_s_h-_1._1_4 + + The new features available in Bash-1.14 answer several +of the most common requests for enhancements. Most notably, +there is a mechanism for including non-visible character +sequences in prompts, such as those which cause a terminal +to print characters in different colors or in standout mode. +There was nothing preventing the use of these sequences in +earlier versions, but the readline redisplay algorithm +assumed each character occupied physical screen space and +would wrap lines prematurely. + + Readline has a few new variables, several new bindable +commands, and some additional emacs mode default key bind- +ings. A new history search mode has been implemented: in +this mode, readline searches the history for lines beginning +with the characters between the beginning of the current +line and the cursor. The existing readline incremental +search commands no longer match identical lines more than +once. Filename completion now expands variables in direc- +tory names. The history expansion facilities are now nearly + + + + October 28, 1994 + + + + + + - 14 - + + +completely csh-compatible: missing modifiers have been added +and history substitution has been extended. + + Several of the features described earlier, such as _s_e_t +-_o _p_o_s_i_x and $_P_O_S_I_X__P_E_D_A_N_T_I_C, are new in version 1.14. +There is a new shell variable, _O_S_T_Y_P_E, to which Bash assigns +a value that identifies the version of UNIX it's running on +(great for putting architecture-specific binary directories +into the $PATH). Two variables have been renamed: $_H_I_S_T_C_O_N_- +_T_R_O_L replaces $_h_i_s_t_o_r_y__c_o_n_t_r_o_l, and $_H_O_S_T_F_I_L_E replaces +$_h_o_s_t_n_a_m_e__c_o_m_p_l_e_t_i_o_n__f_i_l_e. In both cases, the old names are +accepted for backwards compatibility. The ksh _s_e_l_e_c_t con- +struct, which allows the generation of simple menus, has +been implemented. New capabilities have been added to +existing variables: $_a_u_t_o__r_e_s_u_m_e can now take values of +_e_x_a_c_t or _s_u_b_s_t_r_i_n_g, and $_H_I_S_T_C_O_N_T_R_O_L understands the value +_i_g_n_o_r_e_b_o_t_h, which combines the two previously acceptable +values. The _d_i_r_s builtin has acquired options to print out +specific members of the directory stack. The $_n_o_l_i_n_k_s vari- +able, which forces a physical view of the file system, has +been superseded by the -_P option to the _s_e_t builtin +(equivalent to set -o physical); the variable is retained +for backwards compatibility. The version string contained +in $_B_A_S_H__V_E_R_S_I_O_N now includes an indication of the patch +level as well as the "build version". Some little-used +features have been removed: the _b_y_e synonym for _e_x_i_t and +the $_N_O__P_R_O_M_P_T__V_A_R_S variable are gone. There is now an +organized test suite that can be run as a regression test +when building a new version of Bash. + + The documentation has been thoroughly overhauled: there +is a new manual page on the readline library and the _i_n_f_o +file has been updated to reflect the current version. As +always, as many bugs as possible have been fixed, although +some surely remain. + +_5._2. _O_t_h_e_r _F_e_a_t_u_r_e_s + + There are a few features that I hope to include in +later Bash releases. Some are based on work already done in +other shells. + + In addition to simple variables, a future release of +Bash will include one-dimensional arrays, using the ksh +implementation of arrays as a model. Additions to the ksh +syntax, such as _v_a_r_n_a_m_e=( ... ) to assign a list of words +directly to an array and a mechanism to allow the _r_e_a_d buil- +tin to read a list of values directly into an array, would +be desirable. Given those extensions, the ksh _s_e_t -_A syntax +may not be worth supporting (the -_A option assigns a list of +values to an array, but is a rather peculiar special case). + + Some shells include a means of _p_r_o_g_r_a_m_m_a_b_l_e word com- +pletion, where the user specifies on a per-command basis how + + + + October 28, 1994 + + + + + + - 15 - + + +the arguments of the command are to be treated when comple- +tion is attempted: as filenames, hostnames, executable +files, and so on. The other aspects of the current Bash +implementation could remain as-is; the existing heuristics +would still be valid. Only when completing the arguments to +a simple command would the programmable completion be in +effect. + + It would also be nice to give the user finer-grained +control over which commands are saved onto the history list. +One proposal is for a variable, tentatively named _H_I_S_T_I_G_- +_N_O_R_E, which would contain a colon-separated list of com- +mands. Lines beginning with these commands, after the res- +trictions of $_H_I_S_T_C_O_N_T_R_O_L have been applied, would not be +placed onto the history list. The shell pattern-matching +capabilities could also be available when specifying the +contents of $_H_I_S_T_I_G_N_O_R_E. + + One thing that newer shells such as _w_k_s_h (also known as +_d_t_k_s_h) provide is a command to dynamically load code imple- +menting additional builtin commands into a running shell. +This new builtin would take an object file or shared library +implementing the "body" of the builtin (_x_x_x__b_u_i_l_t_i_n() for +those familiar with Bash internals) and a structure contain- +ing the name of the new command, the function to call when +the new builtin is invoked (presumably defined in the shared +object specified as an argument), and the documentation to +be printed by the _h_e_l_p command (possibly present in the +shared object as well). It would manage the details of +extending the internal table of builtins. + + A few other builtins would also be desirable: two are +the POSIX.2 _g_e_t_c_o_n_f command, which prints the values of sys- +tem configuration variables defined by POSIX.2, and a _d_i_s_o_w_n +builtin, which causes a shell running with job control +active to "forget about" one or more background jobs in its +internal jobs table. Using _g_e_t_c_o_n_f, for example, a user +could retrieve a value for $_P_A_T_H guaranteed to find all of +the POSIX standard utilities, or find out how long filenames +may be in the file system containing a specified directory. + + There are no implementation timetables for any of these +features, nor are there concrete plans to include them. If +anyone has comments on these proposals, feel free to send me +electronic mail. + +_6. _R_e_f_l_e_c_t_i_o_n_s _a_n_d _L_e_s_s_o_n_s _L_e_a_r_n_e_d + + The lesson that has been repeated most often during +Bash development is that there are dark corners in the +Bourne shell, and people use all of them. In the original +description of the Bourne shell, quoting and the shell gram- +mar are both poorly specified and incomplete; subsequent +descriptions have not helped much. The grammar presented in + + + + October 28, 1994 + + + + + + - 16 - + + +Bourne's paper describing the shell distributed with the +Seventh Edition of UNIX|- is so far off that it does not +allow the command who|wc. In fact, as Tom Duff states: + + Nobody really knows what the Bourne shell's gram- + mar is. Even examination of the source code is + little help.|= + +The POSIX.2 standard includes a _y_a_c_c grammar that comes +close to capturing the Bourne shell's behavior, but it +disallows some constructs which sh accepts without complaint +- and there are scripts out there that use them. It took a +few versions and several bug reports before Bash implemented +sh-compatible quoting, and there are still some "legal" sh +constructs which Bash flags as syntax errors. Complete sh +compatibility is a tough nut. + + The shell is bigger and slower than I would like, +though the current version is substantially faster than pre- +viously. The readline library could stand a substantial +rewrite. A hand-written parser to replace the current +_y_a_c_c-generated one would probably result in a speedup, and +would solve one glaring problem: the shell could parse com- +mands in "$(...)" constructs as they are entered, rather +than reporting errors when the construct is expanded. + + As always, there is some chaff to go with the wheat. +Areas of duplicated functionality need to be cleaned up. +There are several cases where Bash treats a variable spe- +cially to enable functionality available another way +($notify vs. set -o notify and $nolinks vs. set -o physi- +cal, for instance); the special treatment of the variable +name should probably be removed. A few more things could +stand removal; the $_a_l_l_o_w__n_u_l_l__g_l_o_b__e_x_p_a_n_s_i_o_n and +$_g_l_o_b__d_o_t__f_i_l_e_n_a_m_e_s variables are of particularly question- +able value. The $[...] arithmetic evaluation syntax is +redundant now that the POSIX-mandated $((...)) construct has +been implemented, and could be deleted. It would be nice if +the text output by the _h_e_l_p builtin were external to the +shell rather than compiled into it. The behavior enabled by +$_c_o_m_m_a_n_d__o_r_i_e_n_t_e_d__h_i_s_t_o_r_y, which causes the shell to attempt +to save all lines of a multi-line command in a single his- +tory entry, should be made the default and the variable +removed. + + +_________________________ +|-S. R. Bourne, "UNIX Time-Sharing System: The UNIX +Shell", _B_e_l_l _S_y_s_t_e_m _T_e_c_h_n_i_c_a_l _J_o_u_r_n_a_l, 57(6), July- +August, 1978, pp. 1971-1990. +|=Tom Duff, "Rc - A Shell for Plan 9 and UNIX systems", +_P_r_o_c. _o_f _t_h_e _S_u_m_m_e_r _1_9_9_0 _E_U_U_G _C_o_n_f_e_r_e_n_c_e, London, July, +1990, pp. 21-33. + + + + + October 28, 1994 + + + + + + - 17 - + + +_7. _A_v_a_i_l_a_b_i_l_i_t_y + + As with all other GNU software, Bash is available for +anonymous FTP from _p_r_e_p._a_i._m_i_t._e_d_u:/_p_u_b/_g_n_u and from other +GNU software mirror sites. The current version is in _b_a_s_h- +_1._1_4._1._t_a_r._g_z in that directory. Use _a_r_c_h_i_e to find the +nearest archive site. The latest version is always avail- +able for FTP from _b_a_s_h._C_W_R_U._E_d_u:/_p_u_b/_d_i_s_t. Bash documenta- +tion is available for FTP from _b_a_s_h._C_W_R_U._E_d_u:/_p_u_b/_b_a_s_h. + + The Free Software Foundation sells tapes and CD-ROMs +containing Bash; send electronic mail to gnu@prep.ai.mit.edu +or call +1-617-876-3296 for more information. + + Bash is also distributed with several versions of +UNIX-compatible systems. It is included as /bin/sh and +/bin/bash on several Linux distributions (more about the +difference in a moment), and as contributed software in +BSDI's BSD/386* and FreeBSD. + + The Linux distribution deserves special mention. There +are two configurations included in the standard Bash distri- +bution: a "normal" configuration, in which all of the stan- +dard features are included, and a "minimal" configuration, +which omits job control, aliases, history and command line +editing, the directory stack and _p_u_s_h_d/_p_o_p_d/_d_i_r_s, process +substitution, prompt string special character decoding, and +the _s_e_l_e_c_t construct. This minimal version is designed to +be a drop-in replacement for the traditional UNIX /bin/sh, +and is included as the Linux /bin/sh in several packagings. + +_8. _C_o_n_c_l_u_s_i_o_n + + Bash is a worthy successor to sh. It is sufficiently +portable to run on nearly every version of UNIX from 4.3 BSD +to SVR4.2, and several UNIX workalikes. It is robust enough +to replace sh on most of those systems, and provides more +functionality. It has several thousand regular users, and +their feedback has helped to make it as good as it is today +- a testament to the benefits of free software. + + + + + + + + + + +_________________________ +*BSD/386 is a trademark of Berkeley Software Design, +Inc. + + + + + October 28, 1994 + + diff --git a/doc/bash.0 b/doc/bash.0 new file mode 100644 index 0000000..675cd2f --- /dev/null +++ b/doc/bash.0 @@ -0,0 +1,5358 @@ +BASH(1) BASH(1) + + + +NNAAMMEE + bash - GNU Bourne-Again SHell + +SSYYNNOOPPSSIISS + bbaasshh [options] [file] + +CCOOPPYYRRIIGGHHTT + Bash is Copyright (C) 1989-2009 by the Free Software Foundation, Inc. + +DDEESSCCRRIIPPTTIIOONN + BBaasshh is an sshh-compatible command language interpreter that executes + commands read from the standard input or from a file. BBaasshh also incor- + porates useful features from the _K_o_r_n and _C shells (kksshh and ccsshh). + + BBaasshh is intended to be a conformant implementation of the Shell and + Utilities portion of the IEEE POSIX specification (IEEE Standard + 1003.1). BBaasshh can be configured to be POSIX-conformant by default. + +OOPPTTIIOONNSS + In addition to the single-character shell options documented in the + description of the sseett builtin command, bbaasshh interprets the following + options when it is invoked: + + --cc _s_t_r_i_n_g If the --cc option is present, then commands are read from + _s_t_r_i_n_g. If there are arguments after the _s_t_r_i_n_g, they are + assigned to the positional parameters, starting with $$00. + --ii If the --ii option is present, the shell is _i_n_t_e_r_a_c_t_i_v_e. + --ll Make bbaasshh act as if it had been invoked as a login shell (see + IINNVVOOCCAATTIIOONN below). + --rr If the --rr option is present, the shell becomes _r_e_s_t_r_i_c_t_e_d + (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). + --ss If the --ss option is present, or if no arguments remain after + option processing, then commands are read from the standard + input. This option allows the positional parameters to be + set when invoking an interactive shell. + --DD A list of all double-quoted strings preceded by $$ is printed + on the standard output. These are the strings that are sub- + ject to language translation when the current locale is not CC + or PPOOSSIIXX. This implies the --nn option; no commands will be + executed. + [[--++]]OO [[_s_h_o_p_t___o_p_t_i_o_n]] + _s_h_o_p_t___o_p_t_i_o_n is one of the shell options accepted by the + sshhoopptt builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). If + _s_h_o_p_t___o_p_t_i_o_n is present, --OO sets the value of that option; ++OO + unsets it. If _s_h_o_p_t___o_p_t_i_o_n is not supplied, the names and + values of the shell options accepted by sshhoopptt are printed on + the standard output. If the invocation option is ++OO, the + output is displayed in a format that may be reused as input. + ---- A ---- signals the end of options and disables further option + processing. Any arguments after the ---- are treated as file- + names and arguments. An argument of -- is equivalent to ----. + + BBaasshh also interprets a number of multi-character options. These + options must appear on the command line before the single-character + options to be recognized. + + ----ddeebbuuggggeerr + Arrange for the debugger profile to be executed before the shell + starts. Turns on extended debugging mode (see the description + of the eexxttddeebbuugg option to the sshhoopptt builtin below) and shell + function tracing (see the description of the --oo ffuunnccttrraaccee option + to the sseett builtin below). + ----dduummpp--ppoo--ssttrriinnggss + Equivalent to --DD, but the output is in the GNU _g_e_t_t_e_x_t ppoo (por- + table object) file format. + ----dduummpp--ssttrriinnggss + Equivalent to --DD. + ----hheellpp Display a usage message on standard output and exit success- + fully. + ----iinniitt--ffiillee _f_i_l_e + ----rrccffiillee _f_i_l_e + Execute commands from _f_i_l_e instead of the standard personal ini- + tialization file _~_/_._b_a_s_h_r_c if the shell is interactive (see + IINNVVOOCCAATTIIOONN below). + + ----llooggiinn + Equivalent to --ll. + + ----nnooeeddiittiinngg + Do not use the GNU rreeaaddlliinnee library to read command lines when + the shell is interactive. + + ----nnoopprrooffiillee + Do not read either the system-wide startup file _/_e_t_c_/_p_r_o_f_i_l_e or + any of the personal initialization files _~_/_._b_a_s_h___p_r_o_f_i_l_e, + _~_/_._b_a_s_h___l_o_g_i_n, or _~_/_._p_r_o_f_i_l_e. By default, bbaasshh reads these + files when it is invoked as a login shell (see IINNVVOOCCAATTIIOONN + below). + + ----nnoorrcc Do not read and execute the personal initialization file + _~_/_._b_a_s_h_r_c if the shell is interactive. This option is on by + default if the shell is invoked as sshh. + + ----ppoossiixx + Change the behavior of bbaasshh where the default operation differs + from the POSIX standard to match the standard (_p_o_s_i_x _m_o_d_e). + + ----rreessttrriicctteedd + The shell becomes restricted (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). + + ----vveerrbboossee + Equivalent to --vv. + + ----vveerrssiioonn + Show version information for this instance of bbaasshh on the stan- + dard output and exit successfully. + +AARRGGUUMMEENNTTSS + If arguments remain after option processing, and neither the --cc nor the + --ss option has been supplied, the first argument is assumed to be the + name of a file containing shell commands. If bbaasshh is invoked in this + fashion, $$00 is set to the name of the file, and the positional parame- + ters are set to the remaining arguments. BBaasshh reads and executes com- + mands from this file, then exits. BBaasshh's exit status is the exit sta- + tus of the last command executed in the script. If no commands are + executed, the exit status is 0. An attempt is first made to open the + file in the current directory, and, if no file is found, then the shell + searches the directories in PPAATTHH for the script. + +IINNVVOOCCAATTIIOONN + A _l_o_g_i_n _s_h_e_l_l is one whose first character of argument zero is a --, or + one started with the ----llooggiinn option. + + An _i_n_t_e_r_a_c_t_i_v_e shell is one started without non-option arguments and + without the --cc option whose standard input and error are both connected + to terminals (as determined by _i_s_a_t_t_y(3)), or one started with the --ii + option. PPSS11 is set and $$-- includes ii if bbaasshh is interactive, allowing + a shell script or a startup file to test this state. + + The following paragraphs describe how bbaasshh executes its startup files. + If any of the files exist but cannot be read, bbaasshh reports an error. + Tildes are expanded in file names as described below under TTiillddee EExxppaann-- + ssiioonn in the EEXXPPAANNSSIIOONN section. + + When bbaasshh is invoked as an interactive login shell, or as a non-inter- + active shell with the ----llooggiinn option, it first reads and executes com- + mands from the file _/_e_t_c_/_p_r_o_f_i_l_e, if that file exists. After reading + that file, it looks for _~_/_._b_a_s_h___p_r_o_f_i_l_e, _~_/_._b_a_s_h___l_o_g_i_n, and _~_/_._p_r_o_f_i_l_e, + in that order, and reads and executes commands from the first one that + exists and is readable. The ----nnoopprrooffiillee option may be used when the + shell is started to inhibit this behavior. + + When a login shell exits, bbaasshh reads and executes commands from the + file _~_/_._b_a_s_h___l_o_g_o_u_t, if it exists. + + When an interactive shell that is not a login shell is started, bbaasshh + reads and executes commands from _~_/_._b_a_s_h_r_c, if that file exists. This + may be inhibited by using the ----nnoorrcc option. The ----rrccffiillee _f_i_l_e option + will force bbaasshh to read and execute commands from _f_i_l_e instead of + _~_/_._b_a_s_h_r_c. + + When bbaasshh is started non-interactively, to run a shell script, for + example, it looks for the variable BBAASSHH__EENNVV in the environment, expands + its value if it appears there, and uses the expanded value as the name + of a file to read and execute. BBaasshh behaves as if the following com- + mand were executed: + if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi + but the value of the PPAATTHH variable is not used to search for the file + name. + + If bbaasshh is invoked with the name sshh, it tries to mimic the startup + behavior of historical versions of sshh as closely as possible, while + conforming to the POSIX standard as well. When invoked as an interac- + tive login shell, or a non-interactive shell with the ----llooggiinn option, + it first attempts to read and execute commands from _/_e_t_c_/_p_r_o_f_i_l_e and + _~_/_._p_r_o_f_i_l_e, in that order. The ----nnoopprrooffiillee option may be used to + inhibit this behavior. When invoked as an interactive shell with the + name sshh, bbaasshh looks for the variable EENNVV, expands its value if it is + defined, and uses the expanded value as the name of a file to read and + execute. Since a shell invoked as sshh does not attempt to read and exe- + cute commands from any other startup files, the ----rrccffiillee option has no + effect. A non-interactive shell invoked with the name sshh does not + attempt to read any other startup files. When invoked as sshh, bbaasshh + enters _p_o_s_i_x mode after the startup files are read. + + When bbaasshh is started in _p_o_s_i_x mode, as with the ----ppoossiixx command line + option, it follows the POSIX standard for startup files. In this mode, + interactive shells expand the EENNVV variable and commands are read and + executed from the file whose name is the expanded value. No other + startup files are read. + + BBaasshh attempts to determine when it is being run with its standard input + connected to a a network connection, as if by the remote shell daemon, + usually _r_s_h_d, or the secure shell daemon _s_s_h_d. If bbaasshh determines it + is being run in this fashion, it reads and executes commands from + _~_/_._b_a_s_h_r_c, if that file exists and is readable. It will not do this if + invoked as sshh. The ----nnoorrcc option may be used to inhibit this behavior, + and the ----rrccffiillee option may be used to force another file to be read, + but _r_s_h_d does not generally invoke the shell with those options or + allow them to be specified. + + If the shell is started with the effective user (group) id not equal to + the real user (group) id, and the --pp option is not supplied, no startup + files are read, shell functions are not inherited from the environment, + the SSHHEELLLLOOPPTTSS, BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they + appear in the environment, are ignored, and the effective user id is + set to the real user id. If the --pp option is supplied at invocation, + the startup behavior is the same, but the effective user id is not + reset. + +DDEEFFIINNIITTIIOONNSS + The following definitions are used throughout the rest of this docu- + ment. + bbllaannkk A space or tab. + wwoorrdd A sequence of characters considered as a single unit by the + shell. Also known as a ttookkeenn. + nnaammee A _w_o_r_d consisting only of alphanumeric characters and under- + scores, and beginning with an alphabetic character or an under- + score. Also referred to as an iiddeennttiiffiieerr. + mmeettaacchhaarraacctteerr + A character that, when unquoted, separates words. One of the + following: + || && ;; (( )) << >> ssppaaccee ttaabb + ccoonnttrrooll ooppeerraattoorr + A _t_o_k_e_n that performs a control function. It is one of the fol- + lowing symbols: + |||| && &&&& ;; ;;;; (( )) || ||&& <> + +RREESSEERRVVEEDD WWOORRDDSS + _R_e_s_e_r_v_e_d _w_o_r_d_s are words that have a special meaning to the shell. The + following words are recognized as reserved when unquoted and either the + first word of a simple command (see SSHHEELLLL GGRRAAMMMMAARR below) or the third + word of a ccaassee or ffoorr command: + + !! ccaassee ddoo ddoonnee eelliiff eellssee eessaacc ffii ffoorr ffuunnccttiioonn iiff iinn sseelleecctt tthheenn uunnttiill + wwhhiillee {{ }} ttiimmee [[[[ ]]]] + +SSHHEELLLL GGRRAAMMMMAARR + SSiimmppllee CCoommmmaannddss + A _s_i_m_p_l_e _c_o_m_m_a_n_d is a sequence of optional variable assignments fol- + lowed by bbllaannkk-separated words and redirections, and terminated by a + _c_o_n_t_r_o_l _o_p_e_r_a_t_o_r. The first word specifies the command to be executed, + and is passed as argument zero. The remaining words are passed as + arguments to the invoked command. + + The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if + the command is terminated by signal _n. + + PPiippeelliinneess + A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of + the control operators || or ||&&. The format for a pipeline is: + + [ttiimmee [--pp]] [ ! ] _c_o_m_m_a_n_d [ [|||||&&] _c_o_m_m_a_n_d_2 ... ] + + The standard output of _c_o_m_m_a_n_d is connected via a pipe to the standard + input of _c_o_m_m_a_n_d_2. This connection is performed before any redirec- + tions specified by the command (see RREEDDIIRREECCTTIIOONN below). If ||&& is used, + the standard error of _c_o_m_m_a_n_d is connected to _c_o_m_m_a_n_d_2's standard input + through the pipe; it is shorthand for 22>>&&11 ||. This implicit redirect- + ion of the standard error is performed after any redirections specified + by the command. + + The return status of a pipeline is the exit status of the last command, + unless the ppiippeeffaaiill option is enabled. If ppiippeeffaaiill is enabled, the + pipeline's return status is the value of the last (rightmost) command + to exit with a non-zero status, or zero if all commands exit success- + fully. If the reserved word !! precedes a pipeline, the exit status of + that pipeline is the logical negation of the exit status as described + above. The shell waits for all commands in the pipeline to terminate + before returning a value. + + If the ttiimmee reserved word precedes a pipeline, the elapsed as well as + user and system time consumed by its execution are reported when the + pipeline terminates. The --pp option changes the output format to that + specified by POSIX. The TTIIMMEEFFOORRMMAATT variable may be set to a format + string that specifies how the timing information should be displayed; + see the description of TTIIMMEEFFOORRMMAATT under SShheellll VVaarriiaabblleess below. + + Each command in a pipeline is executed as a separate process (i.e., in + a subshell). + + LLiissttss + A _l_i_s_t is a sequence of one or more pipelines separated by one of the + operators ;;, &&, &&&&, or ||||, and optionally terminated by one of ;;, &&, or + <>. + + Of these list operators, &&&& and |||| have equal precedence, followed by ;; + and &&, which have equal precedence. + + A sequence of one or more newlines may appear in a _l_i_s_t instead of a + semicolon to delimit commands. + + If a command is terminated by the control operator &&, the shell exe- + cutes the command in the _b_a_c_k_g_r_o_u_n_d in a subshell. The shell does not + wait for the command to finish, and the return status is 0. Commands + separated by a ;; are executed sequentially; the shell waits for each + command to terminate in turn. The return status is the exit status of + the last command executed. + + AND and OR lists are sequences of one of more pipelines separated by + the &&&& and |||| control operators, respectively. AND and OR lists are + executed with left associativity. An AND list has the form + + _c_o_m_m_a_n_d_1 &&&& _c_o_m_m_a_n_d_2 + + _c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns an exit status + of zero. + + An OR list has the form + + _c_o_m_m_a_n_d_1 |||| _c_o_m_m_a_n_d_2 + + + _c_o_m_m_a_n_d_2 is executed if and only if _c_o_m_m_a_n_d_1 returns a non-zero exit + status. The return status of AND and OR lists is the exit status of + the last command executed in the list. + + CCoommppoouunndd CCoommmmaannddss + A _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d is one of the following: + + (_l_i_s_t) _l_i_s_t is executed in a subshell environment (see CCOOMMMMAANNDD EEXXEECCUU-- + TTIIOONN EENNVVIIRROONNMMEENNTT below). Variable assignments and builtin com- + mands that affect the shell's environment do not remain in + effect after the command completes. The return status is the + exit status of _l_i_s_t. + + { _l_i_s_t; } + _l_i_s_t is simply executed in the current shell environment. _l_i_s_t + must be terminated with a newline or semicolon. This is known + as a _g_r_o_u_p _c_o_m_m_a_n_d. The return status is the exit status of + _l_i_s_t. Note that unlike the metacharacters (( and )), {{ and }} are + _r_e_s_e_r_v_e_d _w_o_r_d_s and must occur where a reserved word is permitted + to be recognized. Since they do not cause a word break, they + must be separated from _l_i_s_t by whitespace or another shell + metacharacter. + + ((_e_x_p_r_e_s_s_i_o_n)) + The _e_x_p_r_e_s_s_i_o_n is evaluated according to the rules described + below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If the value of the expres- + sion is non-zero, the return status is 0; otherwise the return + status is 1. This is exactly equivalent to lleett ""_e_x_p_r_e_s_s_i_o_n"". + + [[[[ _e_x_p_r_e_s_s_i_o_n ]]]] + Return a status of 0 or 1 depending on the evaluation of the + conditional expression _e_x_p_r_e_s_s_i_o_n. Expressions are composed of + the primaries described below under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS. + Word splitting and pathname expansion are not performed on the + words between the [[[[ and ]]]]; tilde expansion, parameter and + variable expansion, arithmetic expansion, command substitution, + process substitution, and quote removal are performed. Condi- + tional operators such as --ff must be unquoted to be recognized as + primaries. + + When used with [[[[, The << and >> operators sort lexicographically + using the current locale. + + When the ==== and !!== operators are used, the string to the right + of the operator is considered a pattern and matched according to + the rules described below under PPaatttteerrnn MMaattcchhiinngg. If the shell + option nnooccaasseemmaattcchh is enabled, the match is performed without + regard to the case of alphabetic characters. The return value + is 0 if the string matches (====) or does not match (!!==) the pat- + tern, and 1 otherwise. Any part of the pattern may be quoted to + force it to be matched as a string. + + An additional binary operator, ==~~, is available, with the same + precedence as ==== and !!==. When it is used, the string to the + right of the operator is considered an extended regular expres- + sion and matched accordingly (as in _r_e_g_e_x(3)). The return value + is 0 if the string matches the pattern, and 1 otherwise. If the + regular expression is syntactically incorrect, the conditional + expression's return value is 2. If the shell option nnooccaasseemmaattcchh + is enabled, the match is performed without regard to the case of + alphabetic characters. Any part of the pattern may be quoted to + force it to be matched as a string. Substrings matched by + parenthesized subexpressions within the regular expression are + saved in the array variable BBAASSHH__RREEMMAATTCCHH. The element of + BBAASSHH__RREEMMAATTCCHH with index 0 is the portion of the string matching + the entire regular expression. The element of BBAASSHH__RREEMMAATTCCHH with + index _n is the portion of the string matching the _nth parenthe- + sized subexpression. + + Expressions may be combined using the following operators, + listed in decreasing order of precedence: + + (( _e_x_p_r_e_s_s_i_o_n )) + Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to + override the normal precedence of operators. + !! _e_x_p_r_e_s_s_i_o_n + True if _e_x_p_r_e_s_s_i_o_n is false. + _e_x_p_r_e_s_s_i_o_n_1 &&&& _e_x_p_r_e_s_s_i_o_n_2 + True if both _e_x_p_r_e_s_s_i_o_n_1 and _e_x_p_r_e_s_s_i_o_n_2 are true. + _e_x_p_r_e_s_s_i_o_n_1 |||| _e_x_p_r_e_s_s_i_o_n_2 + True if either _e_x_p_r_e_s_s_i_o_n_1 or _e_x_p_r_e_s_s_i_o_n_2 is true. + + The &&&& and |||| operators do not evaluate _e_x_p_r_e_s_s_i_o_n_2 if the value + of _e_x_p_r_e_s_s_i_o_n_1 is sufficient to determine the return value of + the entire conditional expression. + + ffoorr _n_a_m_e [ [ iinn [ _w_o_r_d _._._. ] ] ; ] ddoo _l_i_s_t ; ddoonnee + The list of words following iinn is expanded, generating a list of + items. The variable _n_a_m_e is set to each element of this list in + turn, and _l_i_s_t is executed each time. If the iinn _w_o_r_d is omit- + ted, the ffoorr command executes _l_i_s_t once for each positional + parameter that is set (see PPAARRAAMMEETTEERRSS below). The return status + is the exit status of the last command that executes. If the + expansion of the items following iinn results in an empty list, no + commands are executed, and the return status is 0. + + ffoorr (( _e_x_p_r_1 ; _e_x_p_r_2 ; _e_x_p_r_3 )) ; ddoo _l_i_s_t ; ddoonnee + First, the arithmetic expression _e_x_p_r_1 is evaluated according to + the rules described below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. The + arithmetic expression _e_x_p_r_2 is then evaluated repeatedly until + it evaluates to zero. Each time _e_x_p_r_2 evaluates to a non-zero + value, _l_i_s_t is executed and the arithmetic expression _e_x_p_r_3 is + evaluated. If any expression is omitted, it behaves as if it + evaluates to 1. The return value is the exit status of the last + command in _l_i_s_t that is executed, or false if any of the expres- + sions is invalid. + + sseelleecctt _n_a_m_e [ iinn _w_o_r_d ] ; ddoo _l_i_s_t ; ddoonnee + The list of words following iinn is expanded, generating a list of + items. The set of expanded words is printed on the standard + error, each preceded by a number. If the iinn _w_o_r_d is omitted, + the positional parameters are printed (see PPAARRAAMMEETTEERRSS below). + The PPSS33 prompt is then displayed and a line read from the stan- + dard input. If the line consists of a number corresponding to + one of the displayed words, then the value of _n_a_m_e is set to + that word. If the line is empty, the words and prompt are dis- + played again. If EOF is read, the command completes. Any other + value read causes _n_a_m_e to be set to null. The line read is + saved in the variable RREEPPLLYY. The _l_i_s_t is executed after each + selection until a bbrreeaakk command is executed. The exit status of + sseelleecctt is the exit status of the last command executed in _l_i_s_t, + or zero if no commands were executed. + + ccaassee _w_o_r_d iinn [ [(] _p_a_t_t_e_r_n [ || _p_a_t_t_e_r_n ] ... ) _l_i_s_t ;; ] ... eessaacc + A ccaassee command first expands _w_o_r_d, and tries to match it against + each _p_a_t_t_e_r_n in turn, using the same matching rules as for path- + name expansion (see PPaatthhnnaammee EExxppaannssiioonn below). The _w_o_r_d is + expanded using tilde expansion, parameter and variable expan- + sion, arithmetic substitution, command substitution, process + substitution and quote removal. Each _p_a_t_t_e_r_n examined is + expanded using tilde expansion, parameter and variable expan- + sion, arithmetic substitution, command substitution, and process + substitution. If the shell option nnooccaasseemmaattcchh is enabled, the + match is performed without regard to the case of alphabetic + characters. When a match is found, the corresponding _l_i_s_t is + executed. If the ;;;; operator is used, no subsequent matches are + attempted after the first pattern match. Using ;;&& in place of + ;;;; causes execution to continue with the _l_i_s_t associated with + the next set of patterns. Using ;;;;&& in place of ;;;; causes the + shell to test the next pattern list in the statement, if any, + and execute any associated _l_i_s_t on a successful match. The exit + status is zero if no pattern matches. Otherwise, it is the exit + status of the last command executed in _l_i_s_t. + + iiff _l_i_s_t; tthheenn _l_i_s_t_; [ eelliiff _l_i_s_t; tthheenn _l_i_s_t; ] ... [ eellssee _l_i_s_t; ] ffii + The iiff _l_i_s_t is executed. If its exit status is zero, the tthheenn + _l_i_s_t is executed. Otherwise, each eelliiff _l_i_s_t is executed in + turn, and if its exit status is zero, the corresponding tthheenn + _l_i_s_t is executed and the command completes. Otherwise, the eellssee + _l_i_s_t is executed, if present. The exit status is the exit sta- + tus of the last command executed, or zero if no condition tested + true. + + wwhhiillee _l_i_s_t; ddoo _l_i_s_t; ddoonnee + uunnttiill _l_i_s_t; ddoo _l_i_s_t; ddoonnee + The wwhhiillee command continuously executes the ddoo _l_i_s_t as long as + the last command in _l_i_s_t returns an exit status of zero. The + uunnttiill command is identical to the wwhhiillee command, except that the + test is negated; the ddoo _l_i_s_t is executed as long as the last + command in _l_i_s_t returns a non-zero exit status. The exit status + of the wwhhiillee and uunnttiill commands is the exit status of the last + ddoo _l_i_s_t command executed, or zero if none was executed. + + CCoopprroocceesssseess + A _c_o_p_r_o_c_e_s_s is a shell command preceded by the ccoopprroocc reserved word. A + coprocess is executed asynchronously in a subshell, as if the command + had been terminated with the && control operator, with a two-way pipe + established between the executing shell and the coprocess. + + The format for a coprocess is: + + ccoopprroocc [_N_A_M_E] _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s] + + This creates a coprocess named _N_A_M_E. If _N_A_M_E is not supplied, the + default name is _C_O_P_R_O_C. _N_A_M_E must not be supplied if _c_o_m_m_a_n_d is a _s_i_m_- + _p_l_e _c_o_m_m_a_n_d (see above); otherwise, it is interpreted as the first word + of the simple command. When the coproc is executed, the shell creates + an array variable (see AArrrraayyss below) named _N_A_M_E in the context of the + executing shell. The standard output of _c_o_m_m_a_n_d is connected via a + pipe to a file descriptor in the executing shell, and that file + descriptor is assigned to _N_A_M_E[0]. The standard input of _c_o_m_m_a_n_d is + connected via a pipe to a file descriptor in the executing shell, and + that file descriptor is assigned to _N_A_M_E[1]. This pipe is established + before any redirections specified by the command (see RREEDDIIRREECCTTIIOONN + below). The file descriptors can be utilized as arguments to shell + commands and redirections using standard word expansions. The process + id of the shell spawned to execute the coprocess is available as the + value of the variable _N_A_M_E_PID. The wwaaiitt builtin command may be used + to wait for the coprocess to terminate. + + The return status of a coprocess is the exit status of _c_o_m_m_a_n_d. + + SShheellll FFuunnccttiioonn DDeeffiinniittiioonnss + A shell function is an object that is called like a simple command and + executes a compound command with a new set of positional parameters. + Shell functions are declared as follows: + + [ ffuunnccttiioonn ] _n_a_m_e () _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n] + This defines a function named _n_a_m_e. The reserved word ffuunnccttiioonn + is optional. If the ffuunnccttiioonn reserved word is supplied, the + parentheses are optional. The _b_o_d_y of the function is the com- + pound command _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d (see CCoommppoouunndd CCoommmmaannddss above). + That command is usually a _l_i_s_t of commands between { and }, but + may be any command listed under CCoommppoouunndd CCoommmmaannddss above. _c_o_m_- + _p_o_u_n_d_-_c_o_m_m_a_n_d is executed whenever _n_a_m_e is specified as the name + of a simple command. Any redirections (see RREEDDIIRREECCTTIIOONN below) + specified when a function is defined are performed when the + function is executed. The exit status of a function definition + is zero unless a syntax error occurs or a readonly function with + the same name already exists. When executed, the exit status of + a function is the exit status of the last command executed in + the body. (See FFUUNNCCTTIIOONNSS below.) + +CCOOMMMMEENNTTSS + In a non-interactive shell, or an interactive shell in which the iinntteerr-- + aaccttiivvee__ccoommmmeennttss option to the sshhoopptt builtin is enabled (see SSHHEELLLL + BBUUIILLTTIINN CCOOMMMMAANNDDSS below), a word beginning with ## causes that word and + all remaining characters on that line to be ignored. An interactive + shell without the iinntteerraaccttiivvee__ccoommmmeennttss option enabled does not allow + comments. The iinntteerraaccttiivvee__ccoommmmeennttss option is on by default in interac- + tive shells. + +QQUUOOTTIINNGG + _Q_u_o_t_i_n_g is used to remove the special meaning of certain characters or + words to the shell. Quoting can be used to disable special treatment + for special characters, to prevent reserved words from being recognized + as such, and to prevent parameter expansion. + + Each of the _m_e_t_a_c_h_a_r_a_c_t_e_r_s listed above under DDEEFFIINNIITTIIOONNSS has special + meaning to the shell and must be quoted if it is to represent itself. + + When the command history expansion facilities are being used (see HHIISS-- + TTOORRYY EEXXPPAANNSSIIOONN below), the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character, usually !!, must + be quoted to prevent history expansion. + + There are three quoting mechanisms: the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r, single + quotes, and double quotes. + + A non-quoted backslash (\\) is the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r. It preserves the + literal value of the next character that follows, with the exception of + . If a \\ pair appears, and the backslash is not + itself quoted, the \\ is treated as a line continuation (that + is, it is removed from the input stream and effectively ignored). + + Enclosing characters in single quotes preserves the literal value of + each character within the quotes. A single quote may not occur between + single quotes, even when preceded by a backslash. + + Enclosing characters in double quotes preserves the literal value of + all characters within the quotes, with the exception of $$, ``, \\, and, + when history expansion is enabled, !!. The characters $$ and `` retain + their special meaning within double quotes. The backslash retains its + special meaning only when followed by one of the following characters: + $$, ``, "", \\, or <>. A double quote may be quoted within double + quotes by preceding it with a backslash. If enabled, history expansion + will be performed unless an !! appearing in double quotes is escaped + using a backslash. The backslash preceding the !! is not removed. + + The special parameters ** and @@ have special meaning when in double + quotes (see PPAARRAAMMEETTEERRSS below). + + Words of the form $$'_s_t_r_i_n_g' are treated specially. The word expands to + _s_t_r_i_n_g, with backslash-escaped characters replaced as specified by the + ANSI C standard. Backslash escape sequences, if present, are decoded + as follows: + \\aa alert (bell) + \\bb backspace + \\ee + \\EE an escape character + \\ff form feed + \\nn new line + \\rr carriage return + \\tt horizontal tab + \\vv vertical tab + \\\\ backslash + \\'' single quote + \\"" double quote + \\_n_n_n the eight-bit character whose value is the octal value + _n_n_n (one to three digits) + \\xx_H_H the eight-bit character whose value is the hexadecimal + value _H_H (one or two hex digits) + \\cc_x a control-_x character + + The expanded result is single-quoted, as if the dollar sign had not + been present. + + A double-quoted string preceded by a dollar sign ($$"_s_t_r_i_n_g") will cause + the string to be translated according to the current locale. If the + current locale is CC or PPOOSSIIXX, the dollar sign is ignored. If the + string is translated and replaced, the replacement is double-quoted. + +PPAARRAAMMEETTEERRSS + A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num- + ber, or one of the special characters listed below under SSppeecciiaall PPaarraamm-- + eetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a + _v_a_l_u_e and zero or more _a_t_t_r_i_b_u_t_e_s. Attributes are assigned using the + ddeeccllaarree builtin command (see ddeeccllaarree below in SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS). + + A parameter is set if it has been assigned a value. The null string is + a valid value. Once a variable is set, it may be unset only by using + the uunnsseett builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). + + A _v_a_r_i_a_b_l_e may be assigned to by a statement of the form + + _n_a_m_e=[_v_a_l_u_e] + + If _v_a_l_u_e is not given, the variable is assigned the null string. All + _v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com- + mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN-- + SSIIOONN below). If the variable has its iinntteeggeerr attribute set, then _v_a_l_u_e + is evaluated as an arithmetic expression even if the $((...)) expansion + is not used (see AArriitthhmmeettiicc EExxppaannssiioonn below). Word splitting is not + performed, with the exception of ""$$@@"" as explained below under SSppeecciiaall + PPaarraammeetteerrss. Pathname expansion is not performed. Assignment state- + ments may also appear as arguments to the aalliiaass, ddeeccllaarree, ttyyppeesseett, + eexxppoorrtt, rreeaaddoonnllyy, and llooccaall builtin commands. + + In the context where an assignment statement is assigning a value to a + shell variable or array index, the += operator can be used to append to + or add to the variable's previous value. When += is applied to a vari- + able for which the integer attribute has been set, _v_a_l_u_e is evaluated + as an arithmetic expression and added to the variable's current value, + which is also evaluated. When += is applied to an array variable using + compound assignment (see AArrrraayyss below), the variable's value is not + unset (as it is when using =), and new values are appended to the array + beginning at one greater than the array's maximum index (for indexed + arrays) or added as additional key-value pairs in an associative array. + When applied to a string-valued variable, _v_a_l_u_e is expanded and + appended to the variable's value. + + PPoossiittiioonnaall PPaarraammeetteerrss + A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r is a parameter denoted by one or more digits, + other than the single digit 0. Positional parameters are assigned from + the shell's arguments when it is invoked, and may be reassigned using + the sseett builtin command. Positional parameters may not be assigned to + with assignment statements. The positional parameters are temporarily + replaced when a shell function is executed (see FFUUNNCCTTIIOONNSS below). + + When a positional parameter consisting of more than a single digit is + expanded, it must be enclosed in braces (see EEXXPPAANNSSIIOONN below). + + SSppeecciiaall PPaarraammeetteerrss + The shell treats several parameters specially. These parameters may + only be referenced; assignment to them is not allowed. + ** Expands to the positional parameters, starting from one. When + the expansion occurs within double quotes, it expands to a sin- + gle word with the value of each parameter separated by the first + character of the IIFFSS special variable. That is, "$$**" is equiva- + lent to "$$11_c$$22_c......", where _c is the first character of the value + of the IIFFSS variable. If IIFFSS is unset, the parameters are sepa- + rated by spaces. If IIFFSS is null, the parameters are joined + without intervening separators. + @@ Expands to the positional parameters, starting from one. When + the expansion occurs within double quotes, each parameter + expands to a separate word. That is, "$$@@" is equivalent to "$$11" + "$$22" ... If the double-quoted expansion occurs within a word, + the expansion of the first parameter is joined with the begin- + ning part of the original word, and the expansion of the last + parameter is joined with the last part of the original word. + When there are no positional parameters, "$$@@" and $$@@ expand to + nothing (i.e., they are removed). + ## Expands to the number of positional parameters in decimal. + ?? Expands to the exit status of the most recently executed fore- + ground pipeline. + -- Expands to the current option flags as specified upon invoca- + tion, by the sseett builtin command, or those set by the shell + itself (such as the --ii option). + $$ Expands to the process ID of the shell. In a () subshell, it + expands to the process ID of the current shell, not the sub- + shell. + !! Expands to the process ID of the most recently executed back- + ground (asynchronous) command. + 00 Expands to the name of the shell or shell script. This is set + at shell initialization. If bbaasshh is invoked with a file of com- + mands, $$00 is set to the name of that file. If bbaasshh is started + with the --cc option, then $$00 is set to the first argument after + the string to be executed, if one is present. Otherwise, it is + set to the file name used to invoke bbaasshh, as given by argument + zero. + __ At shell startup, set to the absolute pathname used to invoke + the shell or shell script being executed as passed in the envi- + ronment or argument list. Subsequently, expands to the last + argument to the previous command, after expansion. Also set to + the full pathname used to invoke each command executed and + placed in the environment exported to that command. When check- + ing mail, this parameter holds the name of the mail file cur- + rently being checked. + + SShheellll VVaarriiaabblleess + The following variables are set by the shell: + + BBAASSHH Expands to the full file name used to invoke this instance of + bbaasshh. + BBAASSHHOOPPTTSS + A colon-separated list of enabled shell options. Each word in + the list is a valid argument for the --ss option to the sshhoopptt + builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The options + appearing in BBAASSHHOOPPTTSS are those reported as _o_n by sshhoopptt. If + this variable is in the environment when bbaasshh starts up, each + shell option in the list will be enabled before reading any + startup files. This variable is read-only. + BBAASSHHPPIIDD + Expands to the process id of the current bbaasshh process. This + differs from $$$$ under certain circumstances, such as subshells + that do not require bbaasshh to be re-initialized. + BBAASSHH__AALLIIAASSEESS + An associative array variable whose members correspond to the + internal list of aliases as maintained by the aalliiaass builtin Ele- + ments added to this array appear in the alias list; unsetting + array elements cause aliases to be removed from the alias list. + BBAASSHH__AARRGGCC + An array variable whose values are the number of parameters in + each frame of the current bbaasshh execution call stack. The number + of parameters to the current subroutine (shell function or + script executed with .. or ssoouurrccee) is at the top of the stack. + When a subroutine is executed, the number of parameters passed + is pushed onto BBAASSHH__AARRGGCC. The shell sets BBAASSHH__AARRGGCC only when in + extended debugging mode (see the description of the eexxttddeebbuugg + option to the sshhoopptt builtin below) + BBAASSHH__AARRGGVV + An array variable containing all of the parameters in the cur- + rent bbaasshh execution call stack. The final parameter of the last + subroutine call is at the top of the stack; the first parameter + of the initial call is at the bottom. When a subroutine is exe- + cuted, the parameters supplied are pushed onto BBAASSHH__AARRGGVV. The + shell sets BBAASSHH__AARRGGVV only when in extended debugging mode (see + the description of the eexxttddeebbuugg option to the sshhoopptt builtin + below) + BBAASSHH__CCMMDDSS + An associative array variable whose members correspond to the + internal hash table of commands as maintained by the hhaasshh + builtin. Elements added to this array appear in the hash table; + unsetting array elements cause commands to be removed from the + hash table. + BBAASSHH__CCOOMMMMAANNDD + The command currently being executed or about to be executed, + unless the shell is executing a command as the result of a trap, + in which case it is the command executing at the time of the + trap. + BBAASSHH__EEXXEECCUUTTIIOONN__SSTTRRIINNGG + The command argument to the --cc invocation option. + BBAASSHH__LLIINNEENNOO + An array variable whose members are the line numbers in source + files corresponding to each member of FFUUNNCCNNAAMMEE. + $${{BBAASSHH__LLIINNEENNOO[[_$_i]]}} is the line number in the source file where + $${{FFUUNNCCNNAAMMEE[[_$_i]]}} was called (or $${{BBAASSHH__LLIINNEENNOO[[_$_i_-_1]]}} if refer- + enced within another shell function). The corresponding source + file name is $${{BBAASSHH__SSOOUURRCCEE[[_$_i]]}}. Use LLIINNEENNOO to obtain the cur- + rent line number. + BBAASSHH__RREEMMAATTCCHH + An array variable whose members are assigned by the ==~~ binary + operator to the [[[[ conditional command. The element with index + 0 is the portion of the string matching the entire regular + expression. The element with index _n is the portion of the + string matching the _nth parenthesized subexpression. This vari- + able is read-only. + BBAASSHH__SSOOUURRCCEE + An array variable whose members are the source filenames corre- + sponding to the elements in the FFUUNNCCNNAAMMEE array variable. + BBAASSHH__SSUUBBSSHHEELLLL + Incremented by one each time a subshell or subshell environment + is spawned. The initial value is 0. + BBAASSHH__VVEERRSSIINNFFOO + A readonly array variable whose members hold version information + for this instance of bbaasshh. The values assigned to the array + members are as follows: + BBAASSHH__VVEERRSSIINNFFOO[[0]] The major version number (the _r_e_l_e_a_s_e). + BBAASSHH__VVEERRSSIINNFFOO[[1]] The minor version number (the _v_e_r_s_i_o_n). + BBAASSHH__VVEERRSSIINNFFOO[[2]] The patch level. + BBAASSHH__VVEERRSSIINNFFOO[[3]] The build version. + BBAASSHH__VVEERRSSIINNFFOO[[4]] The release status (e.g., _b_e_t_a_1). + BBAASSHH__VVEERRSSIINNFFOO[[5]] The value of MMAACCHHTTYYPPEE. + + BBAASSHH__VVEERRSSIIOONN + Expands to a string describing the version of this instance of + bbaasshh. + + CCOOMMPP__CCWWOORRDD + An index into $${{CCOOMMPP__WWOORRDDSS}} of the word containing the current + cursor position. This variable is available only in shell func- + tions invoked by the programmable completion facilities (see + PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). + + CCOOMMPP__KKEEYY + The key (or final key of a key sequence) used to invoke the cur- + rent completion function. + + CCOOMMPP__LLIINNEE + The current command line. This variable is available only in + shell functions and external commands invoked by the pro- + grammable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn + below). + + CCOOMMPP__PPOOIINNTT + The index of the current cursor position relative to the begin- + ning of the current command. If the current cursor position is + at the end of the current command, the value of this variable is + equal to $${{##CCOOMMPP__LLIINNEE}}. This variable is available only in + shell functions and external commands invoked by the pro- + grammable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn + below). + + CCOOMMPP__TTYYPPEE + Set to an integer value corresponding to the type of completion + attempted that caused a completion function to be called: _T_A_B, + for normal completion, _?, for listing completions after succes- + sive tabs, _!, for listing alternatives on partial word comple- + tion, _@, to list completions if the word is not unmodified, or + _%, for menu completion. This variable is available only in + shell functions and external commands invoked by the pro- + grammable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn + below). + + CCOOMMPP__WWOORRDDBBRREEAAKKSS + The set of characters that the rreeaaddlliinnee library treats as word + separators when performing word completion. If CCOOMMPP__WWOORRDDBBRREEAAKKSS + is unset, it loses its special properties, even if it is subse- + quently reset. + + CCOOMMPP__WWOORRDDSS + An array variable (see AArrrraayyss below) consisting of the individ- + ual words in the current command line. The line is split into + words as rreeaaddlliinnee would split it, using CCOOMMPP__WWOORRDDBBRREEAAKKSS as + described above. This variable is available only in shell func- + tions invoked by the programmable completion facilities (see + PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). + + DDIIRRSSTTAACCKK + An array variable (see AArrrraayyss below) containing the current con- + tents of the directory stack. Directories appear in the stack + in the order they are displayed by the ddiirrss builtin. Assigning + to members of this array variable may be used to modify directo- + ries already in the stack, but the ppuusshhdd and ppooppdd builtins must + be used to add and remove directories. Assignment to this vari- + able will not change the current directory. If DDIIRRSSTTAACCKK is + unset, it loses its special properties, even if it is subse- + quently reset. + + EEUUIIDD Expands to the effective user ID of the current user, initial- + ized at shell startup. This variable is readonly. + + FFUUNNCCNNAAMMEE + An array variable containing the names of all shell functions + currently in the execution call stack. The element with index 0 + is the name of any currently-executing shell function. The bot- + tom-most element is "main". This variable exists only when a + shell function is executing. Assignments to FFUUNNCCNNAAMMEE have no + effect and return an error status. If FFUUNNCCNNAAMMEE is unset, it + loses its special properties, even if it is subsequently reset. + + GGRROOUUPPSS An array variable containing the list of groups of which the + current user is a member. Assignments to GGRROOUUPPSS have no effect + and return an error status. If GGRROOUUPPSS is unset, it loses its + special properties, even if it is subsequently reset. + + HHIISSTTCCMMDD + The history number, or index in the history list, of the current + command. If HHIISSTTCCMMDD is unset, it loses its special properties, + even if it is subsequently reset. + + HHOOSSTTNNAAMMEE + Automatically set to the name of the current host. + + HHOOSSTTTTYYPPEE + Automatically set to a string that uniquely describes the type + of machine on which bbaasshh is executing. The default is system- + dependent. + + LLIINNEENNOO Each time this parameter is referenced, the shell substitutes a + decimal number representing the current sequential line number + (starting with 1) within a script or function. When not in a + script or function, the value substituted is not guaranteed to + be meaningful. If LLIINNEENNOO is unset, it loses its special proper- + ties, even if it is subsequently reset. + + MMAACCHHTTYYPPEE + Automatically set to a string that fully describes the system + type on which bbaasshh is executing, in the standard GNU _c_p_u_-_c_o_m_- + _p_a_n_y_-_s_y_s_t_e_m format. The default is system-dependent. + + OOLLDDPPWWDD The previous working directory as set by the ccdd command. + + OOPPTTAARRGG The value of the last option argument processed by the ggeettooppttss + builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). + + OOPPTTIINNDD The index of the next argument to be processed by the ggeettooppttss + builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). + + OOSSTTYYPPEE Automatically set to a string that describes the operating sys- + tem on which bbaasshh is executing. The default is system-depen- + dent. + + PPIIPPEESSTTAATTUUSS + An array variable (see AArrrraayyss below) containing a list of exit + status values from the processes in the most-recently-executed + foreground pipeline (which may contain only a single command). + + PPPPIIDD The process ID of the shell's parent. This variable is read- + only. + + PPWWDD The current working directory as set by the ccdd command. + + RRAANNDDOOMM Each time this parameter is referenced, a random integer between + 0 and 32767 is generated. The sequence of random numbers may be + initialized by assigning a value to RRAANNDDOOMM. If RRAANNDDOOMM is unset, + it loses its special properties, even if it is subsequently + reset. + + RREEPPLLYY Set to the line of input read by the rreeaadd builtin command when + no arguments are supplied. + + SSEECCOONNDDSS + Each time this parameter is referenced, the number of seconds + since shell invocation is returned. If a value is assigned to + SSEECCOONNDDSS, the value returned upon subsequent references is the + number of seconds since the assignment plus the value assigned. + If SSEECCOONNDDSS is unset, it loses its special properties, even if it + is subsequently reset. + + SSHHEELLLLOOPPTTSS + A colon-separated list of enabled shell options. Each word in + the list is a valid argument for the --oo option to the sseett + builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The options + appearing in SSHHEELLLLOOPPTTSS are those reported as _o_n by sseett --oo. If + this variable is in the environment when bbaasshh starts up, each + shell option in the list will be enabled before reading any + startup files. This variable is read-only. + + SSHHLLVVLL Incremented by one each time an instance of bbaasshh is started. + + UUIIDD Expands to the user ID of the current user, initialized at shell + startup. This variable is readonly. + + The following variables are used by the shell. In some cases, bbaasshh + assigns a default value to a variable; these cases are noted below. + + BBAASSHH__EENNVV + If this parameter is set when bbaasshh is executing a shell script, + its value is interpreted as a filename containing commands to + initialize the shell, as in _~_/_._b_a_s_h_r_c. The value of BBAASSHH__EENNVV is + subjected to parameter expansion, command substitution, and + arithmetic expansion before being interpreted as a file name. + PPAATTHH is not used to search for the resultant file name. + CCDDPPAATTHH The search path for the ccdd command. This is a colon-separated + list of directories in which the shell looks for destination + directories specified by the ccdd command. A sample value is + ".:~:/usr". + BBAASSHH__XXTTRRAACCEEFFDD + If set to an integer corresponding to a valid file descriptor, + bbaasshh will write the trace output generated when _s_e_t _-_x is + enabled to that file descriptor. The file descriptor is closed + when BBAASSHH__XXTTRRAACCEEFFDD is unset or assigned a new value. Unsetting + BBAASSHH__XXTTRRAACCEEFFDD or assigning it the empty string causes the trace + output to be sent to the standard error. Note that setting + BBAASSHH__XXTTRRAACCEEFFDD to 2 (the standard error file descriptor) and then + unsetting it will result in the standard error being closed. + CCOOLLUUMMNNSS + Used by the sseelleecctt builtin command to determine the terminal + width when printing selection lists. Automatically set upon + receipt of a SIGWINCH. + CCOOMMPPRREEPPLLYY + An array variable from which bbaasshh reads the possible completions + generated by a shell function invoked by the programmable com- + pletion facility (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). + EEMMAACCSS If bbaasshh finds this variable in the environment when the shell + starts with value "t", it assumes that the shell is running in + an emacs shell buffer and disables line editing. + FFCCEEDDIITT The default editor for the ffcc builtin command. + FFIIGGNNOORREE + A colon-separated list of suffixes to ignore when performing + filename completion (see RREEAADDLLIINNEE below). A filename whose suf- + fix matches one of the entries in FFIIGGNNOORREE is excluded from the + list of matched filenames. A sample value is ".o:~". + GGLLOOBBIIGGNNOORREE + 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 + GGLLOOBBIIGGNNOORREE, it is removed from the list of matches. + HHIISSTTCCOONNTTRROOLL + A colon-separated list of values controlling how commands are + saved on the history list. If the list of values includes + _i_g_n_o_r_e_s_p_a_c_e, lines which begin with a ssppaaccee character are not + saved in the history list. A value of _i_g_n_o_r_e_d_u_p_s causes lines + matching the previous history entry to not be saved. A value of + _i_g_n_o_r_e_b_o_t_h is shorthand for _i_g_n_o_r_e_s_p_a_c_e and _i_g_n_o_r_e_d_u_p_s. A value + of _e_r_a_s_e_d_u_p_s causes all previous lines matching the current line + to be removed from the history list before that line is saved. + Any value not in the above list is ignored. If HHIISSTTCCOONNTTRROOLL is + unset, or does not include a valid value, all lines read by the + shell parser are saved on the history list, subject to the value + of HHIISSTTIIGGNNOORREE. The second and subsequent lines of a multi-line + compound command are not tested, and are added to the history + regardless of the value of HHIISSTTCCOONNTTRROOLL. + HHIISSTTFFIILLEE + The name of the file in which command history is saved (see HHIISS-- + TTOORRYY below). The default value is _~_/_._b_a_s_h___h_i_s_t_o_r_y. If unset, + the command history is not saved when an interactive shell + exits. + HHIISSTTFFIILLEESSIIZZEE + The maximum number of lines contained in the history file. When + this variable is assigned a value, the history file is trun- + cated, if necessary, by removing the oldest entries, 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. + HHIISSTTIIGGNNOORREE + A colon-separated list of patterns used to decide which command + lines should be saved on the history list. Each pattern is + anchored at the beginning of the line and must match the com- + plete line (no implicit `**' is appended). Each pattern is + tested against the line after the checks specified by HHIISSTTCCOONN-- + TTRROOLL are applied. In addition to the normal shell pattern + matching characters, `&&' matches the previous history line. `&&' + may be escaped using a backslash; the backslash is removed + before attempting a match. The second and subsequent lines of a + multi-line compound command are not tested, and are added to the + history regardless of the value of HHIISSTTIIGGNNOORREE. + HHIISSTTSSIIZZEE + The number of commands to remember in the command history (see + HHIISSTTOORRYY below). The default value is 500. + HHIISSTTTTIIMMEEFFOORRMMAATT + If this variable is set and not null, its value is used as a + format string for _s_t_r_f_t_i_m_e(3) to print the time stamp associated + with each history entry displayed by the hhiissttoorryy builtin. If + this variable is set, time stamps are written to the history + file so they may be preserved across shell sessions. This uses + the history comment character to distinguish timestamps from + other history lines. + HHOOMMEE The home directory of the current user; the default argument for + the ccdd builtin command. The value of this variable is also used + when performing tilde expansion. + HHOOSSTTFFIILLEE + Contains the name of a file in the same format as _/_e_t_c_/_h_o_s_t_s + that should be read when the shell needs to complete a hostname. + The list of possible hostname completions may be changed while + the shell is running; the next time hostname completion is + attempted after the value is changed, bbaasshh adds the contents of + the new file to the existing list. If HHOOSSTTFFIILLEE is set, but has + no value, or does not name a readable file, bbaasshh attempts to + read _/_e_t_c_/_h_o_s_t_s to obtain the list of possible hostname comple- + tions. When HHOOSSTTFFIILLEE is unset, the hostname list is cleared. + IIFFSS The _I_n_t_e_r_n_a_l _F_i_e_l_d _S_e_p_a_r_a_t_o_r that is used for word splitting + after expansion and to split lines into words with the rreeaadd + builtin command. The default value is ``''. + IIGGNNOORREEEEOOFF + Controls the action of an interactive shell on receipt of an EEOOFF + character as the sole input. If set, the value is the number of + consecutive EEOOFF characters which must be typed as the first + characters on an input line before bbaasshh exits. If the variable + exists but does not have a numeric value, or has no value, the + default value is 10. If it does not exist, EEOOFF signifies the + end of input to the shell. + IINNPPUUTTRRCC + The filename for the rreeaaddlliinnee startup file, overriding the + default of _~_/_._i_n_p_u_t_r_c (see RREEAADDLLIINNEE below). + LLAANNGG Used to determine the locale category for any category not + specifically selected with a variable starting with LLCC__. + LLCC__AALLLL This variable overrides the value of LLAANNGG and any other LLCC__ + variable specifying a locale category. + LLCC__CCOOLLLLAATTEE + This variable determines the collation order used when sorting + the results of pathname expansion, and determines the behavior + of range expressions, equivalence classes, and collating + sequences within pathname expansion and pattern matching. + LLCC__CCTTYYPPEE + This variable determines the interpretation of characters and + the behavior of character classes within pathname expansion and + pattern matching. + LLCC__MMEESSSSAAGGEESS + This variable determines the locale used to translate double- + quoted strings preceded by a $$. + LLCC__NNUUMMEERRIICC + This variable determines the locale category used for number + formatting. + LLIINNEESS Used by the sseelleecctt builtin command to determine the column + length for printing selection lists. Automatically set upon + receipt of a SSIIGGWWIINNCCHH. + MMAAIILL If this parameter is set to a file name and the MMAAIILLPPAATTHH vari- + able is not set, bbaasshh informs the user of the arrival of mail in + the specified file. + MMAAIILLCCHHEECCKK + Specifies how often (in seconds) bbaasshh checks for mail. The + default is 60 seconds. When it is time to check for mail, the + shell does so before displaying the primary prompt. If this + variable is unset, or set to a value that is not a number + greater than or equal to zero, the shell disables mail checking. + MMAAIILLPPAATTHH + A colon-separated list of 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, $$__ expands to + the name of the current mailfile. Example: + MMAAIILLPPAATTHH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has + mail!"' + BBaasshh supplies a default value for this variable, but the loca- + tion of the user mail files that it uses is system dependent + (e.g., /var/mail/$$UUSSEERR). + OOPPTTEERRRR If set to the value 1, bbaasshh displays error messages generated by + the ggeettooppttss builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). + OOPPTTEERRRR is initialized to 1 each time the shell is invoked or a + shell script is executed. + PPAATTHH The search path for commands. It is a colon-separated list of + directories in which the shell looks for commands (see CCOOMMMMAANNDD + EEXXEECCUUTTIIOONN below). A zero-length (null) directory name in the + value of PPAATTHH indicates the current directory. A null directory + name may appear as two adjacent colons, or as an initial or + trailing colon. The default path is system-dependent, and is + set by the administrator who installs bbaasshh. A common value is + ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin''. + PPOOSSIIXXLLYY__CCOORRRREECCTT + If this variable is in the environment when bbaasshh starts, the + shell enters _p_o_s_i_x _m_o_d_e before reading the startup files, as if + the ----ppoossiixx invocation option had been supplied. If it is set + while the shell is running, bbaasshh enables _p_o_s_i_x _m_o_d_e, as if the + command _s_e_t _-_o _p_o_s_i_x had been executed. + PPRROOMMPPTT__CCOOMMMMAANNDD + If set, the value is executed as a command prior to issuing each + primary prompt. + PPRROOMMPPTT__DDIIRRTTRRIIMM + If set to a number greater than zero, the value is used as the + number of trailing directory components to retain when expanding + the \\ww and \\WW prompt string escapes (see PPRROOMMPPTTIINNGG below). + Characters removed are replaced with an ellipsis. + PPSS11 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below) + and used as the primary prompt string. The default value is + ``\\ss--\\vv\\$$ ''. + PPSS22 The value of this parameter is expanded as with PPSS11 and used as + the secondary prompt string. The default is ``>> ''. + PPSS33 The value of this parameter is used as the prompt for the sseelleecctt + command (see SSHHEELLLL GGRRAAMMMMAARR above). + PPSS44 The value of this parameter is expanded as with PPSS11 and the + value is printed before each command bbaasshh displays during an + execution trace. The first character of PPSS44 is replicated mul- + tiple times, as necessary, to indicate multiple levels of indi- + rection. The default is ``++ ''. + SSHHEELLLL The full pathname to the shell is kept in this environment vari- + able. If it is not set when the shell starts, bbaasshh assigns to + it the full pathname of the current user's login shell. + TTIIMMEEFFOORRMMAATT + The value of this parameter is used as a format string specify- + ing how the timing information for pipelines prefixed with the + ttiimmee reserved word should be displayed. The %% character intro- + duces an escape sequence that is expanded to a time value or + other information. The escape sequences and their meanings are + as follows; the braces denote optional portions. + %%%% A literal %%. + %%[[_p]][[ll]]RR The elapsed time in seconds. + %%[[_p]][[ll]]UU The number of CPU seconds spent in user mode. + %%[[_p]][[ll]]SS The number of CPU seconds spent in system mode. + %%PP The CPU percentage, computed as (%U + %S) / %R. + + The optional _p is a digit specifying the _p_r_e_c_i_s_i_o_n, the number + of fractional digits after a decimal point. A value of 0 causes + no decimal point or fraction to be output. At most three places + after the decimal point may be specified; values of _p greater + than 3 are changed to 3. If _p is not specified, the value 3 is + used. + + The optional ll specifies a longer format, including minutes, of + the form _M_Mm_S_S._F_Fs. The value of _p determines whether or not + the fraction is included. + + If this variable is not set, bbaasshh acts as if it had the value + $$''\\nnrreeaall\\tt%%33llRR\\nnuusseerr\\tt%%33llUU\\nnssyyss%%33llSS''. If the value is null, no + timing information is displayed. A trailing newline is added + when the format string is displayed. + + TTMMOOUUTT If set to a value greater than zero, TTMMOOUUTT is treated as the + default timeout for the rreeaadd builtin. The sseelleecctt command termi- + nates if input does not arrive after TTMMOOUUTT seconds when input is + coming from a terminal. In an interactive shell, the value is + interpreted as the number of seconds to wait for input after + issuing the primary prompt. BBaasshh terminates after waiting for + that number of seconds if input does not arrive. + + TTMMPPDDIIRR If set, BBaasshh uses its value as the name of a directory in which + BBaasshh creates temporary files for the shell's use. + + aauuttoo__rreessuummee + This variable controls how the shell interacts with the user and + job control. If this variable is set, single word simple com- + mands without redirections are treated as candidates for resump- + tion of an existing stopped job. There is no ambiguity allowed; + if there is more than one job beginning with the string typed, + the job most recently accessed is selected. The _n_a_m_e of a + stopped job, in this context, is the command line used to start + it. If set to the value _e_x_a_c_t, the string supplied must match + the name of a stopped job exactly; if set to _s_u_b_s_t_r_i_n_g, the + string supplied needs to match a substring of the name of a + stopped job. The _s_u_b_s_t_r_i_n_g value provides functionality analo- + gous to the %%?? job identifier (see JJOOBB CCOONNTTRROOLL below). If set + to any other value, the supplied string must be a prefix of a + stopped job's name; this provides functionality analogous to the + %%_s_t_r_i_n_g job identifier. + + hhiissttcchhaarrss + The two or three characters which control history expansion and + tokenization (see HHIISSTTOORRYY EEXXPPAANNSSIIOONN below). The first character + is the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character, the character which signals + the start of a history expansion, normally `!!'. The second + character is the _q_u_i_c_k _s_u_b_s_t_i_t_u_t_i_o_n character, which is used as + shorthand for re-running the previous command entered, substi- + tuting one string for another in the command. The default is + `^^'. The optional third character is the character which indi- + cates that the remainder of the line is a comment when found as + the first character of a word, normally `##'. The history com- + ment character causes history substitution to be skipped for the + remaining words on the line. It does not necessarily cause the + shell parser to treat the rest of the line as a comment. + + AArrrraayyss + BBaasshh provides one-dimensional indexed and associative array variables. + Any variable may be used as an indexed array; the ddeeccllaarree builtin will + explicitly declare an array. There is no maximum limit on the size of + an array, nor any requirement that members be indexed or assigned con- + tiguously. Indexed arrays are referenced using integers (including + arithmetic expressions) and are zero-based; associative arrays are + referenced using arbitrary strings. + + An indexed array is created automatically if any variable is assigned + to using the syntax _n_a_m_e[_s_u_b_s_c_r_i_p_t]=_v_a_l_u_e. The _s_u_b_s_c_r_i_p_t is treated as + an arithmetic expression that must evaluate to a number greater than or + equal to zero. To explicitly declare an indexed array, use ddeeccllaarree --aa + _n_a_m_e (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). ddeeccllaarree --aa _n_a_m_e[[_s_u_b_s_c_r_i_p_t]] is + also accepted; the _s_u_b_s_c_r_i_p_t is ignored. + + Associative arrays are created using ddeeccllaarree --AA _n_a_m_e. + + Attributes may be specified for an array variable using the ddeeccllaarree and + rreeaaddoonnllyy builtins. Each attribute applies to all members of an array. + + Arrays are assigned to using compound assignments of the form + _n_a_m_e=((value_1 ... value_n)), where each _v_a_l_u_e is of the form [_s_u_b_- + _s_c_r_i_p_t]=_s_t_r_i_n_g. Indexed array assignments do not require the bracket + and subscript. When assigning to indexed arrays, if the optional + brackets and subscript are supplied, that index is assigned to; other- + wise the index of the element assigned is the last index assigned to by + the statement plus one. Indexing starts at zero. + + When assigning to an associative array, the subscript is required. + + This syntax is also accepted by the ddeeccllaarree builtin. Individual array + elements may be assigned to using the _n_a_m_e[_s_u_b_s_c_r_i_p_t]=_v_a_l_u_e syntax + introduced above. + + Any element of an array may be referenced using ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}. + The braces are required to avoid conflicts with pathname expansion. If + _s_u_b_s_c_r_i_p_t is @@ or **, the word expands to all members of _n_a_m_e. These + subscripts differ only when the word appears within double quotes. If + the word is double-quoted, ${_n_a_m_e[*]} expands to a single word with the + value of each array member separated by the first character of the IIFFSS + special variable, and ${_n_a_m_e[@]} expands each element of _n_a_m_e to a sep- + arate word. When there are no array members, ${_n_a_m_e[@]} expands to + nothing. If the double-quoted expansion occurs within a word, the + expansion of the first parameter is joined with the beginning part of + the original word, and the expansion of the last parameter is joined + with the last part of the original word. This is analogous to the + expansion of the special parameters ** and @@ (see SSppeecciiaall PPaarraammeetteerrss + above). ${#_n_a_m_e[_s_u_b_s_c_r_i_p_t]} expands to the length of ${_n_a_m_e[_s_u_b_- + _s_c_r_i_p_t]}. If _s_u_b_s_c_r_i_p_t is ** or @@, the expansion is the number of ele- + ments in the array. Referencing an array variable without a subscript + is equivalent to referencing the array with a subscript of 0. + + An array variable is considered set if a subscript has been assigned a + value. The null string is a valid value. + + The uunnsseett builtin is used to destroy arrays. uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t] + destroys the array element at index _s_u_b_s_c_r_i_p_t. Care must be taken to + avoid unwanted side effects caused by pathname expansion. uunnsseett _n_a_m_e, + where _n_a_m_e is an array, or uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t], where _s_u_b_s_c_r_i_p_t is ** + or @@, removes the entire array. + + The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to + specify an indexed array and a --AA option to specify an associative + array. The rreeaadd builtin accepts a --aa option to assign a list of words + read from the standard input to an array. The sseett and ddeeccllaarree builtins + display array values in a way that allows them to be reused as assign- + ments. + +EEXXPPAANNSSIIOONN + Expansion is performed on the command line after it has been split into + words. There are seven kinds of expansion performed: _b_r_a_c_e _e_x_p_a_n_s_i_o_n, + _t_i_l_d_e _e_x_p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_- + _t_i_o_n, _a_r_i_t_h_m_e_t_i_c _e_x_p_a_n_s_i_o_n, _w_o_r_d _s_p_l_i_t_t_i_n_g, and _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n. + + The order of expansions is: brace expansion, tilde expansion, parame- + ter, variable and arithmetic expansion and command substitution (done + in a left-to-right fashion), word splitting, and pathname expansion. + + On systems that can support it, there is an additional expansion avail- + able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. + + 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 "$$@@" and "$${{_n_a_m_e[[@@]]}}" as explained above (see PPAARRAAMMEETTEERRSS). + + BBrraaccee EExxppaannssiioonn + _B_r_a_c_e _e_x_p_a_n_s_i_o_n is a mechanism by which arbitrary strings may be gener- + ated. This mechanism is similar to _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, but the file- + names generated need not exist. Patterns to be brace expanded take the + form of an optional _p_r_e_a_m_b_l_e, followed by either a series of comma-sep- + arated strings or a sequence expression between a pair of braces, fol- + lowed by an optional _p_o_s_t_s_c_r_i_p_t. The preamble is prefixed to each + string contained within the braces, and the postscript is then appended + to each resulting string, expanding left to right. + + Brace expansions may be nested. The results of each expanded string + are not sorted; left to right order is preserved. For example, + a{{d,c,b}}e expands into `ade ace abe'. + + A sequence expression takes the form {{_x...._y[[...._i_n_c_r]]}}, where _x and _y are + either integers or single characters, and _i_n_c_r, an optional increment, + is an integer. When integers are supplied, the expression expands to + each number between _x and _y, inclusive. Supplied integers may be pre- + fixed with _0 to force each term to have the same width. When either _x + or _y begins with a zero, the shell attempts to force all generated + terms to contain the same number of digits, zero-padding where neces- + sary. When characters are supplied, the expression expands to each + character lexicographically between _x and _y, inclusive. Note that both + _x and _y must be of the same type. When the increment is supplied, it + is used as the difference between each term. The default increment is + 1 or -1 as appropriate. + + Brace expansion is performed before any other expansions, and any char- + acters special to other expansions are preserved in the result. It is + strictly textual. BBaasshh does not apply any syntactic interpretation to + the context of the expansion or the text between the braces. + + A correctly-formed brace expansion must contain unquoted opening and + closing braces, and at least one unquoted comma or a valid sequence + expression. Any incorrectly formed brace expansion is left unchanged. + A {{ or ,, may be quoted with a backslash to prevent its being considered + part of a brace expression. To avoid conflicts with parameter expan- + sion, the string $${{ is not considered eligible for brace expansion. + + This construct is typically used as shorthand when the common prefix of + the strings to be generated is longer than in the above example: + + mkdir /usr/local/src/bash/{old,new,dist,bugs} + or + chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} + + Brace expansion introduces a slight incompatibility with historical + versions of sshh. sshh does not treat opening or closing braces specially + when they appear as part of a word, and preserves them in the output. + BBaasshh removes braces from words as a consequence of brace expansion. + For example, a word entered to sshh as _f_i_l_e_{_1_,_2_} appears identically in + the output. The same word is output as _f_i_l_e_1 _f_i_l_e_2 after expansion by + bbaasshh. If strict compatibility with sshh is desired, start bbaasshh with the + ++BB option or disable brace expansion with the ++BB option to the sseett com- + mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). + + TTiillddee EExxppaannssiioonn + If a word begins with an unquoted tilde character (`~~'), all of the + characters preceding the first unquoted slash (or all characters, if + there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. If none of + the characters in the tilde-prefix are quoted, the characters in the + tilde-prefix following the tilde are treated as a possible _l_o_g_i_n _n_a_m_e. + If this login name is the null string, the tilde is replaced with the + value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the home direc- + tory of the user executing the shell is substituted instead. Other- + wise, the tilde-prefix is replaced with the home directory associated + with the specified login name. + + If the tilde-prefix is a `~+', the value of the shell variable PPWWDD + replaces the tilde-prefix. If the tilde-prefix is a `~-', the value of + the shell variable OOLLDDPPWWDD, if it is set, is substituted. If the char- + acters following the tilde in the tilde-prefix consist of a number _N, + optionally prefixed by a `+' or a `-', the tilde-prefix is replaced + with the corresponding element from the directory stack, as it would be + displayed by the ddiirrss builtin invoked with the tilde-prefix as an argu- + ment. If the characters following the tilde in the tilde-prefix con- + sist of a number without a leading `+' or `-', `+' is assumed. + + If the login name is invalid, or the tilde expansion fails, the word is + unchanged. + + Each variable assignment is checked for unquoted tilde-prefixes immedi- + ately following a :: or the first ==. In these cases, tilde expansion is + also performed. Consequently, one may use file names with tildes in + assignments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the + expanded value. + + PPaarraammeetteerr EExxppaannssiioonn + The `$$' character introduces parameter expansion, command substitution, + or arithmetic expansion. The parameter name or symbol to be expanded + may be enclosed in braces, which are optional but serve to protect the + variable to be expanded from characters immediately following it which + could be interpreted as part of the name. + + When braces are used, the matching ending brace is the first `}}' not + escaped by a backslash or within a quoted string, and not within an + embedded arithmetic expansion, command substitution, or parameter + expansion. + + ${_p_a_r_a_m_e_t_e_r} + The value of _p_a_r_a_m_e_t_e_r is substituted. The braces are required + when _p_a_r_a_m_e_t_e_r is a positional parameter with more than one + digit, or when _p_a_r_a_m_e_t_e_r is followed by a character which is not + to be interpreted as part of its name. + + If the first character of _p_a_r_a_m_e_t_e_r is an exclamation point (!!), a + level of variable indirection is introduced. BBaasshh uses the value of + the variable formed from the rest of _p_a_r_a_m_e_t_e_r as the name of the vari- + able; this variable is then expanded and that value is used in the rest + of the substitution, rather than the value of _p_a_r_a_m_e_t_e_r itself. This + is known as _i_n_d_i_r_e_c_t _e_x_p_a_n_s_i_o_n. The exceptions to this are the expan- + sions of ${!_p_r_e_f_i_x*} and ${!!_n_a_m_e[_@]} described below. The exclamation + point must immediately follow the left brace in order to introduce + indirection. + + In each of the cases below, _w_o_r_d is subject to tilde expansion, parame- + ter expansion, command substitution, and arithmetic expansion. + + When not performing substring expansion, using the forms documented + below, bbaasshh tests for a parameter that is unset or null. Omitting the + colon results in a test only for a parameter that is unset. + + ${_p_a_r_a_m_e_t_e_r::--_w_o_r_d} + UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan- + sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r + is substituted. + ${_p_a_r_a_m_e_t_e_r::==_w_o_r_d} + AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the + expansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r. The value of _p_a_r_a_m_- + _e_t_e_r is then substituted. Positional parameters and special + parameters may not be assigned to in this way. + ${_p_a_r_a_m_e_t_e_r::??_w_o_r_d} + DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset, + the expansion of _w_o_r_d (or a message to that effect if _w_o_r_d is + not present) is written to the standard error and the shell, if + it is not interactive, exits. Otherwise, the value of _p_a_r_a_m_e_t_e_r + is substituted. + ${_p_a_r_a_m_e_t_e_r::++_w_o_r_d} + UUssee AAlltteerrnnaattee VVaalluuee. If _p_a_r_a_m_e_t_e_r is null or unset, nothing is + substituted, otherwise the expansion of _w_o_r_d is substituted. + ${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t} + ${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t::_l_e_n_g_t_h} + SSuubbssttrriinngg EExxppaannssiioonn.. Expands to up to _l_e_n_g_t_h characters of + _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_s_e_t. If + _l_e_n_g_t_h is omitted, expands to the substring of _p_a_r_a_m_e_t_e_r start- + ing at the character specified by _o_f_f_s_e_t. _l_e_n_g_t_h and _o_f_f_s_e_t are + arithmetic expressions (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN below). + _l_e_n_g_t_h must evaluate to a number greater than or equal to zero. + If _o_f_f_s_e_t evaluates to a number less than zero, the value is + used as an offset from the end of the value of _p_a_r_a_m_e_t_e_r. If + _p_a_r_a_m_e_t_e_r is @@, the result is _l_e_n_g_t_h positional parameters + beginning at _o_f_f_s_e_t. If _p_a_r_a_m_e_t_e_r is an indexed array name sub- + scripted by @ or *, the result is the _l_e_n_g_t_h members of the + array beginning with ${_p_a_r_a_m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is + taken relative to one greater than the maximum index of the + specified array. Substring expansion applied to an associative + array produces undefined results. Note that a negative offset + must be separated from the colon by at least one space to avoid + being confused with the :- expansion. Substring indexing is + zero-based unless the positional parameters are used, in which + case the indexing starts at 1 by default. If _o_f_f_s_e_t is 0, and + the positional parameters are used, $$00 is prefixed to the list. + + ${!!_p_r_e_f_i_x**} + ${!!_p_r_e_f_i_x@@} + NNaammeess mmaattcchhiinngg pprreeffiixx.. Expands to the names of variables whose + names begin with _p_r_e_f_i_x, separated by the first character of the + IIFFSS special variable. When _@ is used and the expansion appears + within double quotes, each variable name expands to a separate + word. + + ${!!_n_a_m_e[_@]} + ${!!_n_a_m_e[_*]} + LLiisstt ooff aarrrraayy kkeeyyss.. If _n_a_m_e is an array variable, expands to + the list of array indices (keys) assigned in _n_a_m_e. If _n_a_m_e is + not an array, expands to 0 if _n_a_m_e is set and null otherwise. + When _@ is used and the expansion appears within double quotes, + each key expands to a separate word. + + ${##_p_a_r_a_m_e_t_e_r} + PPaarraammeetteerr lleennggtthh.. The length in characters of the value of + _p_a_r_a_m_e_t_e_r is substituted. If _p_a_r_a_m_e_t_e_r is ** or @@, the value + substituted is the number of positional parameters. If _p_a_r_a_m_e_- + _t_e_r is an array name subscripted by ** or @@, the value substi- + tuted is the number of elements in the array. + + ${_p_a_r_a_m_e_t_e_r##_w_o_r_d} + ${_p_a_r_a_m_e_t_e_r####_w_o_r_d} + RReemmoovvee mmaattcchhiinngg pprreeffiixx ppaatttteerrnn.. The _w_o_r_d is expanded to produce + a pattern just as in pathname expansion. If the pattern matches + the beginning of the value of _p_a_r_a_m_e_t_e_r, then the result of the + expansion is the expanded value of _p_a_r_a_m_e_t_e_r with the shortest + matching pattern (the ``##'' case) or the longest matching pat- + tern (the ``####'' case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the + pattern removal operation is applied to each positional parame- + ter in turn, and the expansion is the resultant list. If _p_a_r_a_m_- + _e_t_e_r is an array variable subscripted with @@ or **, the pattern + removal operation is applied to each member of the array in + turn, and the expansion is the resultant list. + + ${_p_a_r_a_m_e_t_e_r%%_w_o_r_d} + ${_p_a_r_a_m_e_t_e_r%%%%_w_o_r_d} + RReemmoovvee mmaattcchhiinngg ssuuffffiixx ppaatttteerrnn.. The _w_o_r_d is expanded to produce + a pattern just as in pathname expansion. If the pattern matches + a trailing portion of the expanded value of _p_a_r_a_m_e_t_e_r, then the + result of the expansion is the expanded value of _p_a_r_a_m_e_t_e_r with + the shortest matching pattern (the ``%%'' case) or the longest + matching pattern (the ``%%%%'' case) deleted. If _p_a_r_a_m_e_t_e_r is @@ + or **, the pattern removal operation is applied to each posi- + tional parameter in turn, and the expansion is the resultant + list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted with @@ or + **, the pattern removal operation is applied to each member of + the array in turn, and the expansion is the resultant list. + + ${_p_a_r_a_m_e_t_e_r//_p_a_t_t_e_r_n//_s_t_r_i_n_g} + PPaatttteerrnn ssuubbssttiittuuttiioonn.. The _p_a_t_t_e_r_n is expanded to produce a pat- + tern just as in pathname expansion. _P_a_r_a_m_e_t_e_r is expanded and + the longest match of _p_a_t_t_e_r_n against its value is replaced with + _s_t_r_i_n_g. If _p_a_t_t_e_r_n begins with //, all matches of _p_a_t_t_e_r_n are + replaced with _s_t_r_i_n_g. Normally only the first match is + replaced. If _p_a_t_t_e_r_n begins with ##, it must match at the begin- + ning of the expanded value of _p_a_r_a_m_e_t_e_r. If _p_a_t_t_e_r_n begins with + %%, it must match at the end of the expanded value of _p_a_r_a_m_e_t_e_r. + If _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted and the // fol- + lowing _p_a_t_t_e_r_n may be omitted. If _p_a_r_a_m_e_t_e_r is @@ or **, the sub- + stitution operation is applied to each positional parameter in + turn, and the expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is + an array variable subscripted with @@ or **, the substitution + operation is applied to each member of the array in turn, and + the expansion is the resultant list. + + ${_p_a_r_a_m_e_t_e_r^^_p_a_t_t_e_r_n} + ${_p_a_r_a_m_e_t_e_r^^^^_p_a_t_t_e_r_n} + ${_p_a_r_a_m_e_t_e_r,,_p_a_t_t_e_r_n} + ${_p_a_r_a_m_e_t_e_r,,,,_p_a_t_t_e_r_n} + CCaassee mmooddiiffiiccaattiioonn.. This expansion modifies the case of alpha- + betic characters in _p_a_r_a_m_e_t_e_r. The _p_a_t_t_e_r_n is expanded to pro- + duce a pattern just as in pathname expansion. The ^^ operator + converts lowercase letters matching _p_a_t_t_e_r_n to uppercase; the ,, + operator converts matching uppercase letters to lowercase. The + ^^^^ and ,,,, expansions convert each matched character in the + expanded value; the ^^ and ,, expansions match and convert only + the first character in the expanded value.. If _p_a_t_t_e_r_n is omit- + ted, it is treated like a ??, which matches every character. If + _p_a_r_a_m_e_t_e_r is @@ or **, the case modification operation is applied + to each positional parameter in turn, and the expansion is the + resultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted + with @@ or **, the case modification operation is applied to each + member of the array in turn, and the expansion is the resultant + list. + + CCoommmmaanndd SSuubbssttiittuuttiioonn + _C_o_m_m_a_n_d _s_u_b_s_t_i_t_u_t_i_o_n allows the output of a command to replace the com- + mand name. There are two forms: + + + $$((_c_o_m_m_a_n_d)) + or + ``_c_o_m_m_a_n_d`` + + BBaasshh performs the expansion by executing _c_o_m_m_a_n_d and replacing the com- + mand 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 $$((ccaatt + _f_i_l_e)) can be replaced by the equivalent but faster $$((<< _f_i_l_e)). + + When the old-style backquote form of substitution is used, backslash + retains its literal meaning except when followed by $$, ``, or \\. The + first backquote not preceded by a backslash terminates the command sub- + stitution. When using the $(_c_o_m_m_a_n_d) form, all characters between the + parentheses make up the command; none are treated specially. + + Command substitutions may be nested. To nest when using the backquoted + form, escape the inner backquotes with backslashes. + + If the substitution appears within double quotes, word splitting and + pathname expansion are not performed on the results. + + AArriitthhmmeettiicc EExxppaannssiioonn + Arithmetic expansion allows the evaluation of an arithmetic expression + and the substitution of the result. The format for arithmetic expan- + sion is: + + $$((((_e_x_p_r_e_s_s_i_o_n)))) + + The _e_x_p_r_e_s_s_i_o_n is treated as if it were within double quotes, but a + double quote inside the parentheses is not treated specially. All + tokens in the expression undergo parameter expansion, string expansion, + command substitution, and quote removal. Arithmetic expansions may be + nested. + + The evaluation is performed according to the rules listed below under + AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If _e_x_p_r_e_s_s_i_o_n is invalid, bbaasshh prints a message + indicating failure and no substitution occurs. + + PPrroocceessss SSuubbssttiittuuttiioonn + _P_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n is supported on systems that support named pipes + (_F_I_F_O_s) or the //ddeevv//ffdd method of naming open files. It takes the form + of <<((_l_i_s_t)) or >>((_l_i_s_t)). The process _l_i_s_t is run with its input or out- + put connected to a _F_I_F_O or some file in //ddeevv//ffdd. The name of this file + is passed as an argument to the current command as the result of the + expansion. If the >>((_l_i_s_t)) form is used, writing to the file will pro- + vide input for _l_i_s_t. If the <<((_l_i_s_t)) form is used, the file passed as + an argument should be read to obtain the output of _l_i_s_t. + + When available, process substitution is performed simultaneously with + parameter and variable expansion, command substitution, and arithmetic + expansion. + + WWoorrdd SSpplliittttiinngg + The shell scans the results of parameter expansion, command substitu- + tion, and arithmetic expansion that did not occur within double quotes + for _w_o_r_d _s_p_l_i_t_t_i_n_g. + + The shell treats each character of IIFFSS as a delimiter, and splits the + results of the other expansions into words on these characters. If IIFFSS + is unset, or its value is exactly <><><>, the default, + then sequences of <>, <>, and <> at the beginning and + end of the results of the previous expansions are ignored, and any + sequence of IIFFSS characters not at the beginning or end serves to + delimit words. If IIFFSS has a value other than the default, then + sequences of the whitespace characters ssppaaccee and ttaabb are ignored at the + beginning and end of the word, as long as the whitespace character is + in the value of IIFFSS (an IIFFSS whitespace character). Any character in + IIFFSS that is not IIFFSS whitespace, along with any adjacent IIFFSS whitespace + characters, delimits a field. A sequence of IIFFSS whitespace characters + is also treated as a delimiter. If the value of IIFFSS is null, no word + splitting occurs. + + Explicit null arguments ("""" or '''') are retained. 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. + + PPaatthhnnaammee EExxppaannssiioonn + After word splitting, unless the --ff option has been set, bbaasshh scans + each word for the characters **, ??, and [[. If one of these characters + appears, then the word is regarded as a _p_a_t_t_e_r_n, and replaced with an + alphabetically sorted list of file names matching the pattern. If no + matching file names are found, and the shell option nnuullllgglloobb is not + enabled, the word is left unchanged. If the nnuullllgglloobb option is set, + and no matches are found, the word is removed. If the ffaaiillgglloobb shell + option is set, and no matches are found, an error message is printed + and the command is not executed. If the shell option nnooccaasseegglloobb is + enabled, the match is performed without regard to the case of alpha- + betic characters. When a pattern is used for pathname expansion, the + character ````..'''' at the start of a name or immediately following a + slash must be matched explicitly, unless the shell option ddoottgglloobb is + set. When matching a pathname, the slash character must always be + matched explicitly. In other cases, the ````..'''' character is not + treated specially. See the description of sshhoopptt below under SSHHEELLLL + BBUUIILLTTIINN CCOOMMMMAANNDDSS for a description of the nnooccaasseegglloobb, nnuullllgglloobb, ffaaiill-- + gglloobb, and ddoottgglloobb shell options. + + The GGLLOOBBIIGGNNOORREE shell variable may be used to restrict the set of file + names matching a _p_a_t_t_e_r_n. If GGLLOOBBIIGGNNOORREE is set, each matching file + name that also matches one of the patterns in GGLLOOBBIIGGNNOORREE is removed + from the list of matches. The file names ````..'''' and ````....'''' are always + ignored when GGLLOOBBIIGGNNOORREE is set and not null. However, setting GGLLOOBBIIGG-- + NNOORREE to a non-null value has the effect of enabling the ddoottgglloobb shell + option, so all other file names beginning with a ````..'''' will match. To + get the old behavior of ignoring file names beginning with a ````..'''', + make ````..**'''' one of the patterns in GGLLOOBBIIGGNNOORREE. The ddoottgglloobb option is + disabled when GGLLOOBBIIGGNNOORREE is unset. + + PPaatttteerrnn MMaattcchhiinngg + + Any character that appears in a pattern, other than the special pattern + characters described below, matches itself. The NUL character may not + occur in a pattern. A backslash escapes the following character; the + escaping backslash is discarded when matching. The special pattern + characters must be quoted if they are to be matched literally. + + The special pattern characters have the following meanings: + + ** Matches any string, including the null string. When the gglloobb-- + ssttaarr shell option is enabled, and ** is used in a pathname expan- + sion context, two adjacent **s used as a single pattern will + match all files and zero or more directories and subdirectories. + If followed by a //, two adjacent **s will match only directories + and subdirectories. + ?? Matches any single character. + [[......]] Matches any one of the enclosed characters. A pair of charac- + ters separated by a hyphen denotes a _r_a_n_g_e _e_x_p_r_e_s_s_i_o_n; any char- + acter 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 [[ is a !! or a ^^ + 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 LLCC__CCOOLLLLAATTEE shell variable, if set. + A -- may be matched by including it as the first or last charac- + ter in the set. A ]] may be matched by including it as the first + character in the set. + + Within [[ and ]], _c_h_a_r_a_c_t_e_r _c_l_a_s_s_e_s can be specified using the + syntax [[::_c_l_a_s_s::]], where _c_l_a_s_s is one of the following classes + defined in the POSIX standard: + aallnnuumm aallpphhaa aasscciiii bbllaannkk ccnnttrrll ddiiggiitt ggrraapphh lloowweerr pprriinntt ppuunncctt + ssppaaccee uuppppeerr wwoorrdd xxddiiggiitt + A character class matches any character belonging to that class. + The wwoorrdd character class matches letters, digits, and the char- + acter _. + + Within [[ and ]], an _e_q_u_i_v_a_l_e_n_c_e _c_l_a_s_s can be specified using the + syntax [[==_c==]], which matches all characters with the same colla- + tion weight (as defined by the current locale) as the character + _c. + + Within [[ and ]], the syntax [[.._s_y_m_b_o_l..]] matches the collating sym- + bol _s_y_m_b_o_l. + + If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, several + extended pattern matching operators are recognized. In the following + description, a _p_a_t_t_e_r_n_-_l_i_s_t is a list of one or more patterns separated + by a ||. Composite patterns may be formed using one or more of the fol- + lowing sub-patterns: + + ??((_p_a_t_t_e_r_n_-_l_i_s_t)) + Matches zero or one occurrence of the given patterns + **((_p_a_t_t_e_r_n_-_l_i_s_t)) + Matches zero or more occurrences of the given patterns + ++((_p_a_t_t_e_r_n_-_l_i_s_t)) + Matches one or more occurrences of the given patterns + @@((_p_a_t_t_e_r_n_-_l_i_s_t)) + Matches one of the given patterns + !!((_p_a_t_t_e_r_n_-_l_i_s_t)) + Matches anything except one of the given patterns + + QQuuoottee RReemmoovvaall + After the preceding expansions, all unquoted occurrences of the charac- + ters \\, '', and "" that did not result from one of the above expansions + are removed. + +RREEDDIIRREECCTTIIOONN + Before a command is executed, its input and output may be _r_e_d_i_r_e_c_t_e_d + using a special notation interpreted by the shell. Redirection 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 _s_i_m_p_l_e _c_o_m_m_a_n_d or may follow a _c_o_m_m_a_n_d. Redirections + are processed in the order they appear, from left to right. + + Each redirection that may be preceded by a file descriptor number may + instead be preceded by a word of the form {_v_a_r_n_a_m_e}. In this case, for + each redirection operator except >&- and <&-, the shell will allocate a + file descriptor greater than 10 and assign it to _v_a_r_n_a_m_e. If >&- or + <&- is preceded by {_v_a_r_n_a_m_e}, the value of _v_a_r_n_a_m_e defines the file + descriptor to close. + + In the following descriptions, if the file descriptor number is omit- + ted, and the first character of the redirection operator is <<, the re- + direction refers to the standard input (file descriptor 0). If the + first character of the redirection operator is >>, the redirection + refers to the standard output (file descriptor 1). + + The word following the redirection operator in the following descrip- + tions, unless otherwise noted, is subjected to brace expansion, tilde + expansion, parameter expansion, command substitution, arithmetic expan- + sion, quote removal, pathname expansion, and word splitting. If it + expands to more than one word, bbaasshh reports an error. + + Note that the order of redirections is significant. For example, the + command + + ls >> dirlist 2>>&&1 + + directs both standard output and standard error to the file _d_i_r_l_i_s_t, + while the command + + ls 2>>&&1 >> dirlist + + directs only the standard output to file _d_i_r_l_i_s_t, because the standard + error was duplicated from the standard output before the standard out- + put was redirected to _d_i_r_l_i_s_t. + + BBaasshh handles several filenames specially when they are used in redirec- + tions, as described in the following table: + + //ddeevv//ffdd//_f_d + If _f_d is a valid integer, file descriptor _f_d is dupli- + cated. + //ddeevv//ssttddiinn + File descriptor 0 is duplicated. + //ddeevv//ssttddoouutt + File descriptor 1 is duplicated. + //ddeevv//ssttddeerrrr + File descriptor 2 is duplicated. + //ddeevv//ttccpp//_h_o_s_t//_p_o_r_t + If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t + is an integer port number or service name, bbaasshh attempts + to open a TCP connection to the corresponding socket. + //ddeevv//uuddpp//_h_o_s_t//_p_o_r_t + If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t + is an integer port number or service name, bbaasshh attempts + to open a UDP connection to the corresponding socket. + + A failure to open or create a file causes the redirection to fail. + + Redirections using file descriptors greater than 9 should be used with + care, as they may conflict with file descriptors the shell uses inter- + nally. + + RReeddiirreeccttiinngg IInnppuutt + Redirection of input causes the file whose name results from the expan- + sion of _w_o_r_d to be opened for reading on file descriptor _n, or the + standard input (file descriptor 0) if _n is not specified. + + The general format for redirecting input is: + + [_n]<<_w_o_r_d + + RReeddiirreeccttiinngg OOuuttppuutt + Redirection of output causes the file whose name results from the + expansion of _w_o_r_d to be opened for writing on file descriptor _n, or the + standard output (file descriptor 1) if _n is not specified. If the file + does not exist it is created; if it does exist it is truncated to zero + size. + + The general format for redirecting output is: + + [_n]>>_w_o_r_d + + If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett + builtin has been enabled, the redirection will fail if the file whose + name results from the expansion of _w_o_r_d exists and is a regular file. + If the redirection operator is >>||, or the redirection operator is >> and + the nnoocclloobbbbeerr option to the sseett builtin command is not enabled, the re- + direction is attempted even if the file named by _w_o_r_d exists. + + AAppppeennddiinngg RReeddiirreecctteedd OOuuttppuutt + Redirection of output in this fashion causes the file whose name + results from the expansion of _w_o_r_d to be opened for appending on file + descriptor _n, or the standard output (file descriptor 1) if _n is not + specified. If the file does not exist it is created. + + The general format for appending output is: + + [_n]>>>>_w_o_r_d + + + RReeddiirreeccttiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr + This construct allows both the standard output (file descriptor 1) and + the standard error output (file descriptor 2) to be redirected to the + file whose name is the expansion of _w_o_r_d. + + There are two formats for redirecting standard output and standard + error: + + &&>>_w_o_r_d + and + >>&&_w_o_r_d + + Of the two forms, the first is preferred. This is semantically equiva- + lent to + + >>_w_o_r_d 2>>&&1 + + + AAppppeennddiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr + This construct allows both the standard output (file descriptor 1) and + the standard error output (file descriptor 2) to be appended to the + file whose name is the expansion of _w_o_r_d. + + The format for appending standard output and standard error is: + + &&>>>>_w_o_r_d + + This is semantically equivalent to + + >>>>_w_o_r_d 2>>&&1 + + HHeerree DDooccuummeennttss + This type of redirection instructs the shell to read input from the + current source until a line containing only _d_e_l_i_m_i_t_e_r (with no trailing + blanks) is seen. All of the lines read up to that point are then used + as the standard input for a command. + + The format of here-documents is: + + <<<<[--]_w_o_r_d + _h_e_r_e_-_d_o_c_u_m_e_n_t + _d_e_l_i_m_i_t_e_r + + No parameter expansion, command substitution, arithmetic expansion, or + pathname expansion is performed on _w_o_r_d. If any characters in _w_o_r_d are + quoted, the _d_e_l_i_m_i_t_e_r is the result of quote removal on _w_o_r_d, and the + lines in the here-document are not expanded. If _w_o_r_d is unquoted, all + lines of the here-document are subjected to parameter expansion, com- + mand substitution, and arithmetic expansion. In the latter case, the + character sequence \\<> is ignored, and \\ must be used to quote + the characters \\, $$, and ``. + + If the redirection operator is <<<<--, then all leading tab characters are + stripped from input lines and the line containing _d_e_l_i_m_i_t_e_r. This + allows here-documents within shell scripts to be indented in a natural + fashion. + + HHeerree SSttrriinnggss + A variant of here documents, the format is: + + <<<<<<_w_o_r_d + + The _w_o_r_d is expanded and supplied to the command on its standard input. + + DDuupplliiccaattiinngg FFiillee DDeessccrriippttoorrss + The redirection operator + + [_n]<<&&_w_o_r_d + + is used to duplicate input file descriptors. If _w_o_r_d expands to one or + more digits, the file descriptor denoted by _n is made to be a copy of + that file descriptor. If the digits in _w_o_r_d do not specify a file + descriptor open for input, a redirection error occurs. If _w_o_r_d evalu- + ates to --, file descriptor _n is closed. If _n is not specified, the + standard input (file descriptor 0) is used. + + The operator + + [_n]>>&&_w_o_r_d + + is used similarly to duplicate output file descriptors. If _n is not + specified, the standard output (file descriptor 1) is used. If the + digits in _w_o_r_d do not specify a file descriptor open for output, a re- + direction error occurs. As a special case, if _n is omitted, and _w_o_r_d + does not expand to one or more digits, the standard output and standard + error are redirected as described previously. + + MMoovviinngg FFiillee DDeessccrriippttoorrss + The redirection operator + + [_n]<<&&_d_i_g_i_t-- + + moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard + input (file descriptor 0) if _n is not specified. _d_i_g_i_t is closed after + being duplicated to _n. + + Similarly, the redirection operator + + [_n]>>&&_d_i_g_i_t-- + + moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard + output (file descriptor 1) if _n is not specified. + + OOppeenniinngg FFiillee DDeessccrriippttoorrss ffoorr RReeaaddiinngg aanndd WWrriittiinngg + The redirection operator + + [_n]<<>>_w_o_r_d + + causes the file whose name is the expansion of _w_o_r_d to be opened for + both reading and writing on file descriptor _n, or on file descriptor 0 + if _n is not specified. If the file does not exist, it is created. + +AALLIIAASSEESS + _A_l_i_a_s_e_s allow a string to be substituted for a word when it is used as + the first word of a simple command. The shell maintains a list of + aliases that may be set and unset with the aalliiaass and uunnaalliiaass builtin + commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The first word of each + simple command, if unquoted, is checked to see if it has an alias. If + so, that word is replaced by the text of the alias. The characters //, + $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s or quoting characters + listed above may not appear in an alias name. The replacement text may + contain any valid shell input, including shell metacharacters. The + first word of the replacement text is tested for aliases, but a word + that is identical to an alias being expanded is not expanded a second + time. This means that one may alias llss to llss --FF, for instance, and + bbaasshh does not try to recursively expand the replacement text. If the + last character of the alias value is a _b_l_a_n_k, then the next command + word following the alias is also checked for alias expansion. + + Aliases are created and listed with the aalliiaass command, and removed with + the uunnaalliiaass command. + + There is no mechanism for using arguments in the replacement text. If + arguments are needed, a shell function should be used (see FFUUNNCCTTIIOONNSS + below). + + Aliases are not expanded when the shell is not interactive, unless the + eexxppaanndd__aalliiaasseess shell option is set using sshhoopptt (see the description of + sshhoopptt under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). + + The rules concerning the definition and use of aliases are somewhat + confusing. BBaasshh always reads at least one complete line of input + 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 com- + pound 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 aalliiaass in com- + pound commands. + + For almost every purpose, aliases are superseded by shell functions. + +FFUUNNCCTTIIOONNSS + A shell function, defined as described above under SSHHEELLLL GGRRAAMMMMAARR, + stores a series of commands for later execution. When the name of a + shell function is used as a simple command name, the list of commands + associated with that function name is executed. Functions are executed + in the context of the current shell; no new process is created to + interpret them (contrast this with the execution of a shell script). + When a function is executed, the arguments to the function become the + positional parameters during its execution. The special parameter ## is + updated to reflect the change. Special parameter 0 is unchanged. The + first element of the FFUUNNCCNNAAMMEE variable is set to the name of the func- + tion while the function is executing. + + All other aspects of the shell execution environment are identical + between a function and its caller with these exceptions: the DDEEBBUUGG and + RREETTUURRNN traps (see the description of the ttrraapp builtin under SSHHEELLLL + BBUUIILLTTIINN CCOOMMMMAANNDDSS below) are not inherited unless the function has been + given the ttrraaccee attribute (see the description of the ddeeccllaarree builtin + below) or the --oo ffuunnccttrraaccee shell option has been enabled with the sseett + builtin (in which case all functions inherit the DDEEBBUUGG and RREETTUURRNN + traps), and the EERRRR trap is not inherited unless the --oo eerrrrttrraaccee shell + option has been enabled. + + Variables local to the function may be declared with the llooccaall builtin + command. Ordinarily, variables and their values are shared between the + function and its caller. + + If the builtin command rreettuurrnn is executed in a function, the function + completes and execution resumes with the next command after the func- + tion call. Any command associated with the RREETTUURRNN trap is executed + before execution resumes. When a function completes, the values of the + positional parameters and the special parameter ## are restored to the + values they had prior to the function's execution. + + Function names and definitions may be listed with the --ff option to the + ddeeccllaarree or ttyyppeesseett builtin commands. The --FF option to ddeeccllaarree or ttyyppee-- + sseett will list the function names only (and optionally the source file + and line number, if the eexxttddeebbuugg shell option is enabled). Functions + may be exported so that subshells automatically have them defined with + the --ff option to the eexxppoorrtt builtin. A function definition may be + deleted using the --ff option to the uunnsseett builtin. Note that shell + functions and variables with the same name may result in multiple iden- + tically-named entries in the environment passed to the shell's chil- + dren. Care should be taken in cases where this may cause a problem. + + Functions may be recursive. No limit is imposed on the number of + recursive calls. + +AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN + The shell allows arithmetic expressions to be evaluated, under certain + circumstances (see the lleett and ddeeccllaarree builtin commands and AArriitthhmmeettiicc + EExxppaannssiioonn). Evaluation is done in fixed-width integers with no check + for overflow, though division by 0 is trapped and flagged as an error. + The operators and their precedence, associativity, and values are the + same as in the C language. The following list of operators is grouped + into levels of equal-precedence operators. The levels are listed in + order of decreasing precedence. + + _i_d++++ _i_d---- + variable post-increment and post-decrement + ++++_i_d ----_i_d + variable pre-increment and pre-decrement + -- ++ unary minus and plus + !! ~~ logical and bitwise negation + **** exponentiation + ** // %% multiplication, division, remainder + ++ -- addition, subtraction + <<<< >>>> left and right bitwise shifts + <<== >>== << >> + comparison + ==== !!== equality and inequality + && bitwise AND + ^^ bitwise exclusive OR + || bitwise OR + &&&& logical AND + |||| logical OR + _e_x_p_r??_e_x_p_r::_e_x_p_r + conditional operator + == **== //== %%== ++== --== <<<<== >>>>== &&== ^^== ||== + assignment + _e_x_p_r_1 ,, _e_x_p_r_2 + comma + + Shell variables are allowed as operands; parameter expansion is per- + formed before the expression is evaluated. Within an expression, shell + variables may also be referenced by name without using the parameter + expansion syntax. A shell variable that is null or unset evaluates to + 0 when referenced by name without using the parameter expansion syntax. + The value of a variable is evaluated as an arithmetic expression when + it is referenced, or when a variable which has been given the _i_n_t_e_g_e_r + attribute using ddeeccllaarree --ii is assigned a value. A null value evaluates + to 0. A shell variable need not have its integer attribute turned on + to be used in an expression. + + Constants with a leading 0 are interpreted as octal numbers. A leading + 0x or 0X denotes hexadecimal. Otherwise, numbers take the form + [_b_a_s_e_#]n, where _b_a_s_e is a decimal number between 2 and 64 representing + the arithmetic base, and _n is a number in that base. If _b_a_s_e_# is omit- + ted, then base 10 is used. The digits greater than 9 are represented + by the lowercase letters, the uppercase letters, @, and _, in that + order. If _b_a_s_e is less than or equal to 36, lowercase and uppercase + letters may be used interchangeably to 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. + +CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS + Conditional expressions are used by the [[[[ compound command and the + tteesstt and [[ builtin commands to test file attributes and perform string + and arithmetic comparisons. Expressions are formed from the following + unary or binary primaries. If any _f_i_l_e argument to one of the pri- + maries is of the form _/_d_e_v_/_f_d_/_n, then file descriptor _n is checked. If + the _f_i_l_e argument to one of the primaries is one of _/_d_e_v_/_s_t_d_i_n, + _/_d_e_v_/_s_t_d_o_u_t, or _/_d_e_v_/_s_t_d_e_r_r, file descriptor 0, 1, or 2, respectively, + is checked. + + Unless otherwise specified, primaries that operate on files follow sym- + bolic links and operate on the target of the link, rather than the link + itself. + + When used with [[[[, The << and >> operators sort lexicographically using + the current locale. + + --aa _f_i_l_e + True if _f_i_l_e exists. + --bb _f_i_l_e + True if _f_i_l_e exists and is a block special file. + --cc _f_i_l_e + True if _f_i_l_e exists and is a character special file. + --dd _f_i_l_e + True if _f_i_l_e exists and is a directory. + --ee _f_i_l_e + True if _f_i_l_e exists. + --ff _f_i_l_e + True if _f_i_l_e exists and is a regular file. + --gg _f_i_l_e + True if _f_i_l_e exists and is set-group-id. + --hh _f_i_l_e + True if _f_i_l_e exists and is a symbolic link. + --kk _f_i_l_e + True if _f_i_l_e exists and its ``sticky'' bit is set. + --pp _f_i_l_e + True if _f_i_l_e exists and is a named pipe (FIFO). + --rr _f_i_l_e + True if _f_i_l_e exists and is readable. + --ss _f_i_l_e + True if _f_i_l_e exists and has a size greater than zero. + --tt _f_d True if file descriptor _f_d is open and refers to a terminal. + --uu _f_i_l_e + True if _f_i_l_e exists and its set-user-id bit is set. + --ww _f_i_l_e + True if _f_i_l_e exists and is writable. + --xx _f_i_l_e + True if _f_i_l_e exists and is executable. + --OO _f_i_l_e + True if _f_i_l_e exists and is owned by the effective user id. + --GG _f_i_l_e + True if _f_i_l_e exists and is owned by the effective group id. + --LL _f_i_l_e + True if _f_i_l_e exists and is a symbolic link. + --SS _f_i_l_e + True if _f_i_l_e exists and is a socket. + --NN _f_i_l_e + True if _f_i_l_e exists and has been modified since it was last + read. + _f_i_l_e_1 -nntt _f_i_l_e_2 + True if _f_i_l_e_1 is newer (according to modification date) than + _f_i_l_e_2, or if _f_i_l_e_1 exists and _f_i_l_e_2 does not. + _f_i_l_e_1 -oott _f_i_l_e_2 + True if _f_i_l_e_1 is older than _f_i_l_e_2, or if _f_i_l_e_2 exists and _f_i_l_e_1 + does not. + _f_i_l_e_1 --eeff _f_i_l_e_2 + True if _f_i_l_e_1 and _f_i_l_e_2 refer to the same device and inode num- + bers. + --oo _o_p_t_n_a_m_e + True if shell option _o_p_t_n_a_m_e is enabled. See the list of + options under the description of the --oo option to the sseett + builtin below. + --zz _s_t_r_i_n_g + True if the length of _s_t_r_i_n_g is zero. + _s_t_r_i_n_g + --nn _s_t_r_i_n_g + True if the length of _s_t_r_i_n_g is non-zero. + + _s_t_r_i_n_g_1 ==== _s_t_r_i_n_g_2 + _s_t_r_i_n_g_1 == _s_t_r_i_n_g_2 + True if the strings are equal. == should be used with the tteesstt + command for POSIX conformance. + + _s_t_r_i_n_g_1 !!== _s_t_r_i_n_g_2 + True if the strings are not equal. + + _s_t_r_i_n_g_1 << _s_t_r_i_n_g_2 + True if _s_t_r_i_n_g_1 sorts before _s_t_r_i_n_g_2 lexicographically. + + _s_t_r_i_n_g_1 >> _s_t_r_i_n_g_2 + True if _s_t_r_i_n_g_1 sorts after _s_t_r_i_n_g_2 lexicographically. + + _a_r_g_1 OOPP _a_r_g_2 + OOPP is one of --eeqq, --nnee, --lltt, --llee, --ggtt, or --ggee. These arithmetic + binary operators return true if _a_r_g_1 is equal to, not equal to, + less than, less than or equal to, greater than, or greater than + or equal to _a_r_g_2, respectively. _A_r_g_1 and _a_r_g_2 may be positive + or negative integers. + +SSIIMMPPLLEE CCOOMMMMAANNDD EEXXPPAANNSSIIOONN + When a simple command is executed, the shell performs the following + expansions, assignments, and redirections, from left to right. + + 1. The words that the parser has marked as variable assignments + (those preceding the command name) and redirections are saved + for later processing. + + 2. The words that are not variable assignments or redirections are + expanded. If any words remain after expansion, the first word + is taken to be the name of the command and the remaining words + are the arguments. + + 3. Redirections are performed as described above under RREEDDIIRREECCTTIIOONN. + + 4. The text after the == in each variable assignment undergoes tilde + expansion, parameter expansion, command substitution, arithmetic + expansion, and quote removal before being assigned to the vari- + able. + + If no command name results, the variable assignments affect the current + shell environment. Otherwise, the variables are added to the environ- + ment of the executed command and do not affect the current shell envi- + ronment. If any of the assignments attempts to assign a value to a + readonly variable, an error occurs, and the command exits with a non- + zero status. + + If no command name results, redirections are performed, but do not + affect the current shell environment. A redirection error causes the + command to exit with a non-zero status. + + If there is a command name left after expansion, execution proceeds as + described below. Otherwise, the command exits. If one of the expan- + sions contained a command substitution, the exit status of the command + is the exit status of the last command substitution performed. If + there were no command substitutions, the command exits with a status of + zero. + +CCOOMMMMAANNDD EEXXEECCUUTTIIOONN + After a command has been split into words, if it results in a simple + command and an optional list of arguments, the following actions are + taken. + + If the command name contains no slashes, the shell attempts to locate + it. If there exists a shell function by that name, that function is + invoked as described above in FFUUNNCCTTIIOONNSS. If the name does not match a + function, the shell searches for it in the list of shell builtins. If + a match is found, that builtin is invoked. + + If the name is neither a shell function nor a builtin, and contains no + slashes, bbaasshh searches each element of the PPAATTHH for a directory con- + taining an executable file by that name. BBaasshh uses a hash table to + remember the full pathnames of executable files (see hhaasshh under SSHHEELLLL + BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A full search of the directories in PPAATTHH is + performed only if the command is not found in the hash table. If the + search is unsuccessful, the shell searches for a defined shell function + named ccoommmmaanndd__nnoott__ffoouunndd__hhaannddllee. If that function exists, it is invoked + with the original command and the original command's arguments as its + arguments, and the function's exit status becomes the exit status of + the shell. If that function is not defined, the shell prints an error + message and returns an exit status of 127. + + If the search is successful, or if the command name contains one or + more slashes, the shell executes the named program in a separate execu- + tion environment. Argument 0 is set to the name given, and the remain- + ing arguments to the command are set to the arguments given, if any. + + If this execution fails because the file is not in executable format, + and the file is not a directory, it is assumed to be a _s_h_e_l_l _s_c_r_i_p_t, a + file containing shell commands. A subshell is spawned to execute it. + This subshell reinitializes itself, so that the effect is as if a new + shell had been invoked to handle the script, with the exception that + the locations of commands remembered by the parent (see hhaasshh below + under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS) are retained by the child. + + If the program is a file beginning with ##!!, the remainder of the first + line specifies an interpreter for the program. The shell executes the + specified interpreter on operating systems that do not handle this exe- + cutable format themselves. The arguments to the interpreter consist of + a single optional argument following the interpreter name on the first + line of the program, followed by the name of the program, followed by + the command arguments, if any. + +CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT + The shell has an _e_x_e_c_u_t_i_o_n _e_n_v_i_r_o_n_m_e_n_t, which consists of the follow- + ing: + + + +o open files inherited by the shell at invocation, as modified by + redirections supplied to the eexxeecc builtin + + +o the current working directory as set by ccdd, ppuusshhdd, or ppooppdd, or + inherited by the shell at invocation + + +o the file creation mode mask as set by uummaasskk or inherited from + the shell's parent + + +o current traps set by ttrraapp + + +o shell parameters that are set by variable assignment or with sseett + or inherited from the shell's parent in the environment + + +o shell functions defined during execution or inherited from the + shell's parent in the environment + + +o options enabled at invocation (either by default or with com- + mand-line arguments) or by sseett + + +o options enabled by sshhoopptt + + +o shell aliases defined with aalliiaass + + +o various process IDs, including those of background jobs, the + value of $$$$, and the value of PPPPIIDD + + When a simple command other than a builtin or shell function is to be + executed, it is invoked in a separate execution environment that con- + sists of the following. Unless otherwise noted, the values are inher- + ited from the shell. + + + +o the shell's open files, plus any modifications and additions + specified by redirections to the command + + +o the current working directory + + +o the file creation mode mask + + +o shell variables and functions marked for export, along with + variables exported for the command, passed in the environment + + +o traps caught by the shell are reset to the values inherited from + the shell's parent, and traps ignored by the shell are ignored + + A command invoked in this separate environment cannot affect the + shell's execution environment. + + Command substitution, commands grouped with parentheses, and asynchro- + nous commands are invoked in a subshell environment that is a duplicate + of the shell environment, except that traps caught by the shell are + reset to the values that the shell inherited from its parent at invoca- + tion. Builtin commands that are invoked as part of a pipeline are also + executed in a subshell environment. Changes made to the subshell envi- + ronment cannot affect the shell's execution environment. + + Subshells spawned to execute command substitutions inherit the value of + the --ee option from the parent shell. When not in posix mode, Bash + clears the --ee option in such subshells. + + If a command is followed by a && and job control is not active, the + default standard input for the command is the empty file _/_d_e_v_/_n_u_l_l. + Otherwise, the invoked command inherits the file descriptors of the + calling shell as modified by redirections. + +EENNVVIIRROONNMMEENNTT + When a program is invoked it is given an array of strings called the + _e_n_v_i_r_o_n_m_e_n_t. This is a list of _n_a_m_e-_v_a_l_u_e pairs, of the form + _n_a_m_e=_v_a_l_u_e. + + The shell provides several ways to manipulate the environment. On + invocation, the shell scans its own environment and creates a parameter + for each name found, automatically marking it for _e_x_p_o_r_t to child pro- + cesses. Executed commands inherit the environment. The eexxppoorrtt and + ddeeccllaarree --xx commands allow parameters and functions to be added to and + deleted from the environment. If the value of a parameter in the envi- + ronment is modified, the new value becomes part of the environment, + replacing the old. The environment inherited by any executed command + consists of the shell's initial environment, whose values may be modi- + fied in the shell, less any pairs removed by the uunnsseett command, plus + any additions via the eexxppoorrtt and ddeeccllaarree --xx commands. + + The environment for any _s_i_m_p_l_e _c_o_m_m_a_n_d or function may be augmented + temporarily by prefixing it with parameter assignments, as described + above in PPAARRAAMMEETTEERRSS. These assignment statements affect only the envi- + ronment seen by that command. + + If the --kk option is set (see the sseett builtin command below), then _a_l_l + parameter assignments are placed in the environment for a command, not + just those that precede the command name. + + When bbaasshh invokes an external command, the variable __ is set to the + full file name of the command and passed to that command in its envi- + ronment. + +EEXXIITT SSTTAATTUUSS + The exit status of an executed command is the value returned by the + _w_a_i_t_p_i_d system call or equivalent function. Exit statuses fall between + 0 and 255, though, as explained below, the shell may use values above + 125 specially. Exit statuses from shell builtins and compound commands + are also limited to this range. Under certain circumstances, the shell + will use special values to indicate specific failure modes. + + For the shell's purposes, a command which exits with a zero exit status + has succeeded. An exit status of zero indicates success. A non-zero + exit status indicates failure. When a command terminates on a fatal + signal _N, bbaasshh uses the value of 128+_N as the exit status. + + If a command is not found, the child process created to execute it + returns a status of 127. If a command is found but is not executable, + the return status is 126. + + If a command fails because of an error during expansion or redirection, + the exit status is greater than zero. + + Shell builtin commands return a status of 0 (_t_r_u_e) if successful, and + non-zero (_f_a_l_s_e) if an error occurs while they execute. All builtins + return an exit status of 2 to indicate incorrect usage. + + BBaasshh itself returns the exit status of the last command executed, + unless a syntax error occurs, in which case it exits with a non-zero + value. See also the eexxiitt builtin command below. + +SSIIGGNNAALLSS + When bbaasshh is interactive, in the absence of any traps, it ignores + SSIIGGTTEERRMM (so that kkiillll 00 does not kill an interactive shell), and SSIIGGIINNTT + is caught and handled (so that the wwaaiitt builtin is interruptible). In + all cases, bbaasshh ignores SSIIGGQQUUIITT. If job control is in effect, bbaasshh + ignores SSIIGGTTTTIINN, SSIIGGTTTTOOUU, and SSIIGGTTSSTTPP. + + Non-builtin commands run by bbaasshh have signal handlers set to the values + inherited by the shell from its parent. When job control is not in + effect, asynchronous commands ignore SSIIGGIINNTT and SSIIGGQQUUIITT in addition to + these inherited handlers. Commands run as a result of command substi- + tution ignore the keyboard-generated job control signals SSIIGGTTTTIINN, SSIIGGTT-- + TTOOUU, and SSIIGGTTSSTTPP. + + The shell exits by default upon receipt of a SSIIGGHHUUPP. Before exiting, + an interactive shell resends the SSIIGGHHUUPP to all jobs, running or + stopped. Stopped jobs are sent SSIIGGCCOONNTT to ensure that they receive the + SSIIGGHHUUPP. To prevent the shell from sending the signal to a particular + job, it should be removed from the jobs table with the ddiissoowwnn builtin + (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or marked to not receive SSIIGGHHUUPP + using ddiissoowwnn --hh. + + If the hhuuppoonneexxiitt shell option has been set with sshhoopptt, bbaasshh sends a + SSIIGGHHUUPP to all jobs when an interactive login shell exits. + + If bbaasshh is waiting for a command to complete and receives a signal for + which a trap has been set, the trap will not be executed until the com- + mand completes. When bbaasshh is waiting for an asynchronous command via + the wwaaiitt builtin, the reception of a signal for which a trap has been + set will cause the wwaaiitt builtin to return immediately with an exit sta- + tus greater than 128, immediately after which the trap is executed. + +JJOOBB CCOONNTTRROOLL + _J_o_b _c_o_n_t_r_o_l refers to the ability to selectively stop (_s_u_s_p_e_n_d) the + execution of processes and continue (_r_e_s_u_m_e) their execution at a later + point. A user typically employs this facility via an interactive + interface supplied jointly by the operating system kernel's terminal + driver and bbaasshh. + + The shell associates a _j_o_b with each pipeline. It keeps a table of + currently executing jobs, which may be listed with the jjoobbss command. + When bbaasshh starts a job asynchronously (in the _b_a_c_k_g_r_o_u_n_d), it prints a + line that looks like: + + [1] 25647 + + indicating that this job is job number 1 and that the process ID of the + last process in the pipeline associated with this job is 25647. All of + the processes in a single pipeline are members of the same job. BBaasshh + uses the _j_o_b abstraction as the basis for job control. + + To facilitate the implementation of the user interface to job control, + the operating system maintains the notion of a _c_u_r_r_e_n_t _t_e_r_m_i_n_a_l _p_r_o_c_e_s_s + _g_r_o_u_p _I_D. Members of this process group (processes whose process group + ID is equal to the current terminal process group ID) receive keyboard- + generated signals such as SSIIGGIINNTT. These processes are said to be in + the _f_o_r_e_g_r_o_u_n_d. _B_a_c_k_g_r_o_u_n_d processes are those whose process group ID + differs from the terminal's; such processes are immune to keyboard-gen- + erated signals. Only foreground processes are allowed to read from or, + if the user so specifies with stty tostop, write to the terminal. + Background processes which attempt to read from (write to when stty + tostop is in effect) the terminal are sent a SSIIGGTTTTIINN ((SSIIGGTTTTOOUU)) signal + by the kernel's terminal driver, which, unless caught, suspends the + process. + + If the operating system on which bbaasshh is running supports job control, + bbaasshh contains facilities to use it. Typing the _s_u_s_p_e_n_d character (typ- + ically ^^ZZ, Control-Z) while a process is running causes that process to + be stopped and returns control to bbaasshh. Typing the _d_e_l_a_y_e_d _s_u_s_p_e_n_d + character (typically ^^YY, Control-Y) causes the process to be stopped + when it attempts to read input from the terminal, and control to be + returned to bbaasshh. The user may then manipulate the state of this job, + using the bbgg command to continue it in the background, the ffgg command + to continue it in the foreground, or the kkiillll command to kill it. A ^^ZZ + takes effect immediately, and has the additional side effect of causing + pending output and typeahead to be discarded. + + There are a number of ways to refer to a job in the shell. The charac- + ter %% introduces a job specification (_j_o_b_s_p_e_c). Job number _n may be + referred to as %%nn. A job may also be referred to using a prefix of the + name used to start it, or using a substring that appears in its command + line. For example, %%ccee refers to a stopped ccee job. If a prefix + matches more than one job, bbaasshh reports an error. Using %%??ccee, on the + other hand, refers to any job containing the string ccee in its command + line. If the substring matches more than one job, bbaasshh reports an + error. The symbols %%%% and %%++ refer to the shell's notion of the _c_u_r_- + _r_e_n_t _j_o_b, which is the last job stopped while it was in the foreground + or started in the background. The _p_r_e_v_i_o_u_s _j_o_b may be referenced using + %%--. If there is only a single job, %%++ and %%-- can both be used to refer + to that job. In output pertaining to jobs (e.g., the output of the + jjoobbss command), the current job is always flagged with a ++, and the pre- + vious job with a --. A single % (with no accompanying job specifica- + tion) also refers to the current job. + + Simply naming a job can be used to bring it into the foreground: %%11 is + a synonym for ````ffgg %%11'''', bringing job 1 from the background into the + foreground. Similarly, ````%%11 &&'''' resumes job 1 in the background, + equivalent to ````bbgg %%11''''. + + The shell learns immediately whenever a job changes state. Normally, + bbaasshh waits until it is about to print a prompt before reporting changes + in a job's status so as to not interrupt any other output. If the --bb + option to the sseett builtin command is enabled, bbaasshh reports such changes + immediately. Any trap on SSIIGGCCHHLLDD is executed for each child that + exits. + + If an attempt to exit bbaasshh is made while jobs are stopped (or, if the + cchheecckkjjoobbss shell option has been enabled using the sshhoopptt builtin, run- + ning), the shell prints a warning message, and, if the cchheecckkjjoobbss option + is enabled, lists the jobs and their statuses. The jjoobbss command may + then be used to inspect their status. If a second attempt to exit is + made without an intervening command, the shell does not print another + warning, and any stopped jobs are terminated. + +PPRROOMMPPTTIINNGG + When executing interactively, bbaasshh displays the primary prompt PPSS11 when + it is ready to read a command, and the secondary prompt PPSS22 when it + needs more input to complete a command. BBaasshh allows these prompt + strings to be customized by inserting a number of backslash-escaped + special characters that are decoded as follows: + \\aa an ASCII bell character (07) + \\dd the date in "Weekday Month Date" format (e.g., "Tue May + 26") + \\DD{{_f_o_r_m_a_t}} + the _f_o_r_m_a_t is passed to _s_t_r_f_t_i_m_e(3) and the result is + inserted into the prompt string; an empty _f_o_r_m_a_t results + in a locale-specific time representation. The braces are + required + \\ee an ASCII escape character (033) + \\hh the hostname up to the first `.' + \\HH the hostname + \\jj the number of jobs currently managed by the shell + \\ll the basename of the shell's terminal device name + \\nn newline + \\rr carriage return + \\ss the name of the shell, the basename of $$00 (the portion + following the final slash) + \\tt the current time in 24-hour HH:MM:SS format + \\TT the current time in 12-hour HH:MM:SS format + \\@@ the current time in 12-hour am/pm format + \\AA the current time in 24-hour HH:MM format + \\uu the username of the current user + \\vv the version of bbaasshh (e.g., 2.00) + \\VV the release of bbaasshh, version + patch level (e.g., 2.00.0) + \\ww the current working directory, with $$HHOOMMEE abbreviated + with a tilde (uses the value of the PPRROOMMPPTT__DDIIRRTTRRIIMM vari- + able) + \\WW the basename of the current working directory, with $$HHOOMMEE + abbreviated with a tilde + \\!! the history number of this command + \\## the command number of this command + \\$$ if the effective UID is 0, a ##, otherwise a $$ + \\_n_n_n the character corresponding to the octal number _n_n_n + \\\\ a backslash + \\[[ begin a sequence of non-printing characters, which could + be used to embed a terminal control sequence into the + prompt + \\]] end a sequence of non-printing characters + + The command number and the history number are usually different: the + history number of a command is its position in the history list, which + may include commands restored from the history file (see HHIISSTTOORRYY + below), while the command number is the position in the sequence of + commands executed during the current shell session. After the string + is decoded, it is expanded via parameter expansion, command substitu- + tion, arithmetic expansion, and quote removal, subject to the value of + the pprroommppttvvaarrss shell option (see the description of the sshhoopptt command + under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). + +RREEAADDLLIINNEE + This is the library that handles reading input when using an interac- + tive shell, unless the ----nnooeeddiittiinngg option is given at shell invocation. + Line editing is also used when using the --ee option to the rreeaadd builtin. + By default, the line editing commands are similar to those of emacs. A + vi-style line editing interface is also available. Line editing can be + enabled at any time using the --oo eemmaaccss or --oo vvii options to the sseett + builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). To turn off line editing + after the shell is running, use the ++oo eemmaaccss or ++oo vvii options to the + sseett builtin. + + RReeaaddlliinnee NNoottaattiioonn + In this section, the emacs-style notation is used to denote keystrokes. + Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Simi- + larly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On key- + boards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key + then the _x key. This makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x + means ESC-Control-_x, or press the Escape key then hold the Control key + while pressing the _x key.) + + Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which normally act as + a repeat count. Sometimes, however, it is the sign of the argument + that is significant. Passing a negative argument to a command that + acts in the forward direction (e.g., kkiillll--lliinnee) causes that command to + act in a backward direction. Commands whose behavior with arguments + deviates from this are noted below. + + When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved + for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a + _k_i_l_l _r_i_n_g. Consecutive kills cause the text to be accumulated into one + unit, which can be yanked all at once. Commands which do not kill text + separate the chunks of text on the kill ring. + + RReeaaddlliinnee IInniittiiaalliizzaattiioonn + Readline is customized by putting commands in an initialization file + (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of + the IINNPPUUTTRRCC variable. If that variable is unset, the default is + _~_/_._i_n_p_u_t_r_c. When a program which uses the readline library starts up, + the initialization file is read, and the key bindings and variables are + set. There are only a few basic constructs allowed in the readline + initialization file. Blank lines are ignored. Lines beginning with a + ## are comments. Lines beginning with a $$ indicate conditional con- + structs. Other lines denote key bindings and variable settings. + + The default key-bindings may be changed with an _i_n_p_u_t_r_c file. Other + programs that use this library may add their own commands and bindings. + + For example, placing + + M-Control-u: universal-argument + or + C-Meta-u: universal-argument + into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- + _s_a_l_-_a_r_g_u_m_e_n_t. + + The following symbolic character names are recognized: _R_U_B_O_U_T, _D_E_L, + _E_S_C, _L_F_D, _N_E_W_L_I_N_E, _R_E_T, _R_E_T_U_R_N, _S_P_C, _S_P_A_C_E, and _T_A_B. + + In addition to command names, readline allows keys to be bound to a + string that is inserted when the key is pressed (a _m_a_c_r_o). + + RReeaaddlliinnee KKeeyy BBiinnddiinnggss + The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple. + All that is required is the name of the command or the text of a macro + and a key sequence to which it should be bound. The name may be speci- + fied in one of two ways: as a symbolic key name, possibly with _M_e_t_a_- or + _C_o_n_t_r_o_l_- prefixes, or as a key sequence. + + When using the form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_n_a_m_e is the name + of a key spelled out in English. For example: + + Control-u: universal-argument + Meta-Rubout: backward-kill-word + Control-o: "> output" + + In the above example, _C_-_u is bound to the function uunniivveerrssaall--aarrgguummeenntt, + _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to + run the macro expressed on the right hand side (that is, to insert the + text ``> output'' into the line). + + In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs + from kkeeyynnaammee above in that strings denoting an entire key sequence may + be specified by placing the sequence within double quotes. Some GNU + Emacs style key escapes can be used, as in the following example, but + the symbolic character names are not recognized. + + "\C-u": universal-argument + "\C-x\C-r": re-read-init-file + "\e[11~": "Function Key 1" + + In this example, _C_-_u is again bound to the function uunniivveerrssaall--aarrgguummeenntt. + _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is + bound to insert the text ``Function Key 1''. + + The full set of GNU Emacs style escape sequences is + \\CC-- control prefix + \\MM-- meta prefix + \\ee an escape character + \\\\ backslash + \\"" literal " + \\'' literal ' + + In addition to the GNU Emacs style escape sequences, a second set of + backslash escapes is available: + \\aa alert (bell) + \\bb backspace + \\dd delete + \\ff form feed + \\nn newline + \\rr carriage return + \\tt horizontal tab + \\vv vertical tab + \\_n_n_n the eight-bit character whose value is the octal value + _n_n_n (one to three digits) + \\xx_H_H the eight-bit character whose value is the hexadecimal + value _H_H (one or two hex digits) + + When entering the text of a macro, single or double quotes must be used + to indicate a macro definition. Unquoted text is assumed to be a func- + tion name. In the macro body, the backslash escapes described above + are expanded. Backslash will quote any other character in the macro + text, including " and '. + + BBaasshh allows the current readline key bindings to be displayed or modi- + fied with the bbiinndd builtin command. The editing mode may be switched + during interactive use by using the --oo option to the sseett builtin com- + mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). + + RReeaaddlliinnee VVaarriiaabblleess + Readline has variables that can be used to further customize its behav- + ior. A variable may be set in the _i_n_p_u_t_r_c file with a statement of the + form + + sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e + + Except where noted, readline variables can take the values OOnn or OOffff + (without regard to case). Unrecognized variable names are ignored. + When a variable value is read, empty or null values, "on" (case-insen- + sitive), and "1" are equivalent to OOnn. All other values are equivalent + to OOffff. The variables and their default values are: + + bbeellll--ssttyyllee ((aauuddiibbllee)) + Controls what happens when readline wants to ring the terminal + bell. If set to nnoonnee, readline never rings the bell. If set to + vviissiibbllee, readline uses a visible bell if one is available. If + set to aauuddiibbllee, readline attempts to ring the terminal's bell. + bbiinndd--ttttyy--ssppeecciiaall--cchhaarrss ((OOnn)) + If set to OOnn, readline attempts to bind the control characters + treated specially by the kernel's terminal driver to their read- + line equivalents. + ccoommmmeenntt--bbeeggiinn ((````##'''')) + The string that is inserted when the readline iinnsseerrtt--ccoommmmeenntt + command is executed. This command is bound to MM--## in emacs mode + and to ## in vi command mode. + ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff)) + If set to OOnn, readline performs filename matching and completion + in a case-insensitive fashion. + ccoommpplleettiioonn--pprreeffiixx--ddiissppllaayy--lleennggtthh ((00)) + The length in characters of the common prefix of a list of pos- + sible completions that is displayed without modification. When + set to a value greater than zero, common prefixes longer than + this value are replaced with an ellipsis when displaying possi- + ble completions. + ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000)) + This determines when the user is queried about viewing the num- + ber of possible completions generated by the ppoossssiibbllee--ccoommppllee-- + ttiioonnss command. It may be set to any integer value greater than + or equal to zero. If the number of possible completions is + greater than or equal to the value of this variable, the user is + asked whether or not he wishes to view them; otherwise they are + simply listed on the terminal. + ccoonnvveerrtt--mmeettaa ((OOnn)) + If set to OOnn, readline will convert characters with the eighth + bit set to an ASCII key sequence by stripping the eighth bit and + prefixing an escape character (in effect, using escape as the + _m_e_t_a _p_r_e_f_i_x). + ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) + If set to OOnn, readline will inhibit word completion. Completion + characters will be inserted into the line as if they had been + mapped to sseellff--iinnsseerrtt. + eeddiittiinngg--mmooddee ((eemmaaccss)) + Controls whether readline begins with a set of key bindings sim- + ilar to _e_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can be set to either eemmaaccss or + vvii. + eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn)) + When set to OOnn, on operating systems that indicate they support + it, readline echoes a character corresponding to a signal gener- + ated from the keyboard. + eennaabbllee--kkeeyyppaadd ((OOffff)) + When set to OOnn, readline will try to enable the application key- + pad when it is called. Some systems need this to enable the + arrow keys. + eennaabbllee--mmeettaa--kkeeyy ((OOnn)) + When set to OOnn, readline will try to enable any meta modifier + key the terminal claims to support when it is called. On many + terminals, the meta key is used to send eight-bit characters. + eexxppaanndd--ttiillddee ((OOffff)) + If set to oonn, tilde expansion is performed when readline + attempts word completion. + hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff)) + If set to oonn, the history code attempts to place point at the + same location on each history line retrieved with pprreevviioouuss--hhiiss-- + ttoorryy or nneexxtt--hhiissttoorryy. + hhiissttoorryy--ssiizzee ((00)) + Set the maximum number of history entries saved in the history + list. If set to zero, the number of entries in the history list + is not limited. + hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) + When set to OOnn, makes readline use a single line for display, + scrolling the input horizontally on a single screen line when it + becomes longer than the screen width rather than wrapping to a + new line. + iinnppuutt--mmeettaa ((OOffff)) + If set to OOnn, readline will enable eight-bit input (that is, it + will not strip the high bit from the characters it reads), + regardless of what the terminal claims it can support. The name + mmeettaa--ffllaagg is a synonym for this variable. + iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[CC--JJ'''')) + The string of characters that should terminate an incremental + search without subsequently executing the character as a com- + mand. If this variable has not been given a value, the charac- + ters _E_S_C and _C_-_J will terminate an incremental search. + kkeeyymmaapp ((eemmaaccss)) + Set the current readline keymap. The set of valid keymap names + is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_- + _m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is + equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the + value of eeddiittiinngg--mmooddee also affects the default keymap. + mmaarrkk--ddiirreeccttoorriieess ((OOnn)) + If set to OOnn, completed directory names have a slash appended. + mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) + If set to OOnn, history lines that have been modified are dis- + played with a preceding asterisk (**). + mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff)) + If set to OOnn, completed names which are symbolic links to direc- + tories have a slash appended (subject to the value of + mmaarrkk--ddiirreeccttoorriieess). + mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn)) + This variable, when set to OOnn, causes readline to match files + whose names begin with a `.' (hidden files) when performing + filename completion, unless the leading `.' is supplied by the + user in the filename to be completed. + oouuttppuutt--mmeettaa ((OOffff)) + If set to OOnn, readline will display characters with the eighth + bit set directly rather than as a meta-prefixed escape sequence. + ppaaggee--ccoommpplleettiioonnss ((OOnn)) + If set to OOnn, readline uses an internal _m_o_r_e-like pager to dis- + play a screenful of possible completions at a time. + pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) + If set to OOnn, readline will display completions with matches + sorted horizontally in alphabetical order, rather than down the + screen. + rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff)) + If set to oonn, readline will undo all changes to history lines + before returning when aacccceepptt--lliinnee is executed. By default, his- + tory lines may be modified and retain individual undo lists + across calls to rreeaaddlliinnee. + sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) + This alters the default behavior of the completion functions. + If set to oonn, words which have more than one possible completion + cause the matches to be listed immediately instead of ringing + the bell. + sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff)) + This alters the default behavior of the completion functions in + a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to oonn, words + which have more than one possible completion without any possi- + ble partial completion (the possible completions don't share a + common prefix) cause the matches to be listed immediately + instead of ringing the bell. + sskkiipp--ccoommpplleetteedd--tteexxtt ((OOffff)) + If set to OOnn, this alters the default completion behavior when + inserting a single match into the line. It's only active when + performing completion in the middle of a word. If enabled, + readline does not insert characters from the completion that + match characters after point in the word being completed, so + portions of the word following the cursor are not duplicated. + vviissiibbllee--ssttaattss ((OOffff)) + If set to OOnn, a character denoting a file's type as reported by + _s_t_a_t(2) is appended to the filename when listing possible com- + pletions. + + RReeaaddlliinnee CCoonnddiittiioonnaall CCoonnssttrruuccttss + Readline implements a facility similar in spirit to the conditional + compilation features of the C preprocessor which allows key bindings + and variable settings to be performed as the result of tests. There + are four parser directives used. + + $$iiff The $$iiff construct allows bindings to be made based on the edit- + ing mode, the terminal being used, or the application using + readline. The text of the test extends to the end of the line; + no characters are required to isolate it. + + mmooddee The mmooddee== form of the $$iiff directive is used to test + whether readline is in emacs or vi mode. This may be + used in conjunction with the sseett kkeeyymmaapp command, for + instance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and + _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in + emacs mode. + + tteerrmm The tteerrmm== form may be used to include terminal-specific + key bindings, perhaps to bind the key sequences output by + the terminal's function keys. The word on the right side + of the == is tested against the both full name of the ter- + minal and the portion of the terminal name before the + first --. This allows _s_u_n to match both _s_u_n and _s_u_n_-_c_m_d, + for instance. + + aapppplliiccaattiioonn + The aapppplliiccaattiioonn construct is used to include application- + specific settings. Each program using the readline + library sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization + file can test for a particular value. This could be used + to bind key sequences to functions useful for a specific + program. For instance, the following command adds a key + sequence that quotes the current or previous word in + Bash: + + $$iiff Bash + # Quote the current or previous word + "\C-xq": "\eb\"\ef\"" + $$eennddiiff + + $$eennddiiff This command, as seen in the previous example, terminates an $$iiff + command. + + $$eellssee Commands in this branch of the $$iiff directive are executed if the + test fails. + + $$iinncclluuddee + This directive takes a single filename as an argument and reads + commands and bindings from that file. For example, the follow- + ing directive would read _/_e_t_c_/_i_n_p_u_t_r_c: + + $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c + + SSeeaarrcchhiinngg + Readline provides commands for searching through the command history + (see HHIISSTTOORRYY below) for lines containing a specified string. There are + two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l. + + Incremental searches begin before the user has finished typing the + search string. As each character of the search string is typed, read- + line displays the next entry from the history matching the string typed + so far. An incremental search requires only as many characters as + needed to find the desired history entry. The characters present in + the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an + incremental search. If that variable has not been assigned a value the + Escape and Control-J characters will terminate an incremental search. + Control-G will abort an incremental search and restore the original + line. When the search is terminated, the history entry containing the + search string becomes the current line. + + To find other matching entries in the history list, type Control-S or + Control-R as appropriate. This will search backward or forward in the + history for the next entry matching the search string typed so far. + Any other key sequence bound to a readline command will terminate the + search and execute that command. For instance, a _n_e_w_l_i_n_e will termi- + nate the search and accept the line, thereby executing the command from + the history list. + + Readline remembers the last incremental search string. If two Control- + Rs are typed without any intervening characters defining a new search + string, any remembered search string is used. + + Non-incremental searches read the entire search string before starting + to search for matching history lines. The search string may be typed + by the user or be part of the contents of the current line. + + RReeaaddlliinnee CCoommmmaanndd NNaammeess + The following is a list of the names of the commands and the default + key sequences to which they are bound. Command names without an accom- + panying key sequence are unbound by default. In the following descrip- + tions, _p_o_i_n_t refers to the current cursor position, and _m_a_r_k refers to + a cursor position saved by the sseett--mmaarrkk command. The text between the + point and mark is referred to as the _r_e_g_i_o_n. + + CCoommmmaannddss ffoorr MMoovviinngg + bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa)) + Move to the start of the current line. + eenndd--ooff--lliinnee ((CC--ee)) + Move to the end of the line. + ffoorrwwaarrdd--cchhaarr ((CC--ff)) + Move forward a character. + bbaacckkwwaarrdd--cchhaarr ((CC--bb)) + Move back a character. + ffoorrwwaarrdd--wwoorrdd ((MM--ff)) + Move forward to the end of the next word. Words are composed of + alphanumeric characters (letters and digits). + bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) + Move back to the start of the current or previous word. Words + are composed of alphanumeric characters (letters and digits). + sshheellll--ffoorrwwaarrdd--wwoorrdd + Move forward to the end of the next word. Words are delimited + by non-quoted shell metacharacters. + sshheellll--bbaacckkwwaarrdd--wwoorrdd + Move back to the start of the current or previous word. Words + are delimited by non-quoted shell metacharacters. + cclleeaarr--ssccrreeeenn ((CC--ll)) + Clear the screen leaving the current line at the top of the + screen. With an argument, refresh the current line without + clearing the screen. + rreeddrraaww--ccuurrrreenntt--lliinnee + Refresh the current line. + + CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy + aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) + Accept the line regardless of where the cursor is. If this line + is non-empty, add it to the history list according to the state + of the HHIISSTTCCOONNTTRROOLL variable. If the line is a modified history + line, then restore the history line to its original state. + pprreevviioouuss--hhiissttoorryy ((CC--pp)) + Fetch the previous command from the history list, moving back in + the list. + nneexxtt--hhiissttoorryy ((CC--nn)) + Fetch the next command from the history list, moving forward in + the list. + bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) + Move to the first line in the history. + eenndd--ooff--hhiissttoorryy ((MM-->>)) + Move to the end of the input history, i.e., the line currently + being entered. + rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) + Search backward starting at the current line and moving `up' + through the history as necessary. This is an incremental + search. + ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) + Search forward starting at the current line and moving `down' + through the history as necessary. This is an incremental + search. + nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) + Search backward through the history starting at the current line + using a non-incremental search for a string supplied by the + user. + nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) + Search forward through the history using a non-incremental + search for a string supplied by the user. + hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd + Search forward through the history for the string of characters + between the start of the current line and the point. This is a + non-incremental search. + hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd + Search backward through the history for the string of characters + between the start of the current line and the point. This is a + non-incremental search. + yyaannkk--nntthh--aarrgg ((MM--CC--yy)) + Insert the first argument to the previous command (usually the + second word on the previous line) at point. With an argument _n, + insert the _nth word from the previous command (the words in the + previous command begin with word 0). A negative argument + inserts the _nth word from the end of the previous command. Once + the argument _n is computed, the argument is extracted as if the + "!_n" history expansion had been specified. + yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) + Insert the last argument to the previous command (the last word + of the previous history entry). With an argument, behave + exactly like yyaannkk--nntthh--aarrgg. Successive calls to yyaannkk--llaasstt--aarrgg + move back through the history list, inserting the last argument + of each line in turn. The history expansion facilities are used + to extract the last argument, as if the "!$" history expansion + had been specified. + sshheellll--eexxppaanndd--lliinnee ((MM--CC--ee)) + Expand the line as the shell does. This performs alias and his- + tory expansion as well as all of the shell word expansions. See + HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for a description of history expansion. + hhiissttoorryy--eexxppaanndd--lliinnee ((MM--^^)) + Perform history expansion on the current line. See HHIISSTTOORRYY + EEXXPPAANNSSIIOONN below for a description of history expansion. + mmaaggiicc--ssppaaccee + Perform history expansion on the current line and insert a + space. See HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for a description of history + expansion. + aalliiaass--eexxppaanndd--lliinnee + Perform alias expansion on the current line. See AALLIIAASSEESS above + for a description of alias expansion. + hhiissttoorryy--aanndd--aalliiaass--eexxppaanndd--lliinnee + Perform history and alias expansion on the current line. + iinnsseerrtt--llaasstt--aarrgguummeenntt ((MM--..,, MM--__)) + A synonym for yyaannkk--llaasstt--aarrgg. + ooppeerraattee--aanndd--ggeett--nneexxtt ((CC--oo)) + Accept the current line for execution and fetch the next line + relative to the current line from the history for editing. Any + argument is ignored. + eeddiitt--aanndd--eexxeeccuuttee--ccoommmmaanndd ((CC--xxCC--ee)) + Invoke an editor on the current command line, and execute the + result as shell commands. BBaasshh attempts to invoke $$VVIISSUUAALL, + $$EEDDIITTOORR, and _e_m_a_c_s as the editor, in that order. + + CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt + ddeelleettee--cchhaarr ((CC--dd)) + 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 ddeelleettee--cchhaarr, then return EEOOFF. + bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) + Delete the character behind the cursor. When given a numeric + argument, save the deleted text on the kill ring. + ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr + Delete the character under the cursor, unless the cursor is at + the end of the line, in which case the character behind the cur- + sor is deleted. + qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) + Add the next character typed to the line verbatim. This is how + to insert characters like CC--qq, for example. + ttaabb--iinnsseerrtt ((CC--vv TTAABB)) + Insert a tab character. + sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) + Insert the character typed. + ttrraannssppoossee--cchhaarrss ((CC--tt)) + Drag the character before point forward over the character at + point, moving point forward as well. If point is at the end of + the line, then this transposes the two characters before point. + Negative arguments have no effect. + ttrraannssppoossee--wwoorrddss ((MM--tt)) + Drag the word before point past the word after point, moving + point over that word as well. If point is at the end of the + line, this transposes the last two words on the line. + uuppccaassee--wwoorrdd ((MM--uu)) + Uppercase the current (or following) word. With a negative + argument, uppercase the previous word, but do not move point. + ddoowwnnccaassee--wwoorrdd ((MM--ll)) + Lowercase the current (or following) word. With a negative + argument, lowercase the previous word, but do not move point. + ccaappiittaalliizzee--wwoorrdd ((MM--cc)) + Capitalize the current (or following) word. With a negative + argument, capitalize the previous word, but do not move point. + oovveerrwwrriittee--mmooddee + Toggle overwrite mode. With an explicit positive numeric argu- + ment, switches to overwrite mode. With an explicit non-positive + numeric argument, switches to insert mode. This command affects + only eemmaaccss mode; vvii mode does overwrite differently. Each call + to _r_e_a_d_l_i_n_e_(_) starts in insert mode. In overwrite mode, charac- + ters bound to sseellff--iinnsseerrtt replace the text at point rather than + pushing the text to the right. Characters bound to bbaacckk-- + wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a + space. By default, this command is unbound. + + KKiilllliinngg aanndd YYaannkkiinngg + kkiillll--lliinnee ((CC--kk)) + Kill the text from point to the end of the line. + bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) + Kill backward to the beginning of the line. + uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) + Kill backward from point to the beginning of the line. The + killed text is saved on the kill-ring. + kkiillll--wwhhoollee--lliinnee + Kill all characters on the current line, no matter where point + is. + kkiillll--wwoorrdd ((MM--dd)) + Kill from point to the end of the current word, or if between + words, to the end of the next word. Word boundaries are the + same as those used by ffoorrwwaarrdd--wwoorrdd. + bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) + Kill the word behind point. Word boundaries are the same as + those used by bbaacckkwwaarrdd--wwoorrdd. + sshheellll--kkiillll--wwoorrdd ((MM--dd)) + Kill from point to the end of the current word, or if between + words, to the end of the next word. Word boundaries are the + same as those used by sshheellll--ffoorrwwaarrdd--wwoorrdd. + sshheellll--bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) + Kill the word behind point. Word boundaries are the same as + those used by sshheellll--bbaacckkwwaarrdd--wwoorrdd. + uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) + Kill the word behind point, using white space as a word bound- + ary. The killed text is saved on the kill-ring. + uunniixx--ffiilleennaammee--rruubboouutt + Kill the word behind point, using white space and the slash + character as the word boundaries. The killed text is saved on + the kill-ring. + ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) + Delete all spaces and tabs around point. + kkiillll--rreeggiioonn + Kill the text in the current region. + ccooppyy--rreeggiioonn--aass--kkiillll + Copy the text in the region to the kill buffer. + ccooppyy--bbaacckkwwaarrdd--wwoorrdd + Copy the word before point to the kill buffer. The word bound- + aries are the same as bbaacckkwwaarrdd--wwoorrdd. + ccooppyy--ffoorrwwaarrdd--wwoorrdd + Copy the word following point to the kill buffer. The word + boundaries are the same as ffoorrwwaarrdd--wwoorrdd. + yyaannkk ((CC--yy)) + Yank the top of the kill ring into the buffer at point. + yyaannkk--ppoopp ((MM--yy)) + Rotate the kill ring, and yank the new top. Only works follow- + ing yyaannkk or yyaannkk--ppoopp. + + NNuummeerriicc AArrgguummeennttss + ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) + Add this digit to the argument already accumulating, or start a + new argument. M-- starts a negative argument. + uunniivveerrssaall--aarrgguummeenntt + This is another way to specify an argument. If this command is + followed by one or more digits, optionally with a leading minus + sign, those digits define the argument. If the command is fol- + lowed by digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the + numeric argument, but is otherwise ignored. As a special case, + if this command is immediately followed by a character that is + neither a digit 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 argu- + ment count four, a second time makes the argument count sixteen, + and so on. + + CCoommpplleettiinngg + ccoommpplleettee ((TTAABB)) + Attempt to perform completion on the text before point. BBaasshh + attempts completion treating the text as a variable (if the text + begins with $$), username (if the text begins with ~~), hostname + (if the text begins with @@), or command (including aliases and + functions) in turn. If none of these produces a match, filename + completion is attempted. + ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) + List the possible completions of the text before point. + iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) + Insert all completions of the text before point that would have + been generated by ppoossssiibbllee--ccoommpplleettiioonnss. + mmeennuu--ccoommpplleettee + Similar to ccoommpplleettee, but replaces the word to be completed with + a single match from the list of possible completions. Repeated + execution of mmeennuu--ccoommpplleettee steps through the list of possible + completions, inserting each match in turn. At the end of the + list of completions, the bell is rung (subject to the setting of + bbeellll--ssttyyllee) and the original text is restored. An argument of _n + moves _n positions forward in the list of matches; a negative + argument may be used to move backward through the list. This + command is intended to be bound to TTAABB, but is unbound by + default.cc + mmeennuu--ccoommpplleettee--kkrrdd + Identicwwal to mmeennuu--ccoommpplleettee, but moves backward through the list + of possible completions, as if mmeennuu--ccoommpplleettee had been given a + negative argument. This command is unbound by default. + ddeelleettee--cchhaarr--oorr--lliisstt + Deletes the character under the cursor if not at the beginning + or end of the line (like ddeelleettee--cchhaarr). If at the end of the + line, behaves identically to ppoossssiibbllee--ccoommpplleettiioonnss. This command + is unbound by default. + ccoommpplleettee--ffiilleennaammee ((MM--//)) + Attempt filename completion on the text before point. + ppoossssiibbllee--ffiilleennaammee--ccoommpplleettiioonnss ((CC--xx //)) + List the possible completions of the text before point, treating + it as a filename. + ccoommpplleettee--uusseerrnnaammee ((MM--~~)) + Attempt completion on the text before point, treating it as a + username. + ppoossssiibbllee--uusseerrnnaammee--ccoommpplleettiioonnss ((CC--xx ~~)) + List the possible completions of the text before point, treating + it as a username. + ccoommpplleettee--vvaarriiaabbllee ((MM--$$)) + Attempt completion on the text before point, treating it as a + shell variable. + ppoossssiibbllee--vvaarriiaabbllee--ccoommpplleettiioonnss ((CC--xx $$)) + List the possible completions of the text before point, treating + it as a shell variable. + ccoommpplleettee--hhoossttnnaammee ((MM--@@)) + Attempt completion on the text before point, treating it as a + hostname. + ppoossssiibbllee--hhoossttnnaammee--ccoommpplleettiioonnss ((CC--xx @@)) + List the possible completions of the text before point, treating + it as a hostname. + ccoommpplleettee--ccoommmmaanndd ((MM--!!)) + Attempt completion on the text before point, treating it as a + command name. Command completion attempts to match the text + against aliases, reserved words, shell functions, shell + builtins, and finally executable filenames, in that order. + ppoossssiibbllee--ccoommmmaanndd--ccoommpplleettiioonnss ((CC--xx !!)) + List the possible completions of the text before point, treating + it as a command name. + ddyynnaammiicc--ccoommpplleettee--hhiissttoorryy ((MM--TTAABB)) + Attempt completion on the text before point, comparing the text + against lines from the history list for possible completion + matches. + ddaabbbbrreevv--eexxppaanndd + Attempt menu completion on the text before point, comparing the + text against lines from the history list for possible completion + matches. + ccoommpplleettee--iinnttoo--bbrraacceess ((MM--{{)) + Perform filename completion and insert the list of possible com- + pletions enclosed within braces so the list is available to the + shell (see BBrraaccee EExxppaannssiioonn above). + + KKeeyybbooaarrdd MMaaccrrooss + ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) + Begin saving the characters typed into the current keyboard + macro. + eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) + Stop saving the characters typed into the current keyboard macro + and store the definition. + ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) + Re-execute the last keyboard macro defined, by making the char- + acters in the macro appear as if typed at the keyboard. + + MMiisscceellllaanneeoouuss + rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr)) + Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any + bindings or variable assignments found there. + aabboorrtt ((CC--gg)) + Abort the current editing command and ring the terminal's bell + (subject to the setting of bbeellll--ssttyyllee). + ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......)) + If the metafied character _x is lowercase, run the command that + is bound to the corresponding uppercase character. + pprreeffiixx--mmeettaa ((EESSCC)) + Metafy the next character typed. EESSCC ff is equivalent to MMeettaa--ff. + uunnddoo ((CC--__,, CC--xx CC--uu)) + Incremental undo, separately remembered for each line. + rreevveerrtt--lliinnee ((MM--rr)) + Undo all changes made to this line. This is like executing the + uunnddoo command enough times to return the line to its initial + state. + ttiillddee--eexxppaanndd ((MM--&&)) + Perform tilde expansion on the current word. + sseett--mmaarrkk ((CC--@@,, MM--<>)) + Set the mark to the point. If a numeric argument is supplied, + the mark is set to that position. + eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) + Swap the point with the mark. The current cursor position is + set to the saved position, and the old cursor position is saved + as the mark. + cchhaarraacctteerr--sseeaarrcchh ((CC--]])) + A character is read and point is moved to the next occurrence of + that character. A negative count searches for previous occur- + rences. + cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]])) + A character is read and point is moved to the previous occur- + rence of that character. A negative count searches for subse- + quent occurrences. + sskkiipp--ccssii--sseeqquueennccee (()) + Read enough characters to consume a multi-key sequence such as + those defined for keys like Home and End. Such sequences begin + with a Control Sequence Indicator (CSI), usually ESC-[. If this + sequence is bound to "\[", keys producing such sequences will + have no effect unless explicitly bound to a readline command, + instead of inserting stray characters into the editing buffer. + This is unbound by default, but usually bound to ESC-[. + iinnsseerrtt--ccoommmmeenntt ((MM--##)) + Without a numeric argument, the value of the readline ccoomm-- + mmeenntt--bbeeggiinn variable is inserted at the beginning of the current + line. If a numeric argument is supplied, this command acts as a + toggle: if the characters at the beginning of the line do not + match the value of ccoommmmeenntt--bbeeggiinn, the value is inserted, other- + wise the characters in ccoommmmeenntt--bbeeggiinn are deleted from the begin- + ning of the line. In either case, the line is accepted as if a + newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn + causes this command to make the current line a shell comment. + If a numeric argument causes the comment character to be + removed, the line will be executed by the shell. + gglloobb--ccoommpplleettee--wwoorrdd ((MM--gg)) + The word before point is treated as a pattern for pathname + expansion, with an asterisk implicitly appended. This pattern + is used to generate a list of matching file names for possible + completions. + gglloobb--eexxppaanndd--wwoorrdd ((CC--xx **)) + The word before point is treated as a pattern for pathname + expansion, and the list of matching file names is inserted, + replacing the word. If a numeric argument is supplied, an + asterisk is appended before pathname expansion. + gglloobb--lliisstt--eexxppaannssiioonnss ((CC--xx gg)) + The list of expansions that would have been generated by + gglloobb--eexxppaanndd--wwoorrdd is displayed, and the line is redrawn. If a + numeric argument is supplied, an asterisk is appended before + pathname expansion. + dduummpp--ffuunnccttiioonnss + Print all of the functions and their key bindings to the read- + line output stream. If a numeric argument is supplied, the out- + put is formatted in such a way that it can be made part of an + _i_n_p_u_t_r_c file. + dduummpp--vvaarriiaabblleess + Print all of the settable readline variables and their values to + the readline output stream. If a numeric argument is supplied, + the output is formatted in such a way that it can be made part + of an _i_n_p_u_t_r_c file. + dduummpp--mmaaccrrooss + Print all of the readline key sequences bound to macros and the + strings they output. If a numeric argument is supplied, the + output is formatted in such a way that it can be made part of an + _i_n_p_u_t_r_c file. + ddiissppllaayy--sshheellll--vveerrssiioonn ((CC--xx CC--vv)) + Display version information about the current instance of bbaasshh. + + PPrrooggrraammmmaabbllee CCoommpplleettiioonn + When word completion is attempted for an argument to a command for + which a completion specification (a _c_o_m_p_s_p_e_c) has been defined using + the ccoommpplleettee builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below), the pro- + grammable completion facilities are invoked. + + First, the command name is identified. If the command word is the + empty string (completion attempted at the beginning of an empty line), + any compspec defined with the --EE option to ccoommpplleettee is used. If a + compspec has been defined for that command, the compspec is used to + generate the list of possible completions for the word. If the command + word is a full pathname, a compspec for the full pathname is searched + for first. If no compspec is found for the full pathname, an attempt + is made to find a compspec for the portion following the final slash. + If those searches to not result in a compspec, any compspec defined + with the --DD option to ccoommpplleettee is used as the default. + + Once a compspec has been found, it is used to generate the list of + matching words. If a compspec is not found, the default bbaasshh comple- + tion as described above under CCoommpplleettiinngg is performed. + + First, the actions specified by the compspec are used. Only matches + which are prefixed by the word being completed are returned. When the + --ff or --dd option is used for filename or directory name completion, the + shell variable FFIIGGNNOORREE is used to filter the matches. + + Any completions specified by a pathname expansion pattern to the --GG + option are generated next. The words generated by the pattern need not + match the word being completed. The GGLLOOBBIIGGNNOORREE shell variable is not + used to filter the matches, but the FFIIGGNNOORREE variable is used. + + Next, the string specified as the argument to the --WW option is consid- + ered. The string is first split using the characters in the IIFFSS spe- + cial variable as delimiters. Shell quoting is honored. Each word is + then expanded using brace expansion, tilde expansion, parameter and + variable expansion, command substitution, and arithmetic expansion, as + described above under EEXXPPAANNSSIIOONN. The results are split using the rules + described above under WWoorrdd SSpplliittttiinngg. The results of the expansion are + prefix-matched against the word being completed, and the matching words + become the possible completions. + + After these matches have been generated, any shell function or command + specified with the --FF and --CC options is invoked. When the command or + function is invoked, the CCOOMMPP__LLIINNEE, CCOOMMPP__PPOOIINNTT, CCOOMMPP__KKEEYY, and CCOOMMPP__TTYYPPEE + variables are assigned values as described above under SShheellll VVaarriiaabblleess. + If a shell function is being invoked, the CCOOMMPP__WWOORRDDSS and CCOOMMPP__CCWWOORRDD + variables are also set. When the function or command is invoked, the + first argument 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. + + Any function specified with --FF is invoked first. The function may use + any of the shell facilities, including the ccoommppggeenn builtin described + below, to generate the matches. It must put the possible completions + in the CCOOMMPPRREEPPLLYY array variable. + + Next, any command specified with the --CC option is invoked in an envi- + ronment equivalent to command substitution. It should print a list of + completions, one per line, to the standard output. Backslash may be + used to escape a newline, if necessary. + + After all of the possible completions are generated, any filter speci- + fied with the --XX option is applied to the list. The filter is a pat- + tern as used for pathname expansion; a && in the pattern is replaced + with the text of the word being completed. A literal && may be escaped + with a backslash; the backslash is removed before attempting a match. + Any completion that matches the pattern will be removed from the list. + A leading !! negates the pattern; in this case any completion not match- + ing the pattern will be removed. + + Finally, any prefix and suffix specified with the --PP and --SS options are + added to each member of the completion list, and the result is returned + to the readline completion code as the list of possible completions. + + If the previously-applied actions do not generate any matches, and the + --oo ddiirrnnaammeess option was supplied to ccoommpplleettee when the compspec was + defined, directory name completion is attempted. + + If the --oo pplluussddiirrss option was supplied to ccoommpplleettee when the compspec + was defined, directory name completion is attempted and any matches are + added to the results of the other actions. + + By default, if a compspec is found, whatever it generates is returned + to the completion code as the full set of possible completions. The + default bbaasshh completions are not attempted, and the readline default of + filename completion is disabled. If the --oo bbaasshhddeeffaauulltt option was sup- + plied to ccoommpplleettee when the compspec was defined, the bbaasshh default com- + pletions are attempted if the compspec generates no matches. If the --oo + ddeeffaauulltt option was supplied to ccoommpplleettee when the compspec was defined, + readline's default completion will be performed if the compspec (and, + if attempted, the default bbaasshh completions) generate no matches. + + When a compspec indicates that directory name completion is desired, + the programmable completion functions force readline to append a slash + to completed names which are symbolic links to directories, subject to + the value of the mmaarrkk--ddiirreeccttoorriieess readline variable, regardless of the + setting of the mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess readline variable. + + There is some support for dynamically modifying completions. This is + most useful when used in combination with a default completion speci- + fied with ccoommpplleettee --DD. It's possible for shell functions executed as + completion handlers to indicate that completion should be retried by + returning an exit status of 124. If a shell function returns 124, and + changes the compspec associated with the command on which completion is + being attempted (supplied as the first argument when the function is + executed), programmable completion restarts from the beginning, with an + attempt to find a compspec for that command. This allows a set of com- + pletions to be built dynamically as completion is attempted, rather + than being loaded all at once. + + For instance, assuming that there is a library of compspecs, each kept + in a file corresponding to the name of the command, the following + default completion function would load completions dynamically: + + _completion_loader() + { + . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 + } + complete -D -F _completion_loader + + +HHIISSTTOORRYY + When the --oo hhiissttoorryy option to the sseett builtin is enabled, the shell + provides access to the _c_o_m_m_a_n_d _h_i_s_t_o_r_y, the list of commands previously + typed. The value of the HHIISSTTSSIIZZEE variable is used as the number of + commands to save in a history list. The text of the last HHIISSTTSSIIZZEE com- + mands (default 500) is saved. The shell stores each command in the + history list prior to parameter and variable expansion (see EEXXPPAANNSSIIOONN + above) but after history expansion is performed, subject to the values + of the shell variables HHIISSTTIIGGNNOORREE and HHIISSTTCCOONNTTRROOLL. + + On startup, the history is initialized from the file named by the vari- + able HHIISSTTFFIILLEE (default _~_/_._b_a_s_h___h_i_s_t_o_r_y). The file named by the value + of HHIISSTTFFIILLEE is truncated, if necessary, to contain no more than the + number of lines specified by the value of HHIISSTTFFIILLEESSIIZZEE. When the his- + tory file is read, lines beginning with the history comment character + followed immediately by a digit are interpreted as timestamps for the + preceding history line. These timestamps are optionally displayed + depending on the value of the HHIISSTTTTIIMMEEFFOORRMMAATT variable. When an inter- + active shell exits, the last $$HHIISSTTSSIIZZEE lines are copied from the his- + tory list to $$HHIISSTTFFIILLEE. If the hhiissttaappppeenndd shell option is enabled (see + the description of sshhoopptt under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below), the lines + are appended to the history file, otherwise the history file is over- + written. If HHIISSTTFFIILLEE is unset, or if the history file is unwritable, + the history is not saved. If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, time + stamps are written to the history file, marked with the history comment + character, so they may be preserved across shell sessions. This uses + the history comment character to distinguish timestamps from other his- + tory lines. After saving the history, the history file is truncated to + contain no more than HHIISSTTFFIILLEESSIIZZEE lines. If HHIISSTTFFIILLEESSIIZZEE is not set, + no truncation is performed. + + The builtin command ffcc (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) may be used + to list or edit and re-execute a portion of the history list. The hhiiss-- + ttoorryy builtin may be used to display or modify the history list and + manipulate the history file. When using command-line editing, search + commands are available in each editing mode that provide access to the + history list. + + The shell allows control over which commands are saved on the history + list. The HHIISSTTCCOONNTTRROOLL and HHIISSTTIIGGNNOORREE variables may be set to cause the + shell to save only a subset of the commands entered. The ccmmddhhiisstt shell + option, if enabled, causes the shell to attempt to save each line of a + multi-line command in the same history entry, adding semicolons where + necessary to preserve syntactic correctness. The lliitthhiisstt shell option + causes the shell to save the command with embedded newlines instead of + semicolons. See the description of the sshhoopptt builtin below under SSHHEELLLL + BBUUIILLTTIINN CCOOMMMMAANNDDSS for information on setting and unsetting shell + options. + +HHIISSTTOORRYY EEXXPPAANNSSIIOONN + The shell supports a history expansion feature that is similar to the + history expansion in ccsshh.. This section describes what syntax features + are available. This feature is enabled by default for interactive + shells, and can be disabled using the ++HH option to the sseett builtin com- + mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). Non-interactive shells do not + perform history expansion by default. + + History expansions introduce words from the history list into the input + stream, making it easy to repeat commands, insert the arguments to a + previous command into the current input line, or fix errors in previous + commands quickly. + + History expansion is performed immediately after a complete line is + read, before the shell breaks it into words. It takes place in two + parts. The first is to determine which line from the history list to + use during substitution. The second is to select portions of that line + for inclusion into the current one. The line selected from the history + is the _e_v_e_n_t, and the portions of that line that are acted upon are + _w_o_r_d_s. Various _m_o_d_i_f_i_e_r_s are available to manipulate the selected + words. The line is broken into words in the same fashion as when read- + ing input, so that several _m_e_t_a_c_h_a_r_a_c_t_e_r-separated words surrounded by + quotes are considered one word. History expansions are introduced by + the appearance of the history expansion character, which is !! by + default. Only backslash (\\) and single quotes can quote the history + expansion character. + + Several characters inhibit history expansion if found immediately fol- + lowing the history expansion character, even if it is unquoted: space, + tab, newline, carriage return, and ==. If the eexxttgglloobb shell option is + enabled, (( will also inhibit expansion. + + Several shell options settable with the sshhoopptt builtin may be used to + tailor the behavior of history expansion. If the hhiissttvveerriiffyy shell + option is enabled (see the description of the sshhoopptt builtin below), and + rreeaaddlliinnee is being used, history substitutions are not immediately + passed to the shell parser. Instead, the expanded line is reloaded + into the rreeaaddlliinnee editing buffer for further modification. If rreeaaddlliinnee + is being used, and the hhiissttrreeeeddiitt shell option is enabled, a failed + history substitution will be reloaded into the rreeaaddlliinnee editing buffer + for correction. The --pp option to the hhiissttoorryy builtin command may be + used to see what a history expansion will do before using it. The --ss + option to the hhiissttoorryy builtin may be used to add commands to the end of + the history list without actually executing them, so that they are + available for subsequent recall. + + The shell allows control of the various characters used by the history + expansion mechanism (see the description of hhiissttcchhaarrss above under SShheellll + VVaarriiaabblleess). The shell uses the history comment character to mark his- + tory timestamps when writing the history file. + + EEvveenntt DDeessiiggnnaattoorrss + An event designator is a reference to a command line entry in the his- + tory list. + + !! Start a history substitution, except when followed by a bbllaannkk, + newline, carriage return, = or ( (when the eexxttgglloobb shell option + is enabled using the sshhoopptt builtin). + !!_n Refer to command line _n. + !!--_n Refer to the current command line minus _n. + !!!! Refer to the previous command. This is a synonym for `!-1'. + !!_s_t_r_i_n_g + Refer to the most recent command starting with _s_t_r_i_n_g. + !!??_s_t_r_i_n_g[[??]] + Refer to the most recent command containing _s_t_r_i_n_g. The trail- + ing ?? may be omitted if _s_t_r_i_n_g is followed immediately by a new- + line. + ^^_s_t_r_i_n_g_1^^_s_t_r_i_n_g_2^^ + Quick substitution. Repeat the last command, replacing _s_t_r_i_n_g_1 + with _s_t_r_i_n_g_2. Equivalent to ``!!:s/_s_t_r_i_n_g_1/_s_t_r_i_n_g_2/'' (see MMoodd-- + iiffiieerrss below). + !!## The entire command line typed so far. + + WWoorrdd DDeessiiggnnaattoorrss + Word designators are used to select desired words from the event. A :: + separates the event specification from the word designator. It may be + omitted if the word designator begins with a ^^, $$, **, --, or %%. Words + are numbered from the beginning of the line, with the first word being + denoted by 0 (zero). Words are inserted into the current line sepa- + rated by single spaces. + + 00 ((zzeerroo)) + The zeroth word. For the shell, this is the command word. + _n The _nth word. + ^^ The first argument. That is, word 1. + $$ The last argument. + %% The word matched by the most recent `?_s_t_r_i_n_g?' search. + _x--_y A range of words; `-_y' abbreviates `0-_y'. + ** All of the words but the zeroth. This is a synonym for `_1_-_$'. + It is not an error to use ** if there is just one word in the + event; the empty string is returned in that case. + xx** Abbreviates _x_-_$. + xx-- Abbreviates _x_-_$ like xx**, but omits the last word. + + If a word designator is supplied without an event specification, the + previous command is used as the event. + + MMooddiiffiieerrss + After the optional word designator, there may appear a sequence of one + or more of the following modifiers, each preceded by a `:'. + + hh Remove a trailing file name component, leaving only the head. + tt Remove all leading file name components, leaving the tail. + rr Remove a trailing suffix of the form _._x_x_x, leaving the basename. + ee Remove all but the trailing suffix. + pp Print the new command but do not execute it. + qq Quote the substituted words, escaping further substitutions. + xx Quote the substituted words as with qq, but break into words at + bbllaannkkss and newlines. + ss//_o_l_d//_n_e_w// + Substitute _n_e_w for the first occurrence of _o_l_d in the event + line. Any delimiter can be used in place of /. The final + delimiter is optional if it is the last character of the event + line. The delimiter may be quoted in _o_l_d and _n_e_w with a single + backslash. If & appears in _n_e_w, it is replaced by _o_l_d. A sin- + gle backslash will quote the &. If _o_l_d is null, it is set to + the last _o_l_d substituted, or, if no previous history substitu- + tions took place, the last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search. + && Repeat the previous substitution. + gg Cause changes to be applied over the entire event line. This is + used in conjunction with `::ss' (e.g., `::ggss//_o_l_d//_n_e_w//') or `::&&'. + If used with `::ss', any delimiter can be used in place of /, and + the final delimiter is optional if it is the last character of + the event line. An aa may be used as a synonym for gg. + GG Apply the following `ss' modifier once to each word in the event + line. + +SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS + Unless otherwise noted, each builtin command documented in this section + as accepting options preceded by -- accepts ---- to signify the end of the + options. The ::, ttrruuee, ffaallssee, and tteesstt builtins do not accept options + and do not treat ---- specially. The eexxiitt, llooggoouutt, bbrreeaakk, ccoonnttiinnuuee, lleett, + and sshhiifftt builtins accept and process arguments beginning with -- with- + out requiring ----. Other builtins that accept arguments but are not + specified as accepting options interpret arguments beginning with -- as + invalid options and require ---- to prevent this interpretation. + :: [_a_r_g_u_m_e_n_t_s] + No effect; the command does nothing beyond expanding _a_r_g_u_m_e_n_t_s + and performing any specified redirections. A zero exit code is + returned. + + .. _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] + ssoouurrccee _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] + Read and execute commands from _f_i_l_e_n_a_m_e in the current shell + environment and return the exit status of the last command exe- + cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash, file + names in PPAATTHH are used to find the directory containing _f_i_l_e_- + _n_a_m_e. The file searched for in PPAATTHH need not be executable. + When bbaasshh is not in _p_o_s_i_x _m_o_d_e, the current directory is + searched if no file is found in PPAATTHH. If the ssoouurrcceeppaatthh option + to the sshhoopptt builtin command is turned off, the PPAATTHH is not + searched. If any _a_r_g_u_m_e_n_t_s are supplied, they become the posi- + tional parameters when _f_i_l_e_n_a_m_e is executed. Otherwise the + positional parameters are unchanged. The return status is the + status of the last command exited within the script (0 if no + commands are executed), and false if _f_i_l_e_n_a_m_e is not found or + cannot be read. + + aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] + AAlliiaass with no arguments or with the --pp option prints the list of + aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output. When + arguments are supplied, an alias is defined for each _n_a_m_e whose + _v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word + to be checked for alias substitution when the alias is expanded. + For each _n_a_m_e in the argument list for which no _v_a_l_u_e is sup- + plied, the name and value of the alias is printed. AAlliiaass + returns true unless a _n_a_m_e is given for which no alias has been + defined. + + bbgg [_j_o_b_s_p_e_c ...] + Resume each suspended job _j_o_b_s_p_e_c in the background, as if it + had been started with &&. If _j_o_b_s_p_e_c is not present, the shell's + notion of the _c_u_r_r_e_n_t _j_o_b is used. bbgg _j_o_b_s_p_e_c returns 0 unless + run when job control is disabled or, when run with job control + enabled, any specified _j_o_b_s_p_e_c was not found or was started + without job control. + + bbiinndd [--mm _k_e_y_m_a_p] [--llppssvvPPSSVV] + bbiinndd [--mm _k_e_y_m_a_p] [--qq _f_u_n_c_t_i_o_n] [--uu _f_u_n_c_t_i_o_n] [--rr _k_e_y_s_e_q] + bbiinndd [--mm _k_e_y_m_a_p] --ff _f_i_l_e_n_a_m_e + bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d + bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e + bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d + Display current rreeaaddlliinnee key and function bindings, bind a key + sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee + variable. Each non-option argument is a command as it would + appear in _._i_n_p_u_t_r_c, but each binding or command must be passed + as a separate argument; e.g., '"\C-x\C-r": re-read-init-file'. + Options, if supplied, have the following meanings: + --mm _k_e_y_m_a_p + Use _k_e_y_m_a_p as the keymap to be affected by the subsequent + bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_- + _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, + and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is + equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. + --ll List the names of all rreeaaddlliinnee functions. + --pp Display rreeaaddlliinnee function names and bindings in such a + way that they can be re-read. + --PP List current rreeaaddlliinnee function names and bindings. + --ss Display rreeaaddlliinnee key sequences bound to macros and the + strings they output in such a way that they can be re- + read. + --SS Display rreeaaddlliinnee key sequences bound to macros and the + strings they output. + --vv Display rreeaaddlliinnee variable names and values in such a way + that they can be re-read. + --VV List current rreeaaddlliinnee variable names and values. + --ff _f_i_l_e_n_a_m_e + Read key bindings from _f_i_l_e_n_a_m_e. + --qq _f_u_n_c_t_i_o_n + Query about which keys invoke the named _f_u_n_c_t_i_o_n. + --uu _f_u_n_c_t_i_o_n + Unbind all keys bound to the named _f_u_n_c_t_i_o_n. + --rr _k_e_y_s_e_q + Remove any current binding for _k_e_y_s_e_q. + --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d + Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is + entered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets + the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- + lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT variable to the + current location of the insertion point. If the executed + command changes the value of RREEAADDLLIINNEE__LLIINNEE or RREEAADD-- + LLIINNEE__PPOOIINNTT, those new values will be reflected in the + editing state. + + The return value is 0 unless an unrecognized option is given or + an error occurred. + + bbrreeaakk [_n] + Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is + specified, break _n levels. _n must be >= 1. If _n is greater + than the number of enclosing loops, all enclosing loops are + exited. The return value is 0 unless _n is not greater than or + equal to 1. + + bbuuiillttiinn _s_h_e_l_l_-_b_u_i_l_t_i_n [_a_r_g_u_m_e_n_t_s] + Execute the specified shell builtin, passing it _a_r_g_u_m_e_n_t_s, and + return its exit status. This is useful when defining a function + whose name is the same as a shell builtin, retaining the func- + tionality of the builtin within the function. The ccdd builtin is + commonly redefined this way. The return status is false if + _s_h_e_l_l_-_b_u_i_l_t_i_n is not a shell builtin command. + + ccaalllleerr [_e_x_p_r] + Returns the context of any active subroutine call (a shell func- + tion or a script executed with the .. or ssoouurrccee builtins. With- + out _e_x_p_r, ccaalllleerr displays the line number and source filename of + the current subroutine call. If a non-negative integer is sup- + plied as _e_x_p_r, ccaalllleerr displays the line number, subroutine name, + and source file corresponding to that position in the current + execution call stack. This extra information may be used, for + example, to print a stack trace. The current frame is frame 0. + The return value is 0 unless the shell is not executing a sub- + routine call or _e_x_p_r does not correspond to a valid position in + the call stack. + + ccdd [--LL||--PP] [_d_i_r] + Change the current directory to _d_i_r. The variable HHOOMMEE is the + default _d_i_r. The variable CCDDPPAATTHH defines the search path for + the directory containing _d_i_r. Alternative directory names in + CCDDPPAATTHH are separated by a colon (:). A null directory name in + CCDDPPAATTHH is the same as the current directory, i.e., ``..''. If + _d_i_r begins with a slash (/), then CCDDPPAATTHH is not used. The --PP + option says to use the physical directory structure instead of + following symbolic links (see also the --PP option to the sseett + builtin command); the --LL option forces symbolic links to be fol- + lowed. An argument of -- is equivalent to $$OOLLDDPPWWDD. If a non- + empty directory name from CCDDPPAATTHH is used, or if -- is the first + argument, and the directory change is successful, the absolute + pathname of the new working directory is written to the standard + output. The return value is true if the directory was success- + fully changed; false otherwise. + + ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...] + Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function + lookup. Only builtin commands or commands found in the PPAATTHH are + executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is + performed using a default value for PPAATTHH that is guaranteed to + find all of the standard utilities. If either the --VV or --vv + option is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv + option causes a single word indicating the command or file name + used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a + more verbose description. If the --VV or --vv option is supplied, + the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If + neither option is supplied and an error occurred or _c_o_m_m_a_n_d can- + not be found, the exit status is 127. Otherwise, the exit sta- + tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d. + + ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d] + Generate possible completion matches for _w_o_r_d according to the + _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee + builtin with the exception of --pp and --rr, and write the matches + to the standard output. When using the --FF or --CC options, the + various shell variables set by the programmable completion + facilities, while available, will not have useful values. + + The matches will be generated in the same way as if the pro- + grammable completion code had generated them directly from a + completion specification with the same flags. If _w_o_r_d is speci- + fied, only those completions matching _w_o_r_d will be displayed. + + The return value is true unless an invalid option is supplied, + or no matches were generated. + + ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEE] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- + _p_a_t] [--WW _w_o_r_d_l_i_s_t] [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] + [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_f_i_x] _n_a_m_e [_n_a_m_e _._._.] + ccoommpplleettee --pprr [--DDEE] [_n_a_m_e ...] + Specify how arguments to each _n_a_m_e should be completed. If the + --pp option is supplied, or if no options are supplied, existing + completion specifications are printed in a way that allows them + to be reused as input. The --rr option removes a completion spec- + ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- + pletion specifications. The --DD option indicates that the + remaining options and actions should apply to the ``default'' + command completion; that is, completion attempted on a command + for which no completion has previously been defined. The --EE + option indicates that the remaining options and actions should + apply to ``empty'' command completion; that is, completion + attempted on a blank line. + + The process of applying these completion specifications when + word completion is attempted is described above under PPrroo-- + ggrraammmmaabbllee CCoommpplleettiioonn. + + Other options, if specified, have the following meanings. The + arguments to the --GG, --WW, and --XX options (and, if necessary, the + --PP and --SS options) should be quoted to protect them from expan- + sion before the ccoommpplleettee builtin is invoked. + --oo _c_o_m_p_-_o_p_t_i_o_n + The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- + spec's behavior beyond the simple generation of comple- + tions. _c_o_m_p_-_o_p_t_i_o_n may be one of: + bbaasshhddeeffaauulltt + Perform the rest of the default bbaasshh completions + if the compspec generates no matches. + ddeeffaauulltt Use readline's default filename completion if + the compspec generates no matches. + ddiirrnnaammeess + Perform directory name completion if the comp- + spec generates no matches. + ffiilleennaammeess + Tell readline that the compspec generates file- + names, so it can perform any filename-specific + processing (like adding a slash to directory + names, quoting special characters, or suppress- + ing trailing spaces). Intended to be used with + shell functions. + nnoossppaaccee Tell readline not to append a space (the + default) to words completed at the end of the + line. + pplluussddiirrss + After any matches defined by the compspec are + generated, directory name completion is + attempted and any matches are added to the + results of the other actions. + --AA _a_c_t_i_o_n + The _a_c_t_i_o_n may be one of the following to generate a + list of possible completions: + aalliiaass Alias names. May also be specified as --aa. + aarrrraayyvvaarr + Array variable names. + bbiinnddiinngg RReeaaddlliinnee key binding names. + bbuuiillttiinn Names of shell builtin commands. May also be + specified as --bb. + ccoommmmaanndd Command names. May also be specified as --cc. + ddiirreeccttoorryy + Directory names. May also be specified as --dd. + ddiissaabblleedd + Names of disabled shell builtins. + eennaabblleedd Names of enabled shell builtins. + eexxppoorrtt Names of exported shell variables. May also be + specified as --ee. + ffiillee File names. May also be specified as --ff. + ffuunnccttiioonn + Names of shell functions. + ggrroouupp Group names. May also be specified as --gg. + hheellppttooppiicc + Help topics as accepted by the hheellpp builtin. + hhoossttnnaammee + Hostnames, as taken from the file specified by + the HHOOSSTTFFIILLEE shell variable. + jjoobb Job names, if job control is active. May also + be specified as --jj. + kkeeyywwoorrdd Shell reserved words. May also be specified as + --kk. + rruunnnniinngg Names of running jobs, if job control is active. + sseerrvviiccee Service names. May also be specified as --ss. + sseettoopptt Valid arguments for the --oo option to the sseett + builtin. + sshhoopptt Shell option names as accepted by the sshhoopptt + builtin. + ssiiggnnaall Signal names. + ssttooppppeedd Names of stopped jobs, if job control is active. + uusseerr User names. May also be specified as --uu. + vvaarriiaabbllee + Names of all shell variables. May also be spec- + ified as --vv. + --GG _g_l_o_b_p_a_t + The pathname expansion pattern _g_l_o_b_p_a_t is expanded to + generate the possible completions. + --WW _w_o_r_d_l_i_s_t + The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS + special variable as delimiters, and each resultant word + is expanded. The possible completions are the members + of the resultant list which match the word being com- + pleted. + --CC _c_o_m_m_a_n_d + _c_o_m_m_a_n_d is executed in a subshell environment, and its + output is used as the possible completions. + --FF _f_u_n_c_t_i_o_n + The shell function _f_u_n_c_t_i_o_n is executed in the current + shell environment. When it finishes, the possible com- + pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY + array variable. + --XX _f_i_l_t_e_r_p_a_t + _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. + It is applied to the list of possible completions gener- + ated by the preceding options and arguments, and each + completion matching _f_i_l_t_e_r_p_a_t is removed from the list. + A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this + case, any completion not matching _f_i_l_t_e_r_p_a_t is removed. + --PP _p_r_e_f_i_x + _p_r_e_f_i_x is added at the beginning of each possible com- + pletion after all other options have been applied. + --SS _s_u_f_f_i_x + _s_u_f_f_i_x is appended to each possible completion after all + other options have been applied. + + The return value is true unless an invalid option is supplied, + an option other than --pp or --rr is supplied without a _n_a_m_e argu- + ment, an attempt is made to remove a completion specification + for a _n_a_m_e for which no specification exists, or an error occurs + adding a completion specification. + + ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEE] [++oo _o_p_t_i_o_n] [_n_a_m_e] + Modify completion options for each _n_a_m_e according to the + _o_p_t_i_o_ns, or for the currently-execution completion if no _n_a_m_es + are supplied. If no _o_p_t_i_o_ns are given, display the completion + options for each _n_a_m_e or the current completion. The possible + values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin + described above. The --DD option indicates that the remaining + options should apply to the ``default'' command completion; that + is, completion attempted on a command for which no completion + has previously been defined. The --EE option indicates that the + remaining options should apply to ``empty'' command completion; + that is, completion attempted on a blank line. + + The return value is true unless an invalid option is supplied, an + attempt is made to modify the options for a _n_a_m_e for which no comple- + tion specification exists, or an output error occurs. + + ccoonnttiinnuuee [_n] + Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or + sseelleecctt loop. If _n is specified, resume at the _nth enclosing + loop. _n must be >= 1. If _n is greater than the number of + enclosing loops, the last enclosing loop (the ``top-level'' + loop) is resumed. The return value is 0 unless _n is not greater + than or equal to 1. + + ddeeccllaarree [--aaAAffFFiillrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] + ttyyppeesseett [--aaAAffFFiillrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] + Declare variables and/or give them attributes. If no _n_a_m_es are + given then display the values of variables. The --pp option will + display the attributes and values of each _n_a_m_e. When --pp is used + with _n_a_m_e arguments, additional options are ignored. When --pp is + supplied without _n_a_m_e arguments, it will display the attributes + and values of all variables having the attributes specified by + the additional options. If no other options are supplied with + --pp, ddeeccllaarree will display the attributes and values of all shell + variables. The --ff option will restrict the display to shell + functions. The --FF option inhibits the display of function defi- + nitions; only the function name and attributes are printed. If + the eexxttddeebbuugg shell option is enabled using sshhoopptt, the source + file name and line number where the function is defined are dis- + played as well. The --FF option implies --ff. The following + options can be used to restrict output to variables with the + specified attribute or to give variables attributes: + --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss + above). + --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss + above). + --ff Use function names only. + --ii The variable is treated as an integer; arithmetic evalua- + tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when + the variable is assigned a value. + --ll When the variable is assigned a value, all upper-case + characters are converted to lower-case. The upper-case + attribute is disabled. + --rr Make _n_a_m_es readonly. These names cannot then be assigned + values by subsequent assignment statements or unset. + --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions + inherit the DDEEBBUUGG and RREETTUURRNN traps from the calling + shell. The trace attribute has no special meaning for + variables. + --uu When the variable is assigned a value, all lower-case + characters are converted to upper-case. The lower-case + attribute is disabled. + --xx Mark _n_a_m_es for export to subsequent commands via the + environment. + + Using `+' instead of `-' turns off the attribute instead, with + the exceptions that ++aa may not be used to destroy an array vari- + able and ++rr will not remove the readonly attribute. When used + in a function, makes each _n_a_m_e local, as with the llooccaall command. + If a variable name is followed by =_v_a_l_u_e, the value of the vari- + able is set to _v_a_l_u_e. The return value is 0 unless an invalid + option is encountered, an attempt is made to define a function + using ``-f foo=bar'', an attempt is made to assign a value to a + readonly variable, an attempt is made to assign a value to an + array variable without using the compound assignment syntax (see + AArrrraayyss above), one of the _n_a_m_e_s is not a valid shell variable + name, an attempt is made to turn off readonly status for a read- + only variable, an attempt is made to turn off array status for + an array variable, or an attempt is made to display a non-exis- + tent function with --ff. + + ddiirrss [[++_n]] [[--_n]] [[--ccppllvv]] + Without options, displays the list of currently remembered + directories. The default display is on a single line with + directory names separated by spaces. Directories are added to + the list with the ppuusshhdd command; the ppooppdd command removes + entries from the list. + ++_n Displays the _nth entry counting from the left of the list + shown by ddiirrss when invoked without options, starting with + zero. + --_n Displays the _nth entry counting from the right of the + list shown by ddiirrss when invoked without options, starting + with zero. + --cc Clears the directory stack by deleting all of the + entries. + --ll Produces a longer listing; the default listing format + uses a tilde to denote the home directory. + --pp Print the directory stack with one entry per line. + --vv Print the directory stack with one entry per line, pre- + fixing each entry with its index in the stack. + + The return value is 0 unless an invalid option is supplied or _n + indexes beyond the end of the directory stack. + + ddiissoowwnn [--aarr] [--hh] [_j_o_b_s_p_e_c ...] + Without options, each _j_o_b_s_p_e_c is removed from the table of + active jobs. If _j_o_b_s_p_e_c is not present, and neither --aa nor --rr + is supplied, the shell's notion of the _c_u_r_r_e_n_t _j_o_b is used. If + the --hh option is given, each _j_o_b_s_p_e_c is not removed from the ta- + ble, but is marked so that SSIIGGHHUUPP is not sent to the job if the + shell receives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is present, and neither + the --aa nor the --rr option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. + If no _j_o_b_s_p_e_c is supplied, the --aa option means to remove or mark + all jobs; the --rr option without a _j_o_b_s_p_e_c argument restricts + operation to running jobs. The return value is 0 unless a _j_o_b_- + _s_p_e_c does not specify a valid job. + + eecchhoo [--nneeEE] [_a_r_g ...] + Output the _a_r_gs, separated by spaces, followed by a newline. + The return status is always 0. If --nn is specified, the trailing + newline is suppressed. If the --ee option is given, interpreta- + tion of the following backslash-escaped characters is enabled. + The --EE option disables the interpretation of these escape char- + acters, even on systems where they are interpreted by default. + The xxppgg__eecchhoo shell option may be used to dynamically determine + whether or not eecchhoo expands these escape characters by default. + eecchhoo does not interpret ---- to mean the end of options. eecchhoo + interprets the following escape sequences: + \\aa alert (bell) + \\bb backspace + \\cc suppress further output + \\ee an escape character + \\ff form feed + \\nn new line + \\rr carriage return + \\tt horizontal tab + \\vv vertical tab + \\\\ backslash + \\00_n_n_n the eight-bit character whose value is the octal value + _n_n_n (zero to three octal digits) + \\xx_H_H the eight-bit character whose value is the hexadecimal + value _H_H (one or two hex digits) + + eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...] + Enable and disable builtin shell commands. Disabling a builtin + allows a disk command which has the same name as a shell builtin + to be executed without specifying a full pathname, even though + the shell normally searches for builtins before disk commands. + If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are + enabled. For example, to use the tteesstt binary found via the PPAATTHH + instead of the shell builtin version, run ``enable -n test''. + The --ff option means to load the new builtin command _n_a_m_e from + shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. + The --dd option will delete a builtin previously loaded with --ff. + If no _n_a_m_e arguments are given, or if the --pp option is supplied, + a list of shell builtins is printed. With no other option argu- + ments, the list consists of all enabled shell builtins. If --nn + is supplied, only disabled builtins are printed. If --aa is sup- + plied, the list printed includes all builtins, with an indica- + tion of whether or not each is enabled. If --ss is supplied, the + output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return + value is 0 unless a _n_a_m_e is not a shell builtin or there is an + error loading a new builtin from a shared object. + + eevvaall [_a_r_g ...] + The _a_r_gs are read and concatenated together into a single com- + mand. This command is then read and executed by the shell, and + its exit status is returned as the value of eevvaall. If there are + no _a_r_g_s, or only null arguments, eevvaall returns 0. + + eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]] + If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process + is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If + the --ll option is supplied, the shell places a dash at the begin- + ning of the zeroth argument passed to _c_o_m_m_a_n_d. This is what + _l_o_g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with + an empty environment. If --aa is supplied, the shell passes _n_a_m_e + as the zeroth argument to the executed command. If _c_o_m_m_a_n_d can- + not be executed for some reason, a non-interactive shell exits, + unless the shell option eexxeeccffaaiill is enabled, in which case it + returns failure. An interactive shell returns failure if the + file cannot be executed. If _c_o_m_m_a_n_d is not specified, any redi- + rections take effect in the current shell, and the return status + is 0. If there is a redirection error, the return status is 1. + + eexxiitt [_n] + Cause the shell to exit with a status of _n. If _n is omitted, + the exit status is that of the last command executed. A trap on + EEXXIITT is executed before the shell terminates. + + eexxppoorrtt [--ffnn] [_n_a_m_e[=_w_o_r_d]] ... + eexxppoorrtt --pp + The supplied _n_a_m_e_s are marked for automatic export to the envi- + ronment of subsequently executed commands. If the --ff option is + given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or + if the --pp option is supplied, a list of all names that are + exported in this shell is printed. The --nn option causes the + export property to be removed from each _n_a_m_e. If a variable + name is followed by =_w_o_r_d, the value of the variable is set to + _w_o_r_d. eexxppoorrtt returns an exit status of 0 unless an invalid + option is encountered, one of the _n_a_m_e_s is not a valid shell + variable name, or --ff is supplied with a _n_a_m_e that is not a func- + tion. + + ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t] + ffcc --ss [_p_a_t=_r_e_p] [_c_m_d] + Fix Command. In the first form, a range of commands from _f_i_r_s_t + to _l_a_s_t is selected from the history list. _F_i_r_s_t and _l_a_s_t may + be specified as a string (to locate the last command beginning + with that string) or as a number (an index into the history + list, where a negative number is used as an offset from the cur- + rent command number). If _l_a_s_t is not specified it is set to the + current command for listing (so that ``fc -l -10'' prints the + last 10 commands) and to _f_i_r_s_t otherwise. If _f_i_r_s_t is not spec- + ified it is set to the previous command for editing and -16 for + listing. + + The --nn option suppresses the command numbers when listing. The + --rr option reverses the order of the commands. If the --ll option + is given, the commands are listed on standard output. Other- + wise, the editor given by _e_n_a_m_e is invoked on a file containing + those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT + variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. + If neither variable is set, _v_i is used. When editing is com- + plete, the edited commands are echoed and executed. + + In the second form, _c_o_m_m_a_n_d is re-executed after each instance + of _p_a_t is replaced by _r_e_p. A useful alias to use with this is + ``r="fc -s"'', so that typing ``r cc'' runs the last command + beginning with ``cc'' and typing ``r'' re-executes the last com- + mand. + + If the first form is used, the return value is 0 unless an + invalid option is encountered or _f_i_r_s_t or _l_a_s_t specify history + lines out of range. If the --ee option is supplied, the return + value is the value of the last command executed or failure if an + error occurs with the temporary file of commands. If the second + form is used, the return status is that of the command re-exe- + cuted, unless _c_m_d does not specify a valid history line, in + which case ffcc returns failure. + + ffgg [_j_o_b_s_p_e_c] + Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. + If _j_o_b_s_p_e_c is not present, the shell's notion of the _c_u_r_r_e_n_t _j_o_b + is used. The return value is that of the command placed into + the foreground, or failure if run when job control is disabled + or, when run with job control enabled, if _j_o_b_s_p_e_c does not spec- + ify a valid job or _j_o_b_s_p_e_c specifies a job that was started + without job control. + + ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g_s] + ggeettooppttss is used by shell procedures to parse positional parame- + ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- + nized; if a character is followed by a colon, the option is + expected to have an argument, which should be separated from it + by white space. The colon and question mark characters may not + be used as option characters. Each time it is invoked, ggeettooppttss + places the next option in the shell variable _n_a_m_e, initializing + _n_a_m_e if it does not exist, and the index of the next argument to + be processed into the variable OOPPTTIINNDD. OOPPTTIINNDD is initialized to + 1 each time the shell or a shell script is invoked. When an + option requires an argument, ggeettooppttss places that argument into + the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automati- + cally; it must be manually reset between multiple calls to + ggeettooppttss within the same shell invocation if a new set of parame- + ters is to be used. + + When the end of options is encountered, ggeettooppttss exits with a + return value greater than zero. OOPPTTIINNDD is set to the index of + the first non-option argument, and nnaammee is set to ?. + + ggeettooppttss normally parses the positional parameters, but if more + arguments are given in _a_r_g_s, ggeettooppttss parses those instead. + + ggeettooppttss can report errors in two ways. If the first character + of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In + normal operation diagnostic messages are printed when invalid + options or missing option arguments are encountered. If the + variable OOPPTTEERRRR is set to 0, no error messages will be dis- + played, even if the first character of _o_p_t_s_t_r_i_n_g is not a colon. + + If an invalid option is seen, ggeettooppttss places ? into _n_a_m_e and, if + not silent, prints an error message and unsets OOPPTTAARRGG. If + ggeettooppttss is silent, the option character found is placed in + OOPPTTAARRGG and no diagnostic message is printed. + + If a required argument is not found, and ggeettooppttss is not silent, + a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a + diagnostic message is printed. If ggeettooppttss is silent, then a + colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option + character found. + + ggeettooppttss returns true if an option, specified or unspecified, is + found. It returns false if the end of options is encountered or + an error occurs. + + hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e] + For each _n_a_m_e, the full file name of the command is determined + by searching the directories in $$PPAATTHH and remembered. If the --pp + option is supplied, no path search is performed, and _f_i_l_e_n_a_m_e is + used as the full file name of the command. The --rr option causes + the shell to forget all remembered locations. The --dd option + causes the shell to forget the remembered location of each _n_a_m_e. + If the --tt option is supplied, the full pathname to which each + _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments are + supplied with --tt, the _n_a_m_e is printed before the hashed full + pathname. The --ll option causes output to be displayed in a for- + mat that may be reused as input. If no arguments are given, or + if only --ll is supplied, information about remembered commands is + printed. The return status is true unless a _n_a_m_e is not found + or an invalid option is supplied. + + hheellpp [--ddmmss] [_p_a_t_t_e_r_n] + Display helpful information about builtin commands. If _p_a_t_t_e_r_n + is specified, hheellpp gives detailed help on all commands matching + _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control + structures is printed. + --dd Display a short description of each _p_a_t_t_e_r_n + --mm Display the description of each _p_a_t_t_e_r_n in a manpage-like + format + --ss Display only a short usage synopsis for each _p_a_t_t_e_r_n + The return status is 0 unless no command matches _p_a_t_t_e_r_n. + + hhiissttoorryy [[_n]] + hhiissttoorryy --cc + hhiissttoorryy --dd _o_f_f_s_e_t + hhiissttoorryy --aannrrww [_f_i_l_e_n_a_m_e] + hhiissttoorryy --pp _a_r_g [_a_r_g _._._.] + hhiissttoorryy --ss _a_r_g [_a_r_g _._._.] + With no options, display the command history list with line num- + bers. Lines listed with a ** have been modified. An argument of + _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- + FFOORRMMAATT is set and not null, it is used as a format string for + _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- + played history entry. No intervening blank is printed between + the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is + supplied, it is used as the name of the history file; if not, + the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the + following meanings: + --cc Clear the history list by deleting all the entries. + --dd _o_f_f_s_e_t + Delete the history entry at position _o_f_f_s_e_t. + --aa Append the ``new'' history lines (history lines entered + since the beginning of the current bbaasshh session) to the + history file. + --nn Read the history lines not already read from the history + file into the current history list. These are lines + appended to the history file since the beginning of the + current bbaasshh session. + --rr Read the contents of the history file and use them as the + current history. + --ww Write the current history to the history file, overwrit- + ing the history file's contents. + --pp Perform history substitution on the following _a_r_g_s and + display the result on the standard output. Does not + store the results in the history list. Each _a_r_g must be + quoted to disable normal history expansion. + --ss Store the _a_r_g_s in the history list as a single entry. + The last command in the history list is removed before + the _a_r_g_s are added. + + If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- + tion associated with each history entry is written to the his- + tory file, marked with the history comment character. When the + history file is read, lines beginning with the history comment + character followed immediately by a digit are interpreted as + timestamps for the previous history line. The return value is 0 + unless an invalid option is encountered, an error occurs while + reading or writing the history file, an invalid _o_f_f_s_e_t is sup- + plied as an argument to --dd, or the history expansion supplied as + an argument to --pp fails. + + jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ] + jjoobbss --xx _c_o_m_m_a_n_d [ _a_r_g_s ... ] + The first form lists the active jobs. The options have the fol- + lowing meanings: + --ll List process IDs in addition to the normal information. + --pp List only the process ID of the job's process group + leader. + --nn Display information only about jobs that have changed + status since the user was last notified of their status. + --rr Restrict output to running jobs. + --ss Restrict output to stopped jobs. + + If _j_o_b_s_p_e_c is given, output is restricted to information about + that job. The return status is 0 unless an invalid option is + encountered or an invalid _j_o_b_s_p_e_c is supplied. + + If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in + _c_o_m_m_a_n_d or _a_r_g_s with the corresponding process group ID, and + executes _c_o_m_m_a_n_d passing it _a_r_g_s, returning its exit status. + + kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] [_p_i_d | _j_o_b_s_p_e_c] ... + kkiillll --ll [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s] + Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes + named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive + signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or + a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not + present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the + signal names. If any arguments are supplied when --ll is given, + the names of the signals corresponding to the arguments are + listed, and the return status is 0. The _e_x_i_t___s_t_a_t_u_s argument to + --ll is a number specifying either a signal number or the exit + status of a process terminated by a signal. kkiillll returns true + if at least one signal was successfully sent, or false if an + error occurs or an invalid option is encountered. + + lleett _a_r_g [_a_r_g ...] + Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH-- + MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett + returns 1; 0 is returned otherwise. + + llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ...] + For each argument, a local variable named _n_a_m_e is created, and + assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted + by ddeeccllaarree. When llooccaall is used within a function, it causes the + variable _n_a_m_e to have a visible scope restricted to that func- + tion and its children. With no operands, llooccaall writes a list of + local variables to the standard output. It is an error to use + llooccaall when not within a function. The return status is 0 unless + llooccaall is used outside a function, an invalid _n_a_m_e is supplied, + or _n_a_m_e is a readonly variable. + + llooggoouutt Exit a login shell. + + mmaappffiillee [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] + [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] + rreeaaddaarrrraayy [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] + [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] + Read lines from the standard input into the indexed array vari- + able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- + plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if + supplied, have the following meanings: + --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are + copied. + --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default + index is 0. + --ss Discard the first _c_o_u_n_t lines read. + --tt Remove a trailing newline from each line read. + --uu Read lines from file descriptor _f_d instead of the stan- + dard input. + --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The + --cc option specifies _q_u_a_n_t_u_m. + --cc Specify the number of lines read between each call to + _c_a_l_l_b_a_c_k. + + If --CC is specified without --cc, the default quantum is 5000. + When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next + array element to be assigned as an additional argument. _c_a_l_l_- + _b_a_c_k is evaluated after the line is read but before the array + element is assigned. + + If not supplied with an explicit origin, mmaappffiillee will clear + _a_r_r_a_y before assigning to it. + + mmaappffiillee returns successfully unless an invalid option or option + argument is supplied, _a_r_r_a_y is invalid or unassignable, or if + _a_r_r_a_y is not an indexed array. + + ppooppdd [-nn] [+_n] [-_n] + Removes entries from the directory stack. With no arguments, + removes the top directory from the stack, and performs a ccdd to + the new top directory. Arguments, if supplied, have the follow- + ing meanings: + --nn Suppresses the normal change of directory when removing + directories from the stack, so that only the stack is + manipulated. + ++_n Removes the _nth entry counting from the left of the list + shown by ddiirrss, starting with zero. For example: ``popd + +0'' removes the first directory, ``popd +1'' the second. + --_n Removes the _nth entry counting from the right of the list + shown by ddiirrss, starting with zero. For example: ``popd + -0'' removes the last directory, ``popd -1'' the next to + last. + + If the ppooppdd command is successful, a ddiirrss is performed as well, + and the return status is 0. ppooppdd returns false if an invalid + option is encountered, the directory stack is empty, a non-exis- + tent directory stack entry is specified, or the directory change + fails. + + pprriinnttff [--vv _v_a_r] _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s] + Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the + control of the _f_o_r_m_a_t. The _f_o_r_m_a_t is a character string which + contains three types of objects: plain characters, which are + simply copied to standard output, character escape sequences, + which are converted and copied to the standard output, and for- + mat specifications, each of which causes printing of the next + successive _a_r_g_u_m_e_n_t. In addition to the standard _p_r_i_n_t_f(1) for- + mats, %%bb causes pprriinnttff to expand backslash escape sequences in + the corresponding _a_r_g_u_m_e_n_t (except that \\cc terminates output, + backslashes in \\'', \\"", and \\?? are not removed, and octal escapes + beginning with \\00 may contain up to four digits), and %%qq causes + pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a format that can + be reused as shell input. + + The --vv option causes the output to be assigned to the variable + _v_a_r rather than being printed to the standard output. + + The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- + _m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s than are supplied, + the extra format specifications behave as if a zero value or + null string, as appropriate, had been supplied. The return + value is zero on success, non-zero on failure. + + ppuusshhdd [--nn] [+_n] [-_n] + ppuusshhdd [--nn] [_d_i_r] + Adds a directory to the top of the directory stack, or rotates + the stack, making the new top of the stack the current working + directory. With no arguments, exchanges the top two directories + and returns 0, unless the directory stack is empty. Arguments, + if supplied, have the following meanings: + --nn Suppresses the normal change of directory when adding + directories to the stack, so that only the stack is + manipulated. + ++_n Rotates the stack so that the _nth directory (counting + from the left of the list shown by ddiirrss, starting with + zero) is at the top. + --_n Rotates the stack so that the _nth directory (counting + from the right of the list shown by ddiirrss, starting with + zero) is at the top. + _d_i_r Adds _d_i_r to the directory stack at the top, making it the + new current working directory. + + If the ppuusshhdd command is successful, a ddiirrss is performed as well. + If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r + fails. With the second form, ppuusshhdd returns 0 unless the direc- + tory stack is empty, a non-existent directory stack element is + specified, or the directory change to the specified new current + directory fails. + + ppwwdd [--LLPP] + Print the absolute pathname of the current working directory. + The pathname printed contains no symbolic links if the --PP option + is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command + is enabled. If the --LL option is used, the pathname printed may + contain symbolic links. The return status is 0 unless an error + occurs while reading the name of the current directory or an + invalid option is supplied. + + rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp + _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] + One line is read from the standard input, or from the file + descriptor _f_d supplied as an argument to the --uu option, and the + first word is assigned to the first _n_a_m_e, the second word to the + second _n_a_m_e, and so on, with leftover words and their interven- + ing separators assigned to the last _n_a_m_e. If there are fewer + words read from the input stream than names, the remaining names + are assigned empty values. The characters in IIFFSS are used to + split the line into words. The backslash character (\\) may be + used to remove any special meaning for the next character read + and for line continuation. Options, if supplied, have the fol- + lowing meanings: + --aa _a_n_a_m_e + The words are assigned to sequential indices of the array + variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any + new values are assigned. Other _n_a_m_e arguments are + ignored. + --dd _d_e_l_i_m + The first character of _d_e_l_i_m is used to terminate the + input line, rather than newline. + --ee If the standard input is coming from a terminal, rreeaaddlliinnee + (see RREEAADDLLIINNEE above) is used to obtain the line. Read- + line uses the current (or default, if line editing was + not previously active) editing settings. + --ii _t_e_x_t + If rreeaaddlliinnee is being used to read the line, _t_e_x_t is + placed into the editing buffer before editing begins. + --nn _n_c_h_a_r_s + rreeaadd returns after reading _n_c_h_a_r_s characters rather than + waiting for a complete line of input, but honor a delim- + iter if fewer than _n_c_h_a_r_s characters are read before the + delimiter. + --NN _n_c_h_a_r_s + rreeaadd returns after reading exactly _n_c_h_a_r_s characters + rather than waiting for a complete line of input, unless + EOF is encountered or rreeaadd times out. Delimiter charac- + ters encountered in the input are not treated specially + and do not cause rreeaadd to return until _n_c_h_a_r_s characters + are read. + --pp _p_r_o_m_p_t + Display _p_r_o_m_p_t on standard error, without a trailing new- + line, before attempting to read any input. The prompt is + displayed only if input is coming from a terminal. + --rr Backslash does not act as an escape character. The back- + slash is considered to be part of the line. In particu- + lar, a backslash-newline pair may not be used as a line + continuation. + --ss Silent mode. If input is coming from a terminal, charac- + ters are not echoed. + --tt _t_i_m_e_o_u_t + Cause rreeaadd to time out and return failure if a complete + line of input is not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_- + _o_u_t may be a decimal number with a fractional portion + following the decimal point. This option is only effec- + tive if rreeaadd is reading input from a terminal, pipe, or + other special file; it has no effect when reading from + regular files. If _t_i_m_e_o_u_t is 0, rreeaadd returns success if + input is available on the specified file descriptor, + failure otherwise. The exit status is greater than 128 + if the timeout is exceeded. + --uu _f_d Read input from file descriptor _f_d. + + If no _n_a_m_e_s are supplied, the line read is assigned to the vari- + able RREEPPLLYY. The return code is zero, unless end-of-file is + encountered, rreeaadd times out (in which case the return code is + greater than 128), or an invalid file descriptor is supplied as + the argument to --uu. + + rreeaaddoonnllyy [--aaAAppff] [_n_a_m_e[=_w_o_r_d] ...] + The given _n_a_m_e_s are marked readonly; the values of these _n_a_m_e_s + may not be changed by subsequent assignment. If the --ff option + is supplied, the functions corresponding to the _n_a_m_e_s are so + marked. The --aa option restricts the variables to indexed + arrays; the --AA option restricts the variables to associative + arrays. If no _n_a_m_e arguments are given, or if the --pp option is + supplied, a list of all readonly names is printed. The --pp + option causes output to be displayed in a format that may be + reused as input. If a variable name is followed by =_w_o_r_d, the + value of the variable is set to _w_o_r_d. The return status is 0 + unless an invalid option is encountered, one of the _n_a_m_e_s is not + a valid shell variable name, or --ff is supplied with a _n_a_m_e that + is not a function. + + rreettuurrnn [_n] + Causes a function to exit with the return value specified by _n. + If _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 .. (ssoouurrccee) command, it + causes the shell to stop executing that script and return either + _n or the exit status of the last command executed within the + script as the exit status of the script. If used outside a + function and not during execution of a script by .., the return + status is false. Any command associated with the RREETTUURRNN trap is + executed before execution resumes after the function or script. + + sseett [----aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n] [_a_r_g ...] + sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n] [_a_r_g ...] + Without options, the name and value of each shell variable are + displayed in a format that can be reused as input for setting or + resetting the currently-set variables. Read-only variables can- + not be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. + The output is sorted according to the current locale. When + options are specified, they set or unset shell attributes. Any + arguments remaining after option processing are treated as val- + ues for the positional parameters and are assigned, in order, to + $$11, $$22, ...... $$_n. Options, if specified, have the following + meanings: + --aa Automatically mark variables and functions which are + modified or created for export to the environment of + subsequent commands. + --bb Report the status of terminated background jobs immedi- + ately, rather than before the next primary prompt. This + is effective only when job control is enabled. + --ee Exit immediately if a _p_i_p_e_l_i_n_e (which may consist of a + single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _s_u_b_s_h_e_l_l command enclosed in + parentheses, or one of the commands executed as part of + a command list enclosed by braces (see SSHHEELLLL GGRRAAMMMMAARR + above) exits with a non-zero status. The shell does not + exit if the command that fails is part of the command + list immediately following a wwhhiillee or uunnttiill keyword, + part of the test following the iiff or eelliiff reserved + words, part of any command executed in a &&&& or |||| list + except the command following the final &&&& or ||||, any + command in a pipeline but the last, or if the command's + return value is being inverted with !!. A trap on EERRRR, + if set, is executed before the shell exits. This option + applies to the shell environment and each subshell envi- + ronment separately (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT + above), and may cause subshells to exit before executing + all the commands in the subshell. + --ff Disable pathname expansion. + --hh Remember the location of commands as they are looked up + for execution. This is enabled by default. + --kk All arguments in the form of assignment statements are + placed in the environment for a command, not just those + that precede the command name. + --mm Monitor mode. Job control is enabled. This option is + on by default for interactive shells on systems that + support it (see JJOOBB CCOONNTTRROOLL above). Background pro- + cesses run in a separate process group and a line con- + taining their exit status is printed upon their comple- + tion. + --nn Read commands but do not execute them. This may be used + to check a shell script for syntax errors. This is + ignored by interactive shells. + --oo _o_p_t_i_o_n_-_n_a_m_e + The _o_p_t_i_o_n_-_n_a_m_e can be one of the following: + aalllleexxppoorrtt + Same as --aa. + bbrraacceeeexxppaanndd + Same as --BB. + eemmaaccss Use an emacs-style command line editing inter- + face. This is enabled by default when the shell + is interactive, unless the shell is started with + the ----nnooeeddiittiinngg option. This also affects the + editing interface used for rreeaadd --ee. + eerrrreexxiitt Same as --ee. + eerrrrttrraaccee + Same as --EE. + ffuunnccttrraaccee + Same as --TT. + hhaasshhaallll Same as --hh. + hhiisstteexxppaanndd + Same as --HH. + hhiissttoorryy Enable command history, as described above under + HHIISSTTOORRYY. This option is on by default in inter- + active shells. + iiggnnoorreeeeooff + The effect is as if the shell command + ``IGNOREEOF=10'' had been executed (see SShheellll + VVaarriiaabblleess above). + kkeeyywwoorrdd Same as --kk. + mmoonniittoorr Same as --mm. + nnoocclloobbbbeerr + Same as --CC. + nnooeexxeecc Same as --nn. + nnoogglloobb Same as --ff. + nnoolloogg Currently ignored. + nnoottiiffyy Same as --bb. + nnoouunnsseett Same as --uu. + oonneeccmmdd Same as --tt. + pphhyyssiiccaall + Same as --PP. + ppiippeeffaaiill + If set, the return value of a pipeline is the + value of the last (rightmost) command to exit + with a non-zero status, or zero if all commands + in the pipeline exit successfully. This option + is disabled by default. + ppoossiixx Change the behavior of bbaasshh where the default + operation differs from the POSIX standard to + match the standard (_p_o_s_i_x _m_o_d_e). + pprriivviilleeggeedd + Same as --pp. + vveerrbboossee Same as --vv. + vvii Use a vi-style command line editing interface. + This also affects the editing interface used for + rreeaadd --ee. + xxttrraaccee Same as --xx. + If --oo is supplied with no _o_p_t_i_o_n_-_n_a_m_e, the values of the + current options are printed. If ++oo is supplied with no + _o_p_t_i_o_n_-_n_a_m_e, a series of sseett commands to recreate the + current option settings is displayed on the standard + output. + --pp Turn on _p_r_i_v_i_l_e_g_e_d mode. In this mode, the $$EENNVV and + $$BBAASSHH__EENNVV files are not processed, shell functions are + not inherited from the environment, and the SSHHEELLLLOOPPTTSS, + BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they + appear in the environment, are ignored. If the shell is + started with the effective user (group) id not equal to + the real user (group) id, and the --pp option is not sup- + plied, these actions are taken and the effective user id + is set to the real user id. If the --pp option is sup- + plied at startup, the effective user id is not reset. + Turning this option off causes the effective user and + group ids to be set to the real user and group ids. + --tt Exit after reading and executing one command. + --uu Treat unset variables and parameters other than the spe- + cial parameters "@" and "*" as an error when performing + parameter expansion. If expansion is attempted on an + unset variable or parameter, the shell prints an error + message, and, if not interactive, exits with a non-zero + status. + --vv Print shell input lines as they are read. + --xx After expanding each _s_i_m_p_l_e _c_o_m_m_a_n_d, ffoorr command, ccaassee + command, sseelleecctt command, or arithmetic ffoorr command, dis- + play the expanded value of PPSS44, followed by the command + and its expanded arguments or associated word list. + --BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn + above). This is on by default. + --CC If set, bbaasshh does not overwrite an existing file with + the >>, >>&&, and <<>> redirection operators. This may be + overridden when creating output files by using the redi- + rection operator >>|| instead of >>. + --EE If set, any trap on EERRRR is inherited by shell functions, + command substitutions, and commands executed in a sub- + shell environment. The EERRRR trap is normally not inher- + ited in such cases. + --HH Enable !! style history substitution. This option is on + by default when the shell is interactive. + --PP If set, the shell does not follow symbolic links when + executing commands such as ccdd that change the current + working directory. It uses the physical directory + structure instead. By default, bbaasshh follows the logical + chain of directories when performing commands which + change the current directory. + --TT If set, any traps on DDEEBBUUGG and RREETTUURRNN are inherited by + shell functions, command substitutions, and commands + executed in a subshell environment. The DDEEBBUUGG and + RREETTUURRNN traps are normally not inherited in such cases. + ---- If no arguments follow this option, then the positional + parameters are unset. Otherwise, the positional parame- + ters are set to the _a_r_gs, even if some of them begin + with a --. + -- Signal the end of options, cause all remaining _a_r_gs to + be assigned to the positional parameters. The --xx and --vv + options are turned off. If there are no _a_r_gs, the posi- + tional parameters remain unchanged. + + The options are off by default unless otherwise noted. Using + + rather than - causes these options to be turned off. The + options can also be specified as arguments to an invocation of + the shell. The current set of options may be found in $$--. The + return status is always true unless an invalid option is encoun- + tered. + + sshhiifftt [_n] + The positional parameters from _n+1 ... are renamed to $$11 ........ + Parameters represented by the numbers $$## down to $$##-_n+1 are + unset. _n must be a non-negative number less than or equal to + $$##. If _n is 0, no parameters are changed. If _n is not given, + it is assumed to be 1. If _n is greater than $$##, the positional + parameters are not changed. The return status is greater than + zero if _n is greater than $$## or less than zero; otherwise 0. + + sshhoopptt [--ppqqssuu] [--oo] [_o_p_t_n_a_m_e ...] + Toggle the values of variables controlling optional shell behav- + ior. With no options, or with the --pp option, a list of all set- + table options is displayed, with an indication of whether or not + each is set. The --pp option causes output to be displayed in a + form that may be reused as input. Other options have the fol- + lowing meanings: + --ss Enable (set) each _o_p_t_n_a_m_e. + --uu Disable (unset) each _o_p_t_n_a_m_e. + --qq Suppresses normal output (quiet mode); the return status + indicates whether the _o_p_t_n_a_m_e is set or unset. If multi- + ple _o_p_t_n_a_m_e arguments are given with --qq, the return sta- + tus is zero if all _o_p_t_n_a_m_e_s are enabled; non-zero other- + wise. + --oo Restricts the values of _o_p_t_n_a_m_e to be those defined for + the --oo option to the sseett builtin. + + If either --ss or --uu is used with no _o_p_t_n_a_m_e arguments, the dis- + play is limited to those options which are set or unset, respec- + tively. Unless otherwise noted, the sshhoopptt options are disabled + (unset) by default. + + The return status when listing options is zero if all _o_p_t_n_a_m_e_s + are enabled, non-zero otherwise. When setting or unsetting + options, the return status is zero unless an _o_p_t_n_a_m_e is not a + valid shell option. + + The list of sshhoopptt options is: + + aauuttooccdd If set, a command name that is the name of a directory + is executed as if it were the argument to the ccdd com- + mand. This option is only used by interactive shells. + ccddaabbllee__vvaarrss + If set, an argument to the ccdd builtin command that is + not a directory is assumed to be the name of a variable + whose value is the directory to change to. + ccddssppeellll If set, minor errors in the spelling of a directory com- + ponent in a ccdd command will be corrected. The errors + checked for are transposed characters, a missing charac- + ter, and one character too many. If a correction is + found, the corrected file name is printed, and the com- + mand proceeds. This option is only used by interactive + shells. + cchheecckkhhaasshh + If set, bbaasshh checks that a command found in the hash ta- + ble exists before trying to execute it. If a hashed + command no longer exists, a normal path search is per- + formed. + cchheecckkjjoobbss + If set, bbaasshh lists the status of any stopped and running + jobs before exiting an interactive shell. If any jobs + are running, this causes the exit to be deferred until a + second exit is attempted without an intervening command + (see JJOOBB CCOONNTTRROOLL above). The shell always postpones + exiting if any jobs are stopped. + cchheecckkwwiinnssiizzee + If set, bbaasshh checks the window size after each command + and, if necessary, updates the values of LLIINNEESS and CCOOLL-- + UUMMNNSS. + ccmmddhhiisstt If set, bbaasshh attempts to save all lines of a multiple- + line command in the same history entry. This allows + easy re-editing of multi-line commands. + ccoommppaatt3311 + If set, bbaasshh changes its behavior to that of version 3.1 + with respect to quoted arguments to the conditional com- + mand's =~ operator. + ccoommppaatt3322 + If set, bbaasshh changes its behavior to that of version 3.2 + with respect to locale-specific string comparison when + using the conditional command's < and > operators. + ccoommppaatt4400 + If set, bbaasshh changes its behavior to that of version 4.0 + with respect to locale-specific string comparison when + using the conditional command's < and > operators and + the effect of interrupting a command list. + ddiirrssppeellll + If set, bbaasshh attempts spelling correction on directory + names during word completion if the directory name ini- + tially supplied does not exist. + ddoottgglloobb If set, bbaasshh includes filenames beginning with a `.' in + the results of pathname expansion. + eexxeeccffaaiill + If set, a non-interactive shell will not exit if it can- + not execute the file specified as an argument to the + eexxeecc builtin command. An interactive shell does not + exit if eexxeecc fails. + eexxppaanndd__aalliiaasseess + If set, aliases are expanded as described above under + AALLIIAASSEESS. This option is enabled by default for interac- + tive shells. + eexxttddeebbuugg + If set, behavior intended for use by debuggers is + enabled: + 11.. The --FF option to the ddeeccllaarree builtin displays the + source file name and line number corresponding to + each function name supplied as an argument. + 22.. If the command run by the DDEEBBUUGG trap returns a + non-zero value, the next command is skipped and + not executed. + 33.. If the command run by the DDEEBBUUGG trap returns a + value of 2, and the shell is executing in a sub- + routine (a shell function or a shell script exe- + cuted by the .. or ssoouurrccee builtins), a call to + rreettuurrnn is simulated. + 44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described + in their descriptions above. + 55.. Function tracing is enabled: command substitu- + tion, shell functions, and subshells invoked with + (( _c_o_m_m_a_n_d )) inherit the DDEEBBUUGG and RREETTUURRNN traps. + 66.. Error tracing is enabled: command substitution, + shell functions, and subshells invoked with (( + _c_o_m_m_a_n_d )) inherit the EERRRROORR trap. + eexxttgglloobb If set, the extended pattern matching features described + above under PPaatthhnnaammee EExxppaannssiioonn are enabled. + eexxttqquuoottee + If set, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quoting is performed + within $${{_p_a_r_a_m_e_t_e_r}} expansions enclosed in double + quotes. This option is enabled by default. + ffaaiillgglloobb + If set, patterns which fail to match filenames during + pathname expansion result in an expansion error. + ffoorrccee__ffiiggnnoorree + If set, the suffixes specified by the FFIIGGNNOORREE shell + variable cause words to be ignored when performing word + completion even if the ignored words are the only possi- + ble completions. See SSHHEELLLL VVAARRIIAABBLLEESS above for a + description of FFIIGGNNOORREE. This option is enabled by + default. + gglloobbssttaarr + If set, the pattern **** used in a pathname expansion con- + text will match a files and zero or more directories and + subdirectories. If the pattern is followed by a //, only + directories and subdirectories match. + ggnnuu__eerrrrffmmtt + If set, shell error messages are written in the standard + GNU error message format. + hhiissttaappppeenndd + If set, the history list is appended to the file named + by the value of the HHIISSTTFFIILLEE variable when the shell + exits, rather than overwriting the file. + hhiissttrreeeeddiitt + If set, and rreeaaddlliinnee is being used, a user is given the + opportunity to re-edit a failed history substitution. + hhiissttvveerriiffyy + If set, and rreeaaddlliinnee is being used, the results of his- + tory substitution are not immediately passed to the + shell parser. Instead, the resulting line is loaded + into the rreeaaddlliinnee editing buffer, allowing further modi- + fication. + hhoossttccoommpplleettee + If set, and rreeaaddlliinnee is being used, bbaasshh will attempt to + perform hostname completion when a word containing a @@ + is being completed (see CCoommpplleettiinngg under RREEAADDLLIINNEE + above). This is enabled by default. + hhuuppoonneexxiitt + If set, bbaasshh will send SSIIGGHHUUPP to all jobs when an inter- + active login shell exits. + iinntteerraaccttiivvee__ccoommmmeennttss + If set, allow a word beginning with ## to cause that word + and all remaining characters on that line to be ignored + in an interactive shell (see CCOOMMMMEENNTTSS above). This + option is enabled by default. + lliitthhiisstt If set, and the ccmmddhhiisstt option is enabled, multi-line + commands are saved to the history with embedded newlines + rather than using semicolon separators where possible. + llooggiinn__sshheellll + The shell sets this option if it is started as a login + shell (see IINNVVOOCCAATTIIOONN above). The value may not be + changed. + mmaaiillwwaarrnn + If set, and a file that bbaasshh is checking for mail has + been accessed since the last time it was checked, the + message ``The mail in _m_a_i_l_f_i_l_e has been read'' is dis- + played. + nnoo__eemmppttyy__ccmmdd__ccoommpplleettiioonn + If set, and rreeaaddlliinnee is being used, bbaasshh will not + attempt to search the PPAATTHH for possible completions when + completion is attempted on an empty line. + nnooccaasseegglloobb + If set, bbaasshh matches filenames in a case-insensitive + fashion when performing pathname expansion (see PPaatthhnnaammee + EExxppaannssiioonn above). + nnooccaasseemmaattcchh + If set, bbaasshh matches patterns in a case-insensitive + fashion when performing matching while executing ccaassee or + [[[[ conditional commands. + nnuullllgglloobb + If set, bbaasshh allows patterns which match no files (see + PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string, + rather than themselves. + pprrooggccoommpp + If set, the programmable completion facilities (see PPrroo-- + ggrraammmmaabbllee CCoommpplleettiioonn above) are enabled. This option is + enabled by default. + pprroommppttvvaarrss + If set, prompt strings undergo parameter expansion, com- + mand substitution, arithmetic expansion, and quote + removal after being expanded as described in PPRROOMMPPTTIINNGG + above. This option is enabled by default. + rreessttrriicctteedd__sshheellll + The shell sets this option if it is started in + restricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value + may not be changed. This is not reset when the startup + files are executed, allowing the startup files to dis- + cover whether or not a shell is restricted. + sshhiifftt__vveerrbboossee + If set, the sshhiifftt builtin prints an error message when + the shift count exceeds the number of positional parame- + ters. + ssoouurrcceeppaatthh + If set, the ssoouurrccee (..) builtin uses the value of PPAATTHH to + find the directory containing the file supplied as an + argument. This option is enabled by default. + xxppgg__eecchhoo + If set, the eecchhoo builtin expands backslash-escape + sequences by default. + ssuussppeenndd [--ff] + Suspend the execution of this shell until it receives a SSIIGGCCOONNTT + signal. A login shell cannot be suspended; the --ff option can be + used to override this and force the suspension. The return sta- + tus is 0 unless the shell is a login shell and --ff is not sup- + plied, or if job control is not enabled. + tteesstt _e_x_p_r + [[ _e_x_p_r ]] + Return a status of 0 or 1 depending on the evaluation of the + conditional expression _e_x_p_r. Each operator and operand must be + a separate argument. Expressions are composed of the primaries + described above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS. tteesstt does not + accept any options, nor does it accept and ignore an argument of + ---- as signifying the end of options. + + Expressions may be combined using the following operators, + listed in decreasing order of precedence. The evaluation + depends on the number of arguments; see below. + !! _e_x_p_r True if _e_x_p_r is false. + (( _e_x_p_r )) + Returns the value of _e_x_p_r. This may be used to override + the normal precedence of operators. + _e_x_p_r_1 -aa _e_x_p_r_2 + True if both _e_x_p_r_1 and _e_x_p_r_2 are true. + _e_x_p_r_1 -oo _e_x_p_r_2 + True if either _e_x_p_r_1 or _e_x_p_r_2 is true. + + tteesstt and [[ evaluate conditional expressions using a set of rules + based on the number of arguments. + + 0 arguments + The expression is false. + 1 argument + The expression is true if and only if the argument is not + null. + 2 arguments + If the first argument is !!, the expression is true if and + only if the second argument is null. If the first argu- + ment is one of the unary conditional operators listed + above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the expression is + true if the unary test is true. If the first argument is + not a valid unary conditional operator, the expression is + false. + 3 arguments + If the second argument is one of the binary conditional + operators listed above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the + result of the expression is the result of the binary test + using the first and third arguments as operands. The --aa + and --oo operators are considered binary operators when + there are three arguments. If the first argument is !!, + the value is the negation of the two-argument test using + the second and third arguments. If the first argument is + exactly (( and the third argument is exactly )), the result + is the one-argument test of the second argument. Other- + wise, the expression is false. + 4 arguments + If the first argument is !!, the result is the negation of + the three-argument expression composed of the remaining + arguments. Otherwise, the expression is parsed and eval- + uated according to precedence using the rules listed + above. + 5 or more arguments + The expression is parsed and evaluated according to + precedence using the rules listed above. + + ttiimmeess Print the accumulated user and system times for the shell and + for processes run from the shell. The return status is 0. + + ttrraapp [--llpp] [[_a_r_g] _s_i_g_s_p_e_c ...] + The command _a_r_g is to be read and executed when the shell + receives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a + single _s_i_g_s_p_e_c) or --, each specified signal is reset to its + original disposition (the value it had upon entrance to the + shell). If _a_r_g is the null string the signal specified by each + _s_i_g_s_p_e_c is ignored by the shell and by the commands it invokes. + If _a_r_g is not present and --pp has been supplied, then the trap + commands associated with each _s_i_g_s_p_e_c are displayed. If no + arguments are supplied or if only --pp is given, ttrraapp prints the + list of commands associated with each signal. The --ll option + causes the shell to print a list of signal names and their cor- + responding numbers. Each _s_i_g_s_p_e_c is either a signal name + defined in <_s_i_g_n_a_l_._h>, or a signal number. Signal names are + case insensitive and the SIG prefix is optional. + + If a _s_i_g_s_p_e_c is EEXXIITT (0) the command _a_r_g is executed on exit + from the shell. If a _s_i_g_s_p_e_c is DDEEBBUUGG, the command _a_r_g is exe- + cuted before every _s_i_m_p_l_e _c_o_m_m_a_n_d, _f_o_r command, _c_a_s_e command, + _s_e_l_e_c_t command, every arithmetic _f_o_r command, and before the + first command executes in a shell function (see SSHHEELLLL GGRRAAMMMMAARR + above). Refer to the description of the eexxttddeebbuugg option to the + sshhoopptt builtin for details of its effect on the DDEEBBUUGG trap. If a + _s_i_g_s_p_e_c is RREETTUURRNN, the command _a_r_g is executed each time a shell + function or a script executed with the .. or ssoouurrccee builtins fin- + ishes executing. + + If a _s_i_g_s_p_e_c is EERRRR, the command _a_r_g is executed whenever a sim- + ple command has a non-zero exit status, subject to the following + conditions. The EERRRR trap is not executed if the failed command + is part of the command list immediately following a wwhhiillee or + uunnttiill keyword, part of the test in an _i_f statement, part of a + command executed in a &&&& or |||| list, or if the command's return + value is being inverted via !!. These are the same conditions + obeyed by the eerrrreexxiitt option. + + Signals ignored upon entry to the shell cannot be trapped or + reset. Trapped signals that are not being ignored are reset to + their original values in a subshell or subshell environment when + one is created. The return status is false if any _s_i_g_s_p_e_c is + invalid; otherwise ttrraapp returns true. + + ttyyppee [--aaffttppPP] _n_a_m_e [_n_a_m_e ...] + With no options, indicate how each _n_a_m_e would be interpreted if + used as a command name. If the --tt option is used, ttyyppee prints a + string which is one of _a_l_i_a_s, _k_e_y_w_o_r_d, _f_u_n_c_t_i_o_n, _b_u_i_l_t_i_n, or + _f_i_l_e if _n_a_m_e is an alias, shell reserved word, function, + builtin, or disk file, respectively. If the _n_a_m_e is not found, + then nothing is printed, and an exit status of false is + returned. If the --pp option is used, ttyyppee either returns the + name of the disk file that would be executed if _n_a_m_e were speci- + fied as a command name, or nothing if ``type -t name'' would not + return _f_i_l_e. The --PP option forces a PPAATTHH search for each _n_a_m_e, + even if ``type -t name'' would not return _f_i_l_e. If a command is + hashed, --pp and --PP print the hashed value, not necessarily the + file that appears first in PPAATTHH. If the --aa option is used, ttyyppee + prints all of the places that contain an executable named _n_a_m_e. + This includes aliases and functions, if and only if the --pp + option is not also used. The table of hashed commands is not + consulted when using --aa. The --ff option suppresses shell func- + tion lookup, as with the ccoommmmaanndd builtin. ttyyppee returns true if + all of the arguments are found, false if any are not found. + + uulliimmiitt [--HHSSTTaabbccddeeffiillmmnnppqqrrssttuuvvxx [_l_i_m_i_t]] + Provides control over the resources available to the shell and + to processes started by it, on systems that allow such control. + The --HH and --SS options specify that the hard or soft limit is set + for the given resource. A hard limit cannot be increased by a + non-root user once it is set; a soft limit may be increased up + to the value of the hard limit. If neither --HH nor --SS is speci- + fied, both the soft and hard limits are set. The value of _l_i_m_i_t + can be a number in the unit specified for the resource or one of + the special values hhaarrdd, ssoofftt, or uunnlliimmiitteedd, which stand for the + current hard limit, the current soft limit, and no limit, + respectively. If _l_i_m_i_t is omitted, the current value of the + soft limit of the resource is printed, unless the --HH option is + given. When more than one resource is specified, the limit name + and unit are printed before the value. Other options are inter- + preted as follows: + --aa All current limits are reported + --bb The maximum socket buffer size + --cc The maximum size of core files created + --dd The maximum size of a process's data segment + --ee The maximum scheduling priority ("nice") + --ff The maximum size of files written by the shell and its + children + --ii The maximum number of pending signals + --ll The maximum size that may be locked into memory + --mm The maximum resident set size (many systems do not honor + this limit) + --nn The maximum number of open file descriptors (most systems + do not allow this value to be set) + --pp The pipe size in 512-byte blocks (this may not be set) + --qq The maximum number of bytes in POSIX message queues + --rr The maximum real-time scheduling priority + --ss The maximum stack size + --tt The maximum amount of cpu time in seconds + --uu The maximum number of processes available to a single + user + --vv The maximum amount of virtual memory available to the + shell + --xx The maximum number of file locks + --TT The maximum number of threads + + If _l_i_m_i_t is given, it is the new value of the specified resource + (the --aa option is display only). If no option is given, then --ff + is assumed. Values are in 1024-byte increments, except for --tt, + which is in seconds, --pp, which is in units of 512-byte blocks, + and --TT, --bb, --nn, and --uu, 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. + + uummaasskk [--pp] [--SS] [_m_o_d_e] + The user file-creation mask is set to _m_o_d_e. If _m_o_d_e begins with + a digit, it is interpreted as an octal number; otherwise it is + interpreted as a symbolic mode mask similar to that accepted by + _c_h_m_o_d(1). If _m_o_d_e is omitted, the current value of the mask is + printed. The --SS option causes the mask to be printed in sym- + bolic form; the default output is an octal number. If the --pp + option is supplied, and _m_o_d_e is omitted, the output is in a form + that may be reused as input. The return status is 0 if the mode + was successfully changed or if no _m_o_d_e argument was supplied, + and false otherwise. + + uunnaalliiaass [-aa] [_n_a_m_e ...] + Remove each _n_a_m_e from the list of defined aliases. If --aa is + supplied, all alias definitions are removed. The return value + is true unless a supplied _n_a_m_e is not a defined alias. + + uunnsseett [-ffvv] [_n_a_m_e ...] + For each _n_a_m_e, remove the corresponding variable or function. + If no options are supplied, or the --vv option is given, each _n_a_m_e + refers to a shell variable. Read-only variables may not be + unset. If --ff is specified, each _n_a_m_e refers to a shell func- + tion, and the function definition is removed. Each unset vari- + able or function is removed from the environment passed to sub- + sequent commands. If any of CCOOMMPP__WWOORRDDBBRREEAAKKSS, RRAANNDDOOMM, SSEECCOONNDDSS, + LLIINNEENNOO, HHIISSTTCCMMDD, FFUUNNCCNNAAMMEE, GGRROOUUPPSS, or DDIIRRSSTTAACCKK are unset, they + lose their special properties, even if they are subsequently + reset. The exit status is true unless a _n_a_m_e is readonly. + + wwaaiitt [_n _._._.] + Wait for each specified process and return its termination sta- + tus. Each _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 _n is not given, all currently active child pro- + cesses are waited for, and the return status is zero. If _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. + +RREESSTTRRIICCTTEEDD SSHHEELLLL + If bbaasshh is started with the name rrbbaasshh, or the --rr option is supplied at + invocation, the shell becomes restricted. A restricted shell is used + to set up an environment more controlled than the standard shell. It + behaves identically to bbaasshh with the exception that the following are + disallowed or not performed: + + +o changing directories with ccdd + + +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, EENNVV, or BBAASSHH__EENNVV + + +o specifying command names containing // + + +o specifying a file name containing a // as an argument to the .. + builtin command + + +o Specifying a filename containing a slash as an argument to the + --pp option to the hhaasshh builtin command + + +o importing function definitions from the shell environment at + startup + + +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at + startup + + +o redirecting output using the >, >|, <>, >&, &>, and >> redirect- + ion operators + + +o using the eexxeecc builtin command to replace the shell with another + command + + +o adding or deleting builtin commands with the --ff and --dd options + to the eennaabbllee builtin command + + +o Using the eennaabbllee builtin command to enable disabled shell + builtins + + +o specifying the --pp option to the ccoommmmaanndd builtin command + + +o turning off restricted mode with sseett ++rr or sseett ++oo rreessttrriicctteedd. + + These restrictions are enforced after any startup files are read. + + When a command that is found to be a shell script is executed (see CCOOMM-- + MMAANNDD EEXXEECCUUTTIIOONN above), rrbbaasshh turns off any restrictions in the shell + spawned to execute the script. + +SSEEEE AALLSSOO + _B_a_s_h _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l, Brian Fox and Chet Ramey + _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey + _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey + _P_o_r_t_a_b_l_e _O_p_e_r_a_t_i_n_g _S_y_s_t_e_m _I_n_t_e_r_f_a_c_e _(_P_O_S_I_X_) _P_a_r_t _2_: _S_h_e_l_l _a_n_d _U_t_i_l_i_- + _t_i_e_s, IEEE + _s_h(1), _k_s_h(1), _c_s_h(1) + _e_m_a_c_s(1), _v_i(1) + _r_e_a_d_l_i_n_e(3) + +FFIILLEESS + _/_b_i_n_/_b_a_s_h + The bbaasshh executable + _/_e_t_c_/_p_r_o_f_i_l_e + The systemwide initialization file, executed for login shells + _~_/_._b_a_s_h___p_r_o_f_i_l_e + The personal initialization file, executed for login shells + _~_/_._b_a_s_h_r_c + The individual per-interactive-shell startup file + _~_/_._b_a_s_h___l_o_g_o_u_t + The individual login shell cleanup file, executed when a login + shell exits + _~_/_._i_n_p_u_t_r_c + Individual _r_e_a_d_l_i_n_e initialization file + +AAUUTTHHOORRSS + Brian Fox, Free Software Foundation + bfox@gnu.org + + Chet Ramey, Case Western Reserve University + chet.ramey@case.edu + +BBUUGG RREEPPOORRTTSS + If you find a bug in bbaasshh,, you should report it. But first, you should + make sure that it really is a bug, and that it appears in the latest + version of bbaasshh. The latest version is always available from + _f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_b_a_s_h_/. + + Once you have determined that a bug actually exists, use the _b_a_s_h_b_u_g + command to submit a bug report. If you have a fix, you are encouraged + to mail that as well! Suggestions and `philosophical' bug reports may + be mailed to _b_u_g_-_b_a_s_h_@_g_n_u_._o_r_g or posted to the Usenet newsgroup + ggnnuu..bbaasshh..bbuugg. + + ALL bug reports should include: + + The version number of bbaasshh + The hardware and operating system + The compiler used to compile + A description of the bug behaviour + A short script or `recipe' which exercises the bug + + _b_a_s_h_b_u_g inserts the first three items automatically into the template + it provides for filing a bug report. + + Comments and bug reports concerning this manual page should be directed + to _c_h_e_t_@_p_o_._c_w_r_u_._e_d_u. + +BBUUGGSS + It's too big and too slow. + + There are some subtle differences between bbaasshh and traditional versions + of sshh, mostly because of the PPOOSSIIXX specification. + + Aliases are confusing in some uses. + + Shell builtin commands and functions are not stoppable/restartable. + + Compound commands and command sequences of the form `a ; b ; c' are not + handled gracefully when process suspension is attempted. When a + process is stopped, the shell immediately executes the next command in + the sequence. It suffices to place the sequence of commands between + parentheses to force it into a subshell, which may be stopped as a + unit. + + Array variables may not (yet) be exported. + + There may be only one active coprocess at a time. + + + +GNU Bash-4.1 2009 December 29 BASH(1) diff --git a/doc/bash.1 b/doc/bash.1 new file mode 100644 index 0000000..1890b3c --- /dev/null +++ b/doc/bash.1 @@ -0,0 +1,9720 @@ +.\" +.\" MAN PAGE COMMENTS to +.\" +.\" Chet Ramey +.\" Case Western Reserve University +.\" chet@po.cwru.edu +.\" +.\" Last Change: Tue Dec 29 15:36:16 EST 2009 +.\" +.\" bash_builtins, strip all but Built-Ins section +.if \n(zZ=1 .ig zZ +.if \n(zY=1 .ig zY +.TH BASH 1 "2009 December 29" "GNU Bash-4.1" +.\" +.\" There's some problem with having a `@' +.\" in a tagged paragraph with the BSD man macros. +.\" It has to do with `@' appearing in the }1 macro. +.\" This is a problem on 4.3 BSD and Ultrix, but Sun +.\" appears to have fixed it. +.\" If you're seeing the characters +.\" `@u-3p' appearing before the lines reading +.\" `possible-hostname-completions +.\" and `complete-hostname' down in READLINE, +.\" then uncomment this redefinition. +.\" +.de }1 +.ds ]X \&\\*(]B\\ +.nr )E 0 +.if !"\\$1"" .nr )I \\$1n +.}f +.ll \\n(LLu +.in \\n()Ru+\\n(INu+\\n()Iu +.ti \\n(INu +.ie !\\n()Iu+\\n()Ru-\w\\*(]Xu-3p \{\\*(]X +.br\} +.el \\*(]X\h|\\n()Iu+\\n()Ru\c +.}f +.. +.\" +.\" File Name macro. This used to be `.PN', for Path Name, +.\" but Sun doesn't seem to like that very much. +.\" +.de FN +\fI\|\\$1\|\fP +.. +.SH NAME +bash \- GNU Bourne-Again SHell +.SH SYNOPSIS +.B bash +[options] +[file] +.SH COPYRIGHT +.if n Bash is Copyright (C) 1989-2009 by the Free Software Foundation, Inc. +.if t Bash is Copyright \(co 1989-2009 by the Free Software Foundation, Inc. +.SH DESCRIPTION +.B Bash +is an \fBsh\fR-compatible command language interpreter that +executes commands read from the standard input or from a file. +.B Bash +also incorporates useful features from the \fIKorn\fP and \fIC\fP +shells (\fBksh\fP and \fBcsh\fP). +.PP +.B Bash +is intended to be a conformant implementation of the +Shell and Utilities portion of the IEEE POSIX specification +(IEEE Standard 1003.1). +.B Bash +can be configured to be POSIX-conformant by default. +.SH OPTIONS +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 output. +These are the strings that +are subject to language translation when the current locale +is not \fBC\fP or \fBPOSIX\fP. +This implies the \fB\-n\fP option; no commands will be executed. +.TP +.B [\-+]O [\fIshopt_option\fP] +\fIshopt_option\fP is one of the shell options accepted by the +\fBshopt\fP builtin (see +.SM +.B SHELL BUILTIN COMMANDS +below). +If \fIshopt_option\fP is present, \fB\-O\fP sets the value of that option; +\fB+O\fP unsets it. +If \fIshopt_option\fP is not supplied, the names and values of the shell +options accepted by \fBshopt\fP are printed on the standard output. +If the invocation option is \fB+O\fP, the output is displayed in a format +that may be reused as input. +.TP +.B \-\- +A +.B \-\- +signals the end of options and disables further option processing. +Any arguments after the +.B \-\- +are treated as filenames and arguments. An argument of +.B \- +is equivalent to \fB\-\-\fP. +.PD +.PP +.B Bash +also interprets a number of multi-character options. +These options must appear on the command line before the +single-character options to be recognized. +.PP +.PD 0 +.TP +.B \-\-debugger +Arrange for the debugger profile to be executed before the shell +starts. +Turns on extended debugging mode (see the description of the +.B extdebug +option to the +.B shopt +builtin below) +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 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 error are +both connected to terminals (as determined by +.IR isatty (3)), +or one started with the +.B \-i +option. +.SM +.B PS1 +is set and +.B $\- +includes +.B i +if +.B bash +is interactive, +allowing a shell script or a startup file to test this state. +.PP +The following paragraphs describe how +.B bash +executes its startup files. +If any of the files exist but cannot be read, +.B bash +reports an error. +Tildes are expanded in 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 with its standard input +connected to a a network connection, as if by the remote shell +daemon, usually \fIrshd\fP, or the secure shell daemon \fIsshd\fP. +If +.B bash +determines it is being run in this fashion, it reads and executes +commands from \fI~/.bashrc\fP, if that file exists and is readable. +It will not do this if invoked as \fBsh\fP. +The +.B \-\-norc +option may be used to inhibit this behavior, and the +.B \-\-rcfile +option may be used to force another file to be read, but +\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 +.BR SHELLOPTS , +.SM +.BR BASHOPTS , +.SM +.BR CDPATH , +and +.SM +.B GLOBIGNORE +variables, if they appear in the environment, are ignored, +and the effective user id is set to the real user id. +If the \fB\-p\fP option is supplied at invocation, the startup behavior is +the same, but the effective user id is not reset. +.SH DEFINITIONS +.PP +The following definitions are used throughout the rest of this +document. +.PD 0 +.TP +.B blank +A space or tab. +.TP +.B word +A sequence of characters considered as a single unit by the shell. +Also known as a +.BR token . +.TP +.B name +A +.I word +consisting only of alphanumeric characters and underscores, and +beginning with an alphabetic character or an underscore. Also +referred to as an +.BR identifier . +.TP +.B metacharacter +A character that, when unquoted, separates words. One of the following: +.br +.RS +.PP +.if t \fB| & ; ( ) < > space tab\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 & && ; ;; ( ) | |& \fP +.if n \fB|| & && ; ;; ( ) | |& \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 +.SH "SHELL GRAMMAR" +.SS Simple Commands +.PP +A \fIsimple command\fP is a sequence of optional variable assignments +followed by \fBblank\fP-separated words and redirections, and +terminated by a \fIcontrol operator\fP. The first word +specifies the command to be executed, and is passed as argument zero. +The remaining words are passed as arguments to the invoked command. +.PP +The return value of a \fIsimple command\fP is its exit status, or +128+\fIn\^\fP if the command is terminated by signal +.IR n . +.SS Pipelines +.PP +A \fIpipeline\fP is a sequence of one or more commands separated by +one of the control operators +.B | +or \fB|&\fP. +The format for a pipeline is: +.RS +.PP +[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ] +.RE +.PP +The standard output of +.I command +is connected via a pipe to the standard input of +.IR command2 . +This connection is performed before any redirections specified by the +command (see +.SM +.B REDIRECTION +below). +If \fB|&\fP is used, the standard error of \fIcommand\fP is connected to +\fIcommand2\fP's standard input through the pipe; it is shorthand for +\fB2>&1 |\fP. +This implicit redirection of the standard error is performed after any +redirections specified by the command. +.PP +The return status of a pipeline is the exit status of the last +command, unless the \fBpipefail\fP option is enabled. +If \fBpipefail\fP is enabled, the pipeline's return status is the +value of the last (rightmost) command to exit with a non-zero status, +or zero if all commands exit successfully. +If the reserved word +.B ! +precedes a pipeline, the exit status of that pipeline is the logical +negation of the exit status as described above. +The shell waits for all commands in the pipeline to +terminate before returning a value. +.PP +If the +.B time +reserved word precedes a pipeline, the elapsed as well as user and +system time consumed by its execution are reported when the pipeline +terminates. +The \fB\-p\fP option changes the output format to that specified by POSIX. +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 . +.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 +AND and OR lists are sequences of one of more pipelines separated by the +\fB&&\fP and \fB\(bv\(bv\fP control operators, respectively. +AND and OR lists are executed with left associativity. +An AND list has the form +.RS +.PP +\fIcommand1\fP \fB&&\fP \fIcommand2\fP +.RE +.PP +.I command2 +is executed if, and only if, +.I command1 +returns an exit status of zero. +.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 environment (see +.SM +\fBCOMMAND EXECUTION ENVIRONMENT\fP +below). +Variable assignments and builtin +commands that affect the shell's environment do not remain in effect +after the command completes. The return status is the exit status of +\fIlist\fP. +.TP +{ \fIlist\fP; } +\fIlist\fP is simply executed in the current shell environment. +\fIlist\fP must be terminated with a newline or semicolon. +This is known as a \fIgroup command\fP. +The return status is the exit status of +\fIlist\fP. +Note that unlike the metacharacters \fB(\fP and \fB)\fP, \fB{\fP and +\fB}\fP are \fIreserved words\fP and must occur where a reserved +word is permitted to be recognized. Since they do not cause a word +break, they must be separated from \fIlist\fP by whitespace or another +shell metacharacter. +.TP +((\fIexpression\fP)) +The \fIexpression\fP is evaluated according to the rules described +below under +.SM +.BR "ARITHMETIC EVALUATION" . +If the value of the expression is non-zero, the return status is 0; +otherwise the return status is 1. This is exactly equivalent to +\fBlet "\fIexpression\fP"\fR. +.TP +\fB[[\fP \fIexpression\fP \fB]]\fP +Return a status of 0 or 1 depending on the evaluation of +the conditional expression \fIexpression\fP. +Expressions are composed of the primaries described below under +.SM +.BR "CONDITIONAL EXPRESSIONS" . +Word splitting and pathname expansion are not performed on the words +between the \fB[[\fP and \fB]]\fP; tilde expansion, parameter and +variable expansion, arithmetic expansion, command substitution, process +substitution, and quote removal are performed. +Conditional operators such as \fB\-f\fP must be unquoted to be recognized +as primaries. +.if t .sp 0.5 +.if n .sp 1 +When used with \fB[[\fP, The \fB<\fP and \fB>\fP operators sort +lexicographically using the current locale. +.if t .sp 0.5 +.if n .sp 1 +When the \fB==\fP and \fB!=\fP operators are used, the string to the +right of the operator is considered a pattern and matched according +to the rules described below under \fBPattern Matching\fP. +If the shell option +.B nocasematch +is enabled, the match is performed without regard to the case +of alphabetic characters. +The return value is 0 if the string matches (\fB==\fP) or does not match +(\fB!=\fP) the pattern, and 1 otherwise. +Any part of the pattern may be quoted to force it to be matched as a +string. +.if t .sp 0.5 +.if n .sp 1 +An additional binary operator, \fB=~\fP, is available, with the same +precedence as \fB==\fP and \fB!=\fP. +When it is used, the string to the right of the operator is considered +an extended regular expression and matched accordingly (as in \fIregex\fP(3)). +The return value is 0 if the string matches +the pattern, and 1 otherwise. +If the regular expression is syntactically incorrect, the conditional +expression's return value is 2. +If the shell option +.B nocasematch +is enabled, the match is performed without regard to the case +of alphabetic characters. +Any part of the pattern may be quoted to force it to be matched as a +string. +Substrings matched by parenthesized subexpressions within the regular +expression are saved in the array variable +.SM +.BR BASH_REMATCH . +The element of +.SM +.B BASH_REMATCH +with index 0 is the portion of the string +matching the entire regular expression. +The element of +.SM +.B BASH_REMATCH +with index \fIn\fP is the portion of the +string matching the \fIn\fPth parenthesized subexpression. +.if t .sp 0.5 +.if n .sp 1 +Expressions may be combined using the following operators, listed +in decreasing order of precedence: +.if t .sp 0.5 +.if n .sp 1 +.RS +.PD 0 +.TP +.B ( \fIexpression\fP ) +Returns the value of \fIexpression\fP. +This may be used to override the normal precedence of operators. +.TP +.B ! \fIexpression\fP +True if +.I expression +is false. +.TP +\fIexpression1\fP \fB&&\fP \fIexpression2\fP +True if both +.I expression1 +and +.I expression2 +are true. +.TP +.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 +.SM +.B PS3 +prompt is then displayed and a line read from the standard input. +If the line consists of a number corresponding to one of +the displayed words, then the value of +.I name +is set to that word. If the line is empty, the words and prompt +are displayed again. If EOF is read, the command completes. Any +other value read causes +.I name +to be set to null. The line read is saved in the variable +.SM +.BR REPLY . +The +.I list +is executed after each selection until a +.B break +command is executed. +The exit status of +.B select +is the exit status of the last command executed in +.IR list , +or zero if no commands were executed. +.TP +\fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] \ +... ) \fIlist\fP ;; ] ... \fBesac\fP +A \fBcase\fP command first expands \fIword\fP, and tries to match +it against each \fIpattern\fP in turn, using the same matching rules +as for pathname expansion (see +.B Pathname Expansion +below). +The \fIword\fP is expanded using tilde +expansion, parameter and variable expansion, arithmetic substitution, +command substitution, process substitution and quote removal. +Each \fIpattern\fP examined is expanded using tilde +expansion, parameter and variable expansion, arithmetic substitution, +command substitution, and process substitution. +If the shell option +.B nocasematch +is enabled, the match is performed without regard to the case +of alphabetic characters. +When a match is found, the corresponding \fIlist\fP is executed. +If the \fB;;\fP operator is used, no subsequent matches are attempted after +the first pattern match. +Using \fB;&\fP in place of \fB;;\fP causes execution to continue with +the \fIlist\fP associated with the next set of patterns. +Using \fB;;&\fP in place of \fB;;\fP causes the shell to test the next +pattern list in the statement, if any, and execute any associated \fIlist\fP +on a successful match. +The exit status is zero if no +pattern matches. Otherwise, it is the exit status of the +last command executed in \fIlist\fP. +.TP +\fBif\fP \fIlist\fP; \fBthen\fP \fIlist;\fP \ +[ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] ... \ +[ \fBelse\fP \fIlist\fP; ] \fBfi\fP +The +.B if +.I list +is executed. If its exit status is zero, the +\fBthen\fP \fIlist\fP is executed. Otherwise, each \fBelif\fP +\fIlist\fP is executed in turn, and if its exit status is zero, +the corresponding \fBthen\fP \fIlist\fP is executed and the +command completes. Otherwise, the \fBelse\fP \fIlist\fP is +executed, if present. The exit status is the exit status of the +last command executed, or zero if no condition tested true. +.TP +\fBwhile\fP \fIlist\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. +.SS Coprocesses +.PP +A \fIcoprocess\fP is a shell command preceded by the \fBcoproc\fP reserved +word. +A coprocess is executed asynchronously in a subshell, as if the command +had been terminated with the \fB&\fP control operator, with a two-way pipe +established between the executing shell and the coprocess. +.PP +The format for a coprocess is: +.RS +.PP +\fBcoproc\fP [\fINAME\fP] \fIcommand\fP [\fIredirections\fP] +.RE +.PP +This creates a coprocess named \fINAME\fP. +If \fINAME\fP is not supplied, the default name is \fICOPROC\fP. +\fINAME\fP must not be supplied if \fIcommand\fP is a \fIsimple +command\fP (see above); otherwise, it is interpreted as the first word +of the simple command. +When the coproc is executed, the shell creates an array variable (see +.B Arrays +below) named \fINAME\fP in the context of the executing shell. +The standard output of +.I command +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to \fINAME\fP[0]. +The standard input of +.I command +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to \fINAME\fP[1]. +This pipe is established before any redirections specified by the +command (see +.SM +.B REDIRECTION +below). +The file descriptors can be utilized as arguments to shell commands +and redirections using standard word expansions. +The process id of the shell spawned to execute the coprocess is +available as the value of the variable \fINAME\fP_PID. +The \fBwait\fP +builtin command may be used to wait for the coprocess to terminate. +.PP +The return status of a coprocess is the exit status of \fIcommand\fP. +.SS Shell Function Definitions +.PP +A shell function is an object that is called like a simple command and +executes a compound command with a new set of positional parameters. +Shell functions are declared as follows: +.TP +[ \fBfunction\fP ] \fIname\fP () \fIcompound\-command\fP [\fIredirection\fP] +This defines a function named \fIname\fP. +The reserved word \fBfunction\fP is optional. +If the \fBfunction\fP reserved word is supplied, the parentheses are optional. +The \fIbody\fP of the function is the compound command +.I compound\-command +(see \fBCompound Commands\fP above). +That command is usually a \fIlist\fP of commands between { and }, but +may be any command listed under \fBCompound Commands\fP above. +\fIcompound\-command\fP is executed whenever \fIname\fP is specified as the +name of a simple command. +Any redirections (see +.SM +.B REDIRECTION +below) specified when a function is defined are performed +when the function is executed. +The exit status of a function definition is zero unless a syntax error +occurs or a readonly function with the same name already exists. +When executed, the exit status of a function is the exit status of the +last command executed in the body. (See +.SM +.B FUNCTIONS +below.) +.SH COMMENTS +In a non-interactive shell, or an interactive shell in which the +.B interactive_comments +option to the +.B shopt +builtin is enabled (see +.SM +.B "SHELL BUILTIN COMMANDS" +below), a word beginning with +.B # +causes that word and all remaining characters on that line to +be ignored. An interactive shell without the +.B interactive_comments +option enabled does not allow comments. The +.B interactive_comments +option is on by default in interactive shells. +.SH QUOTING +\fIQuoting\fP is used to remove the special meaning of certain +characters or words to the shell. Quoting can be used to +disable special treatment for special characters, to prevent +reserved words from being recognized as such, and to prevent +parameter expansion. +.PP +Each of the \fImetacharacters\fP listed above under +.SM +.B DEFINITIONS +has special meaning to the shell and must be quoted if it is to +represent itself. +.PP +When the command history expansion facilities are being used +(see +.SM +.B HISTORY EXPANSION +below), the +\fIhistory expansion\fP character, usually \fB!\fP, must be quoted +to prevent history expansion. +.PP +There are three quoting mechanisms: the +.IR "escape character" , +single quotes, and double quotes. +.PP +A non-quoted backslash (\fB\e\fP) is the +.IR "escape character" . +It preserves the literal value of the next character that follows, +with the exception of . If a \fB\e\fP pair +appears, and the backslash is not itself quoted, the \fB\e\fP +is treated as a line continuation (that is, it is removed from the +input stream and effectively ignored). +.PP +Enclosing characters in single quotes preserves the literal value +of each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a backslash. +.PP +Enclosing characters in double quotes preserves the literal value +of all characters within the quotes, with the exception of +.BR $ , +.BR \` , +.BR \e , +and, when history expansion is enabled, +.BR ! . +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 . +A double quote may be quoted within double quotes by preceding it with +a backslash. +If enabled, history expansion will be performed unless an +.B ! +appearing in double quotes is escaped using a backslash. +The backslash preceding the +.B ! +is not removed. +.PP +The special parameters +.B * +and +.B @ +have special meaning when in double +quotes (see +.SM +.B PARAMETERS +below). +.PP +Words of the form \fB$\fP\(aq\fIstring\fP\(aq are treated specially. The +word expands to \fIstring\fP, with backslash-escaped characters replaced +as specified by the ANSI C standard. Backslash escape sequences, if +present, are decoded as follows: +.RS +.PD 0 +.TP +.B \ea +alert (bell) +.TP +.B \eb +backspace +.TP +.B \ee +.TP +.B \eE +an escape character +.TP +.B \ef +form feed +.TP +.B \en +new line +.TP +.B \er +carriage return +.TP +.B \et +horizontal tab +.TP +.B \ev +vertical tab +.TP +.B \e\e +backslash +.TP +.B \e\(aq +single quote +.TP +.B \e\(dq +double quote +.TP +.B \e\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\(dq\fIstring\fP\(dq) +will cause the string to be translated according to the current locale. +If the current locale is \fBC\fP or \fBPOSIX\fP, the dollar sign +is ignored. +If the string is translated and replaced, the replacement is +double-quoted. +.SH PARAMETERS +A +.I parameter +is an entity that stores values. +It can be a +.IR name , +a number, or one of the special characters listed below under +.BR "Special Parameters" . +A +.I variable +is a parameter denoted by a +.IR name . +A variable has a \fIvalue\fP and zero or more \fIattributes\fP. +Attributes are assigned using the +.B declare +builtin command (see +.B declare +below in +.SM +.BR "SHELL BUILTIN COMMANDS" ). +.PP +A parameter is set if it has been assigned a value. The null string is +a valid value. Once a variable is set, it may be unset only by using +the +.B unset +builtin command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.PP +A +.I variable +may be assigned to by a statement of the form +.RS +.PP +\fIname\fP=[\fIvalue\fP] +.RE +.PP +If +.I value +is not given, the variable is assigned the null string. All +.I values +undergo tilde expansion, parameter and variable expansion, +command substitution, arithmetic expansion, and quote +removal (see +.SM +.B EXPANSION +below). If the variable has its +.B integer +attribute set, then +.I value +is evaluated as an arithmetic expression even if the $((...)) expansion is +not used (see +.B "Arithmetic Expansion" +below). +Word splitting is not performed, with the exception +of \fB"$@"\fP as explained below under +.BR "Special Parameters" . +Pathname expansion is not performed. +Assignment statements may also appear as arguments to the +.BR alias , +.BR declare , +.BR typeset , +.BR export , +.BR readonly , +and +.B local +builtin commands. +.PP +In the context where an assignment statement is assigning a value +to a shell variable or array index, the += operator can be used to +append to or add to the variable's previous value. +When += is applied to a variable for which the integer attribute has been +set, \fIvalue\fP is evaluated as an arithmetic expression and added to the +variable's current value, which is also evaluated. +When += is applied to an array variable using compound assignment (see +.B Arrays +below), the +variable's value is not unset (as it is when using =), and new values are +appended to the array beginning at one greater than the array's maximum index +(for indexed arrays) or added as additional key\-value pairs in an +associative array. +When applied to a string-valued variable, \fIvalue\fP is expanded and +appended to the variable's value. +.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" ... +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. +When there are no positional parameters, "\fB$@\fP" and +.B $@ +expand to nothing (i.e., they are removed). +.TP +.B # +Expands to the number of positional parameters in decimal. +.TP +.B ? +Expands to the exit status of the most recently executed foreground +pipeline. +.TP +.B \- +Expands to the current option flags as specified upon invocation, +by the +.B set +builtin command, or those set by the shell itself +(such as the +.B \-i +option). +.TP +.B $ +Expands to the process ID of the shell. In a () subshell, it +expands to the process ID of the current shell, not the +subshell. +.TP +.B ! +Expands to the process ID of the 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 pathname used to invoke the +shell or shell script being executed as passed in the environment +or argument list. +Subsequently, expands to the last argument to the previous command, +after expansion. +Also set to the full pathname used to invoke each command executed +and placed in the environment exported to that command. +When checking mail, this parameter holds the name of the mail file +currently being checked. +.PD +.SS Shell Variables +.PP +The following variables are set by the shell: +.PP +.PD 0 +.TP +.B BASH +Expands to the full file name used to invoke this instance of +.BR bash . +.TP +.B BASHOPTS +A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the +.B \-s +option to the +.B shopt +builtin command (see +.SM +.B "SHELL BUILTIN COMMANDS" +below). The options appearing in +.SM +.B BASHOPTS +are those reported as +.I on +by \fBshopt\fP. +If this variable is in the environment when +.B bash +starts up, each shell option in the list will be enabled before +reading any startup files. +This variable is read-only. +.TP +.B BASHPID +Expands to the process id of the current \fBbash\fP process. +This differs from \fB$$\fP under certain circumstances, such as subshells +that do not require \fBbash\fP to be re-initialized. +.TP +.B BASH_ALIASES +An associative array variable whose members correspond to the internal +list of aliases as maintained by the \fBalias\fP builtin +Elements added to this array appear in the alias list; unsetting array +elements cause aliases to be removed from the alias list. +.TP +.B BASH_ARGC +An array variable whose values are the number of parameters in each +frame of the current \fBbash\fP execution call stack. +The number of +parameters to the current subroutine (shell function or script executed +with \fB.\fP or \fBsource\fP) is at the top of the stack. +When a subroutine is executed, the number of parameters passed is pushed onto +.SM +.BR BASH_ARGC . +The shell sets +.SM +.B BASH_ARGC +only when in extended debugging mode (see the description of the +.B extdebug +option to the +.B shopt +builtin below) +.TP +.B BASH_ARGV +An array variable containing all of the parameters in the current \fBbash\fP +execution call stack. The final parameter of the last subroutine call +is at the top of the stack; the first parameter of the initial call is +at the bottom. When a subroutine is executed, the parameters supplied +are pushed onto +.SM +.BR BASH_ARGV . +The shell sets +.SM +.B BASH_ARGV +only when in extended debugging mode +(see the description of the +.B extdebug +option to the +.B shopt +builtin below) +.TP +.B BASH_CMDS +An associative array variable whose members correspond to the internal +hash table of commands as maintained by the \fBhash\fP builtin. +Elements added to this array appear in the hash table; unsetting array +elements cause commands to be removed from the hash table. +.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 +.SM +.BR FUNCNAME . +\fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source +file where \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP was called +(or \fB${BASH_LINENO[\fP\fI$i-1\fP\fB]}\fP if referenced within another +shell function). +The corresponding source file name is \fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fP. +Use +.SM +.B LINENO +to obtain the current line number. +.TP +.B BASH_REMATCH +An array variable whose members are assigned by the \fB=~\fP binary +operator to the \fB[[\fP conditional command. +The element with index 0 is the portion of the string +matching the entire regular expression. +The element with index \fIn\fP is the portion of the +string matching the \fIn\fPth parenthesized subexpression. +This variable is read-only. +.TP +.B BASH_SOURCE +An array variable whose members are the source filenames corresponding +to the elements in the +.SM +.B FUNCNAME +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 +.SM +.BR MACHTYPE . +.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_KEY +The key (or final key of a key sequence) used to invoke the current +completion function. +.TP +.B COMP_LINE +The current command line. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see \fBProgrammable Completion\fP +below). +.TP +.B COMP_POINT +The index of the current cursor position relative to the beginning of +the current command. +If the current cursor position is at the end of the current command, +the value of this variable is equal to \fB${#COMP_LINE}\fP. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see \fBProgrammable Completion\fP +below). +.TP +.B COMP_TYPE +Set to an integer value corresponding to the type of completion attempted +that caused a completion function to be called: +\fITAB\fP, for normal completion, +\fI?\fP, for listing completions after successive tabs, +\fI!\fP, for listing alternatives on partial word completion, +\fI@\fP, to list completions if the word is not unmodified, +or +\fI%\fP, for menu completion. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see \fBProgrammable Completion\fP +below). +.TP +.B COMP_WORDBREAKS +The set of characters that the \fBreadline\fP library treats as word +separators when performing word completion. +If +.SM +.B COMP_WORDBREAKS +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B COMP_WORDS +An array variable (see \fBArrays\fP below) consisting of the individual +words in the current command line. +The line is split into words as \fBreadline\fP would split it, using +.SM +.B COMP_WORDBREAKS +as described above. +This variable is available only in shell functions invoked by the +programmable completion facilities (see \fBProgrammable Completion\fP +below). +.TP +.B 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 +.if t \f(CW"main"\fP. +.if n "main". +This variable exists only when a shell function is executing. +Assignments to +.SM +.B FUNCNAME +have no effect 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 BASH_XTRACEFD +If set to an integer corresponding to a valid file descriptor, \fBbash\fP +will write the trace output generated when +.if t \f(CWset -x\fP +.if n \fIset -x\fP +is enabled to that file descriptor. +The file descriptor is closed when +.SM +.B BASH_XTRACEFD +is unset or assigned a new value. +Unsetting +.SM +.B BASH_XTRACEFD +or assigning it the empty string causes the +trace output to be sent to the standard error. +Note that setting +.SM +.B BASH_XTRACEFD +to 2 (the standard error file +descriptor) and then unsetting it will result in the standard error +being closed. +.TP +.B 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 +.SM +.B HISTCONTROL +is unset, or does not include a valid value, +all lines read by the shell parser are saved on the history list, +subject to the value of +.SM +.BR HISTIGNORE . +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +.SM +.BR HISTCONTROL . +.TP +.B HISTFILE +The name of the file in which command history is saved (see +.SM +.B HISTORY +below). The default value is \fI~/.bash_history\fP. If unset, the +command history is not saved when 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, by removing the oldest entries, +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 +.SM +.B HISTCONTROL +are applied. +In addition to the normal shell pattern matching characters, `\fB&\fP' +matches the previous history line. `\fB&\fP' may be escaped using a +backslash; the backslash is removed before attempting a match. +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +.SM +.BR HISTIGNORE . +.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 HISTTIMEFORMAT +If this variable is set and not null, its value is used as a format string +for \fIstrftime\fP(3) to print the time stamp associated with each history +entry displayed by the \fBhistory\fP builtin. +If this variable is set, time stamps are written to the history file so +they may be preserved across shell sessions. +This uses the history comment character to distinguish timestamps from +other history lines. +.TP +.B HOME +The home directory of the current user; the default argument for the +\fBcd\fP builtin command. +The value of this variable is also used when performing tilde expansion. +.TP +.B HOSTFILE +Contains the name of a file in the same format as +.FN /etc/hosts +that should be read when the shell needs to complete a +hostname. +The list of possible hostname completions may be changed while the +shell is running; +the next time hostname completion is attempted after the +value is changed, +.B bash +adds the contents of the new file to the existing list. +If +.SM +.B HOSTFILE +is set, but has no value, or does not name a readable file, +\fBbash\fP attempts to read +.FN /etc/hosts +to obtain the list of possible hostname completions. +When +.SM +.B HOSTFILE +is unset, the hostname list is cleared. +.TP +.B IFS +The +.I Internal Field Separator +that is used +for word splitting after expansion and to +split lines into words with the +.B read +builtin command. The default value is +``''. +.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 +.SM +.B LANG +and any other +\fBLC_\fP variable specifying a locale category. +.TP +.B LC_COLLATE +This variable determines the collation order used when sorting the +results of pathname expansion, and determines the behavior of range +expressions, equivalence classes, and collating sequences within +pathname expansion and pattern matching. +.TP +.B LC_CTYPE +This variable determines the interpretation of characters and the +behavior of character classes within pathname expansion and pattern +matching. +.TP +.B LC_MESSAGES +This variable determines the locale used to translate double-quoted +strings preceded by a \fB$\fP. +.TP +.B LC_NUMERIC +This variable determines the locale category used for number formatting. +.TP +.B LINES +Used by the \fBselect\fP builtin command to determine the column length +for printing selection lists. Automatically set upon receipt of a +.SM +.BR 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=\(aq/var/mail/bfox?"You have mail":~/shell\-mail?"$_ has mail!"\(aq +.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 +.SM +.B PATH +indicates the current directory. +A null directory name may appear as two adjacent colons, or as an initial +or trailing colon. +The default path is system-dependent, +and is set by the administrator who installs +.BR bash . +A common value is +.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 PROMPT_DIRTRIM +If set to a number greater than zero, the value is used as the number of +trailing directory components to retain when expanding the \fB\ew\fP and +\fB\eW\fP prompt string escapes (see +.SM +.B PROMPTING +below). Characters removed are replaced with an ellipsis. +.TP +.B PS1 +The value of this parameter is expanded (see +.SM +.B PROMPTING +below) and used as the primary prompt string. The default value is +``\fB\es\-\ev\e$ \fP''. +.TP +.B PS2 +The value of this parameter is expanded as with +.SM +.B PS1 +and used as the secondary prompt string. The default is +``\fB> \fP''. +.TP +.B PS3 +The value of this parameter is used as the prompt for the +.B select +command (see +.SM +.B SHELL GRAMMAR +above). +.TP +.B PS4 +The value of this parameter is expanded as with +.SM +.B PS1 +and the value is printed before each command +.B bash +displays during an execution trace. The first character of +.SM +.B PS4 +is replicated multiple times, as necessary, to indicate multiple +levels of indirection. The default is ``\fB+ \fP''. +.TP +.B SHELL +The full pathname to the shell is kept in this environment variable. +If it is not set when the shell starts, +.B bash +assigns to it the full pathname of the current user's login shell. +.TP +.B TIMEFORMAT +The value of this parameter is used as a format string specifying +how the timing information for pipelines prefixed with the +.B time +reserved word should be displayed. +The \fB%\fP character introduces an escape sequence that is +expanded to a time value or other information. +The escape sequences and their meanings are as follows; the +braces denote optional portions. +.sp .5 +.RS +.PD 0 +.TP 10 +.B %% +A literal \fB%\fP. +.TP +.B %[\fIp\fP][l]R +The elapsed time in seconds. +.TP +.B %[\fIp\fP][l]U +The number of CPU seconds spent in user mode. +.TP +.B %[\fIp\fP][l]S +The number of CPU seconds spent in system mode. +.TP +.B %P +The CPU percentage, computed as (%U + %S) / %R. +.PD +.RE +.IP +The optional \fIp\fP is a digit specifying the \fIprecision\fP, +the number of fractional digits after a decimal point. +A value of 0 causes no decimal point or fraction to be output. +At most three places after the decimal point may be specified; +values of \fIp\fP greater than 3 are changed to 3. +If \fIp\fP is not specified, the value 3 is used. +.IP +The optional \fBl\fP specifies a longer format, including +minutes, of the form \fIMM\fPm\fISS\fP.\fIFF\fPs. +The value of \fIp\fP determines whether or not the fraction is +included. +.IP +If this variable is not set, \fBbash\fP acts as if it had the +value \fB$\(aq\enreal\et%3lR\enuser\et%3lU\ensys\t%3lS\(aq\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, +.SM +.B TMOUT +is treated as the +default timeout for the \fBread\fP builtin. +The \fBselect\fP command terminates if input does not arrive +after +.SM +.B TMOUT +seconds when input is coming from a terminal. +In an interactive shell, the value is interpreted as the +number of seconds to wait for input after issuing the primary prompt. +.B Bash +terminates after waiting for that number of seconds if input does +not arrive. +.TP +.B TMPDIR +If set, \fBBash\fP uses its value as the name of a directory in which +\fBBash\fP creates temporary files for the shell's use. +.TP +.B auto_resume +This variable controls how the shell interacts with the user and +job control. If this variable is set, single word simple +commands without redirections are treated as candidates for resumption +of an existing stopped job. There is no ambiguity allowed; if there is +more than one job beginning with the string typed, the job most recently +accessed is selected. The +.I name +of a stopped job, in this context, is the command line used to +start it. +If set to the value +.IR exact , +the string supplied must match the name of a stopped job exactly; +if set to +.IR substring , +the string supplied needs to match a substring of the name of a +stopped job. The +.I substring +value provides functionality analogous to the +.B %? +job identifier (see +.SM +.B JOB CONTROL +below). If set to any other value, the supplied string must +be a prefix of a stopped job's name; this provides functionality +analogous to the \fB%\fP\fIstring\fP job identifier. +.TP +.B histchars +The two or three characters which control history expansion +and tokenization (see +.SM +.B HISTORY EXPANSION +below). The first character is the \fIhistory expansion\fP character, +the character which signals the start of a history +expansion, normally `\fB!\fP'. +The second character is the \fIquick substitution\fP +character, which is used as shorthand for re-running the previous +command entered, substituting one string for another in the command. +The default is `\fB^\fP'. +The optional third character is the character +which indicates that the remainder of the line is a comment when found +as the first character of a word, normally `\fB#\fP'. The history +comment character causes history substitution to be skipped for the +remaining words on the line. It does not necessarily cause the shell +parser to treat the rest of the line as a comment. +.PD +.SS Arrays +.B Bash +provides one-dimensional indexed and associative array variables. +Any variable may be used as an indexed array; the +.B declare +builtin will explicitly declare an array. +There is no maximum +limit on the size of an array, nor any requirement that members +be indexed or assigned contiguously. +Indexed arrays are referenced using integers (including arithmetic +expressions) and are zero-based; associative arrays are referenced +using arbitrary strings. +.PP +An indexed array is created automatically if any variable is assigned to +using the syntax \fIname\fP[\fIsubscript\fP]=\fIvalue\fP. The +.I subscript +is treated as an arithmetic expression that must evaluate to a number +greater than or equal to zero. To explicitly declare an indexed array, +use +.B declare \-a \fIname\fP +(see +.SM +.B SHELL BUILTIN COMMANDS +below). +.B declare \-a \fIname\fP[\fIsubscript\fP] +is also accepted; the \fIsubscript\fP is ignored. +.PP +Associative arrays are created using +.BR "declare \-A \fIname\fP" . +.PP +Attributes may be +specified for an array variable using the +.B declare +and +.B readonly +builtins. Each attribute applies to all members of an array. +.PP +Arrays are assigned to using compound assignments of the form +\fIname\fP=\fB(\fPvalue\fI1\fP ... value\fIn\fP\fB)\fP, where each +\fIvalue\fP is of the form [\fIsubscript\fP]=\fIstring\fP. +Indexed array assignments do not require the bracket and subscript. +When assigning to indexed arrays, if the optional brackets and subscript +are supplied, that index is assigned to; +otherwise the index of the element assigned is the last index assigned +to by the statement plus one. Indexing starts at zero. +.PP +When assigning to an associative array, the subscript is required. +.PP +This syntax is also accepted by the +.B declare +builtin. Individual array elements may be assigned to using the +\fIname\fP[\fIsubscript\fP]=\fIvalue\fP syntax introduced above. +.PP +Any element of an array may be referenced using +${\fIname\fP[\fIsubscript\fP]}. The braces are required to avoid +conflicts with pathname expansion. If +\fIsubscript\fP is \fB@\fP or \fB*\fP, the word expands to +all members of \fIname\fP. These subscripts differ only when the +word appears within double quotes. If the word is double-quoted, +${\fIname\fP[*]} expands to a single +word with the value of each array member separated by the first +character of the +.SM +.B IFS +special variable, and ${\fIname\fP[@]} expands each element of +\fIname\fP to a separate word. When there are no array members, +${\fIname\fP[@]} expands to nothing. +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. +This is analogous to the expansion +of the special parameters \fB*\fP and \fB@\fP (see +.B Special Parameters +above). ${#\fIname\fP[\fIsubscript\fP]} expands to the length of +${\fIname\fP[\fIsubscript\fP]}. If \fIsubscript\fP is \fB*\fP or +\fB@\fP, the expansion is the number of elements in the array. +Referencing an array variable without a subscript is equivalent to +referencing the array with a subscript of 0. +.PP +An array variable is considered set if a subscript has been assigned a +value. The null string is a valid value. +.PP +The +.B unset +builtin is used to destroy arrays. \fBunset\fP \fIname\fP[\fIsubscript\fP] +destroys the array element at index \fIsubscript\fP. +Care must be taken to avoid unwanted side effects caused by pathname +expansion. +\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 indexed array and a +.B \-A +option to specify an associative 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\fIincr\fP\fB]}\fP, +where \fIx\fP and \fIy\fP are either integers or single characters, +and \fIincr\fP, an optional increment, is an integer. +When integers are supplied, the expression expands to each number between +\fIx\fP and \fIy\fP, inclusive. +Supplied integers may be prefixed with \fI0\fP to force each term to have the +same width. When either \fIx\fP or \fPy\fP begins with a zero, the shell +attempts to force all generated terms to contain the same number of digits, +zero-padding where necessary. +When characters are supplied, the expression expands to each character +lexicographically between \fIx\fP and \fIy\fP, inclusive. Note that +both \fIx\fP and \fIy\fP must be of the same type. +When the increment is supplied, it is used as the difference between +each term. The default increment is 1 or -1 as appropriate. +.PP +Brace expansion is performed before any other expansions, +and any characters special to other expansions are preserved +in the result. It is strictly textual. +.B Bash +does not apply any syntactic interpretation to the context of the +expansion or the text between the braces. +.PP +A correctly-formed brace expansion must contain unquoted opening +and closing braces, and at least one unquoted comma or a valid +sequence expression. +Any incorrectly formed brace expansion is left unchanged. +A \fB{\fP or \fB,\fP may be quoted with a backslash to prevent its +being considered part of a brace expression. +To avoid conflicts with parameter expansion, the string \fB${\fP +is not considered eligible for brace expansion. +.PP +This construct is typically used as shorthand when the common +prefix of the strings to be generated is longer than in the +above example: +.RS +.PP +mkdir /usr/local/src/bash/{old,new,dist,bugs} +.RE +or +.RS +chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} +.RE +.PP +Brace expansion introduces a slight incompatibility with +historical versions of +.BR sh . +.B sh +does not treat opening or closing braces specially when they +appear as part of a word, and preserves them in the output. +.B Bash +removes braces from words as a consequence of brace +expansion. For example, a word entered to +.B sh +as \fIfile{1,2}\fP +appears identically in the output. The same word is +output as +.I file1 file2 +after expansion by +.BR bash . +If strict compatibility with +.B sh +is desired, start +.B bash +with the +.B +B +option or disable brace expansion with the +.B +B +option to the +.B set +command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.SS Tilde Expansion +.PP +If a word begins with an unquoted tilde character (`\fB~\fP'), all of +the characters preceding the first unquoted slash (or all characters, +if there is no unquoted slash) are considered a \fItilde-prefix\fP. +If none of the characters in the tilde-prefix are quoted, the +characters in the tilde-prefix following the tilde are treated as a +possible \fIlogin name\fP. +If this login name is the null string, the tilde is replaced with the +value of the shell parameter +.SM +.BR HOME . +If +.SM +.B HOME +is unset, the home directory of the user executing the shell is +substituted instead. +Otherwise, the tilde-prefix is replaced with the home directory +associated with the specified login name. +.PP +If the tilde-prefix is a `~+', the value of the shell variable +.SM +.B PWD +replaces the tilde-prefix. +If the tilde-prefix is a `~\-', the value of the shell variable +.SM +.BR OLDPWD , +if it is set, is substituted. +If the characters following the tilde in the tilde-prefix consist +of a number \fIN\fP, optionally prefixed +by a `+' or a `\-', the tilde-prefix is replaced with the corresponding +element from the directory stack, as it would be displayed by the +.B dirs +builtin invoked with the tilde-prefix as an argument. +If the characters following the tilde in the tilde-prefix consist of a +number without a leading `+' or `\-', `+' is assumed. +.PP +If the login name is invalid, or the tilde expansion fails, the word +is unchanged. +.PP +Each variable assignment is checked for unquoted tilde-prefixes immediately +following a +.B : +or the first +.BR = . +In these cases, tilde expansion is also performed. +Consequently, one may use 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 parameter +expansion. +.PP +.PD 0 +.TP +${\fIparameter\fP} +The value of \fIparameter\fP is substituted. The braces are required +when +.I parameter +is a positional parameter with more than one digit, +or when +.I parameter +is followed by a character which is not to be +interpreted as part of its name. +.PD +.PP +If the first character of \fIparameter\fP is an exclamation point (\fB!\fP), +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. +.PP +When not performing substring expansion, using the forms documented below, +\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 indexed array name subscripted by @ or *, +the result is the \fIlength\fP +members of the array beginning with ${\fIparameter\fP[\fIoffset\fP]}. +A negative \fIoffset\fP is taken relative to one greater than the maximum +index of the specified array. +Substring expansion applied to an associative array produces undefined +results. +Note that a negative offset must be separated from the colon by at least +one space to avoid being confused with the :- expansion. +Substring indexing is zero-based unless the positional parameters +are used, in which case the indexing starts at 1 by default. +If \fIoffset\fP is 0, and the positional parameters are used, \fB$0\fP is +prefixed to the list. +.TP +${\fB!\fP\fIprefix\fP\fB*\fP} +.PD 0 +.TP +${\fB!\fP\fIprefix\fP\fB@\fP} +.PD +\fBNames matching prefix.\fP +Expands to the names of variables whose names begin with \fIprefix\fP, +separated by the first character of the +.SM +.B IFS +special variable. +When \fI@\fP is used and the expansion appears within double quotes, each +variable name expands to a separate word. +.TP +${\fB!\fP\fIname\fP[\fI@\fP]} +.PD 0 +.TP +${\fB!\fP\fIname\fP[\fI*\fP]} +.PD +\fBList of array keys.\fP +If \fIname\fP is an array variable, expands to the list of array indices +(keys) assigned in \fIname\fP. +If \fIname\fP is not an array, expands to 0 if \fIname\fP is set and null +otherwise. +When \fI@\fP is used and the expansion appears within double quotes, each +key expands to a separate word. +.TP +${\fB#\fP\fIparameter\fP} +\fBParameter length.\fP +The length in characters of the value of \fIparameter\fP is substituted. +If +.I parameter +is +.B * +or +.BR @ , +the value substituted is the number of positional parameters. +If +.I parameter +is an array name subscripted by +.B * +or +.BR @ , +the value substituted is the number of elements in the array. +.TP +${\fIparameter\fP\fB#\fP\fIword\fP} +.PD 0 +.TP +${\fIparameter\fP\fB##\fP\fIword\fP} +.PD +\fBRemove matching prefix pattern.\fP +The +.I word +is expanded to produce a pattern just as in pathname +expansion. If the pattern matches the beginning of +the value of +.IR parameter , +then the result of the expansion is the expanded value of +.I parameter +with the shortest matching pattern (the ``\fB#\fP'' case) or the +longest matching pattern (the ``\fB##\fP'' case) deleted. +If +.I parameter +is +.B @ +or +.BR * , +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +.I parameter +is an array variable subscripted with +.B @ +or +.BR * , +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. +.TP +${\fIparameter\fP\fB%\fP\fIword\fP} +.PD 0 +.TP +${\fIparameter\fP\fB%%\fP\fIword\fP} +.PD +\fBRemove matching suffix pattern.\fP +The \fIword\fP is expanded to produce a pattern just as in +pathname expansion. +If the pattern matches a trailing portion of the expanded value of +.IR parameter , +then the result of the expansion is the expanded value of +.I parameter +with the shortest matching pattern (the ``\fB%\fP'' case) or the +longest matching pattern (the ``\fB%%\fP'' case) deleted. +If +.I parameter +is +.B @ +or +.BR * , +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +.I parameter +is an array variable subscripted with +.B @ +or +.BR * , +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. +.TP +${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP} +\fBPattern substitution.\fP +The \fIpattern\fP is expanded to produce a pattern just as in +pathname expansion. +\fIParameter\fP is expanded and the longest match of \fIpattern\fP +against its value is replaced with \fIstring\fP. +If \fIpattern\fP begins with \fB/\fP, all matches of \fIpattern\fP are +replaced with \fIstring\fP. Normally only the first match is replaced. +If \fIpattern\fP begins with \fB#\fP, it must match at the beginning +of the expanded value of \fIparameter\fP. +If \fIpattern\fP begins with \fB%\fP, it must match at the end +of the expanded value of \fIparameter\fP. +If \fIstring\fP is null, matches of \fIpattern\fP are deleted +and the \fB/\fP following \fIpattern\fP may be omitted. +If +.I parameter +is +.B @ +or +.BR * , +the substitution operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +.I parameter +is an array variable subscripted with +.B @ +or +.BR * , +the substitution operation is applied to each member of the +array in turn, and the expansion is the resultant list. +.TP +${\fIparameter\fP\fB^\fP\fIpattern\fP} +.PD 0 +.TP +${\fIparameter\fP\fB^^\fP\fIpattern\fP} +.TP +${\fIparameter\fP\fB,\fP\fIpattern\fP} +.TP +${\fIparameter\fP\fB,,\fP\fIpattern\fP} +.PD +\fBCase modification.\fP +This expansion modifies the case of alphabetic characters in \fIparameter\fP. +The \fIpattern\fP is expanded to produce a pattern just as in +pathname expansion. +The \fB^\fP operator converts lowercase letters matching \fIpattern\fP +to uppercase; the \fB,\fP operator converts matching uppercase letters +to lowercase. +The \fB^^\fP and \fB,,\fP expansions convert each matched character in the +expanded value; the \fB^\fP and \fB,\fP expansions match and convert only +the first character in the expanded value.. +If \fIpattern\fP is omitted, it is treated like a \fB?\fP, which matches +every character. +If +.I parameter +is +.B @ +or +.BR * , +the case modification operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +.I parameter +is an array variable subscripted with +.B @ +or +.BR * , +the case modification operation is applied to each member of the +array in turn, and the expansion is the resultant list. +.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 , +the default, then +sequences of +.BR , +.BR , +and +.B +at the beginning and end of the results of the previous +expansions are ignored, and +any sequence of +.SM +.B IFS +characters not at the beginning or end serves to delimit words. +If +.SM +.B IFS +has a value other than the default, then sequences of +the whitespace characters +.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\(aq\^\(aq\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 not enabled, the word is left unchanged. +If the +.B nullglob +option is set, and no matches are found, +the word is removed. +If the +.B failglob +shell option is set, and no matches are found, an error message +is printed and the command is not executed. +If the shell option +.B nocaseglob +is enabled, the match is performed without regard to the case +of alphabetic characters. +When a pattern is used for pathname expansion, +the character +.B ``.'' +at the start of a name or immediately following a slash +must be matched explicitly, unless the shell option +.B dotglob +is set. +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 , +.BR failglob , +and +.B dotglob +shell options. +.PP +The +.SM +.B GLOBIGNORE +shell variable may be used to restrict the set of file names matching a +.IR pattern . +If +.SM +.B GLOBIGNORE +is set, each matching file name that also matches one of the patterns in +.SM +.B GLOBIGNORE +is removed from the list of matches. +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. +When the \fBglobstar\fP shell option is enabled, and \fB*\fP is used in +a pathname expansion context, two adjacent \fB*\fPs used as a single +pattern will match all files and zero or more directories and +subdirectories. +If followed by a \fB/\fP, two adjacent \fB*\fPs will match only directories +and subdirectories. +.TP +.B ? +Matches any single character. +.TP +.B [...] +Matches any one of the enclosed characters. A pair of characters +separated by a hyphen denotes a +\fIrange expression\fP; +any character that 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 +.SM +.B LC_COLLATE +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 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 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 \(aq , +and \^\f3"\fP\^ that did not result from one of the above +expansions are removed. +.SH REDIRECTION +Before a command is executed, its input and output +may be +.I redirected +using a special notation interpreted by the shell. +Redirection 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 +Each redirection that may be preceded by a file descriptor number +may instead be preceded by a word of the form {\fIvarname\fP}. +In this case, for each redirection operator except +>&- and <&-, the shell will allocate a file descriptor greater +than 10 and assign it to \fIvarname\fP. If >&- or <&- is preceded +by {\fIvarname\fP}, the value of \fIvarname\fP defines the file +descriptor to close. +.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 from the standard output +before the standard output was redirected to +.IR dirlist . +.PP +\fBBash\fP handles several filenames specially when they are used in +redirections, as described in the following table: +.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. +.PP +Redirections using file descriptors greater than 9 should be used with +care, as they may conflict with file descriptors the shell uses +internally. +.SS Redirecting Input +.PP +Redirection of input causes the file whose name results from +the expansion of +.I word +to be opened for reading on file descriptor +.IR n , +or the standard input (file descriptor 0) if +.I n +is not specified. +.PP +The general format for redirecting input is: +.RS +.PP +[\fIn\fP]\fB<\fP\fIword\fP +.RE +.SS Redirecting Output +.PP +Redirection of output causes the file whose name results from +the expansion of +.I word +to be opened for writing on file descriptor +.IR n , +or the standard output (file descriptor 1) if +.I n +is not specified. If the file does not exist it is created; +if it does exist it is truncated to zero size. +.PP +The general format for redirecting output is: +.RS +.PP +[\fIn\fP]\fB>\fP\fIword\fP +.RE +.PP +If the redirection operator is +.BR > , +and the +.B noclobber +option to the +.B set +builtin has been enabled, the redirection will fail if the file +whose name results from the expansion of \fIword\fP exists and is +a regular file. +If the redirection operator is +.BR >| , +or the redirection operator is +.B > +and the +.B noclobber +option to the +.B set +builtin command is not enabled, the redirection is attempted even +if the file named by \fIword\fP exists. +.SS Appending Redirected Output +.PP +Redirection of output in this fashion +causes the file whose name results from +the expansion of +.I word +to be opened for appending on file descriptor +.IR n , +or the standard output (file descriptor 1) if +.I n +is not specified. If the file does not exist it is created. +.PP +The general format for appending output is: +.RS +.PP +[\fIn\fP]\fB>>\fP\fIword\fP +.RE +.PP +.SS Redirecting Standard Output and Standard Error +.PP +This construct allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be redirected to the file whose name is the +expansion of +.IR word . +.PP +There are two formats for redirecting standard output and +standard error: +.RS +.PP +\fB&>\fP\fIword\fP +.RE +and +.RS +\fB>&\fP\fIword\fP +.RE +.PP +Of the two forms, the first is preferred. +This is semantically equivalent to +.RS +.PP +\fB>\fP\fIword\fP 2\fB>&\fP1 +.RE +.PP +.SS Appending Standard Output and Standard Error +.PP +This construct allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be appended to the file whose name is the +expansion of +.IR word . +.PP +The format for appending standard output and standard error is: +.RS +.PP +\fB&>>\fP\fIword\fP +.RE +.PP +This is semantically equivalent to +.RS +.PP +\fB>>\fP\fIword\fP 2\fB>&\fP1 +.RE +.SS Here Documents +.PP +This type of redirection instructs the shell to read input from the +current source until a line containing only +.I delimiter +(with no trailing blanks) +is seen. All of +the lines read up to that point are then used as the standard +input 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 +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 simple command, if unquoted, +is checked to see if it has an +alias. If so, that word is replaced by the text of the alias. +The characters \fB/\fP, \fB$\fP, \fB\`\fP, and \fB=\fP and +any of the shell \fImetacharacters\fP or quoting characters +listed above may not appear in an alias name. +The replacement text may contain any valid shell input, +including shell metacharacters. +The first word of the replacement text is tested +for aliases, but a word that is identical to an alias being expanded +is not expanded a second time. +This means that one may alias +.B ls +to +.BR "ls \-F" , +for instance, and +.B bash +does not try to recursively expand the replacement text. +If the last character of the alias value is a +.IR blank , +then the next command +word following the alias is also checked for alias expansion. +.PP +Aliases are created and listed with the +.B alias +command, and removed with the +.B unalias +command. +.PP +There is no mechanism for using arguments in the replacement text. +If arguments are needed, a shell function should be used (see +.SM +.B FUNCTIONS +below). +.PP +Aliases are not expanded when the shell is not interactive, unless +the +.B expand_aliases +shell option is set using +.B shopt +(see the description of +.B shopt +under +.SM +\fBSHELL BUILTIN COMMANDS\fP +below). +.PP +The rules concerning the definition and use of aliases are +somewhat confusing. +.B Bash +always reads at least one complete line +of input 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. Special 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. +.PP +All other aspects of the shell execution +environment are identical between a function and its caller +with these exceptions: the +.SM +.B DEBUG +and +.B RETURN +traps (see the description of the +.B trap +builtin under +.SM +.B SHELL BUILTIN COMMANDS +below) are not inherited unless the function has been given the +\fBtrace\fP attribute (see the description of the +.SM +.B declare +builtin below) or the +\fB\-o functrace\fP shell option has been enabled with +the \fBset\fP builtin +(in which case all functions inherit the \fBDEBUG\fP and \fBRETURN\fP traps), +and the +.SM +.B ERR +trap is not inherited unless the \fB\-o errtrace\fP shell option has +been enabled. +.PP +Variables local to the function may be declared with the +.B local +builtin command. Ordinarily, variables and their values +are shared between the function and its caller. +.PP +If the builtin command +.B return +is executed in a function, the function completes and +execution resumes with the next command after the function +call. +Any command associated with the \fBRETURN\fP trap is executed +before execution resumes. +When a function completes, the values of the +positional parameters and the special parameter +.B # +are restored to the values they had prior to the function's +execution. +.PP +Function names and definitions may be listed with the +.B \-f +option to the +.B declare +or +.B typeset +builtin commands. The +.B \-F +option to +.B declare +or +.B typeset +will list the function names only +(and optionally the source file and line number, if the \fBextdebug\fP +shell option is enabled). +Functions may be exported so that subshells +automatically have them defined with the +.B \-f +option to the +.B export +builtin. +A function definition may be deleted using the \fB\-f\fP option to +the +.B unset +builtin. +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 interchangeably to represent numbers between 10 +and 35. +.PP +Operators are evaluated in order of precedence. Sub-expressions in +parentheses are evaluated first and may override the precedence +rules above. +.SH "CONDITIONAL EXPRESSIONS" +Conditional expressions are used by the \fB[[\fP compound command and +the \fBtest\fP and \fB[\fP builtin commands to test file attributes +and perform string and arithmetic comparisons. +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. +.PP +Unless otherwise specified, primaries that operate on files follow symbolic +links and operate on the target of the link, rather than the link itself. +.if t .sp 0.5 +.if n .sp 1 +When used with \fB[[\fP, The \fB<\fP and \fB>\fP operators sort +lexicographically using the current locale. +.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 +\fIstring\fP +.PD 0 +.TP +.B \-n \fIstring\fP +.PD +True if the length of +.I string +is non-zero. +.TP +\fIstring1\fP \fB==\fP \fIstring2\fP +.PD 0 +.TP +\fIstring1\fP \fB=\fP \fIstring2\fP +.PD +True if the strings are equal. \fB=\fP should be used +with the \fBtest\fP command for POSIX conformance. +.TP +\fIstring1\fP \fB!=\fP \fIstring2\fP +True if the strings are not equal. +.TP +\fIstring1\fP \fB<\fP \fIstring2\fP +True if \fIstring1\fP sorts before \fIstring2\fP lexicographically. +.TP +\fIstring1\fP \fB>\fP \fIstring2\fP +True if \fIstring1\fP sorts after \fIstring2\fP lexicographically. +.TP +.I \fIarg1\fP \fBOP\fP \fIarg2\fP +.SM +.B OP +is one of +.BR \-eq , +.BR \-ne , +.BR \-lt , +.BR \-le , +.BR \-gt , +or +.BR \-ge . +These arithmetic binary operators return true if \fIarg1\fP +is equal to, not equal to, less than, less than or equal to, +greater than, or greater than or equal to \fIarg2\fP, respectively. +.I Arg1 +and +.I arg2 +may be positive or negative integers. +.PD +.SH "SIMPLE COMMAND EXPANSION" +When a simple command is executed, the shell performs the following +expansions, assignments, and redirections, from left to right. +.IP 1. +The words that the parser has marked as variable assignments (those +preceding the command name) and redirections are saved for later +processing. +.IP 2. +The words that are not variable assignments or redirections are +expanded. If any words remain after expansion, the first word +is taken to be the name of the command and the remaining words are +the arguments. +.IP 3. +Redirections are performed as described above under +.SM +.BR REDIRECTION . +.IP 4. +The text after the \fB=\fP in each variable assignment undergoes tilde +expansion, parameter expansion, command substitution, arithmetic expansion, +and quote removal before being assigned to the variable. +.PP +If no command name results, the variable assignments affect the current +shell environment. Otherwise, the variables are added to the environment +of the executed command and do not affect the current shell environment. +If any of the assignments attempts to assign a value to a readonly variable, +an error occurs, and the command exits with a non-zero status. +.PP +If no command name results, redirections are performed, but do not +affect the current shell environment. A redirection error causes the +command to exit with a non-zero status. +.PP +If there is a command name left after expansion, execution proceeds as +described below. Otherwise, the command exits. If one of the expansions +contained a command substitution, the exit status of the command is +the exit status of the last command substitution performed. If there +were no command substitutions, the command exits with a status of zero. +.SH "COMMAND EXECUTION" +After a command has been split into words, if it results in a +simple command and an optional list of arguments, the following +actions are taken. +.PP +If the command name contains no slashes, the shell attempts to +locate it. If there exists a shell function by that name, that +function is invoked as described above in +.SM +.BR FUNCTIONS . +If the name does not match a function, the shell searches for +it in the list of shell builtins. If a match is found, that +builtin is invoked. +.PP +If the name is neither a shell function nor a builtin, +and contains no slashes, +.B bash +searches each element of the +.SM +.B PATH +for a directory containing an executable file by that name. +.B Bash +uses a hash table to remember the full pathnames of executable +files (see +.B hash +under +.SM +.B "SHELL BUILTIN COMMANDS" +below). +A full search of the directories in +.SM +.B PATH +is performed only if the command is not found in the hash table. +If the search is unsuccessful, the shell searches for a defined shell +function named \fBcommand_not_found_handle\fP. +If that function exists, it is invoked with the original command and +the original command's arguments as its arguments, and the function's +exit status becomes the exit status of the shell. +If that function is not defined, the shell prints an error +message and returns an exit status of 127. +.PP +If the search is successful, or if the command name contains +one or more slashes, the shell executes the named program in a +separate execution environment. +Argument 0 is set to the name given, and the remaining arguments +to the command are set to the arguments given, if any. +.PP +If this execution fails because the file is not in executable +format, and the file is not a directory, it is assumed to be +a \fIshell script\fP, a file +containing shell commands. A subshell is spawned to execute +it. This subshell reinitializes itself, so +that the effect is as if a new shell had been invoked +to handle the script, with the exception that the locations of +commands remembered by the parent (see +.B hash +below under +.SM +\fBSHELL BUILTIN COMMANDS\fP) +are retained by the child. +.PP +If the program is a file beginning with +.BR #! , +the remainder of the first line specifies an interpreter +for the program. The shell executes the +specified interpreter on operating systems that do not +handle this executable format themselves. The arguments to the +interpreter consist of a single optional argument following the +interpreter name on the first line of the program, followed +by the name of the program, followed by the command +arguments, if any. +.SH COMMAND EXECUTION ENVIRONMENT +The shell has an \fIexecution environment\fP, which consists of the +following: +.if n .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 +.SM +.B PPID +.PP +When a simple command other than a builtin or shell function +is to be executed, it +is invoked in a separate execution environment that consists of +the following. Unless otherwise noted, the values are inherited +from the shell. +.if n .sp 1 +.IP \(bu +the shell's open files, plus any modifications and additions specified +by redirections to the command +.IP \(bu +the current working directory +.IP \(bu +the file creation mode mask +.IP \(bu +shell variables and functions marked for export, along with variables +exported for the command, passed in the environment +.IP \(bu +traps caught by the shell are reset to the values inherited from the +shell's parent, and traps ignored by the shell are ignored +.PP +A command invoked in this separate environment cannot affect the +shell's execution environment. +.PP +Command substitution, commands grouped with parentheses, +and asynchronous commands are invoked in a +subshell environment that is a duplicate of the shell environment, +except that traps caught by the shell are reset to the values +that the shell inherited from its parent at invocation. Builtin +commands that are invoked as part of a pipeline are also executed in a +subshell environment. Changes made to the subshell environment +cannot affect the shell's execution environment. +.PP +Subshells spawned to execute command substitutions inherit the value of +the \fB\-e\fP option from the parent shell. When not in posix mode, +Bash clears the \fB\-e\fP option in such subshells. +.PP +If a command is followed by a \fB&\fP and job control is not active, the +default standard input for the command is the empty file \fI/dev/null\fP. +Otherwise, the invoked command inherits the file descriptors of the calling +shell as modified by redirections. +.SH ENVIRONMENT +When a program is invoked it is given an array of strings +called the +.IR environment . +This is a list of +\fIname\fP\-\fIvalue\fP pairs, of the form +.IR "name\fR=\fPvalue" . +.PP +The shell provides several ways to manipulate the environment. +On invocation, the shell scans its own environment and +creates a parameter for each name found, automatically marking +it for +.I export +to child processes. Executed commands inherit the environment. +The +.B export +and +.B declare \-x +commands allow parameters and functions to be added to and +deleted from the environment. If the value of a parameter +in the environment is modified, the new value becomes part +of the environment, replacing the old. The environment +inherited by any executed command consists of the shell's +initial environment, whose values may be modified in the shell, +less any pairs removed by the +.B unset +command, plus any additions via the +.B export +and +.B declare \-x +commands. +.PP +The environment for any +.I simple command +or function may be augmented temporarily by prefixing it with +parameter assignments, as described above in +.SM +.BR PARAMETERS . +These assignment statements affect only the environment seen +by that command. +.PP +If the +.B \-k +option is set (see the +.B set +builtin command below), then +.I all +parameter assignments are placed in the environment for a command, +not just those that precede the command name. +.PP +When +.B bash +invokes an external command, the variable +.B _ +is set to the full file name of the command and passed to that +command in its environment. +.SH "EXIT STATUS" +.PP +The exit status of an executed command is the value returned by the +\fIwaitpid\fP system call or equivalent function. Exit statuses +fall between 0 and 255, though, as explained below, the shell may +use values above 125 specially. Exit statuses from shell builtins and +compound commands are also limited to this range. Under certain +circumstances, the shell will use special values to indicate specific +failure modes. +.PP +For the shell's purposes, a command which exits with a +zero exit status has succeeded. An exit status of zero +indicates success. A non-zero exit status indicates failure. +When a command terminates on a fatal signal \fIN\fP, \fBbash\fP uses +the value of 128+\fIN\fP as the exit status. +.PP +If a command is not found, the child process created to +execute it returns a status of 127. If a command is found +but is not executable, the return status is 126. +.PP +If a command fails because of an error during expansion or redirection, +the exit status is greater than zero. +.PP +Shell builtin commands return a status of 0 (\fItrue\fP) if +successful, and non-zero (\fIfalse\fP) if an error occurs +while they execute. +All builtins return an exit status of 2 to indicate incorrect usage. +.PP +\fBBash\fP itself returns the exit status of the last command +executed, unless a syntax error occurs, in which case it exits +with a non-zero value. See also the \fBexit\fP builtin +command below. +.SH SIGNALS +When \fBbash\fP is interactive, in the absence of any traps, it ignores +.SM +.B SIGTERM +(so that \fBkill 0\fP does not kill an interactive shell), +and +.SM +.B SIGINT +is caught and handled (so that the \fBwait\fP builtin is interruptible). +In all cases, \fBbash\fP ignores +.SM +.BR SIGQUIT . +If job control is in effect, +.B bash +ignores +.SM +.BR SIGTTIN , +.SM +.BR SIGTTOU , +and +.SM +.BR SIGTSTP . +.PP +Non-builtin commands run by \fBbash\fP have signal handlers +set to the values inherited by the shell from its parent. +When job control is not in effect, asynchronous commands +ignore +.SM +.B SIGINT +and +.SM +.B SIGQUIT +in addition to these inherited handlers. +Commands run as a result of command substitution ignore the +keyboard-generated job control signals +.SM +.BR SIGTTIN , +.SM +.BR SIGTTOU , +and +.SM +.BR SIGTSTP . +.PP +The shell exits by default upon receipt of a +.SM +.BR SIGHUP . +Before exiting, an interactive shell resends the +.SM +.B SIGHUP +to all jobs, running or stopped. +Stopped jobs are sent +.SM +.B SIGCONT +to ensure that they receive the +.SM +.BR SIGHUP . +To prevent the shell from +sending the signal to a particular job, it should be removed from the +jobs table with the +.B disown +builtin (see +.SM +.B "SHELL BUILTIN COMMANDS" +below) or marked +to not receive +.SM +.B SIGHUP +using +.BR "disown \-h" . +.PP +If the +.B huponexit +shell option has been set with +.BR shopt , +.B bash +sends a +.SM +.B SIGHUP +to all jobs when an interactive login shell exits. +.PP +If \fBbash\fP is waiting for a command to complete and receives a signal +for which a trap has been set, the trap will not be executed until +the command completes. +When \fBbash\fP is waiting for an asynchronous command via the \fBwait\fP +builtin, the reception of a signal for which a trap has been set will +cause the \fBwait\fP builtin to return immediately with an exit status +greater than 128, immediately after which the trap is executed. +.SH "JOB CONTROL" +.I Job control +refers to the ability to selectively stop (\fIsuspend\fP) +the execution of processes and continue (\fIresume\fP) +their execution at a later point. A user typically employs +this facility via an interactive interface supplied jointly +by the operating system kernel's terminal driver and +.BR bash . +.PP +The shell associates a +.I job +with each pipeline. It keeps a table of currently executing +jobs, which may be listed with the +.B jobs +command. When +.B bash +starts a job asynchronously (in the +.IR background ), +it prints a line that looks like: +.RS +.PP +[1] 25647 +.RE +.PP +indicating that this job is job number 1 and that the process ID +of the last process in the pipeline associated with this job is 25647. +All of the processes in a single pipeline are members of the same job. +.B Bash +uses the +.I job +abstraction as the basis for job control. +.PP +To facilitate the implementation of the user interface to job +control, the operating system maintains the notion of a \fIcurrent terminal +process group ID\fP. Members of this process group (processes whose +process group ID is equal to the current terminal process group ID) +receive keyboard-generated signals such as +.SM +.BR SIGINT . +These processes are said to be in the +.IR foreground . +.I Background +processes are those whose process group ID differs from the terminal's; +such processes are immune to keyboard-generated signals. +Only foreground processes are allowed to read from or, if the +user so specifies with \f(CWstty tostop\fP, write to the +terminal. +Background processes which attempt to read from (write to when +\f(CWstty tostop\fP is in effect) the +terminal are sent a +.SM +.B SIGTTIN (SIGTTOU) +signal by the kernel's terminal driver, +which, unless caught, suspends the process. +.PP +If the operating system on which +.B bash +is running supports +job control, +.B bash +contains facilities to use it. +Typing the +.I suspend +character (typically +.BR ^Z , +Control-Z) while a process is running +causes that process to be stopped and returns control to +.BR bash . +Typing the +.I "delayed suspend" +character (typically +.BR ^Y , +Control-Y) causes the process to be stopped when it +attempts to read input from the terminal, and control to +be returned to +.BR bash . +The user may then manipulate the state of this job, using the +.B bg +command to continue it in the background, the +.B fg +command to continue it in the foreground, or +the +.B kill +command to kill it. A \fB^Z\fP takes effect immediately, +and has the additional side effect of causing pending output +and typeahead to be discarded. +.PP +There are a number of ways to refer to a job in the shell. +The character +.B % +introduces a job specification (\fIjobspec\fP). Job number +.I n +may be referred to as +.BR %n . +A job may also be referred to using a prefix of the name used to +start it, or using a substring that appears in its command line. +For example, +.B %ce +refers to a stopped +.B ce +job. If a prefix matches more than one job, +.B bash +reports an error. Using +.BR %?ce , +on the other hand, refers to any job containing the string +.B ce +in its command line. If the substring matches more than one job, +.B bash +reports an error. The symbols +.B %% +and +.B %+ +refer to the shell's notion of the +.IR "current job" , +which is the last job stopped while it was in +the foreground or started in the background. +The +.I "previous job" +may be referenced using +.BR %\- . +If there is only a single job, \fB%+\fP and \fB%\-\fP can both be used +to refer to that job. +In output pertaining to jobs (e.g., the output of the +.B jobs +command), the current job is always flagged with a +.BR + , +and the previous job with a +.BR \- . +A single % (with no accompanying job specification) also refers to the +current job. +.PP +Simply naming a job can be used to bring it into the +foreground: +.B %1 +is a synonym for +\fB``fg %1''\fP, +bringing job 1 from the background into the foreground. +Similarly, +.B ``%1 &'' +resumes job 1 in the background, equivalent to +\fB``bg %1''\fP. +.PP +The shell learns immediately whenever a job changes state. +Normally, +.B bash +waits until it is about to print a prompt before reporting +changes in a job's status so as to not interrupt +any other output. If the +.B \-b +option to the +.B set +builtin command +is enabled, +.B bash +reports such changes immediately. +Any trap on +.SM +.B SIGCHLD +is executed for each child that exits. +.PP +If an attempt to exit +.B bash +is made while jobs are stopped (or, if the \fBcheckjobs\fP shell option has +been enabled using the \fBshopt\fP builtin, running), the shell prints a +warning message, and, if the \fBcheckjobs\fP option is enabled, lists the +jobs and their statuses. +The +.B jobs +command may then be used to inspect their status. +If a second attempt to exit is made without an intervening command, +the shell does not print another warning, and any stopped +jobs are terminated. +.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 + patch level (e.g., 2.00.0) +.TP +.B \ew +the current working directory, with +.SM +.B $HOME +abbreviated with a tilde +(uses the value of the +.SM +.B PROMPT_DIRTRIM +variable) +.TP +.B \eW +the basename of the current working directory, with +.SM +.B $HOME +abbreviated with a tilde +.TP +.B \e! +the history number of this command +.TP +.B \e# +the command number of this command +.TP +.B \e$ +if the effective UID is 0, a +.BR # , +otherwise a +.B $ +.TP +.B \e\fInnn\fP +the character corresponding to the octal number \fInnn\fP +.TP +.B \e\e +a backslash +.TP +.B \e[ +begin a sequence of non-printing characters, which could be used to +embed a terminal control sequence into the prompt +.TP +.B \e] +end a sequence of non-printing characters +.PD +.RE +.PP +The command number and the history number are usually different: +the history number of a command is its position in the history +list, which may include commands restored from the history file +(see +.SM +.B HISTORY +below), while the command number is the position in the sequence +of commands executed during the current shell session. +After the string is decoded, it is expanded via +parameter expansion, command substitution, arithmetic +expansion, and quote removal, subject to the value of the +.B promptvars +shell option (see the description of the +.B shopt +command under +.SM +.B "SHELL BUILTIN COMMANDS" +below). +.SH READLINE +This is the library that handles reading input when using an interactive +shell, unless the +.B \-\-noediting +option is given at shell invocation. +Line editing is also used when using the \fB\-e\fP option to the +\fBread\fP builtin. +By default, the line editing commands are similar to those of emacs. +A vi-style line editing interface is also available. +Line editing can be enabled at any time using the +.B \-o emacs +or +.B \-o vi +options to the +.B set +builtin (see +.SM +.B SHELL BUILTIN COMMANDS +below). +To turn off line editing after the shell is running, use the +.B +o emacs +or +.B +o vi +options to the +.B set +builtin. +.SS "Readline Notation" +.PP +In this section, the emacs-style notation is used to denote +keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n +means Control\-N. Similarly, +.I meta +keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards +without a +.I meta +key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key +then the +.I x +key. This makes ESC the \fImeta prefix\fP. +The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP, +or press the Escape key +then hold the Control key while pressing the +.I x +key.) +.PP +Readline commands may be given numeric +.IR arguments , +which normally act as a repeat count. +Sometimes, however, it is the sign of the argument that is significant. +Passing a negative argument to a command that acts in the forward +direction (e.g., \fBkill\-line\fP) causes that command to act in a +backward direction. +Commands whose behavior with arguments deviates from this are noted +below. +.PP +When a command is described as \fIkilling\fP text, the text +deleted is saved for possible future retrieval +(\fIyanking\fP). The killed text is saved in a +\fIkill ring\fP. Consecutive kills cause the text to be +accumulated into one unit, which can be yanked all at once. +Commands which do not kill text separate the chunks of text +on the kill ring. +.SS "Readline Initialization" +.PP +Readline is customized by putting commands in an initialization +file (the \fIinputrc\fP file). +The name of this file is taken from the value of the +.SM +.B INPUTRC +variable. If that variable is unset, the default is +.IR ~/.inputrc . +When a program which uses the readline library starts up, the +initialization file is read, and the key bindings and variables +are set. +There are only a few basic constructs allowed in the +readline initialization file. +Blank lines are ignored. +Lines beginning with a \fB#\fP are comments. +Lines beginning with a \fB$\fP indicate conditional constructs. +Other lines denote key bindings and variable settings. +.PP +The default key-bindings may be changed with an +.I inputrc +file. +Other programs that use this library may add their own commands +and bindings. +.PP +For example, placing +.RS +.PP +M\-Control\-u: universal\-argument +.RE +or +.RS +C\-Meta\-u: universal\-argument +.RE +into the +.I inputrc +would make M\-C\-u execute the readline command +.IR universal\-argument . +.PP +The following symbolic character names are recognized: +.IR RUBOUT , +.IR DEL , +.IR ESC , +.IR LFD , +.IR NEWLINE , +.IR RET , +.IR RETURN , +.IR SPC , +.IR SPACE , +and +.IR TAB . +.PP +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a \fImacro\fP). +.SS "Readline Key Bindings" +.PP +The syntax for controlling key bindings in the +.I inputrc +file is simple. All that is required is the name of the +command or the text of a macro and a key sequence to which +it should be bound. The name may be specified in one of two ways: +as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP +prefixes, or as a key sequence. +.PP +When using the form \fBkeyname\fP:\^\fIfunction\-name\fP or \fImacro\fP, +.I keyname +is the name of a key spelled out in English. For example: +.sp +.RS +Control-u: universal\-argument +.br +Meta-Rubout: backward-kill-word +.br +Control-o: "> output" +.RE +.LP +In the above example, +.I C\-u +is bound to the function +.BR universal\-argument , +.I M\-DEL +is bound to the function +.BR backward\-kill\-word , +and +.I C\-o +is bound to run the macro +expressed on the right hand side (that is, to insert the text +.if t \f(CW> output\fP +.if n ``> output'' +into the line). +.PP +In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP, +.B keyseq +differs from +.B keyname +above in that strings denoting +an entire key sequence may be specified by placing the sequence +within double quotes. Some GNU Emacs style key escapes can be +used, as in the following example, but the symbolic character names +are not recognized. +.sp +.RS +"\eC\-u": universal\-argument +.br +"\eC\-x\eC\-r": re\-read\-init\-file +.br +"\ee[11~": "Function Key 1" +.RE +.PP +In this example, +.I C\-u +is again bound to the function +.BR universal\-argument . +.I "C\-x C\-r" +is bound to the function +.BR re\-read\-init\-file , +and +.I "ESC [ 1 1 ~" +is bound to insert the text +.if t \f(CWFunction Key 1\fP. +.if n ``Function Key 1''. +.PP +The full set of GNU Emacs style escape sequences is +.RS +.PD 0 +.TP +.B \eC\- +control prefix +.TP +.B \eM\- +meta prefix +.TP +.B \ee +an escape character +.TP +.B \e\e +backslash +.TP +.B \e" +literal " +.TP +.B \e\(aq +literal \(aq +.RE +.PD +.PP +In addition to the GNU Emacs style escape sequences, a second +set of backslash escapes is available: +.RS +.PD 0 +.TP +.B \ea +alert (bell) +.TP +.B \eb +backspace +.TP +.B \ed +delete +.TP +.B \ef +form feed +.TP +.B \en +newline +.TP +.B \er +carriage return +.TP +.B \et +horizontal tab +.TP +.B \ev +vertical tab +.TP +.B \e\fInnn\fP +the eight-bit character whose value is the octal value \fInnn\fP +(one to three digits) +.TP +.B \ex\fIHH\fP +the eight-bit character whose value is the hexadecimal value \fIHH\fP +(one or two hex digits) +.RE +.PD +.PP +When entering the text of a macro, single or double quotes must +be used to indicate a macro definition. +Unquoted text is assumed to be a function name. +In the macro body, the backslash escapes described above are expanded. +Backslash will quote any other character in the macro text, +including " and \(aq. +.PP +.B Bash +allows the current readline key bindings to be displayed or modified +with the +.B bind +builtin command. The editing mode may be switched during interactive +use by using the +.B \-o +option to the +.B set +builtin command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.SS "Readline Variables" +.PP +Readline has variables that can be used to further customize its +behavior. A variable may be set in the +.I inputrc +file with a statement of the form +.RS +.PP +\fBset\fP \fIvariable\-name\fP \fIvalue\fP +.RE +.PP +Except where noted, readline variables can take the values +.B On +or +.B Off +(without regard to case). +Unrecognized variable names are ignored. +When a variable value is read, empty or null values, "on" (case-insensitive), +and "1" are equivalent to \fBOn\fP. All other values are equivalent to +\fBOff\fP. +The variables and their default values are: +.PP +.PD 0 +.TP +.B bell\-style (audible) +Controls what happens when readline wants to ring the terminal bell. +If set to \fBnone\fP, readline never rings the bell. If set to +\fBvisible\fP, readline uses a visible bell if one is available. +If set to \fBaudible\fP, readline attempts to ring the terminal's bell. +.TP +.B bind\-tty\-special\-chars (On) +If set to \fBOn\fP, readline attempts to bind the control characters +treated specially by the kernel's terminal driver to their readline +equivalents. +.TP +.B 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\-prefix\-display\-length (0) +The length in characters of the common prefix of a list of possible +completions that is displayed without modification. When set to a +value greater than zero, common prefixes longer than this value are +replaced with an ellipsis when displaying possible completions. +.TP +.B completion\-query\-items (100) +This determines when the user is queried about viewing +the number of possible completions +generated by the \fBpossible\-completions\fP command. +It may be set to any integer value greater than or equal to +zero. If the number of possible completions is greater than +or equal to the value of this variable, the user is asked whether +or not he wishes to view them; otherwise they are simply listed +on the terminal. +.TP +.B convert\-meta (On) +If set to \fBOn\fP, readline will convert characters with the +eighth bit set to an ASCII key sequence +by stripping the eighth bit and prefixing an +escape character (in effect, using escape as the \fImeta prefix\fP). +.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 echo\-control\-characters (On) +When set to \fBOn\fP, on operating systems that indicate they support it, +readline echoes a character corresponding to a signal generated from the +keyboard. +.TP +.B enable\-keypad (Off) +When set to \fBOn\fP, readline will try to enable the application +keypad when it is called. Some systems need this to enable the +arrow keys. +.TP +.B enable\-meta\-key (On) +When set to \fBOn\fP, readline will try to enable any meta modifier +key the terminal claims to support when it is called. On many terminals, +the meta key is used to send eight-bit characters. +.TP +.B expand\-tilde (Off) +If set to \fBon\fP, tilde expansion is performed when readline +attempts word completion. +.TP +.B history\-preserve\-point (Off) +If set to \fBon\fP, the history code attempts to place point at the +same location on each history line retrieved with \fBprevious-history\fP +or \fBnext-history\fP. +.TP +.B history\-size (0) +Set the maximum number of history entries saved in the history list. If +set to zero, the number of entries in the history list is not limited. +.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 revert\-all\-at\-newline (Off) +If set to \fBon\fP, readline will undo all changes to history lines +before returning when \fBaccept\-line\fP is executed. By default, +history lines may be modified and retain individual undo lists across +calls to \fBreadline\fP. +.TP +.B show\-all\-if\-ambiguous (Off) +This alters the default behavior of the completion functions. If +set to +.BR on , +words which have more than one possible completion cause the +matches to be listed immediately instead of ringing the bell. +.TP +.B show\-all\-if\-unmodified (Off) +This alters the default behavior of the completion functions in +a fashion similar to \fBshow\-all\-if\-ambiguous\fP. +If set to +.BR on , +words which have more than one possible completion without any +possible partial completion (the possible completions don't share +a common prefix) cause the matches to be listed immediately instead +of ringing the bell. +.TP +.B skip\-completed\-text (Off) +If set to \fBOn\fP, this alters the default completion behavior when +inserting a single match into the line. It's only active when +performing completion in the middle of a word. If enabled, readline +does not insert characters from the completion that match characters +after point in the word being completed, so portions of the word +following the cursor are not duplicated. +.TP +.B 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 shell\-forward\-word +Move forward to the end of the next word. +Words are delimited by non-quoted shell metacharacters. +.TP +.B shell\-backward\-word +Move back to the start of the current or previous word. +Words are delimited by non-quoted shell metacharacters. +.TP +.B 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. +Once the argument \fIn\fP is computed, the argument is extracted +as if the "!\fIn\fP" history expansion had been specified. +.TP +.B +yank\-last\-arg (M\-.\^, M\-_\^) +Insert the last argument to the previous command (the last word of +the previous history entry). With 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. +The history expansion facilities are used to extract the last argument, +as if the "!$" history expansion had been specified. +.TP +.B shell\-expand\-line (M\-C\-e) +Expand the line as the shell does. This +performs alias and history expansion as well as all of the shell +word expansions. See +.SM +.B HISTORY EXPANSION +below for a description of history expansion. +.TP +.B history\-expand\-line (M\-^) +Perform history expansion on the current line. +See +.SM +.B HISTORY EXPANSION +below for a description of history expansion. +.TP +.B magic\-space +Perform history expansion on the current line and insert a space. +See +.SM +.B HISTORY EXPANSION +below for a description of history expansion. +.TP +.B alias\-expand\-line +Perform alias expansion on the current line. +See +.SM +.B ALIASES +above for a description of alias expansion. +.TP +.B history\-and\-alias\-expand\-line +Perform history and alias expansion on the current line. +.TP +.B insert\-last\-argument (M\-.\^, M\-_\^) +A synonym for \fByank\-last\-arg\fP. +.TP +.B operate\-and\-get\-next (C\-o) +Accept the current line for execution and fetch the next line +relative to the current line from the history for editing. 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 $VISUAL , +.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 shell\-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 \fBshell\-forward\-word\fP. +.TP +.B shell\-backward\-kill\-word (M\-Rubout) +Kill the word behind point. +Word boundaries are the same as those used by \fBshell\-backward\-word\fP. +.TP +.B unix\-word\-rubout (C\-w) +Kill the word behind point, using white space as a word boundary. +The killed text is saved on the kill-ring. +.TP +.B unix\-filename\-rubout +Kill the word behind point, using white space and the slash character +as the word boundaries. +The killed text is saved on the kill-ring. +.TP +.B delete\-horizontal\-space (M\-\e) +Delete all spaces and tabs around point. +.TP +.B kill\-region +Kill the text in the current region. +.TP +.B copy\-region\-as\-kill +Copy the text in the region to the kill buffer. +.TP +.B copy\-backward\-word +Copy the word before point to the kill buffer. +The word boundaries are the same as \fBbackward\-word\fP. +.TP +.B copy\-forward\-word +Copy the word following point to the kill buffer. +The word boundaries are the same as \fBforward\-word\fP. +.TP +.B yank (C\-y) +Yank the top of the kill ring into the buffer at point. +.TP +.B yank\-pop (M\-y) +Rotate the kill ring, and yank the new top. Only works following +.B yank +or +.BR yank\-pop . +.PD +.SS Numeric Arguments +.PP +.PD 0 +.TP +.B digit\-argument (M\-0, M\-1, ..., M\-\-) +Add this digit to the argument already accumulating, or start a new +argument. M\-\- starts a negative argument. +.TP +.B universal\-argument +This is another way to specify an argument. +If this command is followed by one or more digits, optionally with a +leading minus sign, those digits define the argument. +If the command is followed by digits, executing +.B universal\-argument +again ends the numeric argument, but is otherwise ignored. +As a special case, if this command is immediately followed by a +character that is neither a digit 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 menu\-complete-\backward +Identical to \fBmenu\-complete\fP, but moves backward through the list +of possible completions, as if \fBmenu\-complete\fP had been given a +negative argument. This command is unbound by default. +.TP +.B delete\-char\-or\-list +Deletes the character under the cursor if not at the beginning or +end of the line (like \fBdelete\-char\fP). +If at the end of the line, behaves identically to +\fBpossible\-completions\fP. +This command is unbound by default. +.TP +.B complete\-filename (M\-/) +Attempt filename completion on the text before point. +.TP +.B possible\-filename\-completions (C\-x /) +List the possible completions of the text before point, +treating it as a filename. +.TP +.B complete\-username (M\-~) +Attempt completion on the text before point, treating +it as a username. +.TP +.B possible\-username\-completions (C\-x ~) +List the possible completions of the text before point, +treating it as a username. +.TP +.B complete\-variable (M\-$) +Attempt completion on the text before point, treating +it as a shell variable. +.TP +.B possible\-variable\-completions (C\-x $) +List the possible completions of the text before point, +treating it as a shell variable. +.TP +.B complete\-hostname (M\-@) +Attempt completion on the text before point, treating +it as a hostname. +.TP +.B possible\-hostname\-completions (C\-x @) +List the possible completions of the text before point, +treating it as a hostname. +.TP +.B complete\-command (M\-!) +Attempt completion on the text before point, treating +it as a command name. Command completion attempts to +match the text against aliases, reserved words, shell +functions, shell builtins, and finally executable filenames, +in that order. +.TP +.B possible\-command\-completions (C\-x !) +List the possible completions of the text before point, +treating it as a command name. +.TP +.B dynamic\-complete\-history (M\-TAB) +Attempt completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. +.TP +.B dabbrev\-expand +Attempt menu completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. +.TP +.B complete\-into\-braces (M\-{) +Perform filename completion and insert the list of possible completions +enclosed within braces so the list is available to the shell (see +.B Brace Expansion +above). +.PD +.SS Keyboard Macros +.PP +.PD 0 +.TP +.B start\-kbd\-macro (C\-x (\^) +Begin saving the characters typed into the current keyboard macro. +.TP +.B end\-kbd\-macro (C\-x )\^) +Stop saving the characters typed into the current keyboard macro +and store the definition. +.TP +.B call\-last\-kbd\-macro (C\-x e) +Re-execute the last keyboard macro defined, by making the characters +in the macro appear as if typed at the keyboard. +.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\-) +Set the mark to the point. If a +numeric argument is supplied, the mark is set to that position. +.TP +.B exchange\-point\-and\-mark (C\-x C\-x) +Swap the point with the mark. The current cursor position is set to +the saved position, and the old cursor position is saved as the mark. +.TP +.B character\-search (C\-]) +A character is read and point is moved to the next occurrence of that +character. A negative count searches for previous occurrences. +.TP +.B character\-search\-backward (M\-C\-]) +A character is read and point is moved to the previous occurrence of that +character. A negative count searches for subsequent occurrences. +.TP +.B skip\-csi\-sequence () +Read enough characters to consume a multi-key sequence such as those +defined for keys like Home and End. Such sequences begin with a +Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is +bound to "\e[", keys producing such sequences will have no effect +unless explicitly bound to a readline command, instead of inserting +stray characters into the editing buffer. This is unbound by default, +but usually bound to ESC\-[. +.TP +.B insert\-comment (M\-#) +Without a numeric argument, the value of the readline +.B comment\-begin +variable is inserted at the beginning of the current line. +If a numeric argument is supplied, this command acts as a toggle: if +the characters at the beginning of the line do not match the value +of \fBcomment\-begin\fP, the value is inserted, otherwise +the characters in \fBcomment\-begin\fP are deleted from the beginning of +the line. +In either case, the line is accepted as if a newline had been typed. +The default value of +\fBcomment\-begin\fP causes this command to make the current line +a shell comment. +If a numeric argument causes the comment character to be removed, the line +will be executed by the shell. +.TP +.B glob\-complete\-word (M\-g) +The word before point is treated as a pattern for pathname expansion, +with an asterisk implicitly appended. This pattern is used to +generate a list of matching 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 output. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an \fIinputrc\fP file. +.TP +.B display\-shell\-version (C\-x C\-v) +Display version information about the current instance of +.BR bash . +.PD +.SS Programmable Completion +.PP +When word completion is attempted for an argument to a command for +which a completion specification (a \fIcompspec\fP) has been defined +using the \fBcomplete\fP builtin (see +.SM +.B "SHELL BUILTIN COMMANDS" +below), the programmable completion facilities are invoked. +.PP +First, the command name is identified. +If the command word is the empty string (completion attempted at the +beginning of an empty line), any compspec defined with +the \fB\-E\fP option to \fBcomplete\fP is used. +If a compspec has been defined for that command, the +compspec is used to generate the list of possible completions for the word. +If the command word is a full pathname, a compspec for the full +pathname is searched for first. +If no compspec is found for the full pathname, an attempt is made to +find a compspec for the portion following the final slash. +If those searches to not result in a compspec, any compspec defined with +the \fB\-D\fP option to \fBcomplete\fP is used as the default. +.PP +Once a compspec has been found, it is used to generate the list of +matching words. +If a compspec is not found, the default \fBbash\fP completion as +described above under \fBCompleting\fP is performed. +.PP +First, the actions specified by the compspec are used. +Only matches which are prefixed by the word being completed are +returned. +When the +.B \-f +or +.B \-d +option is used for filename or directory name completion, the shell +variable +.SM +.B FIGNORE +is used to filter the matches. +.PP +Any completions specified by a pathname expansion pattern to the +\fB\-G\fP option are generated next. +The words generated by the pattern need not match the word +being completed. +The +.SM +.B GLOBIGNORE +shell variable is not used to filter the matches, but the +.SM +.B FIGNORE +variable is used. +.PP +Next, the string specified as the argument to the \fB\-W\fP option +is considered. +The string is first split using the characters in the +.SM +.B IFS +special variable as delimiters. +Shell quoting is honored. +Each word is then expanded using +brace expansion, tilde expansion, parameter and variable expansion, +command substitution, and arithmetic expansion, +as described above under +.SM +.BR EXPANSION . +The results are split using the rules described above under +\fBWord Splitting\fP. +The results of the expansion are prefix-matched against the word being +completed, and the matching words become the possible completions. +.PP +After these matches have been generated, any shell function or command +specified with the \fB\-F\fP and \fB\-C\fP options is invoked. +When the command or function is invoked, the +.SM +.BR COMP_LINE , +.SM +.BR COMP_POINT , +.SM +.BR COMP_KEY , +and +.SM +.B COMP_TYPE +variables are assigned values as described above under +\fBShell Variables\fP. +If a shell function is being invoked, the +.SM +.B COMP_WORDS +and +.SM +.B COMP_CWORD +variables are also set. +When the function or command is invoked, the first argument 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 +If the \fB\-o plusdirs\fP option was supplied to \fBcomplete\fP when the +compspec was defined, directory name completion is attempted and any +matches are added to the results of the other actions. +.PP +By default, if a compspec is found, whatever it generates is returned +to the completion code as the full set of possible completions. +The default \fBbash\fP completions are not attempted, and the readline +default of filename completion is disabled. +If the \fB\-o bashdefault\fP option was supplied to \fBcomplete\fP when +the compspec was defined, the \fBbash\fP default completions are attempted +if the compspec generates no matches. +If the \fB\-o default\fP option was supplied to \fBcomplete\fP when the +compspec was defined, readline's default completion will be performed +if the compspec (and, if attempted, the default \fBbash\fP completions) +generate no matches. +.PP +When a compspec indicates that directory name completion is desired, +the programmable completion functions force readline to append a slash +to completed names which are symbolic links to directories, subject to +the value of the \fBmark\-directories\fP readline variable, regardless +of the setting of the \fBmark-symlinked\-directories\fP readline variable. +.PP +There is some support for dynamically modifying completions. This is +most useful when used in combination with a default completion specified +with \fBcomplete -D\fP. +It's possible for shell functions executed as completion +handlers to indicate that completion should be retried by returning an +exit status of 124. If a shell function returns 124, and changes +the compspec associated with the command on which completion is being +attempted (supplied as the first argument when the function is executed), +programmable completion restarts from the beginning, with an +attempt to find a compspec for that command. This allows a set of +completions to be built dynamically as completion is attempted, rather than +being loaded all at once. +.PP +For instance, assuming that there is a library of compspecs, each kept in a +file corresponding to the name of the command, the following default +completion function would load completions dynamically: +.PP +\f(CW_completion_loader() +.br +{ +.br + . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 +.br +} +.br +complete -D -F _completion_loader +.br +\fP +.SH HISTORY +When the +.B \-o history +option to the +.B set +builtin is enabled, the shell provides access to the +\fIcommand history\fP, +the list of commands previously typed. +The value of the +.SM +.B HISTSIZE +variable is used as the +number of commands to save in a history list. +The text of the last +.SM +.B HISTSIZE +commands (default 500) is saved. The shell +stores each command in the history list prior to parameter and +variable expansion (see +.SM +.B EXPANSION +above) but after history expansion is performed, subject to the +values of the shell variables +.SM +.B HISTIGNORE +and +.SM +.BR HISTCONTROL . +.PP +On startup, the history is initialized from the file named by +the variable +.SM +.B HISTFILE +(default \fI~/.bash_history\fP). +The file named by the value of +.SM +.B HISTFILE +is truncated, if necessary, to contain no more than +the number of lines specified by the value of +.SM +.BR HISTFILESIZE . +When the history file is read, +lines beginning with the history comment character followed immediately +by a digit are interpreted as timestamps for the preceding history line. +These timestamps are optionally displayed depending on the value of the +.SM +.B HISTTIMEFORMAT +variable. +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. +If the +.SM +.B HISTTIMEFORMAT +variable is set, time stamps are written to the history file, marked +with the history comment character, so +they may be preserved across shell sessions. +This uses the history comment character to distinguish timestamps from +other history lines. +After saving the history, the history file is truncated +to contain no more than +.SM +.B HISTFILESIZE +lines. If +.SM +.B HISTFILESIZE +is 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 characters inhibit history expansion if found immediately +following the history expansion character, even if it is unquoted: +space, tab, newline, carriage return, and \fB=\fP. +If the \fBextglob\fP shell option is enabled, \fB(\fP will also +inhibit expansion. +.PP +Several shell options settable with the +.B shopt +builtin may be used to tailor the behavior of history expansion. +If the +.B histverify +shell option is enabled (see the description of the +.B shopt +builtin below), and +.B readline +is being used, history substitutions are not immediately passed to +the shell parser. +Instead, the expanded line is reloaded into the +.B readline +editing buffer for further modification. +If +.B readline +is being used, and the +.B histreedit +shell option is enabled, a failed history substitution will be reloaded +into the +.B readline +editing buffer for correction. +The +.B \-p +option to the +.B history +builtin command may be used to see what a history expansion will +do before using it. +The +.B \-s +option to the +.B history +builtin may be used to add commands to the end of the history list +without actually executing them, so that they are available for +subsequent recall. +.PP +The shell allows control of the various characters used by the +history expansion mechanism (see the description of +.B histchars +above under +.BR "Shell Variables" ). +The shell uses +the history comment character to mark history timestamps when +writing the history file. +.SS Event Designators +.PP +An event designator is a reference to a command line entry in the +history list. +.PP +.PD 0 +.TP +.B ! +Start a history substitution, except when followed by a +.BR blank , +newline, carriage return, = +or ( (when the \fBextglob\fP shell option is enabled using +the \fBshopt\fP builtin). +.TP +.B !\fIn\fR +Refer to command line +.IR n . +.TP +.B !\-\fIn\fR +Refer to the current command 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. +The \fB:\fP, \fBtrue\fP, \fBfalse\fP, and \fBtest\fP builtins +do not accept options and do not treat \fB\-\-\fP specially. +The \fBexit\fP, \fBlogout\fP, \fBbreak\fP, \fBcontinue\fP, \fBlet\fP, +and \fBshift\fP builtins accept and process arguments beginning with +\fB\-\fP without requiring \fB\-\-\fP. +Other builtins that accept arguments but are not specified as accepting +options interpret arguments beginning with \fB\-\fP as invalid options and +require \fB\-\-\fP to prevent this interpretation. +.sp .5 +.PD 0 +.TP +\fB:\fP [\fIarguments\fP] +.PD +No effect; the command does nothing beyond expanding +.I arguments +and performing any specified +redirections. 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 each suspended job \fIjobspec\fP in the background, as if it +had been started with +.BR & . +If +.I jobspec +is not present, the shell's notion of the \fIcurrent job\fP is used. +.B bg +.I jobspec +returns 0 unless run when job control is disabled or, when run with +job control enabled, any specified \fIjobspec\fP was not found +or was started without job control. +.TP +\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-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 \-s +Display \fBreadline\fP key sequences bound to macros and the strings +they output in such a way that they can be re-read. +.TP +.B \-S +Display \fBreadline\fP key sequences bound to macros and the strings +they output. +.TP +.B \-v +Display \fBreadline\fP variable names and values in such a way that they +can be re-read. +.TP +.B \-V +List current \fBreadline\fP variable names and values. +.TP +.B \-f \fIfilename\fP +Read key bindings from \fIfilename\fP. +.TP +.B \-q \fIfunction\fP +Query about which keys invoke the named \fIfunction\fP. +.TP +.B \-u \fIfunction\fP +Unbind all keys bound to the named \fIfunction\fP. +.TP +.B \-r \fIkeyseq\fP +Remove any current binding for \fIkeyseq\fP. +.TP +.B \-x \fIkeyseq\fP:\fIshell\-command\fP +Cause \fIshell\-command\fP to be executed whenever \fIkeyseq\fP is +entered. +When \fIshell\-command\fP is executed, the shell sets the +.SM +.B READLINE_LINE +variable to the contents of the \fBreadline\fP line buffer and the +.SM +.B READLINE_POINT +variable to the current location of the insertion point. +If the executed command changes the value of +.SM +.B READLINE_LINE +or +.SM +.BR READLINE_POINT , +those new values will be reflected in the editing state. +.PD +.PP +The return value is 0 unless an unrecognized option is given or an +error occurred. +.RE +.TP +\fBbreak\fP [\fIn\fP] +Exit from within a +.BR for , +.BR while , +.BR until , +or +.B select +loop. If \fIn\fP is specified, break \fIn\fP levels. +.I n +must be \(>= 1. If +.I n +is greater than the number of enclosing loops, all enclosing loops +are exited. +The return value is 0 unless \fIn\fP is not greater than or equal to 1. +.TP +\fBbuiltin\fP \fIshell\-builtin\fP [\fIarguments\fP] +Execute the specified shell builtin, passing it +.IR arguments , +and return its exit status. +This is useful when defining a +function whose name is the same as a shell builtin, +retaining the functionality of the builtin within the function. +The \fBcd\fP builtin is commonly redefined this way. +The return status is false if +.I shell\-builtin +is not a shell builtin command. +.TP +\fBcaller\fP [\fIexpr\fP] +Returns the context of any active subroutine call (a shell function or +a script executed with the \fB.\fP or \fBsource\fP builtins. +Without \fIexpr\fP, \fBcaller\fP displays the line number and source +filename of the current subroutine call. +If a non-negative integer is supplied as \fIexpr\fP, \fBcaller\fP +displays the line number, subroutine name, and source file corresponding +to that position in the current execution call stack. This extra +information may be used, for example, to print a stack trace. The +current frame is frame 0. +The return value is 0 unless the shell is not executing a subroutine +call or \fIexpr\fP does not correspond to a valid position in the +call stack. +.TP +\fBcd\fP [\fB\-L|-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 . +If a non-empty directory name from +.SM +.B CDPATH +is used, or if +\fB\-\fP is the first argument, and the directory change is +successful, the absolute pathname of the new working directory is +written to the standard output. +The return value is true if the directory was successfully changed; +false otherwise. +.TP +\fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP ...] +Run +.I command +with +.I args +suppressing the normal shell function lookup. Only builtin +commands or commands found in the +.SM +.B PATH +are executed. If the +.B \-p +option is given, the search for +.I command +is performed using a default value for +.SM +.B PATH +that is guaranteed to find all of the standard utilities. +If either the +.B \-V +or +.B \-v +option is supplied, a description of +.I command +is printed. The +.B \-v +option causes a single word indicating the command or 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\-DE\fP] [\fB\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] +.br +[\fB\-X\fP \fIfilterpat\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP] \fIname\fP [\fIname ...\fP] +.PD 0 +.TP +\fBcomplete\fP \fB\-pr\fP [\fB\-DE\fP] [\fIname\fP ...] +.PD +Specify how arguments to each \fIname\fP should be completed. +If the \fB\-p\fP option is supplied, or if no options are supplied, +existing completion specifications are printed in a way that allows +them to be reused as input. +The \fB\-r\fP option removes a completion specification for +each \fIname\fP, or, if no \fIname\fPs are supplied, all +completion specifications. +The \fB\-D\fP option indicates that the remaining options and actions should +apply to the ``default'' command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The \fB\-E\fP option indicates that the remaining options and actions should +apply to ``empty'' command completion; that is, completion attempted on a +blank line. +.sp 1 +The process of applying these completion specifications when word completion +is attempted is described above under \fBProgrammable Completion\fP. +.sp 1 +Other options, if specified, have the following meanings. +The arguments to the \fB\-G\fP, \fB\-W\fP, and \fB\-X\fP options +(and, if necessary, the \fB\-P\fP and \fB\-S\fP options) +should be quoted to protect them from expansion before the +.B complete +builtin is invoked. +.RS +.PD 0 +.TP 8 +\fB\-o\fP \fIcomp-option\fP +The \fIcomp-option\fP controls several aspects of the compspec's behavior +beyond the simple generation of completions. +\fIcomp-option\fP may be one of: +.RS +.TP 8 +.B bashdefault +Perform the rest of the default \fBbash\fP completions if the compspec +generates no matches. +.TP 8 +.B default +Use readline's default filename completion if the compspec generates +no matches. +.TP 8 +.B dirnames +Perform directory name completion if the compspec generates no matches. +.TP 8 +.B filenames +Tell readline that the compspec generates filenames, so it can perform any +filename\-specific processing (like adding a slash to directory names, +quoting special characters, or suppressing trailing spaces). +Intended to be used with shell functions. +.TP 8 +.B nospace +Tell readline not to append a space (the default) to words completed at +the end of the line. +.TP 8 +.B plusdirs +After any matches defined by the compspec are generated, +directory name completion is attempted and any +matches are added to the results of the other actions. +.RE +.TP 8 +\fB\-A\fP \fIaction\fP +The \fIaction\fP may be one of the following to generate a list of possible +completions: +.RS +.TP 8 +.B alias +Alias names. May also be specified as \fB\-a\fP. +.TP 8 +.B arrayvar +Array variable names. +.TP 8 +.B binding +\fBReadline\fP key binding names. +.TP 8 +.B builtin +Names of shell builtin commands. May also be specified as \fB\-b\fP. +.TP 8 +.B command +Command names. May also be specified as \fB\-c\fP. +.TP 8 +.B directory +Directory names. May also be specified as \fB\-d\fP. +.TP 8 +.B disabled +Names of disabled shell builtins. +.TP 8 +.B enabled +Names of enabled shell builtins. +.TP 8 +.B export +Names of exported shell variables. May also be specified as \fB\-e\fP. +.TP 8 +.B file +File names. May also be specified as \fB\-f\fP. +.TP 8 +.B function +Names of shell functions. +.TP 8 +.B group +Group names. May also be specified as \fB\-g\fP. +.TP 8 +.B helptopic +Help topics as accepted by the \fBhelp\fP builtin. +.TP 8 +.B hostname +Hostnames, as taken from the file specified by the +.SM +.B HOSTFILE +shell variable. +.TP 8 +.B job +Job names, if job control is active. May also be specified as \fB\-j\fP. +.TP 8 +.B keyword +Shell reserved words. May also be specified as \fB\-k\fP. +.TP 8 +.B running +Names of running jobs, if job control is active. +.TP 8 +.B service +Service names. May also be specified as \fB\-s\fP. +.TP 8 +.B setopt +Valid arguments for the \fB\-o\fP option to the \fBset\fP builtin. +.TP 8 +.B shopt +Shell option names as accepted by the \fBshopt\fP builtin. +.TP 8 +.B signal +Signal names. +.TP 8 +.B stopped +Names of stopped jobs, if job control is active. +.TP 8 +.B user +User names. May also be specified as \fB\-u\fP. +.TP 8 +.B variable +Names of all shell variables. May also be specified as \fB\-v\fP. +.RE +.TP 8 +\fB\-G\fP \fIglobpat\fP +The pathname 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 pathname expansion. +It is applied to the list of possible completions generated by the +preceding options and arguments, and each completion matching +\fIfilterpat\fP is removed from the list. +A leading \fB!\fP in \fIfilterpat\fP negates the pattern; in this +case, any completion not matching \fIfilterpat\fP is removed. +.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 +\fBcompopt\fP [\fB\-o\fP \fIoption\fP] [\fB\-DE\fP] [\fB+o\fP \fIoption\fP] [\fIname\fP] +Modify completion options for each \fIname\fP according to the +\fIoption\fPs, or for the +currently-execution completion if no \fIname\fPs are supplied. +If no \fIoption\fPs are given, display the completion options for each +\fIname\fP or the current completion. +The possible values of \fIoption\fP are those valid for the \fBcomplete\fP +builtin described above. +The \fB\-D\fP option indicates that the remaining options should +apply to the ``default'' command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The \fB\-E\fP option indicates that the remaining options should +apply to ``empty'' command completion; that is, completion attempted on a +blank line. +.PP +The return value is true unless an invalid option is supplied, an attempt +is made to modify the options for a \fIname\fP for which no completion +specification exists, or an output error occurs. +.TP +\fBcontinue\fP [\fIn\fP] +Resume the next iteration of the enclosing +.BR for , +.BR while , +.BR until , +or +.B select +loop. +If +.I n +is specified, resume at the \fIn\fPth enclosing loop. +.I n +must be \(>= 1. If +.I n +is greater than the number of enclosing loops, the last enclosing loop +(the ``top-level'' loop) is resumed. +The return value is 0 unless \fIn\fP is not greater than or equal to 1. +.TP +\fBdeclare\fP [\fB\-aAfFilrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...] +.PD 0 +.TP +\fBtypeset\fP [\fB\-aAfFilrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...] +.PD +Declare variables and/or give them attributes. +If no \fIname\fPs are given then display the values of variables. +The +.B \-p +option will display the attributes and values of each +.IR name . +When +.B \-p +is used with \fIname\fP arguments, additional options are ignored. +When +.B \-p +is supplied without \fIname\fP arguments, it will display the attributes +and values of all variables having the attributes specified by the +additional options. +If no other options are supplied with \fB\-p\fP, \fBdeclare\fP will display +the attributes and values of all shell variables. The \fB\-f\fP option +will restrict the display to shell functions. +The +.B \-F +option inhibits the display of function definitions; only the +function name and attributes are printed. +If the \fBextdebug\fP shell option is enabled using \fBshopt\fP, +the source file name and line number where 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 indexed array variable (see +.B Arrays +above). +.TP +.B \-A +Each \fIname\fP is an associative array variable (see +.B Arrays +above). +.TP +.B \-f +Use function names only. +.TP +.B \-i +The variable is treated as an integer; arithmetic evaluation (see +.SM +.B "ARITHMETIC EVALUATION" +above) is performed when the variable is assigned a value. +.TP +.B \-l +When the variable is assigned a value, all upper-case characters are +converted to lower-case. +The upper-case attribute is disabled. +.TP +.B \-r +Make \fIname\fPs readonly. These names cannot then be assigned values +by subsequent assignment statements or unset. +.TP +.B \-t +Give each \fIname\fP the \fItrace\fP attribute. +Traced functions inherit the \fBDEBUG\fP and \fBRETURN\fP traps from +the calling shell. +The trace attribute has no special meaning for variables. +.TP +.B \-u +When the variable is assigned a value, all lower-case characters are +converted to upper-case. +The lower-case attribute is disabled. +.TP +.B \-x +Mark \fIname\fPs for export to subsequent commands via the environment. +.PD +.PP +Using `+' instead of `\-' +turns off the attribute instead, +with the exceptions that \fB+a\fP +may not be used to destroy an array variable and \fB+r\fP will not +remove the readonly attribute. +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 [+\fIn\fP] [\-\fIn\fP] [\fB\-cplv\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 +.I jobspec +is not present, and neither \fB\-a\fP nor \fB\-r\fP is supplied, +the shell's notion of the \fIcurrent job\fP is used. +If the \fB\-h\fP option is given, each +.I jobspec +is not removed from the table, but is marked so that +.SM +.B SIGHUP +is not sent to the job if the shell receives a +.SM +.BR SIGHUP . +If no +.I jobspec +is 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 \fB\-\-\fP to mean the end of options. +.B echo +interprets the following escape sequences: +.RS +.PD 0 +.TP +.B \ea +alert (bell) +.TP +.B \eb +backspace +.TP +.B \ec +suppress further output +.TP +.B \ee +an escape character +.TP +.B \ef +form feed +.TP +.B \en +new line +.TP +.B \er +carriage return +.TP +.B \et +horizontal tab +.TP +.B \ev +vertical tab +.TP +.B \e\e +backslash +.TP +.B \e0\fInnn\fP +the eight-bit character whose value is the octal value \fInnn\fP +(zero to three octal digits) +.TP +.B \ex\fIHH\fP +the eight-bit character whose value is the hexadecimal value \fIHH\fP +(one or two hex digits) +.PD +.RE +.TP +\fBenable\fP [\fB\-a\fP] [\fB\-dnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...] +Enable and disable builtin shell commands. +Disabling a builtin allows a disk command which has the same name +as a shell builtin to be executed without specifying a full pathname, +even though the shell normally searches for builtins before disk commands. +If \fB\-n\fP is used, each \fIname\fP +is disabled; otherwise, +\fInames\fP are enabled. For example, to use the +.B test +binary found via the +.SM +.B PATH +instead of the shell builtin version, run +.if t \f(CWenable -n test\fP. +.if n ``enable -n test''. +The +.B \-f +option means to load the new builtin command +.I name +from shared object +.IR filename , +on systems that support dynamic loading. The +.B \-d +option will delete a builtin previously loaded with +.BR \-f . +If no \fIname\fP arguments are given, or if the +.B \-p +option is supplied, a list of shell builtins is printed. +With no other option arguments, the list consists of all enabled +shell builtins. +If \fB\-n\fP is supplied, only disabled builtins are printed. +If \fB\-a\fP is supplied, the list printed includes all builtins, with an +indication of whether or not each is enabled. +If \fB\-s\fP is supplied, the output is restricted to the POSIX +\fIspecial\fP builtins. +The return value is 0 unless a +.I name +is not a shell builtin or there is an error loading a new builtin +from a shared object. +.TP +\fBeval\fP [\fIarg\fP ...] +The \fIarg\fPs are read and concatenated together into a single +command. This command is then read and executed by the shell, and +its exit status is returned as the value of +.BR eval . +If there are no +.IR args , +or only null arguments, +.B eval +returns 0. +.TP +\fBexec\fP [\fB\-cl\fP] [\fB\-a\fP \fIname\fP] [\fIcommand\fP [\fIarguments\fP]] +If +.I command +is specified, it replaces the shell. +No new process is created. The +.I arguments +become the arguments to \fIcommand\fP. +If the +.B \-l +option is supplied, +the shell places a dash at the beginning of the zeroth argument passed to +.IR command . +This is what +.IR login (1) +does. The +.B \-c +option causes +.I command +to be executed with an empty environment. If +.B \-a +is supplied, the shell passes +.I name +as the zeroth argument to the executed command. If +.I command +cannot be executed for some reason, a non-interactive shell exits, +unless the 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 each +\fIname\fP. +If a variable name is followed by =\fIword\fP, the value of +the variable is set to \fIword\fP. +.B export +returns an exit status of 0 unless an invalid option is +encountered, +one of the \fInames\fP is not a valid shell variable name, or +.B \-f +is supplied with a +.I name +that is not a function. +.TP +\fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-lnr\fP] [\fIfirst\fP] [\fIlast\fP] +.PD 0 +.TP +\fBfc\fP \fB\-s\fP [\fIpat\fP=\fIrep\fP] [\fIcmd\fP] +.PD +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. +.SM +.B OPTIND +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\-dms\fP] [\fIpattern\fP] +Display helpful information about builtin commands. If +.I pattern +is specified, +.B help +gives detailed help on all commands matching +.IR pattern ; +otherwise help for all the builtins and shell control structures +is printed. +.RS +.PD 0 +.TP +.B \-d +Display a short description of each \fIpattern\fP +.TP +.B \-m +Display the description of each \fIpattern\fP in a manpage-like format +.TP +.B \-s +Display only a short usage synopsis for each \fIpattern\fP +.PD +.RE +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 the shell variable +.SM +.B HISTTIMEFORMAT +is set and not null, +it is used as a format string for \fIstrftime\fP(3) to display +the time stamp associated with each displayed history entry. +No intervening blank is printed between the formatted time stamp +and the history line. +If \fIfilename\fP is supplied, it is used as the +name of the history file; if not, the value of +.SM +.B HISTFILE +is used. Options, if supplied, have the following meanings: +.RS +.PD 0 +.TP +.B \-c +Clear the history list by deleting all the entries. +.TP +\fB\-d\fP \fIoffset\fP +Delete the history entry at position \fIoffset\fP. +.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 +If the +.SM +.B HISTTIMEFORMAT +variable is set, the time stamp information +associated with each history entry is written to the history file, +marked with the history comment character. +When the history file is read, lines beginning with the history +comment character followed immediately by a digit are interpreted +as timestamps for the previous history line. +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 case-insensitive signal name such as +.SM +.B SIGKILL +(with or without the +.SM +.B SIG +prefix) or a signal number; +.I signum +is a signal number. +If +.I sigspec +is not present, then +.SM +.B SIGTERM +is assumed. +An argument of +.B \-l +lists the signal names. +If any arguments are supplied when +.B \-l +is given, the names of the signals corresponding to the arguments are +listed, and the return status is 0. +The \fIexit_status\fP argument to +.B \-l +is a number specifying either a signal number or the exit status of +a process terminated by a signal. +.B kill +returns true if at least one signal was successfully sent, or false +if an error occurs or an invalid option is encountered. +.TP +\fBlet\fP \fIarg\fP [\fIarg\fP ...] +Each +.I arg +is an arithmetic expression to be evaluated (see +.SM +.B "ARITHMETIC EVALUATION" +above). +If the last +.I arg +evaluates to 0, +.B let +returns 1; 0 is returned otherwise. +.TP +\fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] ...] +For each argument, a local variable named +.I name +is created, and assigned +.IR value . +The \fIoption\fP can be any of the options accepted by \fBdeclare\fP. +When +.B local +is used within a function, it causes the variable +.I name +to have a visible scope restricted to that function and its children. +With no operands, +.B local +writes a list of local variables to the standard output. It is +an error to use +.B local +when not within a function. The return status is 0 unless +.B local +is used outside a function, an invalid +.I name +is supplied, or +\fIname\fP is a readonly variable. +.TP +.B logout +Exit a login shell. +.TP +\fBmapfile\fP [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP] +.PD 0 +.TP +\fBreadarray\fP [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP] +.PD +Read lines from the standard input into the indexed array variable +.IR array , +or from file descriptor +.IR fd +if the +.B \-u +option is supplied. +The variable +.SM +.B MAPFILE +is the default \fIarray\fP. +Options, if supplied, have the following meanings: +.RS +.PD 0 +.TP +.B \-n +Copy at most +.I count +lines. If \fIcount\fP is 0, all lines are copied. +.TP +.B \-O +Begin assigning to +.I array +at index +.IR origin . +The default index is 0. +.TP +.B \-s +Discard the first \fIcount\fP lines read. +.TP +.B \-t +Remove a trailing newline from each line read. +.TP +.B \-u +Read lines from file descriptor \fIfd\fP instead of the standard input. +.TP +.B \-C +Evaluate +.I callback +each time \fIquantum\fP lines are read. The \fB\-c\fP option specifies +.IR quantum . +.TP +.B \-c +Specify the number of lines read between each call to +.IR callback . +.PD +.PP +If +.B \-C +is specified without +.BR \-c , +the default quantum is 5000. +When \fIcallback\fP is evaluated, it is supplied the index of the next +array element to be assigned as an additional argument. +\fIcallback\fP is evaluated after the line is read but before the +array element is assigned. +.PP +If not supplied with an explicit origin, \fBmapfile\fP will clear \fIarray\fP +before assigning to it. +.PP +\fBmapfile\fP returns successfully unless an invalid option or option +argument is supplied, \fIarray\fP is invalid or unassignable, or if +\fIarray\fP is not an indexed array. +.RE +.TP +\fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP] +Removes entries from the directory stack. With no arguments, +removes the top directory from the stack, and performs a +.B cd +to the new top directory. +Arguments, if supplied, have the following meanings: +.RS +.PD 0 +.TP +.B \-n +Suppresses the normal change of directory when removing directories +from the stack, so that only the stack is manipulated. +.TP +\fB+\fP\fIn\fP +Removes the \fIn\fPth entry counting from the left of the list +shown by +.BR dirs , +starting with zero. For example: +.if n ``popd +0'' +.if t \f(CWpopd +0\fP +removes the first directory, +.if n ``popd +1'' +.if t \f(CWpopd +1\fP +the second. +.TP +\fB\-\fP\fIn\fP +Removes the \fIn\fPth entry counting from the right of the list +shown by +.BR dirs , +starting with zero. For example: +.if n ``popd -0'' +.if t \f(CWpopd -0\fP +removes the last directory, +.if n ``popd -1'' +.if t \f(CWpopd -1\fP +the next to last. +.PD +.PP +If the +.B popd +command is successful, a +.B dirs +is performed as well, and the return status is 0. +.B popd +returns false if an invalid option is encountered, the directory stack +is empty, a non-existent directory stack entry is specified, or the +directory change fails. +.RE +.TP +\fBprintf\fP [\fB\-v\fP \fIvar\fP] \fIformat\fP [\fIarguments\fP] +Write the formatted \fIarguments\fP to the standard output under the +control of the \fIformat\fP. +The \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 (except that \fB\ec\fP terminates output, backslashes in +\fB\e\(aq\fP, \fB\e"\fP, and \fB\e?\fP are not removed, and octal escapes +beginning with \fB\e0\fP may contain up to four digits), +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 \fB\-v\fP option causes the output to be assigned to the variable +\fIvar\fP rather than being printed to the standard output. +.sp 1 +The \fIformat\fP is 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] [+\fIn\fP] [\-\fIn\fP] +.PD 0 +.TP +\fBpushd\fP [\fB\-n\fP] [\fIdir\fP] +.PD +Adds a directory to the top of the directory stack, or rotates +the stack, making the new top of the stack the current working +directory. With no arguments, exchanges the top two directories +and returns 0, unless the directory stack is empty. +Arguments, if supplied, have the following meanings: +.RS +.PD 0 +.TP +.B \-n +Suppresses the normal change of directory when adding directories +to the stack, so that only the stack is manipulated. +.TP +\fB+\fP\fIn\fP +Rotates the stack so that the \fIn\fPth directory +(counting from the left of the list shown by +.BR dirs , +starting with zero) +is at the top. +.TP +\fB\-\fP\fIn\fP +Rotates the stack so that the \fIn\fPth directory +(counting from the right of the list shown by +.BR dirs , +starting with zero) is at the top. +.TP +.I dir +Adds +.I dir +to the directory stack at the top, making it the +new current working directory. +.PD +.PP +If the +.B pushd +command is successful, a +.B dirs +is performed as well. +If the first form is used, +.B pushd +returns 0 unless the cd to +.I dir +fails. With the second form, +.B pushd +returns 0 unless the directory stack is empty, +a non-existent directory stack element is specified, +or the directory change to the specified new current directory +fails. +.RE +.TP +\fBpwd\fP [\fB\-LP\fP] +Print the absolute pathname of the current working directory. +The pathname printed contains no symbolic links if the +.B \-P +option is supplied or the +.B \-o physical +option to the +.B set +builtin command is enabled. +If the +.B \-L +option is used, the pathname printed may contain symbolic links. +The return status is 0 unless an error occurs while +reading the name of the current directory or an +invalid option is supplied. +.TP +\fBread\fP [\fB\-ers\fP] [\fB\-a\fP \fIaname\fP] [\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] [\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-u\fP \fIfd\fP] [\fIname\fP ...] +One line is read from the standard input, or from the file descriptor +\fIfd\fP supplied as an argument to the \fB\-u\fP option, 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. +Readline uses the current (or default, if line editing was not previously +active) editing settings. +.TP +.B \-i \fItext\fP +If +.B readline +is being used to read the line, \fItext\fP is placed into the editing +buffer before editing begins. +.TP +.B \-n \fInchars\fP +\fBread\fP returns after reading \fInchars\fP characters rather than +waiting for a complete line of input, but honor a delimiter if fewer +than \fInchars\fP characters are read before the delimiter. +.TP +.B \-N \fInchars\fP +\fBread\fP returns after reading exactly \fInchars\fP characters rather +than waiting for a complete line of input, unless EOF is encountered or +\fBread\fP times out. +Delimiter characters encountered in the input are +not treated specially and do not cause \fBread\fP to return until +\fInchars\fP characters are read. +.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. +\fItimeout\fP may be a decimal number with a fractional portion following +the decimal point. +This option is only effective if \fBread\fP is reading input from a +terminal, pipe, or other special file; it has no effect when reading +from regular files. +If \fItimeout\fP is 0, \fBread\fP returns success if input is available on +the specified file descriptor, failure otherwise. +The exit status is greater than 128 if the timeout is exceeded. +.TP +.B \-u \fIfd\fP +Read input from file descriptor \fIfd\fP. +.PD +.PP +If no +.I names +are supplied, the line read is assigned to the variable +.SM +.BR REPLY . +The return code is zero, unless end-of-file is encountered, \fBread\fP +times out (in which case the return code is greater than 128), or an +invalid file descriptor is supplied as the argument to \fB\-u\fP. +.RE +.TP +\fBreadonly\fP [\fB\-aApf\fP] [\fIname\fP[=\fIword\fP] ...] +.PD +The given +\fInames\fP are marked readonly; the values of these +.I names +may not be changed by subsequent assignment. +If the +.B \-f +option is supplied, the functions corresponding to the +\fInames\fP are so +marked. +The +.B \-a +option restricts the variables to indexed arrays; the +.B \-A +option restricts the variables to associative arrays. +If 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\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\fP] [\fIarg\fP ...] +.PD 0 +.TP +\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\fP] [\fIarg\fP ...] +.PD +Without options, the name and value of each shell variable are displayed +in a format that can be reused as input +for setting or resetting the currently-set variables. +Read-only variables cannot be reset. +In \fIposix mode\fP, only shell variables are listed. +The output is sorted according to the current locale. +When options are specified, they set or unset shell attributes. +Any arguments remaining after option processing are treated +as values for the positional parameters and are assigned, in order, to +.BR $1 , +.BR $2 , +.B ... +.BR $\fIn\fP . +Options, if specified, have the following meanings: +.RS +.PD 0 +.TP 8 +.B \-a +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 \fIpipeline\fP (which may consist of a single +\fIsimple command\fP), a \fIsubshell\fP command enclosed in parentheses, +or one of the commands executed as part of a command list enclosed +by braces (see +.SM +.B SHELL GRAMMAR +above) exits with a non-zero status. +The shell does not exit if the +command that fails is part of the command list immediately following a +.B while +or +.B until +keyword, +part of the test following the +.B if +or +.B elif +reserved words, part of any command executed in a +.B && +or +.B \(bv\(bv +list except the command following the final \fB&&\fP or \fB\(bv\(bv\fP, +any command in a pipeline but the last, +or if the command's return value is +being inverted with +.BR ! . +A trap on \fBERR\fP, if set, is executed before the shell exits. +This option applies to the shell environment and each subshell environment +separately (see +.SM +.B "COMMAND EXECUTION ENVIRONMENT" +above), and may cause +subshells to exit before executing all the commands in the subshell. +.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. +This also affects the editing interface used for \fBread \-e\fP. +.TP 8 +.B errexit +Same as +.BR \-e . +.TP 8 +.B errtrace +Same as +.BR \-E . +.TP 8 +.B functrace +Same as +.BR \-T . +.TP 8 +.B hashall +Same as +.BR \-h . +.TP 8 +.B histexpand +Same as +.BR \-H . +.TP 8 +.B history +Enable command history, as described above under +.SM +.BR HISTORY . +This option is on by default in interactive shells. +.TP 8 +.B ignoreeof +The effect is as if the shell command +.if t \f(CWIGNOREEOF=10\fP +.if n ``IGNOREEOF=10'' +had been executed +(see +.B Shell Variables +above). +.TP 8 +.B keyword +Same as +.BR \-k . +.TP 8 +.B monitor +Same as +.BR \-m . +.TP 8 +.B noclobber +Same as +.BR \-C . +.TP 8 +.B noexec +Same as +.BR \-n . +.TP 8 +.B noglob +Same as +.BR \-f . +.TP 8 +.B nolog +Currently ignored. +.TP 8 +.B notify +Same as +.BR \-b . +.TP 8 +.B nounset +Same as +.BR \-u . +.TP 8 +.B onecmd +Same as +.BR \-t . +.TP 8 +.B physical +Same as +.BR \-P . +.TP 8 +.B pipefail +If set, the return value of a pipeline is the value of the last +(rightmost) command to exit with a non-zero status, or zero if all +commands in the pipeline exit successfully. +This option is disabled by default. +.TP 8 +.B posix +Change the behavior of +.B bash +where the default operation differs +from the POSIX standard to match the standard (\fIposix mode\fP). +.TP 8 +.B privileged +Same as +.BR \-p . +.TP 8 +.B verbose +Same as +.BR \-v . +.TP 8 +.B vi +Use a vi-style command line editing interface. +This also affects the editing interface used for \fBread \-e\fP. +.TP 8 +.B xtrace +Same as +.BR \-x . +.sp .5 +.PP +If +.B \-o +is supplied with no \fIoption\-name\fP, the values of the current options are +printed. +If +.B +o +is supplied with no \fIoption\-name\fP, a series of +.B set +commands to recreate the current option settings is displayed on +the standard output. +.RE +.TP 8 +.B \-p +Turn on +.I privileged +mode. In this mode, the +.SM +.B $ENV +and +.SM +.B $BASH_ENV +files are not processed, shell functions are not inherited from the +environment, and the +.SM +.BR SHELLOPTS , +.SM +.BR BASHOPTS , +.SM +.BR CDPATH , +and +.SM +.B GLOBIGNORE +variables, if they appear in the environment, are ignored. +If the shell is started with the effective user (group) id not equal to the +real user (group) id, and the \fB\-p\fP option is not supplied, these actions +are taken and the effective user id is set to the real user id. +If the \fB\-p\fP option is supplied at startup, the effective user id is +not reset. +Turning this option off causes the effective user +and group ids to be set to the real user and group ids. +.TP 8 +.B \-t +Exit after reading and executing one command. +.TP 8 +.B \-u +Treat unset variables and parameters other than the special +parameters "@" and "*" as an error when performing +parameter expansion. If expansion is attempted on an +unset variable or parameter, the shell prints an error message, and, +if not interactive, exits with a non-zero status. +.TP 8 +.B \-v +Print shell input lines as they are read. +.TP 8 +.B \-x +After expanding each \fIsimple command\fP, +\fBfor\fP command, \fBcase\fP command, \fBselect\fP command, or +arithmetic \fBfor\fP command, display the expanded value of +.SM +.BR PS4 , +followed by the command and its expanded arguments +or associated word list. +.TP 8 +.B \-B +The shell performs brace expansion (see +.B Brace Expansion +above). This is on by default. +.TP 8 +.B \-C +If set, +.B bash +does not overwrite an existing file with the +.BR > , +.BR >& , +and +.B <> +redirection operators. This may be overridden when +creating output files by using the redirection operator +.B >| +instead of +.BR > . +.TP 8 +.B \-E +If set, any trap on \fBERR\fP is inherited by shell functions, command +substitutions, and commands executed in a subshell environment. +The \fBERR\fP trap is normally not inherited in such cases. +.TP 8 +.B \-H +Enable +.B ! +style history substitution. This option is on by +default when the shell is interactive. +.TP 8 +.B \-P +If set, the shell does not 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 traps on \fBDEBUG\fP and \fBRETURN\fP are inherited by shell +functions, command substitutions, and commands executed in a +subshell environment. +The \fBDEBUG\fP and \fBRETURN\fP traps are normally not inherited +in such cases. +.TP 8 +.B \-\- +If no arguments follow this option, then the positional parameters are +unset. Otherwise, the positional parameters are set to the +\fIarg\fPs, even if some of them begin with a +.BR \- . +.TP 8 +.B \- +Signal the end of options, cause all remaining \fIarg\fPs to be +assigned to the positional parameters. The +.B \-x +and +.B \-v +options are turned off. +If there are no \fIarg\fPs, +the positional parameters remain unchanged. +.PD +.PP +The options are off by default unless otherwise noted. +Using + rather than \- causes these options to be turned off. +The options can also be specified as arguments to an invocation of +the shell. +The current set of options may be found in +.BR $\- . +The return status is always true unless an invalid option is encountered. +.RE +.TP +\fBshift\fP [\fIn\fP] +The positional parameters from \fIn\fP+1 ... are renamed to +.B $1 +.B .... +Parameters represented by the numbers \fB$#\fP +down to \fB$#\fP\-\fIn\fP+1 are unset. +.I n +must be a non-negative number less than or equal to \fB$#\fP. +If +.I n +is 0, no parameters are changed. +If +.I n +is not given, it is assumed to be 1. +If +.I n +is greater than \fB$#\fP, the positional parameters are not changed. +The return status is greater than zero if +.I n +is greater than +.B $# +or less than zero; otherwise 0. +.TP +\fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP ...] +Toggle the values of 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 autocd +If set, a command name that is the name of a directory is executed as if +it were the argument to the \fBcd\fP command. +This option is only used by interactive shells. +.TP 8 +.B cdable_vars +If set, an argument to the +.B cd +builtin command that +is not a directory is assumed to be the name of a variable whose +value is the directory to change to. +.TP 8 +.B cdspell +If set, minor errors in the spelling of a directory component in a +.B cd +command will be corrected. +The errors checked for are transposed characters, +a missing character, and one character too many. +If a correction is found, the corrected 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 checkjobs +If set, \fBbash\fP lists the status of any stopped and running jobs before +exiting an interactive shell. If any jobs are running, this causes +the exit to be deferred until a second exit is attempted without an +intervening command (see +.SM +.B "JOB CONTROL" +above). The shell always +postpones exiting if any jobs are stopped. +.TP 8 +.B checkwinsize +If set, \fBbash\fP checks the window size after each 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 compat31 +If set, +.B bash +changes its behavior to that of version 3.1 with respect to quoted +arguments to the conditional command's =~ operator. +.TP 8 +.B compat32 +If set, +.B bash +changes its behavior to that of version 3.2 with respect to locale-specific +string comparison when using the conditional command's < and > operators. +.TP 8 +.B compat40 +If set, +.B bash +changes its behavior to that of version 4.0 with respect to locale-specific +string comparison when using the conditional command's < and > operators +and the effect of interrupting a command list. +.TP 8 +.B dirspell +If set, +.B bash +attempts spelling correction on directory names during word completion +if the directory name initially supplied does not exist. +.TP 8 +.B dotglob +If set, +.B bash +includes filenames beginning with a `.' in the results of pathname +expansion. +.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. +.TP +.B 4. +.SM +.B BASH_ARGC +and +.SM +.B BASH_ARGV +are updated as described in their descriptions above. +.TP +.B 5. +Function tracing is enabled: command substitution, shell functions, and +subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the +\fBDEBUG\fP and \fBRETURN\fP traps. +.TP +.B 6. +Error tracing is enabled: command substitution, shell functions, and +subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the +\fBERROR\fP trap. +.RE +.TP 8 +.B extglob +If set, the extended pattern matching features described above under +\fBPathname Expansion\fP are enabled. +.TP 8 +.B extquote +If set, \fB$\fP\(aq\fIstring\fP\(aq and \fB$\fP"\fIstring\fP" quoting is +performed within \fB${\fP\fIparameter\fP\fB}\fP expansions +enclosed in double quotes. This option is enabled by default. +.TP 8 +.B failglob +If set, patterns which fail to match filenames during pathname expansion +result in an expansion error. +.TP 8 +.B force_fignore +If set, the suffixes specified by the +.SM +.B FIGNORE +shell variable +cause words to be ignored when performing word completion even if +the ignored words are the only possible completions. +See +.SM +\fBSHELL VARIABLES\fP +above for a description of +.SM +.BR FIGNORE . +This option is enabled by default. +.TP 8 +.B globstar +If set, the pattern \fB**\fP used in a pathname expansion context will +match a files and zero or more directories and subdirectories. +If the pattern is followed by a \fB/\fP, only directories and +subdirectories match. +.TP 8 +.B gnu_errfmt +If set, shell error messages are written in the standard GNU error +message format. +.TP 8 +.B histappend +If set, the history list is appended to the file named by the value +of the +.SM +.B HISTFILE +variable when the shell exits, rather than overwriting the file. +.TP 8 +.B histreedit +If set, and +.B readline +is being used, a user is given the opportunity to re-edit a +failed history substitution. +.TP 8 +.B histverify +If set, and +.B readline +is being used, the results of history substitution are not immediately +passed to the shell parser. Instead, the resulting line is loaded into +the \fBreadline\fP editing buffer, allowing further modification. +.TP 8 +.B hostcomplete +If set, and +.B readline +is being used, \fBbash\fP will attempt to perform hostname completion when a +word containing a \fB@\fP is being completed (see +.B Completing +under +.SM +.B READLINE +above). +This is enabled by default. +.TP 8 +.B huponexit +If set, \fBbash\fP will send +.SM +.B SIGHUP +to all jobs when an interactive login shell exits. +.TP 8 +.B 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 +.SM +.B PATH +for possible completions when +completion is attempted on an empty line. +.TP 8 +.B nocaseglob +If set, +.B bash +matches filenames in a case\-insensitive fashion when performing pathname +expansion (see +.B Pathname Expansion +above). +.TP 8 +.B nocasematch +If set, +.B bash +matches patterns in a case\-insensitive fashion when performing matching +while executing \fBcase\fP or \fB[[\fP conditional commands. +.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 +parameter expansion, command substitution, arithmetic +expansion, and quote removal after being expanded as described in +.SM +.B PROMPTING +above. This option is enabled by default. +.TP 8 +.B restricted_shell +The shell sets this option if it is started in restricted mode (see +.SM +.B "RESTRICTED SHELL" +below). +The value may not be changed. +This is not reset when the startup files are executed, allowing +the startup files to discover whether or not a shell is restricted. +.TP 8 +.B shift_verbose +If set, the +.B shift +builtin prints an error message when the shift count exceeds the +number of positional parameters. +.TP 8 +.B sourcepath +If set, the +\fBsource\fP (\fB.\fP) builtin uses the value of +.SM +.B PATH +to find the directory containing the file supplied as an argument. +This option is enabled by default. +.TP 8 +.B xpg_echo +If set, the \fBecho\fP builtin expands backslash-escape sequences +by default. +.RE +.TP +\fBsuspend\fP [\fB\-f\fP] +Suspend the execution of this shell until it receives a +.SM +.B SIGCONT +signal. A login shell cannot be suspended; the +.B \-f +option can be used to override this and force the suspension. +The return status is 0 unless the shell is a login shell and +.B \-f +is not supplied, or if job control is not enabled. +.TP +\fBtest\fP \fIexpr\fP +.PD 0 +.TP +\fB[\fP \fIexpr\fP \fB]\fP +Return a status of 0 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" . +\fBtest\fP does not accept any options, nor does it accept and ignore +an argument of \fB\-\-\fP as signifying the end of options. +.if t .sp 0.5 +.if n .sp 1 +Expressions may be combined using the following operators, listed +in decreasing order of precedence. +The evaluation depends on the number of arguments; see below. +.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. +The \fB\-a\fP and \fB\-o\fP operators are considered binary operators +when there are three arguments. +If the first argument is \fB!\fP, the value is the negation of +the two-argument test using the second and third arguments. +If the first argument is exactly \fB(\fP and the third argument is +exactly \fB)\fP, the result is the one-argument test of the second +argument. +Otherwise, the expression is false. +.TP +4 arguments +If the first argument is \fB!\fP, the result is the negation of +the three-argument expression composed of the remaining arguments. +Otherwise, the expression is parsed and evaluated according to +precedence using the rules listed above. +.TP +5 or more arguments +The expression is parsed and evaluated according to precedence +using the rules listed above. +.RE +.PD +.TP +.B times +Print the accumulated user and system times for the shell and +for processes run from the shell. The return status is 0. +.TP +\fBtrap\fP [\fB\-lp\fP] [[\fIarg\fP] \fIsigspec\fP ...] +The command +.I arg +is to be read and executed when the shell receives +signal(s) +.IR sigspec . +If +.I arg +is absent (and there is a single \fIsigspec\fP) or +.BR \- , +each specified signal is +reset to its original disposition (the value it had +upon entrance to the shell). +If +.I arg +is the null string the signal specified by each +.I sigspec +is ignored by the shell and by the commands it invokes. +If +.I arg +is not present and +.B \-p +has been supplied, then the trap commands associated with each +.I sigspec +are displayed. +If no arguments are supplied or if only +.B \-p +is given, +.B trap +prints the list of commands associated with each signal. +The +.B \-l +option causes the shell to print a list of signal names and +their corresponding numbers. +Each +.I sigspec +is either +a signal name defined in <\fIsignal.h\fP>, or a signal number. +Signal names are case insensitive and the SIG prefix is optional. +.if t .sp 0.5 +.if n .sp 1 +If a +.I sigspec +is +.SM +.B EXIT +(0) the command +.I arg +is executed on exit from the shell. +If a +.I sigspec +is +.SM +.BR DEBUG , +the command +.I arg +is executed before every \fIsimple command\fP, \fIfor\fP command, +\fIcase\fP command, \fIselect\fP command, every arithmetic \fIfor\fP +command, and before the first command executes in a shell function (see +.SM +.B SHELL GRAMMAR +above). +Refer to the description of the \fBextdebug\fP option to the +\fBshopt\fP builtin for details of its effect on the \fBDEBUG\fP trap. +If a +.I sigspec +is +.SM +.BR RETURN , +the command +.I arg +is executed each time a shell function or a script executed with the +\fB.\fP or \fBsource\fP builtins finishes executing. +.if t .sp 0.5 +.if n .sp 1 +If a +.I sigspec +is +.SM +.BR ERR , +the command +.I arg +is executed whenever a simple command has a non\-zero exit status, +subject to the following conditions. +The +.SM +.B ERR +trap is not executed if the failed +command is part of the command list immediately following a +.B while +or +.B until +keyword, +part of the test in an +.I if +statement, part of a command executed in a +.B && +or +.B \(bv\(bv +list, or if the command's return value is +being inverted via +.BR ! . +These are the same conditions obeyed by the \fBerrexit\fP option. +.if t .sp 0.5 +.if n .sp 1 +Signals ignored upon entry to the shell cannot be trapped or reset. +Trapped signals that are not being ignored are reset to their original +values in a subshell or subshell environment when one is created. +The return status is false if any +.I sigspec +is invalid; otherwise +.B trap +returns true. +.TP +\fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP ...] +With no options, +indicate how each +.I name +would be interpreted if used as a command name. +If the +.B \-t +option is used, +.B type +prints a string which is one of +.IR alias , +.IR keyword , +.IR function , +.IR builtin , +or +.I file +if +.I name +is an alias, shell reserved word, function, builtin, or disk file, +respectively. +If the +.I name +is not found, then nothing is printed, and an exit status of false +is returned. +If the +.B \-p +option is used, +.B type +either returns the name of the disk file +that would be executed if +.I name +were specified as a command name, +or nothing if +.if t \f(CWtype -t name\fP +.if n ``type -t name'' +would not return +.IR file . +The +.B \-P +option forces a +.SM +.B PATH +search for each \fIname\fP, even if +.if t \f(CWtype -t name\fP +.if n ``type -t name'' +would not return +.IR file . +If a command is hashed, +.B \-p +and +.B \-P +print the hashed value, not necessarily the file that appears +first in +.SM +.BR PATH . +If the +.B \-a +option is used, +.B type +prints all of the places that contain +an executable named +.IR name . +This includes aliases and functions, +if and only if the +.B \-p +option is not also used. +The table of hashed commands is not consulted +when using +.BR \-a . +The +.B \-f +option suppresses shell function lookup, as with the \fBcommand\fP builtin. +.B type +returns true if all of the arguments are found, false if +any are not found. +.TP +\fBulimit\fP [\fB\-HSTabcdefilmnpqrstuvx\fP [\fIlimit\fP]] +Provides control over the resources available to the shell and to +processes started by it, on systems that allow such control. +The \fB\-H\fP and \fB\-S\fP options specify that the hard or soft limit is +set for the given resource. +A hard limit cannot be increased by a non-root user once it is set; +a soft limit may be increased up to the value of the hard limit. +If neither \fB\-H\fP nor \fB\-S\fP is specified, both the soft and hard +limits are set. +The value of +.I limit +can be a number in the unit specified for the resource +or one of the special values +.BR hard , +.BR soft , +or +.BR unlimited , +which stand for the current hard limit, the current soft limit, and +no limit, respectively. +If +.I limit +is omitted, the current value of the soft limit of the resource is +printed, unless the \fB\-H\fP option is given. When more than one +resource is specified, the limit name and unit are printed before the value. +Other options are interpreted as follows: +.RS +.PD 0 +.TP +.B \-a +All current limits are reported +.TP +.B \-b +The maximum socket buffer size +.TP +.B \-c +The maximum size of core files created +.TP +.B \-d +The maximum size of a process's data segment +.TP +.B \-e +The maximum scheduling priority ("nice") +.TP +.B \-f +The maximum size of files written by the shell and its children +.TP +.B \-i +The maximum number of pending signals +.TP +.B \-l +The maximum size that may be locked into memory +.TP +.B \-m +The maximum resident set size (many systems do not honor this limit) +.TP +.B \-n +The maximum number of open file descriptors (most systems do not +allow this value to be set) +.TP +.B \-p +The pipe size in 512-byte blocks (this may not be set) +.TP +.B \-q +The maximum number of bytes in POSIX message queues +.TP +.B \-r +The maximum real-time scheduling priority +.TP +.B \-s +The maximum stack size +.TP +.B \-t +The maximum amount of cpu time in seconds +.TP +.B \-u +The maximum number of processes available to a single user +.TP +.B \-v +The maximum amount of virtual memory available to the shell +.TP +.B \-x +The maximum number of file locks +.TP +.B \-T +The maximum number of threads +.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 +.BR \-T , +.BR \-b , +.BR \-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 specified, 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 COMP_WORDBREAKS , +.SM +.BR RANDOM , +.SM +.BR SECONDS , +.SM +.BR LINENO , +.SM +.BR HISTCMD , +.SM +.BR FUNCNAME , +.SM +.BR GROUPS , +or +.SM +.B DIRSTACK +are unset, they lose their special properties, even if they are +subsequently reset. The exit status is true unless a +.I name +is readonly. +.TP +\fBwait\fP [\fIn ...\fP] +Wait for each specified process and return its termination status. +Each +.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 +.SM +.BR SHELL , +.SM +.BR PATH , +.SM +.BR ENV , +or +.SM +.B BASH_ENV +.IP \(bu +specifying command names containing +.B / +.IP \(bu +specifying a 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 +.SM +.B SHELLOPTS +from the shell environment at startup +.IP \(bu +redirecting output using the >, >|, <>, >&, &>, and >> redirection operators +.IP \(bu +using the +.B exec +builtin command to replace the shell with another command +.IP \(bu +adding or deleting builtin commands with the +.B \-f +and +.B \-d +options to the +.B enable +builtin command +.IP \(bu +Using the \fBenable\fP builtin command to enable disabled shell builtins +.IP \(bu +specifying the +.B \-p +option to the +.B command +builtin command +.IP \(bu +turning off restricted mode with +\fBset +r\fP or \fBset +o restricted\fP. +.PP +These restrictions are enforced after any startup files are read. +.PP +.ie \n(zY=1 When a command that is found to be a shell script is executed, +.el \{ When a command that is found to be a shell script is executed +(see +.SM +.B "COMMAND EXECUTION" +above), +\} +.B rbash +turns off any restrictions in the shell spawned to execute the +script. +.\" end of rbash.1 +.if \n(zY=1 .ig zY +.SH "SEE ALSO" +.PD 0 +.TP +\fIBash Reference Manual\fP, Brian Fox and Chet Ramey +.TP +\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey +.TP +\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey +.TP +\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE +.TP +\fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1) +.TP +\fIemacs\fP(1), \fIvi\fP(1) +.TP +\fIreadline\fP(3) +.PD +.SH FILES +.PD 0 +.TP +.FN /bin/bash +The \fBbash\fP executable +.TP +.FN /etc/profile +The systemwide initialization file, executed for login shells +.TP +.FN ~/.bash_profile +The personal initialization file, executed for login shells +.TP +.FN ~/.bashrc +The individual per-interactive-shell startup file +.TP +.FN ~/.bash_logout +The individual login shell cleanup file, executed when a login shell exits +.TP +.FN ~/.inputrc +Individual \fIreadline\fP initialization file +.PD +.SH AUTHORS +Brian Fox, Free Software Foundation +.br +bfox@gnu.org +.PP +Chet Ramey, Case Western Reserve University +.br +chet.ramey@case.edu +.SH BUG REPORTS +If you find a bug in +.B bash, +you should report it. But first, you should +make sure that it really is a bug, and that it appears in the latest +version of +.BR bash . +The latest version is always available from +\fIftp://ftp.gnu.org/pub/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 +Array variables may not (yet) be exported. +.PP +There may be only one active coprocess at a time. +.zZ +.zY diff --git a/doc/bash.html b/doc/bash.html new file mode 100644 index 0000000..2aa2825 --- /dev/null +++ b/doc/bash.html @@ -0,0 +1,12571 @@ + +BASH(1) Manual Page + + + + +
BASH(1)2009 December 29BASH(1) +
+
Index +
+ + + + + + + + + + + + + + + + + + + +  +

NAME

+ +bash - GNU Bourne-Again SHell +  +

SYNOPSIS

+ +bash + +[options] +[file] +  +

COPYRIGHT

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

DESCRIPTION

+ +Bash + +is an sh-compatible command language interpreter that +executes commands read from the standard input or from a file. +Bash + +also incorporates useful features from the Korn and C +shells (ksh and csh). +

+ +Bash + +is intended to be a conformant implementation of the +Shell and Utilities portion of the IEEE POSIX specification +(IEEE Standard 1003.1). +Bash + +can be configured to be POSIX-conformant by default. +  +

OPTIONS

+ +In addition to the single-character shell options documented in the +description of the set builtin command, bash +interprets the following options when it is invoked: +

+ + +

+
-c string + +
+If the +-c + +option is present, then commands are read from +string. + +If there are arguments after the +string, + +they are assigned to the positional parameters, starting with +$0. + +
-i + +
+If the +-i + +option is present, the shell is +interactive. + +
-l + +
+Make +bash + +act as if it had been invoked as a login shell (see +INVOCATION + + +below). +
-r + +
+If the +-r + +option is present, the shell becomes +restricted + +(see +RESTRICTED SHELL + + +below). +
-s + +
+If the +-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. +
-D + +
+A list of all double-quoted strings preceded by $ +is printed on the standard output. +These are the strings that +are subject to language translation when the current locale +is not C or POSIX. +This implies the -n option; no commands will be executed. +
[-+]O [shopt_option] + +
+shopt_option is one of the shell options accepted by the +shopt builtin (see +SHELL BUILTIN COMMANDS + + +below). +If shopt_option is present, -O sets the value of that option; ++O unsets it. +If shopt_option is not supplied, the names and values of the shell +options accepted by shopt are printed on the standard output. +If the invocation option is +O, the output is displayed in a format +that may be reused as input. +
-- + +
+A +-- + +signals the end of options and disables further option processing. +Any arguments after the +-- + +are treated as filenames and arguments. An argument of +- + +is equivalent to --. + +
+

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

+ + +

+
--debugger + +
+Arrange for the debugger profile to be executed before the shell +starts. +Turns on extended debugging mode (see the description of the +extdebug + +option to the +shopt + +builtin below) +and shell function tracing (see the description of the +-o functrace option to the +set + +builtin below). +
--dump-po-strings + +
+Equivalent to -D, but the output is in the GNU gettext +po (portable object) file format. +
--dump-strings + +
+Equivalent to -D. +
--help + +
+Display a usage message on standard output and exit successfully. +
--init-file file
+ +
--rcfile file
+ +Execute commands from +file + +instead of the standard personal initialization file +~/.bashrc + +if the shell is interactive (see +INVOCATION + + +below). +
--login + +
+Equivalent to -l. +
--noediting + +
+Do not use the GNU +readline + +library to read command lines when the shell is interactive. +
--noprofile + +
+Do not read either the system-wide startup file + +/etc/profile + +or any of the personal initialization files +~/.bash_profile, + +~/.bash_login, + +or +~/.profile. + +By default, +bash + +reads these files when it is invoked as a login shell (see +INVOCATION + + +below). +
--norc + +
+Do not read and execute the personal initialization file +~/.bashrc + +if the shell is interactive. +This option is on by default if the shell is invoked as +sh. + +
--posix + +
+Change the behavior of bash where the default operation differs +from the POSIX standard to match the standard (posix mode). +
--restricted + +
+The shell becomes restricted (see +RESTRICTED SHELL + + +below). +
--verbose + +
+Equivalent to -v. +
--version + +
+Show version information for this instance of +bash + +on the standard output and exit successfully. + +
+  +

ARGUMENTS

+ +If arguments remain after option processing, and neither the +-c + +nor the +-s + +option has been supplied, the first argument is assumed to +be the name of a file containing shell commands. +If +bash + +is invoked in this fashion, +$0 + +is set to the name of the file, and the positional parameters +are set to the remaining arguments. +Bash + +reads and executes commands from this file, then exits. +Bash's exit status is the exit status of the last command +executed in the script. +If no commands are executed, the exit status is 0. +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 +PATH + + +for the script. +  +

INVOCATION

+ +A login shell is one whose first character of argument zero is a +-, + +or one started with the +--login + +option. +

+ +An interactive shell is one started without non-option arguments +and without the +-c + +option +whose standard input and error are +both connected to terminals (as determined by +isatty(3)), + +or one started with the +-i + +option. +PS1 + + +is set and +$- + +includes +i + +if +bash + +is interactive, +allowing a shell script or a startup file to test this state. +

+ +The following paragraphs describe 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 below under +Tilde Expansion + +in the +EXPANSION + + +section. +

+ +When +bash + +is invoked as an interactive login shell, or as a non-interactive shell +with the --login option, it first reads and +executes commands from the file /etc/profile, if that +file exists. +After reading that file, it looks for ~/.bash_profile, +~/.bash_login, and ~/.profile, in that order, and reads +and executes commands from the first one that exists and is readable. +The +--noprofile + +option may be used when the shell is started to inhibit this behavior. +

+ +When a login shell exits, +bash + +reads and executes commands from the file ~/.bash_logout, if it +exists. +

+ +When an interactive shell that is not a login shell is started, +bash + +reads and executes commands from ~/.bashrc, if that file exists. +This may be inhibited by using the +--norc + +option. +The --rcfile file option will force +bash + +to read and execute commands from file instead of ~/.bashrc. +

+ +When +bash + +is started non-interactively, to run a shell script, for example, it +looks for the variable +BASH_ENV + + +in the environment, expands its value if it appears there, and uses the +expanded value as the name of a file to read and execute. +Bash + +behaves as if the following command were executed: +

+

+if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi + +
+ +

+but the value of the +PATH + + +variable is not used to search for the file name. +

+ +If +bash + +is invoked with the name +sh, + +it tries to mimic the startup behavior of historical versions of +sh + +as closely as possible, +while conforming to the POSIX standard as well. +When invoked as an interactive login shell, or a non-interactive +shell with the --login option, it first attempts to +read and execute commands from +/etc/profile + +and +~/.profile, + +in that order. +The +--noprofile + +option may be used to inhibit this behavior. +When invoked as an interactive shell with the name +sh, + +bash + +looks for the variable +ENV, + + +expands its value if it is defined, and uses the +expanded value as the name of a file to read and execute. +Since a shell invoked as +sh + +does not attempt to read and execute commands from any other startup +files, the +--rcfile + +option has no effect. +A non-interactive shell invoked with the name +sh + +does not attempt to read any other startup files. +When invoked as +sh, + +bash + +enters +posix + +mode after the startup files are read. +

+ +When +bash + +is started in +posix + +mode, as with the +--posix + +command line option, it follows the POSIX standard for startup files. +In this mode, interactive shells expand the +ENV + + +variable and commands are read and executed from the file +whose name is the expanded value. +No other startup files are read. +

+ +Bash + +attempts to determine when it is being run with its standard input +connected to a a network connection, as if by the remote shell +daemon, usually rshd, or the secure shell daemon sshd. +If +bash + +determines it is being run in this fashion, it reads and executes +commands from ~/.bashrc, if that file exists and is readable. +It will not do this if invoked as sh. +The +--norc + +option may be used to inhibit this behavior, and the +--rcfile + +option may be used to force another file to be read, but +rshd does not generally invoke the shell with those options +or allow them to be specified. +

+ +If the shell is started with the effective user (group) id not equal to the +real user (group) id, and the -p option is not supplied, no startup +files are read, shell functions are not inherited from the environment, the +SHELLOPTS, + + +BASHOPTS, + + +CDPATH, + + +and +GLOBIGNORE + + +variables, if they appear in the environment, are ignored, +and the effective user id is set to the real user id. +If the -p option is supplied at invocation, the startup behavior is +the same, but the effective user id is not reset. +  +

DEFINITIONS

+ +

+ +The following definitions are used throughout the rest of this +document. + +

+
blank + +
+A space or tab. +
word + +
+A sequence of characters considered as a single unit by the shell. +Also known as a +token. + +
name + +
+A +word + +consisting only of alphanumeric characters and underscores, and +beginning with an alphabetic character or an underscore. Also +referred to as an +identifier. + +
metacharacter + +
+A character that, when unquoted, separates words. One of the following: +
+ +
+

+ +| & ; ( ) < > space tab + +

+ +
+

+ +

+
control operator + +
+A token that performs a control function. It is one of the following +symbols: +
+

+ +|| & && ; ;; ( ) | |& <newline> + +

+ + +
+  +

RESERVED WORDS

+ +Reserved words 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 +SHELL GRAMMAR + + +below) or the third word of a +case + +or +for + +command: +
+ +

+ + + + +! case do done elif else esac fi for function if in select then until while { } time [[ ]] +

+ + +  +

SHELL GRAMMAR

+ +  +

Simple Commands

+ +

+ +A simple command is a sequence of optional variable assignments +followed by blank-separated words and redirections, and +terminated by a control operator. The first word +specifies the command to be executed, and is passed as argument zero. +The remaining words are passed as arguments to the invoked command. +

+ +The return value of a simple command is its exit status, or +128+n if the command is terminated by signal +n. + +  +

Pipelines

+ +

+ +A pipeline is a sequence of one or more commands separated by +one of the control operators +| + +or |&. +The format for a pipeline is: +

+

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

+ +

+ +The standard output of +command + +is connected via a pipe to the standard input of +command2. + +This connection is performed before any redirections specified by the +command (see +REDIRECTION + + +below). +If |& is used, the standard error of command is connected to +command2's standard input through the pipe; it is shorthand for +2>&1 |. +This implicit redirection of the standard error is performed after any +redirections specified by the command. +

+ +The return status of a pipeline is the exit status of the last +command, unless the pipefail option is enabled. +If pipefail is enabled, the pipeline's return status is the +value of the last (rightmost) command to exit with a non-zero status, +or zero if all commands exit successfully. +If the reserved word +! + +precedes a pipeline, the exit status of that pipeline is the logical +negation of the exit status as described above. +The shell waits for all commands in the pipeline to +terminate before returning a value. +

+ +If the +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 -p option changes the output format to that specified by POSIX. +The +TIMEFORMAT + + +variable may be set to a format string that specifies how the timing +information should be displayed; see the description of +TIMEFORMAT + + +under +Shell Variables + +below. +

+ +Each command in a pipeline is executed as a separate process (i.e., in a +subshell). +  +

Lists

+ +

+ +A list is a sequence of one or more pipelines separated by one +of the operators +;, + +&, + +&&, + +or +||, + +and optionally terminated by one of +;, + +&, + +or +<newline>. + +

+ +Of these list operators, +&& + +and +|| + +have equal precedence, followed by +; + +and +&, + +which have equal precedence. +

+ +A sequence of one or more newlines may appear in a list instead +of a semicolon to delimit commands. +

+ +If a command is terminated by the control operator +&, + +the shell executes the command in the background +in a subshell. The shell does not wait for the command to +finish, and the return status is 0. Commands separated by a +; + +are executed sequentially; the shell waits for each +command to terminate in turn. The return status is the +exit status of the last command executed. +

+ +AND and OR lists are sequences of one of more pipelines separated by the +&& and || control operators, respectively. +AND and OR lists are executed with left associativity. +An AND list has the form +

+

+ +command1 && command2 +

+ +

+ +command2 + +is executed if, and only if, +command1 + +returns an exit status of zero. +

+ +An OR list has the form +

+

+ +command1 || command2 +

+ +

+ +

+ +command2 + +is executed if and only if +command1 + +returns a non-zero exit status. +The return status of +AND and OR lists is the exit status of the last command +executed in the list. +  +

Compound Commands

+ +

+ +A compound command is one of the following: +

+
(list)
+list is executed in a subshell environment (see +COMMAND EXECUTION ENVIRONMENT +below). +Variable assignments and builtin +commands that affect the shell's environment do not remain in effect +after the command completes. The return status is the exit status of +list. +
{ list; }
+list is simply executed in the current shell environment. +list must be terminated with a newline or semicolon. +This is known as a group command. +The return status is the exit status of +list. +Note that unlike the metacharacters ( and ), { and +} are reserved words 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 list by whitespace or another +shell metacharacter. +
((expression))
+The expression is evaluated according to the rules described +below under +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 +let "expression". +
[[ expression ]]
+Return a status of 0 or 1 depending on the evaluation of +the conditional expression expression. +Expressions are composed of the primaries described below under +CONDITIONAL EXPRESSIONS. + + +Word splitting and pathname expansion are not performed on the words +between the [[ and ]]; tilde expansion, parameter and +variable expansion, arithmetic expansion, command substitution, process +substitution, and quote removal are performed. +Conditional operators such as -f must be unquoted to be recognized +as primaries. +

+ + +When used with [[, The < and > operators sort +lexicographically using the current locale. +

+ + +When the == and != operators are used, the string to the +right of the operator is considered a pattern and matched according +to the rules described below under Pattern Matching. +If the shell option +nocasematch + +is enabled, the match is performed without regard to the case +of alphabetic characters. +The return value is 0 if the string matches (==) or does not match +(!=) the pattern, and 1 otherwise. +Any part of the pattern may be quoted to force it to be matched as a +string. +

+ + +An additional binary operator, =~, is available, with the same +precedence as == and !=. +When it is used, the string to the right of the operator is considered +an extended regular expression and matched accordingly (as in regex(3)). +The return value is 0 if the string matches +the pattern, and 1 otherwise. +If the regular expression is syntactically incorrect, the conditional +expression's return value is 2. +If the shell option +nocasematch + +is enabled, the match is performed without regard to the case +of alphabetic characters. +Any part of the pattern may be quoted to force it to be matched as a +string. +Substrings matched by parenthesized subexpressions within the regular +expression are saved in the array variable +BASH_REMATCH. + + +The element of +BASH_REMATCH + + +with index 0 is the portion of the string +matching the entire regular expression. +The element of +BASH_REMATCH + + +with index n is the portion of the +string matching the nth parenthesized subexpression. +

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

+ + +

+ +
+
( expression ) + +
+Returns the value of expression. +This may be used to override the normal precedence of operators. +
! expression + +
+True if +expression + +is false. +
expression1 && expression2
+True if both +expression1 + +and +expression2 + +are true. +
expression1 || expression2 +
+ +True if either +expression1 + +or +expression2 + +is true. + +
+

+ +The && and +|| + +operators do not evaluate expression2 if the value of +expression1 is sufficient to determine the return value of +the entire conditional expression. +

+ +
for name [ [ in [ word ... ] ] ; ] do list ; done
+The list of words following in is expanded, generating a list +of items. +The variable name is set to each element of this list +in turn, and list is executed each time. +If the in word is omitted, the for command executes +list once for each positional parameter that is set (see +PARAMETERS + + +below). +The return status is the exit status of the last command that executes. +If the expansion of the items following in results in an empty +list, no commands are executed, and the return status is 0. +
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
+First, the arithmetic expression expr1 is evaluated according +to the rules described below under +ARITHMETIC EVALUATION. + + +The arithmetic expression expr2 is then evaluated repeatedly +until it evaluates to zero. +Each time expr2 evaluates to a non-zero value, list is +executed and the arithmetic expression expr3 is evaluated. +If any expression is omitted, it behaves as if it evaluates to 1. +The return value is the exit status of the last command in list +that is executed, or false if any of the expressions is invalid. +
select name [ in word ] ; do list ; done
+The list of words following in is expanded, generating a list +of items. The set of expanded words is printed on the standard +error, each preceded by a number. If the in +word is omitted, the positional parameters are printed (see +PARAMETERS + + +below). The +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 +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 +name + +to be set to null. The line read is saved in the variable +REPLY. + + +The +list + +is executed after each selection until a +break + +command is executed. +The exit status of +select + +is the exit status of the last command executed in +list, + +or zero if no commands were executed. +
case word in [ [(] pattern [ | pattern ] +
+A case command first expands word, and tries to match +it against each pattern in turn, using the same matching rules +as for pathname expansion (see +Pathname Expansion + +below). +The word is expanded using tilde +expansion, parameter and variable expansion, arithmetic substitution, +command substitution, process substitution and quote removal. +Each pattern examined is expanded using tilde +expansion, parameter and variable expansion, arithmetic substitution, +command substitution, and process substitution. +If the shell option +nocasematch + +is enabled, the match is performed without regard to the case +of alphabetic characters. +When a match is found, the corresponding list is executed. +If the ;; operator is used, no subsequent matches are attempted after +the first pattern match. +Using ;& in place of ;; causes execution to continue with +the list associated with the next set of patterns. +Using ;;& in place of ;; causes the shell to test the next +pattern list in the statement, if any, and execute any associated list +on a successful match. +The exit status is zero if no +pattern matches. Otherwise, it is the exit status of the +last command executed in list. +
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
+The +if + +list + +is executed. If its exit status is zero, the +then list is executed. Otherwise, each elif +list is executed in turn, and if its exit status is zero, +the corresponding then list is executed and the +command completes. Otherwise, the else list is +executed, if present. The exit status is the exit status of the +last command executed, or zero if no condition tested true. +
while list; do list; done
+ +
until list; do list; done
+ +The while command continuously executes the do +list as long as the last command in list returns +an exit status of zero. The until command is identical +to the while command, except that the test is negated; +the +do + +list + +is executed as long as the last command in +list + +returns a non-zero exit status. +The exit status of the while and until commands +is the exit status +of the last do list command executed, or zero if +none was executed. +
+  +

Coprocesses

+ +

+ +A coprocess is a shell command preceded by the coproc reserved +word. +A coprocess is executed asynchronously in a subshell, as if the command +had been terminated with the & control operator, with a two-way pipe +established between the executing shell and the coprocess. +

+ +The format for a coprocess is: +

+

+ +coproc [NAME] command [redirections] +

+ +

+ +This creates a coprocess named NAME. +If NAME is not supplied, the default name is COPROC. +NAME must not be supplied if command is a simple +command (see above); otherwise, it is interpreted as the first word +of the simple command. +When the coproc is executed, the shell creates an array variable (see +Arrays + +below) named NAME in the context of the executing shell. +The standard output of +command + +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to NAME[0]. +The standard input of +command + +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to NAME[1]. +This pipe is established before any redirections specified by the +command (see +REDIRECTION + + +below). +The file descriptors can be utilized as arguments to shell commands +and redirections using standard word expansions. +The process id of the shell spawned to execute the coprocess is +available as the value of the variable NAME_PID. +The wait +builtin command may be used to wait for the coprocess to terminate. +

+ +The return status of a coprocess is the exit status of command. +  +

Shell Function Definitions

+ +

+ +A shell function is an object that is called like a simple command and +executes a compound command with a new set of positional parameters. +Shell functions are declared as follows: +

+
[ function ] name () compound-command [redirection]
+This defines a function named name. +The reserved word function is optional. +If the function reserved word is supplied, the parentheses are optional. +The body of the function is the compound command +compound-command + +(see Compound Commands above). +That command is usually a list of commands between { and }, but +may be any command listed under Compound Commands above. +compound-command is executed whenever name is specified as the +name of a simple command. +Any redirections (see +REDIRECTION + + +below) specified when a function is defined are performed +when the function is executed. +The exit status of a function definition is zero unless a syntax error +occurs or a readonly function with the same name already exists. +When executed, the exit status of a function is the exit status of the +last command executed in the body. (See +FUNCTIONS + + +below.) +
+  +

COMMENTS

+ +In a non-interactive shell, or an interactive shell in which the +interactive_comments + +option to the +shopt + +builtin is enabled (see +SHELL BUILTIN COMMANDS + + +below), a word beginning with +# + +causes that word and all remaining characters on that line to +be ignored. An interactive shell without the +interactive_comments + +option enabled does not allow comments. The +interactive_comments + +option is on by default in interactive shells. +  +

QUOTING

+ +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 metacharacters listed above under +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 +(see +HISTORY EXPANSION + + +below), the +history expansion character, usually !, must be quoted +to prevent history expansion. +

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

+ +A non-quoted backslash (\) is the +escape character. + +It preserves the literal value of the next character that follows, +with the exception of <newline>. If a \<newline> pair +appears, and the backslash is not itself quoted, the \<newline> +is treated as a line continuation (that is, it is removed from the +input stream and effectively ignored). +

+ +Enclosing characters in single quotes preserves the literal value +of each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a backslash. +

+ +Enclosing characters in double quotes preserves the literal value +of all characters within the quotes, with the exception of +$, + +`, + +\, + +and, when history expansion is enabled, +!. + +The characters +$ + +and +` + +retain their special meaning within double quotes. The backslash +retains its special meaning only when followed by one of the following +characters: +$, + +`, + +", +\, + +or +<newline>. + +A double quote may be quoted within double quotes by preceding it with +a backslash. +If enabled, history expansion will be performed unless an +! + +appearing in double quotes is escaped using a backslash. +The backslash preceding the +! + +is not removed. +

+ +The special parameters +* + +and +@ + +have special meaning when in double +quotes (see +PARAMETERS + + +below). +

+ +Words of the form $aqstringaq are treated specially. The +word expands to string, with backslash-escaped characters replaced +as specified by the ANSI C standard. Backslash escape sequences, if +present, are decoded as follows: +

+ +
+
\a + +
+alert (bell) +
\b + +
+backspace +
\e + +
+
\E + +
+an escape character +
\f + +
+form feed +
\n + +
+new line +
\r + +
+carriage return +
\t + +
+horizontal tab +
\v + +
+vertical tab +
\\ + +
+backslash +
\aq + +
+single quote +
\dq + +
+double quote +
\nnn + +
+the eight-bit character whose value is the octal value nnn +(one to three digits) +
\xHH + +
+the eight-bit character whose value is the hexadecimal value HH +(one or two hex digits) +
\cx + +
+a control-x character + +
+ +

+ +The expanded result is single-quoted, as if the dollar sign had +not been present. +

+ +A double-quoted string preceded by a dollar sign ($dqstringdq) +will cause the string to be translated according to the current locale. +If the current locale is C or POSIX, the dollar sign +is ignored. +If the string is translated and replaced, the replacement is +double-quoted. +  +

PARAMETERS

+ +A +parameter + +is an entity that stores values. +It can be a +name, + +a number, or one of the special characters listed below under +Special Parameters. + +A +variable + +is a parameter denoted by a +name. + +A variable has a value and zero or more attributes. +Attributes are assigned using the +declare + +builtin command (see +declare + +below in +SHELL BUILTIN COMMANDS). + + +

+ +A parameter is set if it has been assigned a value. The null string is +a valid value. Once a variable is set, it may be unset only by using +the +unset + +builtin command (see +SHELL BUILTIN COMMANDS + + +below). +

+ +A +variable + +may be assigned to by a statement of the form +

+

+ +name=[value] +

+ +

+ +If +value + +is not given, the variable is assigned the null string. All +values + +undergo tilde expansion, parameter and variable expansion, +command substitution, arithmetic expansion, and quote +removal (see +EXPANSION + + +below). If the variable has its +integer + +attribute set, then +value + +is evaluated as an arithmetic expression even if the $((...)) expansion is +not used (see +Arithmetic Expansion + +below). +Word splitting is not performed, with the exception +of "$@" as explained below under +Special Parameters. + +Pathname expansion is not performed. +Assignment statements may also appear as arguments to the +alias, + +declare, + +typeset, + +export, + +readonly, + +and +local + +builtin commands. +

+ +In the context where an assignment statement is assigning a value +to a shell variable or array index, the += operator can be used to +append to or add to the variable's previous value. +When += is applied to a variable for which the integer attribute has been +set, value is evaluated as an arithmetic expression and added to the +variable's current value, which is also evaluated. +When += is applied to an array variable using compound assignment (see +Arrays + +below), the +variable's value is not unset (as it is when using =), and new values are +appended to the array beginning at one greater than the array's maximum index +(for indexed arrays) or added as additional key-value pairs in an +associative array. +When applied to a string-valued variable, value is expanded and +appended to the variable's value. +  +

Positional Parameters

+ +

+ +A +positional parameter + +is a parameter denoted by one or more +digits, other than the single digit 0. Positional parameters are +assigned from the shell's arguments when it is invoked, +and may be reassigned using the +set + +builtin command. Positional parameters may not be assigned to +with assignment statements. The positional parameters are +temporarily replaced when a shell function is executed (see +FUNCTIONS + + +below). +

+ +When a positional parameter consisting of more than a single +digit is expanded, it must be enclosed in braces (see +EXPANSION + + +below). +  +

Special Parameters

+ +

+ +The shell treats several parameters specially. These parameters may +only be referenced; assignment to them is not allowed. + +

+
* + +
+Expands to the positional parameters, starting from one. When the +expansion occurs within double quotes, it expands to a single word +with the value of each parameter separated by the first character +of the +IFS + + +special variable. That is, "$*" is equivalent +to "$1c$2c...", where +c + +is the first character of the value of the +IFS + + +variable. If +IFS + + +is unset, the parameters are separated by spaces. +If +IFS + + +is null, the parameters are joined without intervening separators. +
@ + +
+Expands to the positional parameters, starting from one. When the +expansion occurs within double quotes, each parameter expands to a +separate word. That is, "$@" is equivalent to +"$1" "$2" ... +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. +When there are no positional parameters, "$@" and +$@ + +expand to nothing (i.e., they are removed). +
# + +
+Expands to the number of positional parameters in decimal. +
? + +
+Expands to the exit status of the most recently executed foreground +pipeline. +
- + +
+Expands to the current option flags as specified upon invocation, +by the +set + +builtin command, or those set by the shell itself +(such as the +-i + +option). +
$ + +
+Expands to the process ID of the shell. In a () subshell, it +expands to the process ID of the current shell, not the +subshell. +
! + +
+Expands to the process ID of the most recently executed background +(asynchronous) command. +
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, +$0 + +is set to the name of that file. If +bash + +is started with the +-c + +option, then +$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 +bash, + +as given by argument zero. +
_ + +
+At shell startup, set to the absolute pathname used to invoke the +shell or shell script being executed as passed in the environment +or argument list. +Subsequently, expands to the last argument to the previous command, +after expansion. +Also set to the full pathname used to invoke each command executed +and placed in the environment exported to that command. +When checking mail, this parameter holds the name of the mail file +currently being checked. + +
+  +

Shell Variables

+ +

+ +The following variables are set by the shell: +

+ + +

+
BASH + +
+Expands to the full file name used to invoke this instance of +bash. + +
BASHOPTS + +
+A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the +-s + +option to the +shopt + +builtin command (see +SHELL BUILTIN COMMANDS + + +below). The options appearing in +BASHOPTS + + +are those reported as +on + +by shopt. +If this variable is in the environment when +bash + +starts up, each shell option in the list will be enabled before +reading any startup files. +This variable is read-only. +
BASHPID + +
+Expands to the process id of the current bash process. +This differs from $$ under certain circumstances, such as subshells +that do not require bash to be re-initialized. +
BASH_ALIASES + +
+An associative array variable whose members correspond to the internal +list of aliases as maintained by the alias builtin +Elements added to this array appear in the alias list; unsetting array +elements cause aliases to be removed from the alias list. +
BASH_ARGC + +
+An array variable whose values are the number of parameters in each +frame of the current bash execution call stack. +The number of +parameters to the current subroutine (shell function or script executed +with . or source) is at the top of the stack. +When a subroutine is executed, the number of parameters passed is pushed onto +BASH_ARGC. + + +The shell sets +BASH_ARGC + + +only when in extended debugging mode (see the description of the +extdebug + +option to the +shopt + +builtin below) +
BASH_ARGV + +
+An array variable containing all of the parameters in the current bash +execution call stack. The final parameter of the last subroutine call +is at the top of the stack; the first parameter of the initial call is +at the bottom. When a subroutine is executed, the parameters supplied +are pushed onto +BASH_ARGV. + + +The shell sets +BASH_ARGV + + +only when in extended debugging mode +(see the description of the +extdebug + +option to the +shopt + +builtin below) +
BASH_CMDS + +
+An associative array variable whose members correspond to the internal +hash table of commands as maintained by the hash builtin. +Elements added to this array appear in the hash table; unsetting array +elements cause commands to be removed from the hash table. +
BASH_COMMAND + +
+The command currently being executed or about to be executed, unless the +shell is executing a command as the result of a trap, +in which case it is the command executing at the time of the trap. +
BASH_EXECUTION_STRING + +
+The command argument to the -c invocation option. +
BASH_LINENO + +
+An array variable whose members are the line numbers in source files +corresponding to each member of +FUNCNAME. + + +${BASH_LINENO[$i]} is the line number in the source +file where ${FUNCNAME[$i]} was called +(or ${BASH_LINENO[$i-1]} if referenced within another +shell function). +The corresponding source file name is ${BASH_SOURCE[$i]}. +Use +LINENO + + +to obtain the current line number. +
BASH_REMATCH + +
+An array variable whose members are assigned by the =~ binary +operator to the [[ conditional command. +The element with index 0 is the portion of the string +matching the entire regular expression. +The element with index n is the portion of the +string matching the nth parenthesized subexpression. +This variable is read-only. +
BASH_SOURCE + +
+An array variable whose members are the source filenames corresponding +to the elements in the +FUNCNAME + + +array variable. +
BASH_SUBSHELL + +
+Incremented by one each time a subshell or subshell environment is spawned. +The initial value is 0. +
BASH_VERSINFO + +
+A readonly array variable whose members hold version information for +this instance of +bash. + +The values assigned to the array members are as follows: +

+

+ +
+
BASH_VERSINFO[0] + +
+The major version number (the release). +
BASH_VERSINFO[1] + +
+The minor version number (the version). +
BASH_VERSINFO[2] + +
+The patch level. +
BASH_VERSINFO[3] + +
+The build version. +
BASH_VERSINFO[4] + +
+The release status (e.g., beta1). +
BASH_VERSINFO[5] + +
+The value of +MACHTYPE. + + + +
+ +
BASH_VERSION + +
+Expands to a string describing the version of this instance of +bash. + +
COMP_CWORD + +
+An index into ${COMP_WORDS} of the word containing the current +cursor position. +This variable is available only in shell functions invoked by the +programmable completion facilities (see Programmable Completion +below). +
COMP_KEY + +
+The key (or final key of a key sequence) used to invoke the current +completion function. +
COMP_LINE + +
+The current command line. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see Programmable Completion +below). +
COMP_POINT + +
+The index of the current cursor position relative to the beginning of +the current command. +If the current cursor position is at the end of the current command, +the value of this variable is equal to ${#COMP_LINE}. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see Programmable Completion +below). +
COMP_TYPE + +
+Set to an integer value corresponding to the type of completion attempted +that caused a completion function to be called: +TAB, for normal completion, +?, for listing completions after successive tabs, +!, for listing alternatives on partial word completion, +@, to list completions if the word is not unmodified, +or +%, for menu completion. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see Programmable Completion +below). +
COMP_WORDBREAKS + +
+The set of characters that the readline library treats as word +separators when performing word completion. +If +COMP_WORDBREAKS + + +is unset, it loses its special properties, even if it is +subsequently reset. +
COMP_WORDS + +
+An array variable (see Arrays below) consisting of the individual +words in the current command line. +The line is split into words as readline would split it, using +COMP_WORDBREAKS + + +as described above. +This variable is available only in shell functions invoked by the +programmable completion facilities (see Programmable Completion +below). +
DIRSTACK + +
+An array variable (see +Arrays + +below) containing the current contents of the directory stack. +Directories appear in the stack in the order they are displayed by the +dirs + +builtin. +Assigning to members of this array variable may be used to modify +directories already in the stack, but the +pushd + +and +popd + +builtins must be used to add and remove directories. +Assignment to this variable will not change the current directory. +If +DIRSTACK + + +is unset, it loses its special properties, even if it is +subsequently reset. +
EUID + +
+Expands to the effective user ID of the current user, initialized at +shell startup. This variable is readonly. +
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 +FUNCNAME + + +have no effect and return an error status. +If +FUNCNAME + + +is unset, it loses its special properties, even if it is +subsequently reset. +
GROUPS + +
+An array variable containing the list of groups of which the current +user is a member. +Assignments to +GROUPS + + +have no effect and return an error status. +If +GROUPS + + +is unset, it loses its special properties, even if it is +subsequently reset. +
HISTCMD + +
+The history number, or index in the history list, of the current +command. +If +HISTCMD + + +is unset, it loses its special properties, even if it is +subsequently reset. +
HOSTNAME + +
+Automatically set to the name of the current host. +
HOSTTYPE + +
+Automatically set to a string that uniquely +describes the type of machine on which +bash + +is executing. +The default is system-dependent. +
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 +LINENO + + +is unset, it loses its special properties, even if it is +subsequently reset. +
MACHTYPE + +
+Automatically set to a string that fully describes the system +type on which +bash + +is executing, in the standard GNU cpu-company-system format. +The default is system-dependent. +
OLDPWD + +
+The previous working directory as set by the +cd + +command. +
OPTARG + +
+The value of the last option argument processed by the +getopts + +builtin command (see +SHELL BUILTIN COMMANDS + + +below). +
OPTIND + +
+The index of the next argument to be processed by the +getopts + +builtin command (see +SHELL BUILTIN COMMANDS + + +below). +
OSTYPE + +
+Automatically set to a string that +describes the operating system on which +bash + +is executing. +The default is system-dependent. +
PIPESTATUS + +
+An array variable (see +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). +
PPID + +
+The process ID of the shell's parent. This variable is readonly. +
PWD + +
+The current working directory as set by the +cd + +command. +
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 +RANDOM. + + +If +RANDOM + + +is unset, it loses its special properties, even if it is +subsequently reset. +
REPLY + +
+Set to the line of input read by the +read + +builtin command when no arguments are supplied. +
SECONDS + +
+Each time this parameter is +referenced, the number of seconds since shell invocation is returned. If a +value is assigned to +SECONDS, + + +the value returned upon subsequent +references is +the number of seconds since the assignment plus the value assigned. +If +SECONDS + + +is unset, it loses its special properties, even if it is +subsequently reset. +
SHELLOPTS + +
+A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the +-o + +option to the +set + +builtin command (see +SHELL BUILTIN COMMANDS + + +below). The options appearing in +SHELLOPTS + + +are those reported as +on + +by set -o. +If this variable is in the environment when +bash + +starts up, each shell option in the list will be enabled before +reading any startup files. +This variable is read-only. +
SHLVL + +
+Incremented by one each time an instance of +bash + +is started. +
UID + +
+Expands to the user ID of the current user, initialized at shell startup. +This variable is readonly. + +
+

+ +The following variables are used by the shell. In some cases, +bash + +assigns a default value to a variable; these cases are noted +below. +

+ + +

+
BASH_ENV + +
+If this parameter is set when bash is executing a shell script, +its value is interpreted as a filename containing commands to +initialize the shell, as in +~/.bashrc. + +The value of +BASH_ENV + + +is subjected to parameter expansion, command substitution, and arithmetic +expansion before being interpreted as a file name. +PATH + + +is not used to search for the resultant file name. +
CDPATH + +
+The search path for the +cd + +command. +This is a colon-separated list of directories in which the shell looks +for destination directories specified by the +cd + +command. +A sample value is +".:~:/usr". + +
BASH_XTRACEFD + +
+If set to an integer corresponding to a valid file descriptor, bash +will write the trace output generated when +set -x + +is enabled to that file descriptor. +The file descriptor is closed when +BASH_XTRACEFD + + +is unset or assigned a new value. +Unsetting +BASH_XTRACEFD + + +or assigning it the empty string causes the +trace output to be sent to the standard error. +Note that setting +BASH_XTRACEFD + + +to 2 (the standard error file +descriptor) and then unsetting it will result in the standard error +being closed. +
COLUMNS + +
+Used by the select builtin command to determine the terminal width +when printing selection lists. Automatically set upon receipt of a SIGWINCH. +
COMPREPLY + +
+An array variable from which bash reads the possible completions +generated by a shell function invoked by the programmable completion +facility (see Programmable Completion below). +
EMACS + +
+If bash finds this variable in the environment when the shell starts +with value +t, + +it assumes that the shell is running in an emacs shell buffer and disables +line editing. +
FCEDIT + +
+The default editor for the +fc + +builtin command. +
FIGNORE + +
+A colon-separated list of suffixes to ignore when performing +filename completion (see +READLINE + + +below). +A filename whose suffix matches one of the entries in +FIGNORE + + +is excluded from the list of matched filenames. +A sample value is +".o:~". + +
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 +GLOBIGNORE, + + +it is removed from the list of matches. +
HISTCONTROL + +
+A colon-separated list of values controlling how commands are saved on +the history list. +If the list of values includes +ignorespace, + +lines which begin with a +space + +character are not saved in the history list. +A value of +ignoredups + +causes lines matching the previous history entry to not be saved. +A value of +ignoreboth + +is shorthand for ignorespace and ignoredups. +A value of +erasedups + +causes all previous lines matching the current line to be removed from +the history list before that line is saved. +Any value not in the above list is ignored. +If +HISTCONTROL + + +is unset, or does not include a valid value, +all lines read by the shell parser are saved on the history list, +subject to the value of +HISTIGNORE. + + +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +HISTCONTROL. + + +
HISTFILE + +
+The name of the file in which command history is saved (see +HISTORY + + +below). The default value is ~/.bash_history. If unset, the +command history is not saved when an interactive shell exits. +
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, by removing the oldest entries, +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. +
HISTIGNORE + +
+A colon-separated list of patterns used to decide which command lines +should be saved on the history list. Each pattern is anchored at the +beginning of the line and must match the complete line (no implicit +`*' is appended). Each pattern is tested against the line +after the checks specified by +HISTCONTROL + + +are applied. +In addition to the normal shell pattern matching characters, `&' +matches the previous history line. `&' may be escaped using a +backslash; the backslash is removed before attempting a match. +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +HISTIGNORE. + + +
HISTSIZE + +
+The number of commands to remember in the command history (see +HISTORY + + +below). The default value is 500. +
HISTTIMEFORMAT + +
+If this variable is set and not null, its value is used as a format string +for strftime(3) to print the time stamp associated with each history +entry displayed by the history builtin. +If this variable is set, time stamps are written to the history file so +they may be preserved across shell sessions. +This uses the history comment character to distinguish timestamps from +other history lines. +
HOME + +
+The home directory of the current user; the default argument for the +cd builtin command. +The value of this variable is also used when performing tilde expansion. +
HOSTFILE + +
+Contains the name of a file in the same format as + +/etc/hosts + +that should be read when the shell needs to complete a +hostname. +The list of possible hostname completions may be changed while the +shell is running; +the next time hostname completion is attempted after the +value is changed, +bash + +adds the contents of the new file to the existing list. +If +HOSTFILE + + +is set, but has no value, or does not name a readable file, +bash attempts to read + +/etc/hosts + +to obtain the list of possible hostname completions. +When +HOSTFILE + + +is unset, the hostname list is cleared. +
IFS + +
+The +Internal Field Separator + +that is used +for word splitting after expansion and to +split lines into words with the +read + +builtin command. The default value is +``<space><tab><newline>''. +
IGNOREEOF + +
+Controls the +action of an interactive shell on receipt of an +EOF + + +character as the sole input. If set, the value is the number of +consecutive +EOF + + +characters which must be +typed as the first characters on an input line before +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, +EOF + + +signifies the end of input to the shell. +
INPUTRC + +
+The filename for the +readline + +startup file, overriding the default of + +~/.inputrc + +(see +READLINE + + +below). +
LANG + +
+Used to determine the locale category for any category not specifically +selected with a variable starting with LC_. +
LC_ALL + +
+This variable overrides the value of +LANG + + +and any other +LC_ variable specifying a locale category. +
LC_COLLATE + +
+This variable determines the collation order used when sorting the +results of pathname expansion, and determines the behavior of range +expressions, equivalence classes, and collating sequences within +pathname expansion and pattern matching. +
LC_CTYPE + +
+This variable determines the interpretation of characters and the +behavior of character classes within pathname expansion and pattern +matching. +
LC_MESSAGES + +
+This variable determines the locale used to translate double-quoted +strings preceded by a $. +
LC_NUMERIC + +
+This variable determines the locale category used for number formatting. +
LINES + +
+Used by the select builtin command to determine the column length +for printing selection lists. Automatically set upon receipt of a +SIGWINCH. + + +
MAIL + +
+If this parameter is set to a file name and the +MAILPATH + + +variable is not set, +bash + +informs the user of the arrival of mail in the specified file. +
MAILCHECK + +
+Specifies how +often (in seconds) +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. +
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, $_ expands to the name of +the current mailfile. +Example: +
+

+ +MAILPATH=aq/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"aq +

+ +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/$USER). +

+ +
OPTERR + +
+If set to the value 1, +bash + +displays error messages generated by the +getopts + +builtin command (see +SHELL BUILTIN COMMANDS + + +below). +OPTERR + + +is initialized to 1 each time the shell is invoked or a shell +script is executed. +
PATH + +
+The search path for commands. It +is a colon-separated list of directories in which +the shell looks for commands (see +COMMAND EXECUTION + + +below). +A zero-length (null) directory name in the value of +PATH + + +indicates the current directory. +A null directory name may appear as two adjacent colons, or as an initial +or trailing colon. +The default path is system-dependent, +and is set by the administrator who installs +bash. + +A common value is +/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin. + +
POSIXLY_CORRECT + +
+If this variable is in the environment when bash starts, the shell +enters posix mode before reading the startup files, as if the +--posix + +invocation option had been supplied. If it is set while the shell is +running, bash enables posix mode, as if the command +set -o posix + +had been executed. +
PROMPT_COMMAND + +
+If set, the value is executed as a command prior to issuing each primary +prompt. +
PROMPT_DIRTRIM + +
+If set to a number greater than zero, the value is used as the number of +trailing directory components to retain when expanding the \w and +\W prompt string escapes (see +PROMPTING + + +below). Characters removed are replaced with an ellipsis. +
PS1 + +
+The value of this parameter is expanded (see +PROMPTING + + +below) and used as the primary prompt string. The default value is +``\s-\v\$ ''. +
PS2 + +
+The value of this parameter is expanded as with +PS1 + + +and used as the secondary prompt string. The default is +``> ''. +
PS3 + +
+The value of this parameter is used as the prompt for the +select + +command (see +SHELL GRAMMAR + + +above). +
PS4 + +
+The value of this parameter is expanded as with +PS1 + + +and the value is printed before each command +bash + +displays during an execution trace. The first character of +PS4 + + +is replicated multiple times, as necessary, to indicate multiple +levels of indirection. The default is ``+ ''. +
SHELL + +
+The full pathname to the shell is kept in this environment variable. +If it is not set when the shell starts, +bash + +assigns to it the full pathname of the current user's login shell. +
TIMEFORMAT + +
+The value of this parameter is used as a format string specifying +how the timing information for pipelines prefixed with the +time + +reserved word should be displayed. +The % character introduces an escape sequence that is +expanded to a time value or other information. +The escape sequences and their meanings are as follows; the +braces denote optional portions. +

+

+ +
+
%% + +
+A literal %. +
%[p][l]R + +
+The elapsed time in seconds. +
%[p][l]U + +
+The number of CPU seconds spent in user mode. +
%[p][l]S + +
+The number of CPU seconds spent in system mode. +
%P + +
+The CPU percentage, computed as (%U + %S) / %R. + +
+ +
+The optional p is a digit specifying the precision, +the number of fractional digits after a decimal point. +A value of 0 causes no decimal point or fraction to be output. +At most three places after the decimal point may be specified; +values of p greater than 3 are changed to 3. +If p is not specified, the value 3 is used. +
+The optional l specifies a longer format, including +minutes, of the form MMmSS.FFs. +The value of p determines whether or not the fraction is +included. +
+If this variable is not set, bash acts as if it had the +value $aq\nreal\t%3lR\nuser\t%3lU\nsys %3lSaq. +If the value is null, no timing information is displayed. +A trailing newline is added when the format string is displayed. +
TMOUT + +
+If set to a value greater than zero, +TMOUT + + +is treated as the +default timeout for the read builtin. +The select command terminates if input does not arrive +after +TMOUT + + +seconds when input is coming from a terminal. +In an interactive shell, the value is interpreted as the +number of seconds to wait for input after issuing the primary prompt. +Bash + +terminates after waiting for that number of seconds if input does +not arrive. +
TMPDIR + +
+If set, Bash uses its value as the name of a directory in which +Bash creates temporary files for the shell's use. +
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 +name + +of a stopped job, in this context, is the command line used to +start it. +If set to the value +exact, + +the string supplied must match the name of a stopped job exactly; +if set to +substring, + +the string supplied needs to match a substring of the name of a +stopped job. The +substring + +value provides functionality analogous to the +%? + +job identifier (see +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 %string job identifier. +
histchars + +
+The two or three characters which control history expansion +and tokenization (see +HISTORY EXPANSION + + +below). The first character is the history expansion character, +the character which signals the start of a history +expansion, normally `!'. +The second character is the quick substitution +character, which is used as shorthand for re-running the previous +command entered, substituting one string for another in the command. +The default is `^'. +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 `#'. 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. + +
+  +

Arrays

+ +Bash + +provides one-dimensional indexed and associative array variables. +Any variable may be used as an indexed array; the +declare + +builtin will explicitly declare an array. +There is no maximum +limit on the size of an array, nor any requirement that members +be indexed or assigned contiguously. +Indexed arrays are referenced using integers (including arithmetic +expressions) and are zero-based; associative arrays are referenced +using arbitrary strings. +

+ +An indexed array is created automatically if any variable is assigned to +using the syntax name[subscript]=value. The +subscript + +is treated as an arithmetic expression that must evaluate to a number +greater than or equal to zero. To explicitly declare an indexed array, +use +declare -a name + +(see +SHELL BUILTIN COMMANDS + + +below). +declare -a name[subscript] + +is also accepted; the subscript is ignored. +

+ +Associative arrays are created using +declare -A name. + +

+ +Attributes may be +specified for an array variable using the +declare + +and +readonly + +builtins. Each attribute applies to all members of an array. +

+ +Arrays are assigned to using compound assignments of the form +name=(value1 ... valuen), where each +value is of the form [subscript]=string. +Indexed array assignments do not require the bracket and subscript. +When assigning to indexed arrays, if the optional brackets and subscript +are supplied, that index is assigned to; +otherwise the index of the element assigned is the last index assigned +to by the statement plus one. Indexing starts at zero. +

+ +When assigning to an associative array, the subscript is required. +

+ +This syntax is also accepted by the +declare + +builtin. Individual array elements may be assigned to using the +name[subscript]=value syntax introduced above. +

+ +Any element of an array may be referenced using +${name[subscript]}. The braces are required to avoid +conflicts with pathname expansion. If +subscript is @ or *, the word expands to +all members of name. These subscripts differ only when the +word appears within double quotes. If the word is double-quoted, +${name[*]} expands to a single +word with the value of each array member separated by the first +character of the +IFS + + +special variable, and ${name[@]} expands each element of +name to a separate word. When there are no array members, +${name[@]} expands to nothing. +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. +This is analogous to the expansion +of the special parameters * and @ (see +Special Parameters + +above). ${#name[subscript]} expands to the length of +${name[subscript]}. If subscript is * or +@, the expansion is the number of elements in the array. +Referencing an array variable without a subscript is equivalent to +referencing the array with a subscript of 0. +

+ +An array variable is considered set if a subscript has been assigned a +value. The null string is a valid value. +

+ +The +unset + +builtin is used to destroy arrays. unset name[subscript] +destroys the array element at index subscript. +Care must be taken to avoid unwanted side effects caused by pathname +expansion. +unset name, where name is an array, or +unset name[subscript], where +subscript is * or @, removes the entire array. +

+ +The +declare, + +local, + +and +readonly + +builtins each accept a +-a + +option to specify an indexed array and a +-A + +option to specify an associative array. +The +read + +builtin accepts a +-a + +option to assign a list of words read from the standard input +to an array. The +set + +and +declare + +builtins display array values in a way that allows them to be +reused as assignments. +  +

EXPANSION

+ +Expansion is performed on the command line after it has been split into +words. There are seven kinds of expansion performed: +brace expansion, + +tilde expansion, + +parameter and variable expansion, + +command substitution, + +arithmetic expansion, + +word splitting, + +and +pathname expansion. + +

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

+ +On systems that can support it, there is an additional expansion +available: process substitution. +

+ +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 +"$@" and "${name[@]}" +as explained above (see +PARAMETERS). + + +  +

Brace Expansion

+ +

+ +Brace expansion + +is a mechanism by which arbitrary strings +may be generated. This mechanism is similar to +pathname expansion, but the filenames generated +need not exist. Patterns to be brace expanded take +the form of an optional +preamble, + +followed by either a series of comma-separated strings or +a sequence expression between a pair of braces, followed by +an optional +postscript. + +The preamble is prefixed to each string contained +within the braces, and the postscript is then appended +to each resulting string, expanding left to right. +

+ +Brace expansions may be nested. The results of each expanded +string are not sorted; left to right order is preserved. +For example, a{d,c,b}e expands into `ade ace abe'. +

+ +A sequence expression takes the form +{x..y[..incr]}, +where x and y are either integers or single characters, +and incr, an optional increment, is an integer. +When integers are supplied, the expression expands to each number between +x and y, inclusive. +Supplied integers may be prefixed with 0 to force each term to have the +same width. When either x or y begins with a zero, the shell +attempts to force all generated terms to contain the same number of digits, +zero-padding where necessary. +When characters are supplied, the expression expands to each character +lexicographically between x and y, inclusive. Note that +both x and y must be of the same type. +When the increment is supplied, it is used as the difference between +each term. The default increment is 1 or -1 as appropriate. +

+ +Brace expansion is performed before any other expansions, +and any characters special to other expansions are preserved +in the result. It is strictly textual. +Bash + +does not apply any syntactic interpretation to the context of the +expansion or the text between the braces. +

+ +A correctly-formed brace expansion must contain unquoted opening +and closing braces, and at least one unquoted comma or a valid +sequence expression. +Any incorrectly formed brace expansion is left unchanged. +A { or , may be quoted with a backslash to prevent its +being considered part of a brace expression. +To avoid conflicts with parameter expansion, the string ${ +is not considered eligible for brace expansion. +

+ +This construct is typically used as shorthand when the common +prefix of the strings to be generated is longer than in the +above example: +

+

+ +mkdir /usr/local/src/bash/{old,new,dist,bugs} +

+ +or +
+chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} +
+ +

+ +Brace expansion introduces a slight incompatibility with +historical versions of +sh. + +sh + +does not treat opening or closing braces specially when they +appear as part of a word, and preserves them in the output. +Bash + +removes braces from words as a consequence of brace +expansion. For example, a word entered to +sh + +as file{1,2} +appears identically in the output. The same word is +output as +file1 file2 + +after expansion by +bash. + +If strict compatibility with +sh + +is desired, start +bash + +with the ++B + +option or disable brace expansion with the ++B + +option to the +set + +command (see +SHELL BUILTIN COMMANDS + + +below). +  +

Tilde Expansion

+ +

+ +If a word begins with an unquoted tilde character (`~'), all of +the characters preceding the first unquoted slash (or all characters, +if there is no unquoted slash) are considered a tilde-prefix. +If none of the characters in the tilde-prefix are quoted, the +characters in the tilde-prefix following the tilde are treated as a +possible login name. +If this login name is the null string, the tilde is replaced with the +value of the shell parameter +HOME. + + +If +HOME + + +is unset, the home directory of the user executing the shell is +substituted instead. +Otherwise, the tilde-prefix is replaced with the home directory +associated with the specified login name. +

+ +If the tilde-prefix is a `~+', the value of the shell variable +PWD + + +replaces the tilde-prefix. +If the tilde-prefix is a `~-', the value of the shell variable +OLDPWD, + + +if it is set, is substituted. +If the characters following the tilde in the tilde-prefix consist +of a number N, optionally prefixed +by a `+' or a `-', the tilde-prefix is replaced with the corresponding +element from the directory stack, as it would be displayed by the +dirs + +builtin invoked with the 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. +

+ +If the login name is invalid, or the tilde expansion fails, the word +is unchanged. +

+ +Each variable assignment is checked for unquoted tilde-prefixes immediately +following a +: + +or the first +=. + +In these cases, tilde expansion is also performed. +Consequently, one may use file names with tildes in assignments to +PATH, + + +MAILPATH, + + +and +CDPATH, + + +and the shell assigns the expanded value. +  +

Parameter Expansion

+ +

+ +The `$' character introduces parameter expansion, +command substitution, or arithmetic expansion. The parameter name +or symbol to be expanded may be enclosed in braces, which +are optional but serve to protect the variable to be expanded from +characters immediately following it which could be +interpreted as part of the name. +

+ +When braces are used, the matching ending brace is the first `}' +not escaped by a backslash or within a quoted string, and not within an +embedded arithmetic expansion, command substitution, or parameter +expansion. +

+ + +

+
${parameter}
+The value of parameter is substituted. The braces are required +when +parameter + +is a positional parameter with more than one digit, +or when +parameter + +is followed by a character which is not to be +interpreted as part of its name. + +
+

+ +If the first character of parameter is an exclamation point (!), +a level of variable indirection is introduced. +Bash uses the value of the variable formed from the rest of +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 parameter itself. +This is known as indirect expansion. +The exceptions to this are the expansions of ${!prefix*} and +${!name[@]} described below. +The exclamation point must immediately follow the left brace in order to +introduce indirection. +

+ +In each of the cases below, word is subject to tilde expansion, +parameter expansion, command substitution, and arithmetic expansion. +

+ +When not performing substring expansion, using the forms documented below, +bash tests for a parameter that is unset or null. Omitting the colon +results in a test only for a parameter that is unset. +

+ + +

+
${parameter:-word}
+Use Default Values. If +parameter + +is unset or null, the expansion of +word + +is substituted. Otherwise, the value of +parameter + +is substituted. +
${parameter:=word}
+Assign Default Values. +If +parameter + +is unset or null, the expansion of +word + +is assigned to +parameter. + +The value of +parameter + +is then substituted. Positional parameters and special parameters may +not be assigned to in this way. +
${parameter:?word}
+Display Error if Null or Unset. +If +parameter + +is null or unset, the expansion of word (or a message to that effect +if +word + +is not present) is written to the standard error and the shell, if it +is not interactive, exits. Otherwise, the value of parameter is +substituted. +
${parameter:+word}
+Use Alternate Value. +If +parameter + +is null or unset, nothing is substituted, otherwise the expansion of +word + +is substituted. +
${parameter:offset}
+ +
${parameter:offset:length}
+ +Substring Expansion. +Expands to up to length characters of parameter +starting at the character specified by offset. +If length is omitted, expands to the substring of +parameter starting at the character specified by offset. +length and offset are arithmetic expressions (see +ARITHMETIC EVALUATION + + +below). +length must evaluate to a number greater than or equal to zero. +If offset evaluates to a number less than zero, the value +is used as an offset from the end of the value of parameter. +If parameter is @, the result is length positional +parameters beginning at offset. +If parameter is an indexed array name subscripted by @ or *, +the result is the length +members of the array beginning with ${parameter[offset]}. +A negative offset is taken relative to one greater than the maximum +index of the specified array. +Substring expansion applied to an associative array produces undefined +results. +Note that a negative offset must be separated from the colon by at least +one space to avoid being confused with the :- expansion. +Substring indexing is zero-based unless the positional parameters +are used, in which case the indexing starts at 1 by default. +If offset is 0, and the positional parameters are used, $0 is +prefixed to the list. +
${!prefix*}
+ +
${!prefix@}
+ +Names matching prefix. +Expands to the names of variables whose names begin with prefix, +separated by the first character of the +IFS + + +special variable. +When @ is used and the expansion appears within double quotes, each +variable name expands to a separate word. +
${!name[@]}
+ +
${!name[*]}
+ +List of array keys. +If name is an array variable, expands to the list of array indices +(keys) assigned in name. +If name is not an array, expands to 0 if name is set and null +otherwise. +When @ is used and the expansion appears within double quotes, each +key expands to a separate word. +
${#parameter}
+Parameter length. +The length in characters of the value of parameter is substituted. +If +parameter + +is +* + +or +@, + +the value substituted is the number of positional parameters. +If +parameter + +is an array name subscripted by +* + +or +@, + +the value substituted is the number of elements in the array. +
${parameter#word}
+ +
${parameter##word}
+ +Remove matching prefix pattern. +The +word + +is expanded to produce a pattern just as in pathname +expansion. If the pattern matches the beginning of +the value of +parameter, + +then the result of the expansion is the expanded value of +parameter + +with the shortest matching pattern (the ``#'' case) or the +longest matching pattern (the ``##'' case) deleted. +If +parameter + +is +@ + +or +*, + +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +parameter + +is an array variable subscripted with +@ + +or +*, + +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. +
${parameter%word}
+ +
${parameter%%word}
+ +Remove matching suffix pattern. +The word is expanded to produce a pattern just as in +pathname expansion. +If the pattern matches a trailing portion of the expanded value of +parameter, + +then the result of the expansion is the expanded value of +parameter + +with the shortest matching pattern (the ``%'' case) or the +longest matching pattern (the ``%%'' case) deleted. +If +parameter + +is +@ + +or +*, + +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +parameter + +is an array variable subscripted with +@ + +or +*, + +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. +
${parameter/pattern/string}
+Pattern substitution. +The pattern is expanded to produce a pattern just as in +pathname expansion. +Parameter is expanded and the longest match of pattern +against its value is replaced with string. +If pattern begins with /, all matches of pattern are +replaced with string. Normally only the first match is replaced. +If pattern begins with #, it must match at the beginning +of the expanded value of parameter. +If pattern begins with %, it must match at the end +of the expanded value of parameter. +If string is null, matches of pattern are deleted +and the / following pattern may be omitted. +If +parameter + +is +@ + +or +*, + +the substitution operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +parameter + +is an array variable subscripted with +@ + +or +*, + +the substitution operation is applied to each member of the +array in turn, and the expansion is the resultant list. +
${parameter^pattern}
+ +
${parameter^^pattern}
+
${parameter,pattern}
+
${parameter,,pattern}
+ +Case modification. +This expansion modifies the case of alphabetic characters in parameter. +The pattern is expanded to produce a pattern just as in +pathname expansion. +The ^ operator converts lowercase letters matching pattern +to uppercase; the , operator converts matching uppercase letters +to lowercase. +The ^^ and ,, expansions convert each matched character in the +expanded value; the ^ and , expansions match and convert only +the first character in the expanded value.. +If pattern is omitted, it is treated like a ?, which matches +every character. +If +parameter + +is +@ + +or +*, + +the case modification operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +parameter + +is an array variable subscripted with +@ + +or +*, + +the case modification operation is applied to each member of the +array in turn, and the expansion is the resultant list. +
+  +

Command Substitution

+ +

+ +Command substitution allows the output of a command to replace +the command name. There are two forms: +

+ +

+

+ +$(command) +

+ +or +
+`command` +
+ +

+ +Bash + +performs the expansion by executing 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 $(cat file) can be replaced by +the equivalent but faster $(< file). +

+ +When the old-style backquote form of substitution is used, +backslash retains its literal meaning except when followed by +$, + +`, + +or +\. + +The first backquote not preceded by a backslash terminates the +command substitution. +When using the $(command) form, all characters between the +parentheses make up the command; none are treated specially. +

+ +Command substitutions may be nested. To nest when using the backquoted form, +escape the inner backquotes with backslashes. +

+ +If the substitution appears within double quotes, word splitting and +pathname expansion are not performed on the results. +  +

Arithmetic Expansion

+ +

+ +Arithmetic expansion allows the evaluation of an arithmetic expression +and the substitution of the result. The format for arithmetic expansion is: +

+

+ +$((expression)) +

+ +

+ +The +expression + +is treated as if it were within double quotes, but a double quote +inside the parentheses is not treated specially. +All tokens in the expression undergo parameter expansion, string +expansion, command substitution, and quote removal. +Arithmetic expansions may be nested. +

+ +The evaluation is performed according to the rules listed below under +ARITHMETIC EVALUATION. + + +If +expression + +is invalid, +bash + +prints a message indicating failure and no substitution occurs. +  +

Process Substitution

+ +

+ +Process substitution is supported on systems that support named +pipes (FIFOs) or the /dev/fd method of naming open files. +It takes the form of +<(list) +or +>(list). +The process list is run with its input or output connected to a +FIFO or some file in /dev/fd. The name of this file is +passed as an argument to the current command as the result of the +expansion. If the >(list) form is used, writing to +the file will provide input for list. If the +<(list) form is used, the file passed as an +argument should be read to obtain the output of list. +

+ +When available, process substitution is performed +simultaneously with parameter and variable expansion, +command substitution, +and arithmetic expansion. +  +

Word Splitting

+ +

+ +The shell scans the results of +parameter expansion, +command substitution, +and +arithmetic expansion +that did not occur within double quotes for +word splitting. + +

+ +The shell treats each character of +IFS + + +as a delimiter, and splits the results of the other +expansions into words on these characters. If +IFS + + +is unset, or its +value is exactly +<space><tab><newline>, + +the default, then +sequences of +<space>, + +<tab>, + +and +<newline> + +at the beginning and end of the results of the previous +expansions are ignored, and +any sequence of +IFS + + +characters not at the beginning or end serves to delimit words. +If +IFS + + +has a value other than the default, then sequences of +the whitespace characters +space + +and +tab + +are ignored at the beginning and end of the +word, as long as the whitespace character is in the +value of +IFS + + +(an +IFS + + +whitespace character). +Any character in +IFS + + +that is not +IFS + + +whitespace, along with any adjacent +IFS + + +whitespace characters, delimits a field. +A sequence of +IFS + + +whitespace characters is also treated as a delimiter. +If the value of +IFS + + +is null, no word splitting occurs. +

+ +Explicit null arguments ("" or aqaq) 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. +  +

Pathname Expansion

+ +

+ +After word splitting, +unless the +-f + +option has been set, +bash + +scans each word for the characters +*, + +?, + +and +[. + +If one of these characters appears, then the word is +regarded as a +pattern, + +and replaced with an alphabetically sorted list of +file names matching the pattern. +If no matching file names are found, +and the shell option +nullglob + +is not enabled, the word is left unchanged. +If the +nullglob + +option is set, and no matches are found, +the word is removed. +If the +failglob + +shell option is set, and no matches are found, an error message +is printed and the command is not executed. +If the shell option +nocaseglob + +is enabled, the match is performed without regard to the case +of alphabetic characters. +When a pattern is used for pathname expansion, +the character +``.'' + +at the start of a name or immediately following a slash +must be matched explicitly, unless the shell option +dotglob + +is set. +When matching a pathname, the slash character must always be +matched explicitly. +In other cases, the +``.'' + +character is not treated specially. +See the description of +shopt + +below under +SHELL BUILTIN COMMANDS + + +for a description of the +nocaseglob, + +nullglob, + +failglob, + +and +dotglob + +shell options. +

+ +The +GLOBIGNORE + + +shell variable may be used to restrict the set of file names matching a +pattern. + +If +GLOBIGNORE + + +is set, each matching file name that also matches one of the patterns in +GLOBIGNORE + + +is removed from the list of matches. +The file names +``.'' + +and +``..'' + +are always ignored when +GLOBIGNORE + + +is set and not null. However, setting +GLOBIGNORE + + +to a non-null value has the effect of enabling the +dotglob + +shell option, so all other file names beginning with a +``.'' + +will match. +To get the old behavior of ignoring file names beginning with a +``.'', + +make +``.*'' + +one of the patterns in +GLOBIGNORE. + + +The +dotglob + +option is disabled when +GLOBIGNORE + + +is unset. +

+ +Pattern Matching +

+ +Any character that appears in a pattern, other than the special pattern +characters described below, matches itself. The NUL character may not +occur in a pattern. A backslash escapes the following character; the +escaping backslash is discarded when matching. +The special pattern characters must be quoted if +they are to be matched literally. +

+ +The special pattern characters have the following meanings: +

+ + +

+
* + +
+Matches any string, including the null string. +When the globstar shell option is enabled, and * is used in +a pathname expansion context, two adjacent *s used as a single +pattern will match all files and zero or more directories and +subdirectories. +If followed by a /, two adjacent *s will match only directories +and subdirectories. +
? + +
+Matches any single character. +
[...] + +
+Matches any one of the enclosed characters. A pair of characters +separated by a hyphen denotes a +range expression; +any character that sorts between those two characters, inclusive, +using the current locale's collating sequence and character set, +is matched. If the first character following the +[ + +is a +! + +or a +^ + +then any character not enclosed is matched. +The sorting order of characters in range expressions is determined by +the current locale and the value of the +LC_COLLATE + + +shell variable, +if set. +A +- + +may be matched by including it as the first or last character +in the set. +A +] + +may be matched by including it as the first character +in the set. +
+ +

+ + +Within +[ + +and +], + +character classes can be specified using the syntax +[:class:], where class is one of the +following classes defined in the POSIX standard: +

+

+ +

+ + + +alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit +
+ +A character class matches any character belonging to that class. +The word character class matches letters, digits, and the character _. +
+ +

+ + +Within +[ + +and +], + +an equivalence class can be specified using the syntax +[=c=], which matches all characters with the +same collation weight (as defined by the current locale) as +the character c. +
+ +

+ + +Within +[ + +and +], + +the syntax [.symbol.] matches the collating symbol +symbol. +

+ + +

+ +If the extglob shell option is enabled using the shopt +builtin, several extended pattern matching operators are recognized. +In the following description, a pattern-list is a list of one +or more patterns separated by a |. +Composite patterns may be formed using one or more of the following +sub-patterns: +

+ +

+
+
?(pattern-list)
+Matches zero or one occurrence of the given patterns +
*(pattern-list)
+Matches zero or more occurrences of the given patterns +
+(pattern-list)
+Matches one or more occurrences of the given patterns +
@(pattern-list)
+Matches one of the given patterns +
!(pattern-list)
+Matches anything except one of the given patterns +
+ + +  +

Quote Removal

+ +

+ +After the preceding expansions, all unquoted occurrences of the +characters +\, + +aq, + +and " that did not result from one of the above +expansions are removed. +  +

REDIRECTION

+ +Before a command is executed, its input and output +may be +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. +

+ +Each redirection that may be preceded by a file descriptor number +may instead be preceded by a word of the form {varname}. +In this case, for each redirection operator except +>&- and <&-, the shell will allocate a file descriptor greater +than 10 and assign it to varname. If >&- or <&- is preceded +by {varname}, the value of varname defines the file +descriptor to close. +

+ +In the following descriptions, if the file descriptor number is +omitted, and the first character of the redirection operator is +<, + +the redirection refers to the standard input (file descriptor +0). If the first character of the redirection operator is +>, + +the redirection refers to the standard output (file descriptor +1). +

+ +The word following the redirection operator in the following +descriptions, unless otherwise noted, is subjected to brace expansion, +tilde expansion, parameter expansion, command substitution, arithmetic +expansion, quote removal, pathname expansion, and word splitting. +If it expands to more than one word, +bash + +reports an error. +

+ +Note that the order of redirections is significant. For example, +the command +

+

+ +ls > dirlist 2>&1 +

+ +

+ +directs both standard output and standard error to the file +dirlist, + +while the command +

+

+ +ls 2>&1 > dirlist +

+ +

+ +directs only the standard output to file +dirlist, + +because the standard error was duplicated from the standard output +before the standard output was redirected to +dirlist. + +

+ +Bash handles several filenames specially when they are used in +redirections, as described in the following table: +

+

+ + +

+
/dev/fd/fd + +
+If fd is a valid integer, file descriptor fd is duplicated. +
/dev/stdin + +
+File descriptor 0 is duplicated. +
/dev/stdout + +
+File descriptor 1 is duplicated. +
/dev/stderr + +
+File descriptor 2 is duplicated. +
/dev/tcp/host/port + +
+If host is a valid hostname or Internet address, and port +is an integer port number or service name, bash attempts to open +a TCP connection to the corresponding socket. +
/dev/udp/host/port + +
+If host is a valid hostname or Internet address, and port +is an integer port number or service name, bash attempts to open +a UDP connection to the corresponding socket. + +
+ +

+ +A failure to open or create a file causes the redirection to fail. +

+ +Redirections using file descriptors greater than 9 should be used with +care, as they may conflict with file descriptors the shell uses +internally. +  +

Redirecting Input

+ +

+ +Redirection of input causes the file whose name results from +the expansion of +word + +to be opened for reading on file descriptor +n, + +or the standard input (file descriptor 0) if +n + +is not specified. +

+ +The general format for redirecting input is: +

+

+ +[n]<word +

+ +  +

Redirecting Output

+ +

+ +Redirection of output causes the file whose name results from +the expansion of +word + +to be opened for writing on file descriptor +n, + +or the standard output (file descriptor 1) if +n + +is not specified. If the file does not exist it is created; +if it does exist it is truncated to zero size. +

+ +The general format for redirecting output is: +

+

+ +[n]>word +

+ +

+ +If the redirection operator is +>, + +and the +noclobber + +option to the +set + +builtin has been enabled, the redirection will fail if the file +whose name results from the expansion of word exists and is +a regular file. +If the redirection operator is +>|, + +or the redirection operator is +> + +and the +noclobber + +option to the +set + +builtin command is not enabled, the redirection is attempted even +if the file named by word exists. +  +

Appending Redirected Output

+ +

+ +Redirection of output in this fashion +causes the file whose name results from +the expansion of +word + +to be opened for appending on file descriptor +n, + +or the standard output (file descriptor 1) if +n + +is not specified. If the file does not exist it is created. +

+ +The general format for appending output is: +

+

+ +[n]>>word +

+ +

+ +  +

Redirecting Standard Output and Standard Error

+ +

+ +This construct allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be redirected to the file whose name is the +expansion of +word. + +

+ +There are two formats for redirecting standard output and +standard error: +

+

+ +&>word +

+ +and +
+>&word +
+ +

+ +Of the two forms, the first is preferred. +This is semantically equivalent to +

+

+ +>word 2>&1 +

+ +

+ +  +

Appending Standard Output and Standard Error

+ +

+ +This construct allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be appended to the file whose name is the +expansion of +word. + +

+ +The format for appending standard output and standard error is: +

+

+ +&>>word +

+ +

+ +This is semantically equivalent to +

+

+ +>>word 2>&1 +

+ +  +

Here Documents

+ +

+ +This type of redirection instructs the shell to read input from the +current source until a line containing only +delimiter + +(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: +

+

+ +

+<<[-]word
+        here-document
+delimiter
+
+ +
+ +

+ +No parameter expansion, command substitution, arithmetic expansion, +or pathname expansion is performed on +word. + +If any characters in +word + +are quoted, the +delimiter + +is the result of quote removal on +word, + +and the lines in the here-document are not expanded. +If word is unquoted, +all lines of the here-document are subjected to parameter expansion, +command substitution, and arithmetic expansion. In the latter +case, the character sequence +\<newline> + +is ignored, and +\ + +must be used to quote the characters +\, + +$, + +and +`. + +

+ +If the redirection operator is +<<-, + +then all leading tab characters are stripped from input lines and the +line containing +delimiter. + +This allows +here-documents within shell scripts to be indented in a +natural fashion. +  +

Here Strings

+ +A variant of here documents, the format is: +
+

+ +

+<<<word
+
+ +
+ +

+ +The word is expanded and supplied to the command on its standard +input. +  +

Duplicating File Descriptors

+ +

+ +The redirection operator +

+

+ +[n]<&word +

+ +

+ +is used to duplicate input file descriptors. +If +word + +expands to one or more digits, the file descriptor denoted by +n + +is made to be a copy of that file descriptor. +If the digits in +word + +do not specify a file descriptor open for input, a redirection error occurs. +If +word + +evaluates to +-, + +file descriptor +n + +is closed. If +n + +is not specified, the standard input (file descriptor 0) is used. +

+ +The operator +

+

+ +[n]>&word +

+ +

+ +is used similarly to duplicate output file descriptors. If +n + +is not specified, the standard output (file descriptor 1) is used. +If the digits in +word + +do not specify a file descriptor open for output, a redirection error occurs. +As a special case, if n is omitted, and word does not +expand to one or more digits, the standard output and standard +error are redirected as described previously. +  +

Moving File Descriptors

+ +

+ +The redirection operator +

+

+ +[n]<&digit- +

+ +

+ +moves the file descriptor digit to file descriptor +n, + +or the standard input (file descriptor 0) if n is not specified. +digit is closed after being duplicated to n. +

+ +Similarly, the redirection operator +

+

+ +[n]>&digit- +

+ +

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

Opening File Descriptors for Reading and Writing

+ +

+ +The redirection operator +

+

+ +[n]<>word +

+ +

+ +causes the file whose name is the expansion of +word + +to be opened for both reading and writing on file descriptor +n, + +or on file descriptor 0 if +n + +is not specified. If the file does not exist, it is created. +  +

ALIASES

+ +Aliases allow a string to be substituted for a word when it is used +as the first word of a simple command. +The shell maintains a list of aliases that may be set and unset with the +alias + +and +unalias + +builtin commands (see +SHELL BUILTIN COMMANDS + + +below). +The first word of each simple command, if unquoted, +is checked to see if it has an +alias. If so, that word is replaced by the text of the alias. +The characters /, $, `, and = and +any of the shell metacharacters or quoting characters +listed above may not appear in an alias name. +The replacement text may contain any valid shell input, +including shell metacharacters. +The first word of the replacement text is tested +for aliases, but a word that is identical to an alias being expanded +is not expanded a second time. +This means that one may alias +ls + +to +ls -F, + +for instance, and +bash + +does not try to recursively expand the replacement text. +If the last character of the alias value is a +blank, + +then the next command +word following the alias is also checked for alias expansion. +

+ +Aliases are created and listed with the +alias + +command, and removed with the +unalias + +command. +

+ +There is no mechanism for using arguments in the replacement text. +If arguments are needed, a shell function should be used (see +FUNCTIONS + + +below). +

+ +Aliases are not expanded when the shell is not interactive, unless +the +expand_aliases + +shell option is set using +shopt + +(see the description of +shopt + +under +SHELL BUILTIN COMMANDS +below). +

+ +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 +alias + +in compound commands. +

+ +For almost every purpose, aliases are superseded by +shell functions. +  +

FUNCTIONS

+ +A shell function, defined as described above under +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 +# + +is updated to reflect the change. Special parameter 0 +is unchanged. +The first element of the +FUNCNAME + + +variable is set to the name of the function while the function +is executing. +

+ +All other aspects of the shell execution +environment are identical between a function and its caller +with these exceptions: the +DEBUG + + +and +RETURN + +traps (see the description of the +trap + +builtin under +SHELL BUILTIN COMMANDS + + +below) are not inherited unless the function has been given the +trace attribute (see the description of the +declare + + +builtin below) or the +-o functrace shell option has been enabled with +the set builtin +(in which case all functions inherit the DEBUG and RETURN traps), +and the +ERR + + +trap is not inherited unless the -o errtrace shell option has +been enabled. +

+ +Variables local to the function may be declared with the +local + +builtin command. Ordinarily, variables and their values +are shared between the function and its caller. +

+ +If the builtin command +return + +is executed in a function, the function completes and +execution resumes with the next command after the function +call. +Any command associated with the RETURN trap is executed +before execution resumes. +When a function completes, the values of the +positional parameters and the special parameter +# + +are restored to the values they had prior to the function's +execution. +

+ +Function names and definitions may be listed with the +-f + +option to the +declare + +or +typeset + +builtin commands. The +-F + +option to +declare + +or +typeset + +will list the function names only +(and optionally the source file and line number, if the extdebug +shell option is enabled). +Functions may be exported so that subshells +automatically have them defined with the +-f + +option to the +export + +builtin. +A function definition may be deleted using the -f option to +the +unset + +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. +

+ +Functions may be recursive. No limit is imposed on the number +of recursive calls. +  +

ARITHMETIC EVALUATION

+ +The shell allows arithmetic expressions to be evaluated, under +certain circumstances (see the let and declare builtin +commands and Arithmetic Expansion). +Evaluation is done in fixed-width integers with no check for overflow, +though division by 0 is trapped and flagged as an error. +The operators and their precedence, associativity, and values +are the same as in the C language. +The following list of operators is grouped into levels of +equal-precedence operators. +The levels are listed in order of decreasing precedence. +

+ + +

+
id++ id-- + +
+variable post-increment and post-decrement +
++id --id + +
+variable pre-increment and pre-decrement +
- + + +
+unary minus and plus +
! ~ + +
+logical and bitwise negation +
** + +
+exponentiation +
* / % + +
+multiplication, division, remainder +
+ - + +
+addition, subtraction +
<< >> + +
+left and right bitwise shifts +
<= >= < > + +
+comparison +
== != + +
+equality and inequality +
& + +
+bitwise AND +
^ + +
+bitwise exclusive OR +
| + +
+bitwise OR +
&& + +
+logical AND +
|| + +
+logical OR +
expr?expr:expr + +
+conditional operator +
= *= /= %= += -= <<= >>= &= ^= |= + +
+assignment +
expr1 , expr2 + +
+comma + +
+

+ +Shell variables are allowed as operands; parameter expansion is +performed before the expression is evaluated. +Within an expression, shell variables may also be referenced by name +without using the parameter expansion syntax. +A shell variable that is null or unset evaluates to 0 when referenced +by name without using the parameter expansion syntax. +The value of a variable is evaluated as an arithmetic expression +when it is referenced, or when a variable which has been given the +integer attribute using declare -i is assigned a value. +A null value evaluates to 0. +A shell variable need not have its integer attribute +turned on to be used in an expression. +

+ +Constants with a leading 0 are interpreted as octal numbers. +A leading 0x or 0X denotes hexadecimal. +Otherwise, numbers take the form [base#]n, where base +is a decimal number between 2 and 64 representing the arithmetic +base, and n is a number in that base. +If base# is omitted, then base 10 is used. +The digits greater than 9 are represented by the lowercase letters, +the uppercase letters, @, and _, in that order. +If base is less than or equal to 36, lowercase and uppercase +letters may be used interchangeably to represent numbers between 10 +and 35. +

+ +Operators are evaluated in order of precedence. Sub-expressions in +parentheses are evaluated first and may override the precedence +rules above. +  +

CONDITIONAL EXPRESSIONS

+ +Conditional expressions are used by the [[ compound command and +the test and [ builtin commands to test file attributes +and perform string and arithmetic comparisons. +Expressions are formed from the following unary or binary primaries. +If any file argument to one of the primaries is of the form +/dev/fd/n, then file descriptor n is checked. +If the file argument to one of the primaries is one of +/dev/stdin, /dev/stdout, or /dev/stderr, file +descriptor 0, 1, or 2, respectively, is checked. +

+ +Unless otherwise specified, primaries that operate on files follow symbolic +links and operate on the target of the link, rather than the link itself. +

+ + +When used with [[, The < and > operators sort +lexicographically using the current locale. +

+ +

+
-a file + +
+True if file exists. +
-b file + +
+True if file exists and is a block special file. +
-c file + +
+True if file exists and is a character special file. +
-d file + +
+True if file exists and is a directory. +
-e file + +
+True if file exists. +
-f file + +
+True if file exists and is a regular file. +
-g file + +
+True if file exists and is set-group-id. +
-h file + +
+True if file exists and is a symbolic link. +
-k file + +
+True if file exists and its ``sticky'' bit is set. +
-p file + +
+True if file exists and is a named pipe (FIFO). +
-r file + +
+True if file exists and is readable. +
-s file + +
+True if file exists and has a size greater than zero. +
-t fd + +
+True if file descriptor +fd + +is open and refers to a terminal. +
-u file + +
+True if file exists and its set-user-id bit is set. +
-w file + +
+True if file exists and is writable. +
-x file + +
+True if file exists and is executable. +
-O file + +
+True if file exists and is owned by the effective user id. +
-G file + +
+True if file exists and is owned by the effective group id. +
-L file + +
+True if file exists and is a symbolic link. +
-S file + +
+True if file exists and is a socket. +
-N file + +
+True if file exists and has been modified since it was last read. +
file1 -nt file2
+True if file1 is newer (according to modification date) than file2, +or if file1 exists and file2 does not. +
file1 -ot file2
+True if file1 is older than file2, or if file2 exists +and file1 does not. +
file1 -ef file2
+True if file1 and file2 refer to the same device and +inode numbers. +
-o optname + +
+True if shell option +optname + +is enabled. +See the list of options under the description of the +-o + +option to the +set + +builtin below. +
-z string + +
+True if the length of string is zero. +
string
+ +
-n string + +
+ +True if the length of +string + +is non-zero. +
string1 == string2
+ +
string1 = string2
+ +True if the strings are equal. = should be used +with the test command for POSIX conformance. +
string1 != string2
+True if the strings are not equal. +
string1 < string2
+True if string1 sorts before string2 lexicographically. +
string1 > string2
+True if string1 sorts after string2 lexicographically. +
arg1 OP arg2 + +
+OP + + +is one of +-eq, + +-ne, + +-lt, + +-le, + +-gt, + +or +-ge. + +These arithmetic binary operators return true if arg1 +is equal to, not equal to, less than, less than or equal to, +greater than, or greater than or equal to arg2, respectively. +Arg1 + +and +arg2 + +may be positive or negative integers. + +
+  +

SIMPLE COMMAND EXPANSION

+ +When a simple command is executed, the shell performs the following +expansions, assignments, and redirections, from left to right. +
+
1.
+The words that the parser has marked as variable assignments (those +preceding the command name) and redirections are saved for later +processing. +
2.
+The words that are not variable assignments or redirections are +expanded. If any words remain after expansion, the first word +is taken to be the name of the command and the remaining words are +the arguments. +
3.
+Redirections are performed as described above under +REDIRECTION. + + +
4.
+The text after the = in each variable assignment undergoes tilde +expansion, parameter expansion, command substitution, arithmetic expansion, +and quote removal before being assigned to the variable. +
+

+ +If no command name results, the variable assignments affect the current +shell environment. Otherwise, the variables are added to the environment +of the executed command and do not affect the current shell environment. +If any of the assignments attempts to assign a value to a readonly variable, +an error occurs, and the command exits with a non-zero status. +

+ +If no command name results, redirections are performed, but do not +affect the current shell environment. A redirection error causes the +command to exit with a non-zero status. +

+ +If there is a command name left after expansion, execution proceeds as +described below. Otherwise, the command exits. If one of the expansions +contained a command substitution, the exit status of the command is +the exit status of the last command substitution performed. If there +were no command substitutions, the command exits with a status of zero. +  +

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

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

+ +If the name is neither a shell function nor a builtin, +and contains no slashes, +bash + +searches each element of the +PATH + + +for a directory containing an executable file by that name. +Bash + +uses a hash table to remember the full pathnames of executable +files (see +hash + +under +SHELL BUILTIN COMMANDS + + +below). +A full search of the directories in +PATH + + +is performed only if the command is not found in the hash table. +If the search is unsuccessful, the shell searches for a defined shell +function named command_not_found_handle. +If that function exists, it is invoked with the original command and +the original command's arguments as its arguments, and the function's +exit status becomes the exit status of the shell. +If that function is not defined, the shell prints an error +message and returns an exit status of 127. +

+ +If the search is successful, or if the command name contains +one or more slashes, the shell executes the named program in a +separate 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. +

+ +If this execution fails because the file is not in executable +format, and the file is not a directory, it is assumed to be +a shell script, a file +containing shell commands. A subshell is spawned to execute +it. This subshell reinitializes itself, so +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 +hash + +below under +SHELL BUILTIN COMMANDS) +are retained by the child. +

+ +If the program is a file beginning with +#!, + +the remainder of the first line specifies an interpreter +for the program. The shell executes the +specified interpreter on operating systems that do not +handle this 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. +  +

COMMAND EXECUTION ENVIRONMENT

+ +The shell has an execution environment, which consists of the +following: + +
+
*
+open files inherited by the shell at invocation, as modified by +redirections supplied to the exec builtin +
*
+the current working directory as set by cd, pushd, or +popd, or inherited by the shell at invocation +
*
+the file creation mode mask as set by umask or inherited from +the shell's parent +
*
+current traps set by trap +
*
+shell parameters that are set by variable assignment or with set +or inherited from the shell's parent in the environment +
*
+shell functions defined during execution or inherited from the shell's +parent in the environment +
*
+options enabled at invocation (either by default or with command-line +arguments) or by set +
*
+options enabled by shopt +
*
+shell aliases defined with alias +
*
+various process IDs, including those of background jobs, the value +of $$, and the value of +PPID + + +
+

+ +When a simple command other than a builtin or shell function +is to be executed, it +is invoked in a separate execution environment that consists of +the following. Unless otherwise noted, the values are inherited +from the shell. + +

+
*
+the shell's open files, plus any modifications and additions specified +by redirections to the command +
*
+the current working directory +
*
+the file creation mode mask +
*
+shell variables and functions marked for export, along with variables +exported for the command, passed in the environment +
*
+traps caught by the shell are reset to the values inherited from the +shell's parent, and traps ignored by the shell are ignored +
+

+ +A command invoked in this separate environment cannot affect the +shell's execution environment. +

+ +Command substitution, commands grouped with parentheses, +and asynchronous commands are invoked in a +subshell environment that is a duplicate of the shell environment, +except that traps caught by the shell are reset to the values +that the shell inherited from its parent at invocation. Builtin +commands that are invoked as part of a pipeline are also executed in a +subshell environment. Changes made to the subshell environment +cannot affect the shell's execution environment. +

+ +Subshells spawned to execute command substitutions inherit the value of +the -e option from the parent shell. When not in posix mode, +Bash clears the -e option in such subshells. +

+ +If a command is followed by a & and job control is not active, the +default standard input for the command is the empty file /dev/null. +Otherwise, the invoked command inherits the file descriptors of the calling +shell as modified by redirections. +  +

ENVIRONMENT

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

+ +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 +export + +to child processes. Executed commands inherit the environment. +The +export + +and +declare -x + +commands allow parameters and functions to be added to and +deleted from the environment. If the value of a parameter +in the environment is modified, the new value becomes part +of the environment, replacing the old. The environment +inherited by any executed command consists of the shell's +initial environment, whose values may be modified in the shell, +less any pairs removed by the +unset + +command, plus any additions via the +export + +and +declare -x + +commands. +

+ +The environment for any +simple command + +or function may be augmented temporarily by prefixing it with +parameter assignments, as described above in +PARAMETERS. + + +These assignment statements affect only the environment seen +by that command. +

+ +If the +-k + +option is set (see the +set + +builtin command below), then +all + +parameter assignments are placed in the environment for a command, +not just those that precede the command name. +

+ +When +bash + +invokes an external command, the variable +_ + +is set to the full file name of the command and passed to that +command in its environment. +  +

EXIT STATUS

+ +

+ +The exit status of an executed command is the value returned by the +waitpid system call or equivalent function. Exit statuses +fall between 0 and 255, though, as explained below, the shell may +use values above 125 specially. Exit statuses from shell builtins and +compound commands are also limited to this range. Under certain +circumstances, the shell will use special values to indicate specific +failure modes. +

+ +For the shell's purposes, a command which exits with a +zero exit status has succeeded. An exit status of zero +indicates success. A non-zero exit status indicates failure. +When a command terminates on a fatal signal N, bash uses +the value of 128+N as the exit status. +

+ +If a command is not found, the child process created to +execute it returns a status of 127. If a command is found +but is not executable, the return status is 126. +

+ +If a command fails because of an error during expansion or redirection, +the exit status is greater than zero. +

+ +Shell builtin commands return a status of 0 (true) if +successful, and non-zero (false) if an error occurs +while they execute. +All builtins return an exit status of 2 to indicate incorrect usage. +

+ +Bash itself returns the exit status of the last command +executed, unless a syntax error occurs, in which case it exits +with a non-zero value. See also the exit builtin +command below. +  +

SIGNALS

+ +When bash is interactive, in the absence of any traps, it ignores +SIGTERM + + +(so that kill 0 does not kill an interactive shell), +and +SIGINT + + +is caught and handled (so that the wait builtin is interruptible). +In all cases, bash ignores +SIGQUIT. + + +If job control is in effect, +bash + +ignores +SIGTTIN, + + +SIGTTOU, + + +and +SIGTSTP. + + +

+ +Non-builtin commands run by bash have signal handlers +set to the values inherited by the shell from its parent. +When job control is not in effect, asynchronous commands +ignore +SIGINT + + +and +SIGQUIT + + +in addition to these inherited handlers. +Commands run as a result of command substitution ignore the +keyboard-generated job control signals +SIGTTIN, + + +SIGTTOU, + + +and +SIGTSTP. + + +

+ +The shell exits by default upon receipt of a +SIGHUP. + + +Before exiting, an interactive shell resends the +SIGHUP + + +to all jobs, running or stopped. +Stopped jobs are sent +SIGCONT + + +to ensure that they receive the +SIGHUP. + + +To prevent the shell from +sending the signal to a particular job, it should be removed from the +jobs table with the +disown + +builtin (see +SHELL BUILTIN COMMANDS + + +below) or marked +to not receive +SIGHUP + + +using +disown -h. + +

+ +If the +huponexit + +shell option has been set with +shopt, + +bash + +sends a +SIGHUP + + +to all jobs when an interactive login shell exits. +

+ +If bash is waiting for a command to complete and receives a signal +for which a trap has been set, the trap will not be executed until +the command completes. +When bash is waiting for an asynchronous command via the wait +builtin, the reception of a signal for which a trap has been set will +cause the wait builtin to return immediately with an exit status +greater than 128, immediately after which the trap is executed. +  +

JOB CONTROL

+ +Job control + +refers to the ability to selectively stop (suspend) +the execution of processes and continue (resume) +their execution at a later point. A user typically employs +this facility via an interactive interface supplied jointly +by the operating system kernel's terminal driver and +bash. + +

+ +The shell associates a +job + +with each pipeline. It keeps a table of currently executing +jobs, which may be listed with the +jobs + +command. When +bash + +starts a job asynchronously (in the +background), + +it prints a line that looks like: +

+

+ +[1] 25647 +

+ +

+ +indicating that this job is job number 1 and that the process ID +of the last process in the pipeline associated with this job is 25647. +All of the processes in a single pipeline are members of the same job. +Bash + +uses the +job + +abstraction as the basis for job control. +

+ +To facilitate the implementation of the user interface to job +control, the operating system maintains the notion of a current terminal +process group ID. Members of this process group (processes whose +process group ID is equal to the current terminal process group ID) +receive keyboard-generated signals such as +SIGINT. + + +These processes are said to be in the +foreground. + +Background + +processes are those whose process group ID differs from the terminal's; +such processes are immune to keyboard-generated signals. +Only foreground processes are allowed to read from or, if the +user so specifies with stty tostop, write to the +terminal. +Background processes which attempt to read from (write to when +stty tostop is in effect) the +terminal are sent a +SIGTTIN (SIGTTOU) + + +signal by the kernel's terminal driver, +which, unless caught, suspends the process. +

+ +If the operating system on which +bash + +is running supports +job control, +bash + +contains facilities to use it. +Typing the +suspend + +character (typically +^Z, + +Control-Z) while a process is running +causes that process to be stopped and returns control to +bash. + +Typing the +delayed suspend + +character (typically +^Y, + +Control-Y) causes the process to be stopped when it +attempts to read input from the terminal, and control to +be returned to +bash. + +The user may then manipulate the state of this job, using the +bg + +command to continue it in the background, the +fg + +command to continue it in the foreground, or +the +kill + +command to kill it. A ^Z takes effect immediately, +and has the additional side effect of causing pending output +and typeahead to be discarded. +

+ +There are a number of ways to refer to a job in the shell. +The character +% + +introduces a job specification (jobspec). Job number +n + +may be referred to as +%n. + +A job may also be referred to using a prefix of the name used to +start it, or using a substring that appears in its command line. +For example, +%ce + +refers to a stopped +ce + +job. If a prefix matches more than one job, +bash + +reports an error. Using +%?ce, + +on the other hand, refers to any job containing the string +ce + +in its command line. If the substring matches more than one job, +bash + +reports an error. The symbols +%% + +and +%+ + +refer to the shell's notion of the +current job, + +which is the last job stopped while it was in +the foreground or started in the background. +The +previous job + +may be referenced using +%-. + +If there is only a single job, %+ and %- can both be used +to refer to that job. +In output pertaining to jobs (e.g., the output of the +jobs + +command), the current job is always flagged with a ++, + +and the previous job with a +-. + +A single % (with no accompanying job specification) also refers to the +current job. +

+ +Simply naming a job can be used to bring it into the +foreground: +%1 + +is a synonym for +``fg %1'', +bringing job 1 from the background into the foreground. +Similarly, +``%1 &'' + +resumes job 1 in the background, equivalent to +``bg %1''. +

+ +The shell learns immediately whenever a job changes state. +Normally, +bash + +waits until it is about to print a prompt before reporting +changes in a job's status so as to not interrupt +any other output. If the +-b + +option to the +set + +builtin command +is enabled, +bash + +reports such changes immediately. +Any trap on +SIGCHLD + + +is executed for each child that exits. +

+ +If an attempt to exit +bash + +is made while jobs are stopped (or, if the checkjobs shell option has +been enabled using the shopt builtin, running), the shell prints a +warning message, and, if the checkjobs option is enabled, lists the +jobs and their statuses. +The +jobs + +command may then be used to inspect their status. +If a second attempt to exit is made without an intervening command, +the shell does not print another warning, and any stopped +jobs are terminated. +  +

PROMPTING

+ +When executing interactively, +bash + +displays the primary prompt +PS1 + + +when it is ready to read a command, and the secondary prompt +PS2 + + +when it needs more input to complete a command. +Bash + +allows these prompt strings to be customized by inserting a number of +backslash-escaped special characters that are decoded as follows: +
+ +
+
\a + +
+an ASCII bell character (07) +
\d + +
+the date in "Weekday Month Date" format (e.g., "Tue May 26") +
\D{format} + +
+the format is passed to strftime(3) and the result is inserted +into the prompt string; an empty format results in a locale-specific +time representation. The braces are required +
\e + +
+an ASCII escape character (033) +
\h + +
+the hostname up to the first `.' +
\H + +
+the hostname +
\j + +
+the number of jobs currently managed by the shell +
\l + +
+the basename of the shell's terminal device name +
\n + +
+newline +
\r + +
+carriage return +
\s + +
+the name of the shell, the basename of +$0 + +(the portion following the final slash) +
\t + +
+the current time in 24-hour HH:MM:SS format +
\T + +
+the current time in 12-hour HH:MM:SS format +
\@ + +
+the current time in 12-hour am/pm format +
\A + +
+the current time in 24-hour HH:MM format +
\u + +
+the username of the current user +
\v + +
+the version of bash (e.g., 2.00) +
\V + +
+the release of bash, version + patch level (e.g., 2.00.0) +
\w + +
+the current working directory, with +$HOME + + +abbreviated with a tilde +(uses the value of the +PROMPT_DIRTRIM + + +variable) +
\W + +
+the basename of the current working directory, with +$HOME + + +abbreviated with a tilde +
\! + +
+the history number of this command +
\# + +
+the command number of this command +
\$ + +
+if the effective UID is 0, a +#, + +otherwise a +$ + +
\nnn + +
+the character corresponding to the octal number nnn +
\\ + +
+a backslash +
\[ + +
+begin a sequence of non-printing characters, which could be used to +embed a terminal control sequence into the prompt +
\] + +
+end a sequence of non-printing characters + +
+ +

+ +The command number and the history number are usually different: +the history number of a command is its position in the history +list, which may include commands restored from the history file +(see +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 +promptvars + +shell option (see the description of the +shopt + +command under +SHELL BUILTIN COMMANDS + + +below). +  +

READLINE

+ +This is the library that handles reading input when using an interactive +shell, unless the +--noediting + +option is given at shell invocation. +Line editing is also used when using the -e option to the +read builtin. +By default, the line editing commands are similar to those of emacs. +A vi-style line editing interface is also available. +Line editing can be enabled at any time using the +-o emacs + +or +-o vi + +options to the +set + +builtin (see +SHELL BUILTIN COMMANDS + + +below). +To turn off line editing after the shell is running, use the ++o emacs + +or ++o vi + +options to the +set + +builtin. +  +

Readline Notation

+ +

+ +In this section, the emacs-style notation is used to denote +keystrokes. Control keys are denoted by C-key, e.g., C-n +means Control-N. Similarly, +meta + +keys are denoted by M-key, so M-x means Meta-X. (On keyboards +without a +meta + +key, M-x means ESC x, i.e., press the Escape key +then the +x + +key. This makes ESC the meta prefix. +The combination M-C-x means ESC-Control-x, +or press the Escape key +then hold the Control key while pressing the +x + +key.) +

+ +Readline commands may be given numeric +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., kill-line) causes that command to act in a +backward direction. +Commands whose behavior with arguments deviates from this are noted +below. +

+ +When a command is described as killing text, the text +deleted is saved for possible future retrieval +(yanking). The killed text is saved in a +kill ring. 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. +  +

Readline Initialization

+ +

+ +Readline is customized by putting commands in an initialization +file (the inputrc file). +The name of this file is taken from the value of the +INPUTRC + + +variable. If that variable is unset, the default is +~/.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 # are comments. +Lines beginning with a $ indicate conditional constructs. +Other lines denote key bindings and variable settings. +

+ +The default key-bindings may be changed with an +inputrc + +file. +Other programs that use this library may add their own commands +and bindings. +

+ +For example, placing +

+

+ +M-Control-u: universal-argument +

+ +or +
+C-Meta-u: universal-argument +
+ +into the +inputrc + +would make M-C-u execute the readline command +universal-argument. + +

+ +The following symbolic character names are recognized: +RUBOUT, + +DEL, + +ESC, + +LFD, + +NEWLINE, + +RET, + +RETURN, + +SPC, + +SPACE, + +and +TAB. + +

+ +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a macro). +  +

Readline Key Bindings

+ +

+ +The syntax for controlling key bindings in the +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 Meta- or Control- +prefixes, or as a key sequence. +

+ +When using the form keyname:function-name or macro, +keyname + +is the name of a key spelled out in English. For example: +

+

+Control-u: universal-argument +
+ +Meta-Rubout: backward-kill-word +
+ +Control-o: "> output" +
+ +

+ +In the above example, +C-u + +is bound to the function +universal-argument, + +M-DEL + +is bound to the function +backward-kill-word, + +and +C-o + +is bound to run the macro +expressed on the right hand side (that is, to insert the text +> output + +into the line). +

+ +In the second form, "keyseq":function-name or macro, +keyseq + +differs from +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. +

+

+"\C-u": universal-argument +
+ +"\C-x\C-r": re-read-init-file +
+ +"\e[11~": "Function Key 1" +
+ +

+ +In this example, +C-u + +is again bound to the function +universal-argument. + +C-x C-r + +is bound to the function +re-read-init-file, + +and +ESC [ 1 1 ~ + +is bound to insert the text +Function Key 1. + +

+ +The full set of GNU Emacs style escape sequences is +

+ +
+
\C- + +
+control prefix +
\M- + +
+meta prefix +
\e + +
+an escape character +
\\ + +
+backslash +
\ + +
+literal " +
\aq + +
+literal aq +
+ + +

+ +In addition to the GNU Emacs style escape sequences, a second +set of backslash escapes is available: +

+ +
+
\a + +
+alert (bell) +
\b + +
+backspace +
\d + +
+delete +
\f + +
+form feed +
\n + +
+newline +
\r + +
+carriage return +
\t + +
+horizontal tab +
\v + +
+vertical tab +
\nnn + +
+the eight-bit character whose value is the octal value nnn +(one to three digits) +
\xHH + +
+the eight-bit character whose value is the hexadecimal value HH +(one or two hex digits) +
+ + +

+ +When entering the text of a macro, single or double quotes must +be used to indicate a macro definition. +Unquoted text is assumed to be a function name. +In the macro body, the backslash escapes described above are expanded. +Backslash will quote any other character in the macro text, +including " and aq. +

+ +Bash + +allows the current readline key bindings to be displayed or modified +with the +bind + +builtin command. The editing mode may be switched during interactive +use by using the +-o + +option to the +set + +builtin command (see +SHELL BUILTIN COMMANDS + + +below). +  +

Readline Variables

+ +

+ +Readline has variables that can be used to further customize its +behavior. A variable may be set in the +inputrc + +file with a statement of the form +

+

+ +set variable-name value +

+ +

+ +Except where noted, readline variables can take the values +On + +or +Off + +(without regard to case). +Unrecognized variable names are ignored. +When a variable value is read, empty or null values, "on" (case-insensitive), +and "1" are equivalent to On. All other values are equivalent to +Off. +The variables and their default values are: +

+ + +

+
bell-style (audible) + +
+Controls what happens when readline wants to ring the terminal bell. +If set to none, readline never rings the bell. If set to +visible, readline uses a visible bell if one is available. +If set to audible, readline attempts to ring the terminal's bell. +
bind-tty-special-chars (On) + +
+If set to On, readline attempts to bind the control characters +treated specially by the kernel's terminal driver to their readline +equivalents. +
comment-begin (``#'') + +
+The string that is inserted when the readline +insert-comment + +command is executed. +This command is bound to +M-# + +in emacs mode and to +# + +in vi command mode. +
completion-ignore-case (Off) + +
+If set to On, readline performs filename matching and completion +in a case-insensitive fashion. +
completion-prefix-display-length (0) + +
+The length in characters of the common prefix of a list of possible +completions that is displayed without modification. When set to a +value greater than zero, common prefixes longer than this value are +replaced with an ellipsis when displaying possible completions. +
completion-query-items (100) + +
+This determines when the user is queried about viewing +the number of possible completions +generated by the possible-completions 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. +
convert-meta (On) + +
+If set to On, readline will convert characters with the +eighth bit set to an ASCII key sequence +by stripping the eighth bit and prefixing an +escape character (in effect, using escape as the meta prefix). +
disable-completion (Off) + +
+If set to On, readline will inhibit word completion. Completion +characters will be inserted into the line as if they had been +mapped to self-insert. +
editing-mode (emacs) + +
+Controls whether readline begins with a set of key bindings similar +to emacs or vi. +editing-mode + +can be set to either +emacs + +or +vi. + +
echo-control-characters (On) + +
+When set to On, on operating systems that indicate they support it, +readline echoes a character corresponding to a signal generated from the +keyboard. +
enable-keypad (Off) + +
+When set to On, readline will try to enable the application +keypad when it is called. Some systems need this to enable the +arrow keys. +
enable-meta-key (On) + +
+When set to On, readline will try to enable any meta modifier +key the terminal claims to support when it is called. On many terminals, +the meta key is used to send eight-bit characters. +
expand-tilde (Off) + +
+If set to on, tilde expansion is performed when readline +attempts word completion. +
history-preserve-point (Off) + +
+If set to on, the history code attempts to place point at the +same location on each history line retrieved with previous-history +or next-history. +
history-size (0) + +
+Set the maximum number of history entries saved in the history list. If +set to zero, the number of entries in the history list is not limited. +
horizontal-scroll-mode (Off) + +
+When set to On, 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. +
input-meta (Off) + +
+If set to On, 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 +meta-flag + +is a synonym for this variable. +
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 +ESC and C-J will terminate an incremental search. +
keymap (emacs) + +
+Set the current readline keymap. The set of valid keymap names is +emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, +vi-command, and +vi-insert. + +vi is equivalent to vi-command; emacs is +equivalent to emacs-standard. The default value is +emacs; + +the value of +editing-mode + +also affects the default keymap. +
mark-directories (On) + +
+If set to On, completed directory names have a slash +appended. +
mark-modified-lines (Off) + +
+If set to On, history lines that have been modified are displayed +with a preceding asterisk (*). +
mark-symlinked-directories (Off) + +
+If set to On, completed names which are symbolic links to directories +have a slash appended (subject to the value of +mark-directories). +
match-hidden-files (On) + +
+This variable, when set to On, 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. +
output-meta (Off) + +
+If set to On, readline will display characters with the +eighth bit set directly rather than as a meta-prefixed escape +sequence. +
page-completions (On) + +
+If set to On, readline uses an internal more-like pager +to display a screenful of possible completions at a time. +
print-completions-horizontally (Off) + +
+If set to On, readline will display completions with matches +sorted horizontally in alphabetical order, rather than down the screen. +
revert-all-at-newline (Off) + +
+If set to on, readline will undo all changes to history lines +before returning when accept-line is executed. By default, +history lines may be modified and retain individual undo lists across +calls to readline. +
show-all-if-ambiguous (Off) + +
+This alters the default behavior of the completion functions. If +set to +on, + +words which have more than one possible completion cause the +matches to be listed immediately instead of ringing the bell. +
show-all-if-unmodified (Off) + +
+This alters the default behavior of the completion functions in +a fashion similar to show-all-if-ambiguous. +If set to +on, + +words which have more than one possible completion without any +possible partial completion (the possible completions don't share +a common prefix) cause the matches to be listed immediately instead +of ringing the bell. +
skip-completed-text (Off) + +
+If set to On, this alters the default completion behavior when +inserting a single match into the line. It's only active when +performing completion in the middle of a word. If enabled, readline +does not insert characters from the completion that match characters +after point in the word being completed, so portions of the word +following the cursor are not duplicated. +
visible-stats (Off) + +
+If set to On, a character denoting a file's type as reported +by stat(2) is appended to the filename when listing possible +completions. + +
+  +

Readline Conditional Constructs

+ +

+ +Readline implements a facility similar in spirit to the conditional +compilation features of the C preprocessor which allows key +bindings and variable settings to be performed as the result +of tests. There are four parser directives used. +

+
$if
+The +$if + +construct allows bindings to be made based on the +editing mode, the terminal being used, or the application using +readline. The text of the test extends to the end of the line; +no characters are required to isolate it. +
+
+
mode
+The mode= form of the $if directive is used to test +whether readline is in emacs or vi mode. +This may be used in conjunction +with the set keymap command, for instance, to set bindings in +the emacs-standard and emacs-ctlx keymaps only if +readline is starting out in emacs mode. +
term
+The term= form may be used to include terminal-specific +key bindings, perhaps to bind the key sequences output by the +terminal's function keys. The word on the right side of the += + +is tested against the both full name of the terminal and the portion +of the terminal name before the first -. This allows +sun + +to match both +sun + +and +sun-cmd, + +for instance. +
application
+The application construct is used to include +application-specific settings. Each program using the readline +library sets the application name, 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: +

+

+
+$if Bash
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+$endif
+
+ +
+ +
+ +
$endif
+This command, as seen in the previous example, terminates an +$if command. +
$else
+Commands in this branch of the $if directive are executed if +the test fails. +
$include
+This directive takes a single filename as an argument and reads commands +and bindings from that file. For example, the following directive +would read /etc/inputrc: +

+

+
+$include  /etc/inputrc
+
+ +
+ +
+  +

Searching

+ +

+ +Readline provides commands for searching through the command history +(see +HISTORY + + +below) for lines containing a specified string. +There are two search modes: +incremental + +and +non-incremental. + +

+ +Incremental searches begin before the user has finished typing the +search string. +As each character of the search string is typed, readline displays +the next entry from the history matching the string typed so far. +An incremental search requires only as many characters as needed to +find the desired history entry. +The characters present in the value of the isearch-terminators +variable are used to terminate an incremental search. +If that variable has not been assigned a value the Escape and +Control-J characters will terminate an incremental search. +Control-G will abort an incremental search and restore the original +line. +When the search is terminated, the history entry containing the +search string becomes the current line. +

+ +To find other matching entries in the history list, type Control-S or +Control-R as appropriate. +This will search backward or forward in the history for the next +entry matching the search string typed so far. +Any other key sequence bound to a readline command will terminate +the search and execute that command. +For instance, a newline will terminate the search and accept +the line, thereby executing the command from the history list. +

+ +Readline remembers the last incremental search string. If two +Control-Rs are typed without any intervening characters defining a +new search string, any remembered search string is used. +

+ +Non-incremental searches read the entire search string before starting +to search for matching history lines. The search string may be +typed by the user or be part of the contents of the current line. +  +

Readline Command Names

+ +

+ +The following is a list of the names of the commands and the default +key sequences to which they are bound. +Command names without an accompanying key sequence are unbound by default. +In the following descriptions, point refers to the current cursor +position, and mark refers to a cursor position saved by the +set-mark command. +The text between the point and mark is referred to as the region. +  +

Commands for Moving

+ +

+ + +

+
beginning-of-line (C-a) + +
+Move to the start of the current line. +
end-of-line (C-e) + +
+Move to the end of the line. +
forward-char (C-f) + +
+Move forward a character. +
backward-char (C-b) + +
+Move back a character. +
forward-word (M-f) + +
+Move forward to the end of the next word. Words are composed of +alphanumeric characters (letters and digits). +
backward-word (M-b) + +
+Move back to the start of the current or previous word. +Words are composed of alphanumeric characters (letters and digits). +
shell-forward-word + +
+Move forward to the end of the next word. +Words are delimited by non-quoted shell metacharacters. +
shell-backward-word + +
+Move back to the start of the current or previous word. +Words are delimited by non-quoted shell metacharacters. +
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. +
redraw-current-line + +
+Refresh the current line. + +
+  +

Commands for Manipulating the History

+ +

+ + +

+
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 +HISTCONTROL + + +variable. If the line is a modified history +line, then restore the history line to its original state. +
previous-history (C-p) + +
+Fetch the previous command from the history list, moving back in +the list. +
next-history (C-n) + +
+Fetch the next command from the history list, moving forward in the +list. +
beginning-of-history (M-<) + +
+Move to the first line in the history. +
end-of-history (M->) + +
+Move to the end of the input history, i.e., the line currently being +entered. +
reverse-search-history (C-r) + +
+Search backward starting at the current line and moving `up' through +the history as necessary. This is an incremental search. +
forward-search-history (C-s) + +
+Search forward starting at the current line and moving `down' through +the history as necessary. This is an incremental search. +
non-incremental-reverse-search-history (M-p) + +
+Search backward through the history starting at the current line +using a non-incremental search for a string supplied by the user. +
non-incremental-forward-search-history (M-n) + +
+Search forward through the history using a non-incremental search for +a string supplied by the user. +
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. +
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. +
yank-nth-arg (M-C-y) + +
+Insert the first argument to the previous command (usually +the second word on the previous line) at point. +With an argument +n, + +insert the nth word from the previous command (the words +in the previous command begin with word 0). A negative argument +inserts the nth word from the end of the previous command. +Once the argument n is computed, the argument is extracted +as if the "!n" history expansion had been specified. +
yank-last-arg (M-., M-_) + +
+Insert the last argument to the previous command (the last word of +the previous history entry). With an argument, +behave exactly like yank-nth-arg. +Successive calls to yank-last-arg move back through the history +list, inserting the last argument of each line in turn. +The history expansion facilities are used to extract the last argument, +as if the "!$" history expansion had been specified. +
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 +HISTORY EXPANSION + + +below for a description of history expansion. +
history-expand-line (M-^) + +
+Perform history expansion on the current line. +See +HISTORY EXPANSION + + +below for a description of history expansion. +
magic-space + +
+Perform history expansion on the current line and insert a space. +See +HISTORY EXPANSION + + +below for a description of history expansion. +
alias-expand-line + +
+Perform alias expansion on the current line. +See +ALIASES + + +above for a description of alias expansion. +
history-and-alias-expand-line + +
+Perform history and alias expansion on the current line. +
insert-last-argument (M-., M-_) + +
+A synonym for yank-last-arg. +
operate-and-get-next (C-o) + +
+Accept the current line for execution and fetch the next line +relative to the current line from the history for editing. Any +argument is ignored. +
edit-and-execute-command (C-xC-e) + +
+Invoke an editor on the current command line, and execute the result as shell +commands. +Bash attempts to invoke +$VISUAL, + + +$EDITOR, + + +and emacs as the editor, in that order. + +
+  +

Commands for Changing Text

+ +

+ + +

+
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 delete-char, +then return +EOF. + + +
backward-delete-char (Rubout) + +
+Delete the character behind the cursor. When given a numeric argument, +save the deleted text on the kill ring. +
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. +
quoted-insert (C-q, C-v) + +
+Add the next character typed to the line verbatim. This is +how to insert characters like C-q, for example. +
tab-insert (C-v TAB) + +
+Insert a tab character. +
self-insert (a, b, A, 1, !, ...) + +
+Insert the character typed. +
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. +
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. +
upcase-word (M-u) + +
+Uppercase the current (or following) word. With a negative argument, +uppercase the previous word, but do not move point. +
downcase-word (M-l) + +
+Lowercase the current (or following) word. With a negative argument, +lowercase the previous word, but do not move point. +
capitalize-word (M-c) + +
+Capitalize the current (or following) word. With a negative argument, +capitalize the previous word, but do not move point. +
overwrite-mode + +
+Toggle overwrite mode. With an explicit positive numeric argument, +switches to overwrite mode. With an explicit non-positive numeric +argument, switches to insert mode. This command affects only +emacs mode; vi mode does overwrite differently. +Each call to readline() starts in insert mode. +In overwrite mode, characters bound to self-insert replace +the text at point rather than pushing the text to the right. +Characters bound to backward-delete-char replace the character +before point with a space. By default, this command is unbound. + +
+  +

Killing and Yanking

+ +

+ + +

+
kill-line (C-k) + +
+Kill the text from point to the end of the line. +
backward-kill-line (C-x Rubout) + +
+Kill backward to the beginning of the line. +
unix-line-discard (C-u) + +
+Kill backward from point to the beginning of the line. +The killed text is saved on the kill-ring. + +
kill-whole-line + +
+Kill all characters on the current line, no matter where point is. +
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 forward-word. +
backward-kill-word (M-Rubout) + +
+Kill the word behind point. +Word boundaries are the same as those used by backward-word. +
shell-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 shell-forward-word. +
shell-backward-kill-word (M-Rubout) + +
+Kill the word behind point. +Word boundaries are the same as those used by shell-backward-word. +
unix-word-rubout (C-w) + +
+Kill the word behind point, using white space as a word boundary. +The killed text is saved on the kill-ring. +
unix-filename-rubout + +
+Kill the word behind point, using white space and the slash character +as the word boundaries. +The killed text is saved on the kill-ring. +
delete-horizontal-space (M-\) + +
+Delete all spaces and tabs around point. +
kill-region + +
+Kill the text in the current region. +
copy-region-as-kill + +
+Copy the text in the region to the kill buffer. +
copy-backward-word + +
+Copy the word before point to the kill buffer. +The word boundaries are the same as backward-word. +
copy-forward-word + +
+Copy the word following point to the kill buffer. +The word boundaries are the same as forward-word. +
yank (C-y) + +
+Yank the top of the kill ring into the buffer at point. +
yank-pop (M-y) + +
+Rotate the kill ring, and yank the new top. Only works following +yank + +or +yank-pop. + + +
+  +

Numeric Arguments

+ +

+ + +

+
digit-argument (M-0, M-1, ..., M--) + +
+Add this digit to the argument already accumulating, or start a new +argument. M-- starts a negative argument. +
universal-argument + +
+This is another way to specify an argument. +If this command is followed by one or more digits, optionally with a +leading minus sign, those digits define the argument. +If the command is followed by digits, executing +universal-argument + +again ends the numeric argument, but is otherwise ignored. +As a special case, if this command is immediately followed by a +character that is neither a digit 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. + +
+  +

Completing

+ +

+ + +

+
complete (TAB) + +
+Attempt to perform completion on the text before point. +Bash + +attempts completion treating the text as a variable (if the +text begins with $), username (if the text begins with +~), hostname (if the text begins with @), or +command (including aliases and functions) in turn. If none +of these produces a match, filename completion is attempted. +
possible-completions (M-?) + +
+List the possible completions of the text before point. +
insert-completions (M-*) + +
+Insert all completions of the text before point +that would have been generated by +possible-completions. +
menu-complete + +
+Similar to complete, but replaces the word to be completed +with a single match from the list of possible completions. +Repeated execution of menu-complete steps through the list +of possible completions, inserting each match in turn. +At the end of the list of completions, the bell is rung +(subject to the setting of bell-style) +and the original text is restored. +An argument of n moves n positions forward in the list +of matches; a negative argument may be used to move backward +through the list. +This command is intended to be bound to TAB, but is unbound +by default. +
menu-complete-rd + +
+Identical to menu-complete, but moves backward through the list +of possible completions, as if menu-complete had been given a +negative argument. This command is unbound by default. +
delete-char-or-list + +
+Deletes the character under the cursor if not at the beginning or +end of the line (like delete-char). +If at the end of the line, behaves identically to +possible-completions. +This command is unbound by default. +
complete-filename (M-/) + +
+Attempt filename completion on the text before point. +
possible-filename-completions (C-x /) + +
+List the possible completions of the text before point, +treating it as a filename. +
complete-username (M-~) + +
+Attempt completion on the text before point, treating +it as a username. +
possible-username-completions (C-x ~) + +
+List the possible completions of the text before point, +treating it as a username. +
complete-variable (M-$) + +
+Attempt completion on the text before point, treating +it as a shell variable. +
possible-variable-completions (C-x $) + +
+List the possible completions of the text before point, +treating it as a shell variable. +
complete-hostname (M-@) + +
+Attempt completion on the text before point, treating +it as a hostname. +
possible-hostname-completions (C-x @) + +
+List the possible completions of the text before point, +treating it as a hostname. +
complete-command (M-!) + +
+Attempt completion on the text before point, treating +it as a command name. Command completion attempts to +match the text against aliases, reserved words, shell +functions, shell builtins, and finally executable filenames, +in that order. +
possible-command-completions (C-x !) + +
+List the possible completions of the text before point, +treating it as a command name. +
dynamic-complete-history (M-TAB) + +
+Attempt completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. +
dabbrev-expand + +
+Attempt menu completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. +
complete-into-braces (M-{) + +
+Perform filename completion and insert the list of possible completions +enclosed within braces so the list is available to the shell (see +Brace Expansion + +above). + +
+  +

Keyboard Macros

+ +

+ + +

+
start-kbd-macro (C-x () + +
+Begin saving the characters typed into the current keyboard macro. +
end-kbd-macro (C-x )) + +
+Stop saving the characters typed into the current keyboard macro +and store the definition. +
call-last-kbd-macro (C-x e) + +
+Re-execute the last keyboard macro defined, by making the characters +in the macro appear as if typed at the keyboard. + +
+  +

Miscellaneous

+ +

+ + +

+
re-read-init-file (C-x C-r) + +
+Read in the contents of the inputrc file, and incorporate +any bindings or variable assignments found there. +
abort (C-g) + +
+Abort the current editing command and +ring the terminal's bell (subject to the setting of +bell-style). + +
do-uppercase-version (M-a, M-b, M-x, ...) + +
+If the metafied character x is lowercase, run the command +that is bound to the corresponding uppercase character. +
prefix-meta (ESC) + +
+Metafy the next character typed. +ESC + + +f + +is equivalent to +Meta-f. + +
undo (C-_, C-x C-u) + +
+Incremental undo, separately remembered for each line. +
revert-line (M-r) + +
+Undo all changes made to this line. This is like executing the +undo + +command enough times to return the line to its initial state. +
tilde-expand (M-&) + +
+Perform tilde expansion on the current word. +
set-mark (C-@, M-<space>) + +
+Set the mark to the point. If a +numeric argument is supplied, the mark is set to that position. +
exchange-point-and-mark (C-x C-x) + +
+Swap the point with the mark. The current cursor position is set to +the saved position, and the old cursor position is saved as the mark. +
character-search (C-]) + +
+A character is read and point is moved to the next occurrence of that +character. A negative count searches for previous occurrences. +
character-search-backward (M-C-]) + +
+A character is read and point is moved to the previous occurrence of that +character. A negative count searches for subsequent occurrences. +
skip-csi-sequence () + +
+Read enough characters to consume a multi-key sequence such as those +defined for keys like Home and End. Such sequences begin with a +Control Sequence Indicator (CSI), usually ESC-[. If this sequence is +bound to "\[", keys producing such sequences will have no effect +unless explicitly bound to a readline command, instead of inserting +stray characters into the editing buffer. This is unbound by default, +but usually bound to ESC-[. +
insert-comment (M-#) + +
+Without a numeric argument, the value of the readline +comment-begin + +variable is inserted at the beginning of the current line. +If a numeric argument is supplied, this command acts as a toggle: if +the characters at the beginning of the line do not match the value +of comment-begin, the value is inserted, otherwise +the characters in comment-begin are deleted from the beginning of +the line. +In either case, the line is accepted as if a newline had been typed. +The default value of +comment-begin causes this command to make the current line +a shell comment. +If a numeric argument causes the comment character to be removed, the line +will be executed by the shell. +
glob-complete-word (M-g) + +
+The word before point is treated as a pattern for pathname expansion, +with an asterisk implicitly appended. This pattern is used to +generate a list of matching file names for possible completions. +
glob-expand-word (C-x *) + +
+The word before point is treated as a pattern for pathname expansion, +and the list of matching file names is inserted, replacing the word. +If a numeric argument is supplied, an asterisk is appended before +pathname expansion. +
glob-list-expansions (C-x g) + +
+The list of expansions that would have been generated by +glob-expand-word + +is displayed, and the line is redrawn. +If a numeric argument is supplied, an asterisk is appended before +pathname expansion. +
dump-functions + +
+Print all of the functions and their key bindings to the +readline output stream. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an inputrc file. +
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 inputrc file. +
dump-macros + +
+Print all of the readline key sequences bound to macros and the +strings they output. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an inputrc file. +
display-shell-version (C-x C-v) + +
+Display version information about the current instance of +bash. + + +
+  +

Programmable Completion

+ +

+ +When word completion is attempted for an argument to a command for +which a completion specification (a compspec) has been defined +using the complete builtin (see +SHELL BUILTIN COMMANDS + + +below), the programmable completion facilities are invoked. +

+ +First, the command name is identified. +If the command word is the empty string (completion attempted at the +beginning of an empty line), any compspec defined with +the -E option to complete is used. +If a compspec has been defined for that command, the +compspec is used to generate the list of possible completions for the word. +If the command word is a full pathname, a compspec for the full +pathname is searched for first. +If no compspec is found for the full pathname, an attempt is made to +find a compspec for the portion following the final slash. +If those searches to not result in a compspec, any compspec defined with +the -D option to complete is used as the default. +

+ +Once a compspec has been found, it is used to generate the list of +matching words. +If a compspec is not found, the default bash completion as +described above under Completing is performed. +

+ +First, the actions specified by the compspec are used. +Only matches which are prefixed by the word being completed are +returned. +When the +-f + +or +-d + +option is used for filename or directory name completion, the shell +variable +FIGNORE + + +is used to filter the matches. +

+ +Any completions specified by a pathname expansion pattern to the +-G option are generated next. +The words generated by the pattern need not match the word +being completed. +The +GLOBIGNORE + + +shell variable is not used to filter the matches, but the +FIGNORE + + +variable is used. +

+ +Next, the string specified as the argument to the -W option +is considered. +The string is first split using the characters in the +IFS + + +special variable as delimiters. +Shell quoting is honored. +Each word is then expanded using +brace expansion, tilde expansion, parameter and variable expansion, +command substitution, and arithmetic expansion, +as described above under +EXPANSION. + + +The results are split using the rules described above under +Word Splitting. +The results of the expansion are prefix-matched against the word being +completed, and the matching words become the possible completions. +

+ +After these matches have been generated, any shell function or command +specified with the -F and -C options is invoked. +When the command or function is invoked, the +COMP_LINE, + + +COMP_POINT, + + +COMP_KEY, + + +and +COMP_TYPE + + +variables are assigned values as described above under +Shell Variables. +If a shell function is being invoked, the +COMP_WORDS + + +and +COMP_CWORD + + +variables are also set. +When the function or command is invoked, the first argument 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. +

+ +Any function specified with -F is invoked first. +The function may use any of the shell facilities, including the +compgen builtin described below, to generate the matches. +It must put the possible completions in the +COMPREPLY + + +array variable. +

+ +Next, any command specified with the -C option is invoked +in an environment equivalent to command substitution. +It should print a list of completions, one per line, to the +standard output. +Backslash may be used to escape a newline, if necessary. +

+ +After all of the possible completions are generated, any filter +specified with the -X option is applied to the list. +The filter is a pattern as used for pathname expansion; a & +in the pattern is replaced with the text of the word being completed. +A literal & may be escaped with a backslash; the backslash +is removed before attempting a match. +Any completion that matches the pattern will be removed from the list. +A leading ! negates the pattern; in this case any completion +not matching the pattern will be removed. +

+ +Finally, any prefix and suffix specified with the -P and -S +options are added to each member of the completion list, and the result is +returned to the readline completion code as the list of possible +completions. +

+ +If the previously-applied actions do not generate any matches, and the +-o dirnames option was supplied to complete when the +compspec was defined, directory name completion is attempted. +

+ +If the -o plusdirs option was supplied to complete when the +compspec was defined, directory name completion is attempted and any +matches are added to the results of the other actions. +

+ +By default, if a compspec is found, whatever it generates is returned +to the completion code as the full set of possible completions. +The default bash completions are not attempted, and the readline +default of filename completion is disabled. +If the -o bashdefault option was supplied to complete when +the compspec was defined, the bash default completions are attempted +if the compspec generates no matches. +If the -o default option was supplied to complete when the +compspec was defined, readline's default completion will be performed +if the compspec (and, if attempted, the default bash completions) +generate no matches. +

+ +When a compspec indicates that directory name completion is desired, +the programmable completion functions force readline to append a slash +to completed names which are symbolic links to directories, subject to +the value of the mark-directories readline variable, regardless +of the setting of the mark-symlinked-directories readline variable. +

+ +There is some support for dynamically modifying completions. This is +most useful when used in combination with a default completion specified +with complete -D. +It's possible for shell functions executed as completion +handlers to indicate that completion should be retried by returning an +exit status of 124. If a shell function returns 124, and changes +the compspec associated with the command on which completion is being +attempted (supplied as the first argument when the function is executed), +programmable completion restarts from the beginning, with an +attempt to find a compspec for that command. This allows a set of +completions to be built dynamically as completion is attempted, rather than +being loaded all at once. +

+ +For instance, assuming that there is a library of compspecs, each kept in a +file corresponding to the name of the command, the following default +completion function would load completions dynamically: +

+ +_completion_loader() +
+ +{ +
+ +       . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
+
+ +} +
+ +complete -D -F _completion_loader +
+ +
+  +

HISTORY

+ +When the +-o history + +option to the +set + +builtin is enabled, the shell provides access to the +command history, +the list of commands previously typed. +The value of the +HISTSIZE + + +variable is used as the +number of commands to save in a history list. +The text of the last +HISTSIZE + + +commands (default 500) is saved. The shell +stores each command in the history list prior to parameter and +variable expansion (see +EXPANSION + + +above) but after history expansion is performed, subject to the +values of the shell variables +HISTIGNORE + + +and +HISTCONTROL. + + +

+ +On startup, the history is initialized from the file named by +the variable +HISTFILE + + +(default ~/.bash_history). +The file named by the value of +HISTFILE + + +is truncated, if necessary, to contain no more than +the number of lines specified by the value of +HISTFILESIZE. + + +When the history file is read, +lines beginning with the history comment character followed immediately +by a digit are interpreted as timestamps for the preceding history line. +These timestamps are optionally displayed depending on the value of the +HISTTIMEFORMAT + + +variable. +When an interactive shell exits, the last +$HISTSIZE + + +lines are copied from the history list to +$HISTFILE. + + +If the +histappend + +shell option is enabled +(see the description of +shopt + +under +SHELL BUILTIN COMMANDS + + +below), the lines are appended to the history file, +otherwise the history file is overwritten. +If +HISTFILE + + +is unset, or if the history file is unwritable, the history is +not saved. +If the +HISTTIMEFORMAT + + +variable is set, time stamps are written to the history file, marked +with the history comment character, so +they may be preserved across shell sessions. +This uses the history comment character to distinguish timestamps from +other history lines. +After saving the history, the history file is truncated +to contain no more than +HISTFILESIZE + + +lines. If +HISTFILESIZE + + +is not set, no truncation is performed. +

+ +The builtin command +fc + +(see +SHELL BUILTIN COMMANDS + + +below) may be used to list or edit and re-execute a portion of +the history list. +The +history + +builtin may be used to display or modify the history list and +manipulate the history file. +When using command-line editing, search commands +are available in each editing mode that provide access to the +history list. +

+ +The shell allows control over which commands are saved on the history +list. The +HISTCONTROL + + +and +HISTIGNORE + + +variables may be set to cause the shell to save only a subset of the +commands entered. +The +cmdhist + +shell option, if enabled, causes the shell to attempt to save each +line of a multi-line command in the same history entry, adding +semicolons where necessary to preserve syntactic correctness. +The +lithist + +shell option causes the shell to save the command with embedded newlines +instead of semicolons. See the description of the +shopt + +builtin below under +SHELL BUILTIN COMMANDS + + +for information on setting and unsetting shell options. +  +

HISTORY EXPANSION

+ +

+ +The shell supports a history expansion feature that +is similar to the history expansion in +csh. + +This section describes what syntax features are available. This +feature is enabled by default for interactive shells, and can be +disabled using the ++H + +option to the +set + +builtin command (see +SHELL BUILTIN COMMANDS + + +below). Non-interactive shells do not perform history expansion +by default. +

+ +History expansions introduce words from the history list into +the input stream, making it easy to repeat commands, insert the +arguments to a previous command into the current input line, or +fix errors in previous commands quickly. +

+ +History expansion is performed immediately after a complete line +is read, before the shell breaks it into words. +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 event, +and the portions of that line that are acted upon are words. +Various modifiers are available to manipulate the selected words. +The line is broken into words in the same fashion as when reading input, +so that several metacharacter-separated words surrounded by +quotes are considered one word. +History expansions are introduced by the appearance of the +history expansion character, which is ! by default. +Only backslash (\) and single quotes can quote +the history expansion character. +

+ +Several characters inhibit history expansion if found immediately +following the history expansion character, even if it is unquoted: +space, tab, newline, carriage return, and =. +If the extglob shell option is enabled, ( will also +inhibit expansion. +

+ +Several shell options settable with the +shopt + +builtin may be used to tailor the behavior of history expansion. +If the +histverify + +shell option is enabled (see the description of the +shopt + +builtin below), and +readline + +is being used, history substitutions are not immediately passed to +the shell parser. +Instead, the expanded line is reloaded into the +readline + +editing buffer for further modification. +If +readline + +is being used, and the +histreedit + +shell option is enabled, a failed history substitution will be reloaded +into the +readline + +editing buffer for correction. +The +-p + +option to the +history + +builtin command may be used to see what a history expansion will +do before using it. +The +-s + +option to the +history + +builtin may be used to add commands to the end of the history list +without actually executing them, so that they are available for +subsequent recall. +

+ +The shell allows control of the various characters used by the +history expansion mechanism (see the description of +histchars + +above under +Shell Variables). + +The shell uses +the history comment character to mark history timestamps when +writing the history file. +  +

Event Designators

+ +

+ +An event designator is a reference to a command line entry in the +history list. +

+ + +

+
! + +
+Start a history substitution, except when followed by a +blank, + +newline, carriage return, = +or ( (when the extglob shell option is enabled using +the shopt builtin). +
!n + +
+Refer to command line +n. + +
!-n + +
+Refer to the current command line minus +n. + +
!! + +
+Refer to the previous command. This is a synonym for `!-1'. +
!string + +
+Refer to the most recent command starting with +string. + +
!?string[?] + +
+Refer to the most recent command containing +string. + +The trailing ? may be omitted if +string + +is followed immediately by a newline. +
^string1^string2^ + +
+Quick substitution. Repeat the last command, replacing +string1 + +with +string2. + +Equivalent to +``!!:s/string1/string2/'' +(see Modifiers below). +
!# + +
+The entire command line typed so far. + +
+  +

Word Designators

+ +

+ +Word designators are used to select desired words from the event. +A +: + +separates the event specification from the word designator. +It may be omitted if the word designator begins with a +^, + +$, + +*, + +-, + +or +%. + +Words are numbered from the beginning of the line, +with the first word being denoted by 0 (zero). +Words are inserted into the current line separated by single spaces. +

+ + +

+
0 (zero) + +
+The zeroth word. For the shell, this is the command +word. +
n + +
+The nth word. +
^ + +
+The first argument. That is, word 1. +
$ + +
+The last argument. +
% + +
+The word matched by the most recent `?string?' search. +
x-y + +
+A range of words; `-y' abbreviates `0-y'. +
* + +
+All of the words but the zeroth. This is a synonym +for `1-$'. It is not an error to use +* + +if there is just one +word in the event; the empty string is returned in that case. +
x* + +
+Abbreviates x-$. +
x- + +
+Abbreviates x-$ like x*, but omits the last word. + +
+

+ +If a word designator is supplied without an event specification, the +previous command is used as the event. +  +

Modifiers

+ +

+ +After the optional word designator, there may appear a sequence of +one or more of the following modifiers, each preceded by a `:'. +

+ + +

+ +

+
h + +
+Remove a trailing file name component, leaving only the head. +
t + +
+Remove all leading file name components, leaving the tail. +
r + +
+Remove a trailing suffix of the form .xxx, leaving the +basename. +
e + +
+Remove all but the trailing suffix. +
p + +
+Print the new command but do not execute it. +
q + +
+Quote the substituted words, escaping further substitutions. +
x + +
+Quote the substituted words as with +q, + +but break into words at +blanks + +and newlines. +
s/old/new/ + +
+Substitute +new + +for the first occurrence of +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 +old + +and +new + +with a single backslash. If & appears in +new, + +it is replaced by +old. + +A single backslash will quote the &. If +old + +is null, it is set to the last +old + +substituted, or, if no previous history substitutions took place, +the last +string + +in a +!?string[?] + +search. +
& + +
+Repeat the previous substitution. +
g + +
+Cause changes to be applied over the entire event line. This is +used in conjunction with `:s' (e.g., `:gs/old/new/') +or `:&'. If used with +`:s', 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 a may be used as a synonym for g. +
G + +
+Apply the following `s' modifier once to each word in the event line. + +
+  +

SHELL BUILTIN COMMANDS

+ + + +

+ +Unless otherwise noted, each builtin command documented in this +section as accepting options preceded by +- + +accepts +-- + +to signify the end of the options. +The :, true, false, and test builtins +do not accept options and do not treat -- specially. +The exit, logout, break, continue, let, +and shift builtins accept and process arguments beginning with +- without requiring --. +Other builtins that accept arguments but are not specified as accepting +options interpret arguments beginning with - as invalid options and +require -- to prevent this interpretation. +

+ +

+
: [arguments]
+ +No effect; the command does nothing beyond expanding +arguments + +and performing any specified +redirections. A zero exit code is returned. +
. filename [arguments]
+ +
source filename [arguments]
+ +Read and execute commands from +filename + +in the current +shell environment and return the exit status of the last command +executed from +filename. + +If +filename + +does not contain a slash, file names in +PATH + + +are used to find the directory containing +filename. + +The file searched for in +PATH + + +need not be executable. +When bash is not in posix mode, the current directory is +searched if no file is found in +PATH. + + +If the +sourcepath + +option to the +shopt + +builtin command is turned off, the +PATH + + +is not searched. +If any arguments are supplied, they become the positional +parameters when filename 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 +filename + +is not found or cannot be read. +
alias [-p] [name[=value] ...]
+Alias with no arguments or with the +-p + +option prints the list of aliases in the form +alias name=value on standard output. +When arguments are supplied, an alias is defined for +each name whose value is given. +A trailing space in value causes the next word to be +checked for alias substitution when the alias is expanded. +For each name in the argument list for which no value +is supplied, the name and value of the alias is printed. +Alias returns true unless a name is given for which +no alias has been defined. +
bg [jobspec ...]
+Resume each suspended job jobspec in the background, as if it +had been started with +&. + +If +jobspec + +is not present, the shell's notion of the current job is used. +bg + +jobspec + +returns 0 unless run when job control is disabled or, when run with +job control enabled, any specified jobspec was not found +or was started without job control. +
bind [-m keymap] [-lpsvPSV]
+ +
bind [-m keymap] [-q function] [-u function] [-r keyseq]
+
bind [-m keymap] -f filename
+
bind [-m keymap] -x keyseq:shell-command
+
bind [-m keymap] keyseq:function-name
+
bind readline-command
+ +Display current +readline + +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 +.inputrc, + +but each binding or command must be passed as a separate argument; +e.g., '"\C-x\C-r": re-read-init-file'. +Options, if supplied, have the following meanings: +
+ +
+
-m keymap + +
+Use +keymap + +as the keymap to be affected by the subsequent bindings. +Acceptable +keymap + +names are +emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, +vi-move, vi-command, and +vi-insert. + +vi is equivalent to vi-command; emacs is +equivalent to emacs-standard. +
-l + +
+List the names of all readline functions. +
-p + +
+Display readline function names and bindings in such a way +that they can be re-read. +
-P + +
+List current readline function names and bindings. +
-s + +
+Display readline key sequences bound to macros and the strings +they output in such a way that they can be re-read. +
-S + +
+Display readline key sequences bound to macros and the strings +they output. +
-v + +
+Display readline variable names and values in such a way that they +can be re-read. +
-V + +
+List current readline variable names and values. +
-f filename + +
+Read key bindings from filename. +
-q function + +
+Query about which keys invoke the named function. +
-u function + +
+Unbind all keys bound to the named function. +
-r keyseq + +
+Remove any current binding for keyseq. +
-x keyseq:shell-command + +
+Cause shell-command to be executed whenever keyseq is +entered. +When shell-command is executed, the shell sets the +READLINE_LINE + + +variable to the contents of the readline line buffer and the +READLINE_POINT + + +variable to the current location of the insertion point. +If the executed command changes the value of +READLINE_LINE + + +or +READLINE_POINT, + + +those new values will be reflected in the editing state. + +
+

+ +The return value is 0 unless an unrecognized option is given or an +error occurred. +

+ +
break [n]
+Exit from within a +for, + +while, + +until, + +or +select + +loop. If n is specified, break n levels. +n + +must be >= 1. If +n + +is greater than the number of enclosing loops, all enclosing loops +are exited. +The return value is 0 unless n is not greater than or equal to 1. +
builtin shell-builtin [arguments]
+Execute the specified shell builtin, passing it +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 cd builtin is commonly redefined this way. +The return status is false if +shell-builtin + +is not a shell builtin command. +
caller [expr]
+Returns the context of any active subroutine call (a shell function or +a script executed with the . or source builtins. +Without expr, caller displays the line number and source +filename of the current subroutine call. +If a non-negative integer is supplied as expr, caller +displays the line number, subroutine name, and source file corresponding +to that position in the current execution call stack. This extra +information may be used, for example, to print a stack trace. The +current frame is frame 0. +The return value is 0 unless the shell is not executing a subroutine +call or expr does not correspond to a valid position in the +call stack. +
cd [-L|-P] [dir]
+Change the current directory to dir. The variable +HOME + + +is the +default +dir. + +The variable +CDPATH + + +defines the search path for the directory containing +dir. + +Alternative directory names in +CDPATH + + +are separated by a colon (:). A null directory name in +CDPATH + + +is the same as the current directory, i.e., ``.''. If +dir + +begins with a slash (/), +then +CDPATH + + +is not used. The +-P + +option says to use the physical directory structure instead of +following symbolic links (see also the +-P + +option to the +set + +builtin command); the +-L + +option forces symbolic links to be followed. An argument of +- + +is equivalent to +$OLDPWD. + + +If a non-empty directory name from +CDPATH + + +is used, or if +- is the first argument, and the directory change is +successful, the absolute pathname of the new working directory is +written to the standard output. +The return value is true if the directory was successfully changed; +false otherwise. +
command [-pVv] command [arg ...]
+Run +command + +with +args + +suppressing the normal shell function lookup. Only builtin +commands or commands found in the +PATH + + +are executed. If the +-p + +option is given, the search for +command + +is performed using a default value for +PATH + + +that is guaranteed to find all of the standard utilities. +If either the +-V + +or +-v + +option is supplied, a description of +command + +is printed. The +-v + +option causes a single word indicating the command or file name +used to invoke +command + +to be displayed; the +-V + +option produces a more verbose description. +If the +-V + +or +-v + +option is supplied, the exit status is 0 if +command + +was found, and 1 if not. If neither option is supplied and +an error occurred or +command + +cannot be found, the exit status is 127. Otherwise, the exit status of the +command + +builtin is the exit status of +command. + +
compgen [option] [word]
+Generate possible completion matches for word according to +the options, which may be any option accepted by the +complete + +builtin with the exception of -p and -r, and write +the matches to the standard output. +When using the -F or -C options, the various shell variables +set by the programmable completion facilities, while available, will not +have useful values. +

+The matches will be generated in the same way as if the programmable +completion code had generated them directly from a completion specification +with the same flags. +If word is specified, only those completions matching word +will be displayed. +

+The return value is true unless an invalid option is supplied, or no +matches were generated. +

complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command]
+
+ +[-X filterpat] [-P prefix] [-S suffix] name [name ...] + +
complete -pr [-DE] [name ...]
+ +Specify how arguments to each name should be completed. +If the -p option is supplied, or if no options are supplied, +existing completion specifications are printed in a way that allows +them to be reused as input. +The -r option removes a completion specification for +each name, or, if no names are supplied, all +completion specifications. +The -D option indicates that the remaining options and actions should +apply to the ``default'' command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The -E option indicates that the remaining options and actions should +apply to ``empty'' command completion; that is, completion attempted on a +blank line. +

+The process of applying these completion specifications when word completion +is attempted is described above under Programmable Completion. +

+Other options, if specified, have the following meanings. +The arguments to the -G, -W, and -X options +(and, if necessary, the -P and -S options) +should be quoted to protect them from expansion before the +complete + +builtin is invoked. +

+ +
+
-o comp-option
+The comp-option controls several aspects of the compspec's behavior +beyond the simple generation of completions. +comp-option may be one of: +
+
+
bashdefault + +
+Perform the rest of the default bash completions if the compspec +generates no matches. +
default + +
+Use readline's default filename completion if the compspec generates +no matches. +
dirnames + +
+Perform directory name completion if the compspec generates no matches. +
filenames + +
+Tell readline that the compspec generates filenames, so it can perform any +filename-specific processing (like adding a slash to directory names, +quoting special characters, or suppressing trailing spaces). +Intended to be used with shell functions. +
nospace + +
+Tell readline not to append a space (the default) to words completed at +the end of the line. +
plusdirs + +
+After any matches defined by the compspec are generated, +directory name completion is attempted and any +matches are added to the results of the other actions. +
+ +
-A action
+The action may be one of the following to generate a list of possible +completions: +
+
+
alias + +
+Alias names. May also be specified as -a. +
arrayvar + +
+Array variable names. +
binding + +
+Readline key binding names. +
builtin + +
+Names of shell builtin commands. May also be specified as -b. +
command + +
+Command names. May also be specified as -c. +
directory + +
+Directory names. May also be specified as -d. +
disabled + +
+Names of disabled shell builtins. +
enabled + +
+Names of enabled shell builtins. +
export + +
+Names of exported shell variables. May also be specified as -e. +
file + +
+File names. May also be specified as -f. +
function + +
+Names of shell functions. +
group + +
+Group names. May also be specified as -g. +
helptopic + +
+Help topics as accepted by the help builtin. +
hostname + +
+Hostnames, as taken from the file specified by the +HOSTFILE + + +shell variable. +
job + +
+Job names, if job control is active. May also be specified as -j. +
keyword + +
+Shell reserved words. May also be specified as -k. +
running + +
+Names of running jobs, if job control is active. +
service + +
+Service names. May also be specified as -s. +
setopt + +
+Valid arguments for the -o option to the set builtin. +
shopt + +
+Shell option names as accepted by the shopt builtin. +
signal + +
+Signal names. +
stopped + +
+Names of stopped jobs, if job control is active. +
user + +
+User names. May also be specified as -u. +
variable + +
+Names of all shell variables. May also be specified as -v. +
+ +
-G globpat
+The pathname expansion pattern globpat is expanded to generate +the possible completions. +
-W wordlist
+The wordlist is split using the characters in the +IFS + + +special variable as delimiters, and each resultant word is expanded. +The possible completions are the members of the resultant list which +match the word being completed. +
-C command
+command is executed in a subshell environment, and its output is +used as the possible completions. +
-F function
+The shell function function is executed in the current shell +environment. +When it finishes, the possible completions are retrieved from the value +of the +COMPREPLY + + +array variable. +
-X filterpat
+filterpat is a pattern as used for pathname expansion. +It is applied to the list of possible completions generated by the +preceding options and arguments, and each completion matching +filterpat is removed from the list. +A leading ! in filterpat negates the pattern; in this +case, any completion not matching filterpat is removed. +
-P prefix
+prefix is added at the beginning of each possible completion +after all other options have been applied. +
-S suffix
+suffix is appended to each possible completion +after all other options have been applied. + +
+

+ +The return value is true unless an invalid option is supplied, an option +other than -p or -r is supplied without a name +argument, an attempt is made to remove a completion specification for +a name for which no specification exists, or +an error occurs adding a completion specification. +

+ +
compopt [-o option] [-DE] [+o option] [name]
+Modify completion options for each name according to the +options, or for the +currently-execution completion if no names are supplied. +If no options are given, display the completion options for each +name or the current completion. +The possible values of option are those valid for the complete +builtin described above. +The -D option indicates that the remaining options should +apply to the ``default'' command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The -E option indicates that the remaining options should +apply to ``empty'' command completion; that is, completion attempted on a +blank line. +
+

+ +The return value is true unless an invalid option is supplied, an attempt +is made to modify the options for a name for which no completion +specification exists, or an output error occurs. +

+
continue [n]
+Resume the next iteration of the enclosing +for, + +while, + +until, + +or +select + +loop. +If +n + +is specified, resume at the nth enclosing loop. +n + +must be >= 1. If +n + +is greater than the number of enclosing loops, the last enclosing loop +(the ``top-level'' loop) is resumed. +The return value is 0 unless n is not greater than or equal to 1. +
declare [-aAfFilrtux] [-p] [name[=value] ...]
+ +
typeset [-aAfFilrtux] [-p] [name[=value] ...]
+ +Declare variables and/or give them attributes. +If no names are given then display the values of variables. +The +-p + +option will display the attributes and values of each +name. + +When +-p + +is used with name arguments, additional options are ignored. +When +-p + +is supplied without name arguments, it will display the attributes +and values of all variables having the attributes specified by the +additional options. +If no other options are supplied with -p, declare will display +the attributes and values of all shell variables. The -f option +will restrict the display to shell functions. +The +-F + +option inhibits the display of function definitions; only the +function name and attributes are printed. +If the extdebug shell option is enabled using shopt, +the source file name and line number where the function is defined +are displayed as well. The +-F + +option implies +-f. + +The following options can +be used to restrict output to variables with the specified attribute or +to give variables attributes: +
+ +
+
-a + +
+Each name is an indexed array variable (see +Arrays + +above). +
-A + +
+Each name is an associative array variable (see +Arrays + +above). +
-f + +
+Use function names only. +
-i + +
+The variable is treated as an integer; arithmetic evaluation (see +ARITHMETIC EVALUATION + + +above) is performed when the variable is assigned a value. +
-l + +
+When the variable is assigned a value, all upper-case characters are +converted to lower-case. +The upper-case attribute is disabled. +
-r + +
+Make names readonly. These names cannot then be assigned values +by subsequent assignment statements or unset. +
-t + +
+Give each name the trace attribute. +Traced functions inherit the DEBUG and RETURN traps from +the calling shell. +The trace attribute has no special meaning for variables. +
-u + +
+When the variable is assigned a value, all lower-case characters are +converted to upper-case. +The lower-case attribute is disabled. +
-x + +
+Mark names for export to subsequent commands via the environment. + +
+

+ +Using `+' instead of `-' +turns off the attribute instead, +with the exceptions that +a +may not be used to destroy an array variable and +r will not +remove the readonly attribute. +When used in a function, +makes each +name local, as with the +local + +command. +If a variable name is followed by =value, the value of +the variable is set to value. +The return value is 0 unless an invalid option is encountered, +an attempt is made to define a function using + +-f foo=bar, +an attempt is made to assign a value to a readonly variable, +an attempt is made to assign a value to an array variable without +using the compound assignment syntax (see +Arrays + +above), one of the names is not a valid shell variable name, +an attempt is made to turn off readonly status for a readonly variable, +an attempt is made to turn off array status for an array variable, +or an attempt is made to display a non-existent function with -f. +

+ +
dirs [+n] [-n] [-cplv] + +
+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 +pushd + +command; the +popd + +command removes entries from the list. +
+ +
+
+n
+Displays the nth entry counting from the left of the list +shown by +dirs + +when invoked without options, starting with zero. +
-n
+Displays the nth entry counting from the right of the list +shown by +dirs + +when invoked without options, starting with zero. +
-c + +
+Clears the directory stack by deleting all of the entries. +
-l + +
+Produces a longer listing; the default listing format uses a +tilde to denote the home directory. +
-p + +
+Print the directory stack with one entry per line. +
-v + +
+Print the directory stack with one entry per line, +prefixing each entry with its index in the stack. + +
+

+ +The return value is 0 unless an +invalid option is supplied or n indexes beyond the end +of the directory stack. +

+ +
disown [-ar] [-h] [jobspec ...]
+Without options, each +jobspec + +is removed from the table of active jobs. +If +jobspec + +is not present, and neither -a nor -r is supplied, +the shell's notion of the current job is used. +If the -h option is given, each +jobspec + +is not removed from the table, but is marked so that +SIGHUP + + +is not sent to the job if the shell receives a +SIGHUP. + + +If no +jobspec + +is present, and neither the +-a + +nor the +-r + +option is supplied, the current job is used. +If no +jobspec + +is supplied, the +-a + +option means to remove or mark all jobs; the +-r + +option without a +jobspec + +argument restricts operation to running jobs. +The return value is 0 unless a +jobspec + +does not specify a valid job. +
echo [-neE] [arg ...]
+Output the args, separated by spaces, followed by a newline. +The return status is always 0. +If -n is specified, the trailing newline is +suppressed. If the -e option is given, interpretation of +the following backslash-escaped characters is enabled. The +-E + +option disables the interpretation of these escape characters, +even on systems where they are interpreted by default. +The xpg_echo shell option may be used to +dynamically determine whether or not echo expands these +escape characters by default. +echo + +does not interpret -- to mean the end of options. +echo + +interprets the following escape sequences: +
+ +
+
\a + +
+alert (bell) +
\b + +
+backspace +
\c + +
+suppress further output +
\e + +
+an escape character +
\f + +
+form feed +
\n + +
+new line +
\r + +
+carriage return +
\t + +
+horizontal tab +
\v + +
+vertical tab +
\\ + +
+backslash +
\0nnn + +
+the eight-bit character whose value is the octal value nnn +(zero to three octal digits) +
\xHH + +
+the eight-bit character whose value is the hexadecimal value HH +(one or two hex digits) + +
+ +
enable [-a] [-dnps] [-f filename] [name ...]
+Enable and disable builtin shell commands. +Disabling a builtin allows a disk command which has the same name +as a shell builtin to be executed without specifying a full pathname, +even though the shell normally searches for builtins before disk commands. +If -n is used, each name +is disabled; otherwise, +names are enabled. For example, to use the +test + +binary found via the +PATH + + +instead of the shell builtin version, run +enable -n test. + +The +-f + +option means to load the new builtin command +name + +from shared object +filename, + +on systems that support dynamic loading. The +-d + +option will delete a builtin previously loaded with +-f. + +If no name arguments are given, or if the +-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 -n is supplied, only disabled builtins are printed. +If -a is supplied, the list printed includes all builtins, with an +indication of whether or not each is enabled. +If -s is supplied, the output is restricted to the POSIX +special builtins. +The return value is 0 unless a +name + +is not a shell builtin or there is an error loading a new builtin +from a shared object. +
eval [arg ...]
+The args 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 +eval. + +If there are no +args, + +or only null arguments, +eval + +returns 0. +
exec [-cl] [-a name] [command [arguments]]
+If +command + +is specified, it replaces the shell. +No new process is created. The +arguments + +become the arguments to command. +If the +-l + +option is supplied, +the shell places a dash at the beginning of the zeroth argument passed to +command. + +This is what +login(1) + +does. The +-c + +option causes +command + +to be executed with an empty environment. If +-a + +is supplied, the shell passes +name + +as the zeroth argument to the executed command. If +command + +cannot be executed for some reason, a non-interactive shell exits, +unless the shell option +execfail + +is enabled, in which case it returns failure. +An interactive shell returns failure if the file cannot be executed. +If +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. +
exit [n]
+Cause the shell to exit +with a status of n. If +n + +is omitted, the exit status +is that of the last command executed. +A trap on +EXIT + + +is executed before the shell terminates. +
export [-fn] [name[=word]] ...
+ +
export -p + +
+ +The supplied +names + +are marked for automatic export to the environment of +subsequently executed commands. If the +-f + +option is given, +the +names + +refer to functions. +If no +names + +are given, or if the +-p + +option is supplied, a list +of all names that are exported in this shell is printed. +The +-n + +option causes the export property to be removed from each +name. +If a variable name is followed by =word, the value of +the variable is set to word. +export + +returns an exit status of 0 unless an invalid option is +encountered, +one of the names is not a valid shell variable name, or +-f + +is supplied with a +name + +that is not a function. +
fc [-e ename] [-lnr] [first] [last]
+ +
fc -s [pat=rep] [cmd]
+ +Fix Command. In the first form, a range of commands from +first + +to +last + +is selected from the history list. +First + +and +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 +last + +is not specified it is set to +the current command for listing (so that + +fc -l -10 +prints the last 10 commands) and to +first + +otherwise. +If +first + +is not specified it is set to the previous +command for editing and -16 for listing. +

+The +-n + +option suppresses +the command numbers when listing. The +-r + +option reverses the order of +the commands. If the +-l + +option is given, +the commands are listed on +standard output. Otherwise, the editor given by +ename + +is invoked +on a file containing those commands. If +ename + +is not given, the +value of the +FCEDIT + + +variable is used, and +the value of +EDITOR + + +if +FCEDIT + + +is not set. If neither variable is set, + +vi + +is used. When editing is complete, the edited commands are +echoed and executed. +

+In the second form, command is re-executed after each instance +of pat is replaced by rep. +A useful alias to use with this is + +r='fc -s', +so that typing + +r cc +runs the last command beginning with + +cc +and typing + +r +re-executes the last command. +

+If the first form is used, the return value is 0 unless an invalid +option is encountered or +first + +or +last + +specify history lines out of range. +If the +-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 +cmd + +does not specify a valid history line, in which case +fc + +returns failure. +

fg [jobspec]
+Resume +jobspec + +in the foreground, and make it the current job. +If +jobspec + +is not present, the shell's notion of the current job 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 +jobspec + +does not specify a valid job or +jobspec + +specifies a job that was started without job control. +
getopts optstring name [args]
+getopts + +is used by shell procedures to parse positional parameters. +optstring + +contains the option characters to be recognized; if a character +is followed by a colon, the option is expected to have an +argument, which should be separated from it by white space. +The colon and question mark characters may not be used as +option characters. +Each time it is invoked, +getopts + +places the next option in the shell variable +name, + +initializing +name + +if it does not exist, +and the index of the next argument to be processed into the +variable +OPTIND. + + +OPTIND + + +is initialized to 1 each time the shell or a shell script +is invoked. When an option requires an argument, +getopts + +places that argument into the variable +OPTARG. + + +The shell does not reset +OPTIND + + +automatically; it must be manually reset between multiple +calls to +getopts + +within the same shell invocation if a new set of parameters +is to be used. +

+When the end of options is encountered, getopts exits with a +return value greater than zero. +OPTIND + + +is set to the index of the first non-option argument, +and name is set to ?. +

+getopts + +normally parses the positional parameters, but if more arguments are +given in +args, + +getopts + +parses those instead. +

+getopts + +can report errors in two ways. If the first character of +optstring + +is a colon, +silent + +error reporting is used. In normal operation diagnostic messages +are printed when invalid options or missing option arguments are +encountered. +If the variable +OPTERR + + +is set to 0, no error messages will be displayed, even if the first +character of +optstring + +is not a colon. +

+If an invalid option is seen, +getopts + +places ? into +name + +and, if not silent, +prints an error message and unsets +OPTARG. + + +If +getopts + +is silent, +the option character found is placed in +OPTARG + + +and no diagnostic message is printed. +

+If a required argument is not found, and +getopts + +is not silent, +a question mark (?) is placed in +name, + +OPTARG + + +is unset, and a diagnostic message is printed. +If +getopts + +is silent, then a colon (:) is placed in +name + +and +OPTARG + + +is set to the option character found. +

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

hash [-lr] [-p filename] [-dt] [name]
+For each +name, + +the full file name of the command is determined by searching +the directories in +$PATH + +and remembered. +If the +-p + +option is supplied, no path search is performed, and +filename + +is used as the full file name of the command. +The +-r + +option causes the shell to forget all +remembered locations. +The +-d + +option causes the shell to forget the remembered location of each name. +If the +-t + +option is supplied, the full pathname to which each name corresponds +is printed. If multiple name arguments are supplied with -t, +the name is printed before the hashed full pathname. +The +-l + +option causes output to be displayed in a format that may be reused as input. +If no arguments are given, or if only -l is supplied, +information about remembered commands is printed. +The return status is true unless a +name + +is not found or an invalid option is supplied. +
help [-dms] [pattern]
+Display helpful information about builtin commands. If +pattern + +is specified, +help + +gives detailed help on all commands matching +pattern; + +otherwise help for all the builtins and shell control structures +is printed. +
+ +
+
-d + +
+Display a short description of each pattern +
-m + +
+Display the description of each pattern in a manpage-like format +
-s + +
+Display only a short usage synopsis for each pattern + +
+ +The return status is 0 unless no command matches +pattern. + +
history [n]
+ +
history -c
+
history -d offset
+
history -anrw [filename]
+
history -p arg [arg ...]
+
history -s arg [arg ...]
+ +With no options, display the command +history list with line numbers. Lines listed +with a +* + +have been modified. An argument of +n + +lists only the last +n + +lines. +If the shell variable +HISTTIMEFORMAT + + +is set and not null, +it is used as a format string for strftime(3) to display +the time stamp associated with each displayed history entry. +No intervening blank is printed between the formatted time stamp +and the history line. +If filename is supplied, it is used as the +name of the history file; if not, the value of +HISTFILE + + +is used. Options, if supplied, have the following meanings: +
+ +
+
-c + +
+Clear the history list by deleting all the entries. +
-d offset
+Delete the history entry at position offset. +
-a + +
+Append the ``new'' history lines (history lines entered since the +beginning of the current bash session) to the history file. +
-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 bash session. +
-r + +
+Read the contents of the history file +and use them as the current history. +
-w + +
+Write the current history to the history file, overwriting the +history file's contents. +
-p + +
+Perform history substitution on the following args and display +the result on the standard output. +Does not store the results in the history list. +Each arg must be quoted to disable normal history expansion. +
-s + +
+Store the +args + +in the history list as a single entry. The last command in the +history list is removed before the +args + +are added. + +
+

+ +If the +HISTTIMEFORMAT + + +variable is set, the time stamp information +associated with each history entry is written to the history file, +marked with the history comment character. +When the history file is read, lines beginning with the history +comment character followed immediately by a digit are interpreted +as timestamps for the previous history line. +The return value is 0 unless an invalid option is encountered, an +error occurs while reading or writing the history file, an invalid +offset is supplied as an argument to -d, or the +history expansion supplied as an argument to -p fails. +

+ +
jobs [-lnprs] [ jobspec ... ]
+ +
jobs -x command [ args ... ]
+ +The first form lists the active jobs. The options have the following +meanings: +
+ +
+
-l + +
+List process IDs +in addition to the normal information. +
-p + +
+List only the process ID of the job's process group +leader. +
-n + +
+Display information only about jobs that have changed status since +the user was last notified of their status. +
-r + +
+Restrict output to running jobs. +
-s + +
+Restrict output to stopped jobs. + +
+

+ +If +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 +jobspec + +is supplied. +

+ +If the +-x + +option is supplied, +jobs + +replaces any +jobspec + +found in +command + +or +args + +with the corresponding process group ID, and executes +command + +passing it +args, + +returning its exit status. +

+ +
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
+ +
kill -l [sigspec | exit_status]
+ +Send the signal named by +sigspec + +or +signum + +to the processes named by +pid + +or +jobspec. + +sigspec + +is either a case-insensitive signal name such as +SIGKILL + + +(with or without the +SIG + + +prefix) or a signal number; +signum + +is a signal number. +If +sigspec + +is not present, then +SIGTERM + + +is assumed. +An argument of +-l + +lists the signal names. +If any arguments are supplied when +-l + +is given, the names of the signals corresponding to the arguments are +listed, and the return status is 0. +The exit_status argument to +-l + +is a number specifying either a signal number or the exit status of +a process terminated by a signal. +kill + +returns true if at least one signal was successfully sent, or false +if an error occurs or an invalid option is encountered. +
let arg [arg ...]
+Each +arg + +is an arithmetic expression to be evaluated (see +ARITHMETIC EVALUATION + + +above). +If the last +arg + +evaluates to 0, +let + +returns 1; 0 is returned otherwise. +
local [option] [name[=value] ...]
+For each argument, a local variable named +name + +is created, and assigned +value. + +The option can be any of the options accepted by declare. +When +local + +is used within a function, it causes the variable +name + +to have a visible scope restricted to that function and its children. +With no operands, +local + +writes a list of local variables to the standard output. It is +an error to use +local + +when not within a function. The return status is 0 unless +local + +is used outside a function, an invalid +name + +is supplied, or +name is a readonly variable. +
logout + +
+Exit a login shell. +
mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
+ +
readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
+ +Read lines from the standard input into the indexed array variable +array, + +or from file descriptor +fd + +if the +-u + +option is supplied. +The variable +MAPFILE + + +is the default array. +Options, if supplied, have the following meanings: +
+ +
+
-n + +
+Copy at most +count + +lines. If count is 0, all lines are copied. +
-O + +
+Begin assigning to +array + +at index +origin. + +The default index is 0. +
-s + +
+Discard the first count lines read. +
-t + +
+Remove a trailing newline from each line read. +
-u + +
+Read lines from file descriptor fd instead of the standard input. +
-C + +
+Evaluate +callback + +each time quantum lines are read. The -c option specifies +quantum. + +
-c + +
+Specify the number of lines read between each call to +callback. + + +
+

+ +If +-C + +is specified without +-c, + +the default quantum is 5000. +When callback is evaluated, it is supplied the index of the next +array element to be assigned as an additional argument. +callback is evaluated after the line is read but before the +array element is assigned. +

+ +If not supplied with an explicit origin, mapfile will clear array +before assigning to it. +

+ +mapfile returns successfully unless an invalid option or option +argument is supplied, array is invalid or unassignable, or if +array is not an indexed array. +

+ +
popd [-n] [+n] [-n]
+Removes entries from the directory stack. With no arguments, +removes the top directory from the stack, and performs a +cd + +to the new top directory. +Arguments, if supplied, have the following meanings: +
+ +
+
-n + +
+Suppresses the normal change of directory when removing directories +from the stack, so that only the stack is manipulated. +
+n
+Removes the nth entry counting from the left of the list +shown by +dirs, + +starting with zero. For example: + +popd +0 +removes the first directory, + +popd +1 +the second. +
-n
+Removes the nth entry counting from the right of the list +shown by +dirs, + +starting with zero. For example: + +popd -0 +removes the last directory, + +popd -1 +the next to last. + +
+

+ +If the +popd + +command is successful, a +dirs + +is performed as well, and the return status is 0. +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. +

+ +
printf [-v var] format [arguments]
+Write the formatted arguments to the standard output under the +control of the format. +The format is a character string which contains three types of objects: +plain characters, which are simply copied to standard output, character +escape sequences, which are converted and copied to the standard output, and +format specifications, each of which causes printing of the next successive +argument. +In addition to the standard printf(1) formats, %b causes +printf to expand backslash escape sequences in the corresponding +argument (except that \c terminates output, backslashes in +\aq, \", and \? are not removed, and octal escapes +beginning with \0 may contain up to four digits), +and %q causes printf to output the corresponding +argument in a format that can be reused as shell input. +

+The -v option causes the output to be assigned to the variable +var rather than being printed to the standard output. +

+The format is reused as necessary to consume all of the arguments. +If the format requires more arguments than are supplied, the +extra format specifications behave as if a zero value or null string, as +appropriate, had been supplied. The return value is zero on success, +non-zero on failure. +

pushd [-n] [+n] [-n]
+ +
pushd [-n] [dir]
+ +Adds a directory to the top of the directory stack, or rotates +the stack, making the new top of the stack the current working +directory. With no arguments, exchanges the top two directories +and returns 0, unless the directory stack is empty. +Arguments, if supplied, have the following meanings: +
+ +
+
-n + +
+Suppresses the normal change of directory when adding directories +to the stack, so that only the stack is manipulated. +
+n
+Rotates the stack so that the nth directory +(counting from the left of the list shown by +dirs, + +starting with zero) +is at the top. +
-n
+Rotates the stack so that the nth directory +(counting from the right of the list shown by +dirs, + +starting with zero) is at the top. +
dir + +
+Adds +dir + +to the directory stack at the top, making it the +new current working directory. + +
+

+ +If the +pushd + +command is successful, a +dirs + +is performed as well. +If the first form is used, +pushd + +returns 0 unless the cd to +dir + +fails. With the second form, +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. +

+ +
pwd [-LP]
+Print the absolute pathname of the current working directory. +The pathname printed contains no symbolic links if the +-P + +option is supplied or the +-o physical + +option to the +set + +builtin command is enabled. +If the +-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. +
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
+One line is read from the standard input, or from the file descriptor +fd supplied as an argument to the -u option, and the first word +is assigned to the first +name, + +the second word to the second +name, + +and so on, with leftover words and their intervening separators assigned +to the last +name. + +If there are fewer words read from the input stream than names, +the remaining names are assigned empty values. +The characters in +IFS + + +are used to split the line into words. +The backslash character (\) may be used to remove any special +meaning for the next character read and for line continuation. +Options, if supplied, have the following meanings: +
+ +
+
-a aname + +
+The words are assigned to sequential indices +of the array variable +aname, + +starting at 0. +aname + +is unset before any new values are assigned. +Other name arguments are ignored. +
-d delim + +
+The first character of delim is used to terminate the input line, +rather than newline. +
-e + +
+If the standard input +is coming from a terminal, +readline + +(see +READLINE + + +above) is used to obtain the line. +Readline uses the current (or default, if line editing was not previously +active) editing settings. +
-i text + +
+If +readline + +is being used to read the line, text is placed into the editing +buffer before editing begins. +
-n nchars + +
+read returns after reading nchars characters rather than +waiting for a complete line of input, but honor a delimiter if fewer +than nchars characters are read before the delimiter. +
-N nchars + +
+read returns after reading exactly nchars characters rather +than waiting for a complete line of input, unless EOF is encountered or +read times out. +Delimiter characters encountered in the input are +not treated specially and do not cause read to return until +nchars characters are read. +
-p prompt + +
+Display prompt 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. +
-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. +
-s + +
+Silent mode. If input is coming from a terminal, characters are +not echoed. +
-t timeout + +
+Cause read to time out and return failure if a complete line of +input is not read within timeout seconds. +timeout may be a decimal number with a fractional portion following +the decimal point. +This option is only effective if read is reading input from a +terminal, pipe, or other special file; it has no effect when reading +from regular files. +If timeout is 0, read returns success if input is available on +the specified file descriptor, failure otherwise. +The exit status is greater than 128 if the timeout is exceeded. +
-u fd + +
+Read input from file descriptor fd. + +
+

+ +If no +names + +are supplied, the line read is assigned to the variable +REPLY. + + +The return code is zero, unless end-of-file is encountered, read +times out (in which case the return code is greater than 128), or an +invalid file descriptor is supplied as the argument to -u. +

+ +
readonly [-aApf] [name[=word] ...]
+ +The given +names are marked readonly; the values of these +names + +may not be changed by subsequent assignment. +If the +-f + +option is supplied, the functions corresponding to the +names are so +marked. +The +-a + +option restricts the variables to indexed arrays; the +-A + +option restricts the variables to associative arrays. +If no +name + +arguments are given, or if the +-p + +option is supplied, a list of all readonly names is printed. +The +-p + +option causes output to be displayed in a format that +may be reused as input. +If a variable name is followed by =word, the value of +the variable is set to word. +The return status is 0 unless an invalid option is encountered, +one of the +names + +is not a valid shell variable name, or +-f + +is supplied with a +name + +that is not a function. +
return [n]
+Causes a function to exit with the return value specified by +n. + +If +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 +. + +(source) command, it causes the shell to stop executing +that script and return either +n + +or the exit status of the last command executed within the +script as the exit status of the script. If used outside a +function and not during execution of a script by ., +the return status is false. +Any command associated with the RETURN trap is executed +before execution resumes after the function or script. +
set [--abefhkmnptuvxBCEHPT] [-o option] [arg ...]
+ +
set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...]
+ +Without options, the name and value of each shell variable are displayed +in a format that can be reused as input +for setting or resetting the currently-set variables. +Read-only variables cannot be reset. +In posix mode, only shell variables are listed. +The output is sorted according to the current locale. +When options are specified, they set or unset shell attributes. +Any arguments remaining after option processing are treated +as values for the positional parameters and are assigned, in order, to +$1, + +$2, + +... + +$n. + +Options, if specified, have the following meanings: +
+ +
+
-a + +
+Automatically mark variables and functions which are modified or +created for export to the environment of subsequent commands. +
-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. +
-e + +
+Exit immediately if a pipeline (which may consist of a single +simple command), a subshell command enclosed in parentheses, +or one of the commands executed as part of a command list enclosed +by braces (see +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 +while + +or +until + +keyword, +part of the test following the +if + +or +elif + +reserved words, part of any command executed in a +&& + +or +|| + +list except the command following the final && or ||, +any command in a pipeline but the last, +or if the command's return value is +being inverted with +!. + +A trap on ERR, if set, is executed before the shell exits. +This option applies to the shell environment and each subshell environment +separately (see +COMMAND EXECUTION ENVIRONMENT + + +above), and may cause +subshells to exit before executing all the commands in the subshell. +
-f + +
+Disable pathname expansion. +
-h + +
+Remember the location of commands as they are looked up for execution. +This is enabled by default. +
-k + +
+All arguments in the form of assignment statements +are placed in the environment for a command, not just +those that precede the command name. +
-m + +
+Monitor mode. Job control is enabled. This option is on +by default for interactive shells on systems that support +it (see +JOB CONTROL + + +above). Background processes run in a separate process +group and a line containing their exit status is printed +upon their completion. +
-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. +
-o option-name + +
+The option-name can be one of the following: +
+
+
allexport + +
+Same as +-a. + +
braceexpand + +
+Same as +-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 +--noediting + +option. +This also affects the editing interface used for read -e. +
errexit + +
+Same as +-e. + +
errtrace + +
+Same as +-E. + +
functrace + +
+Same as +-T. + +
hashall + +
+Same as +-h. + +
histexpand + +
+Same as +-H. + +
history + +
+Enable command history, as described above under +HISTORY. + + +This option is on by default in interactive shells. +
ignoreeof + +
+The effect is as if the shell command +IGNOREEOF=10 + +had been executed +(see +Shell Variables + +above). +
keyword + +
+Same as +-k. + +
monitor + +
+Same as +-m. + +
noclobber + +
+Same as +-C. + +
noexec + +
+Same as +-n. + +
noglob + +
+Same as +-f. + +
nolog + +
+Currently ignored. +
notify + +
+Same as +-b. + +
nounset + +
+Same as +-u. + +
onecmd + +
+Same as +-t. + +
physical + +
+Same as +-P. + +
pipefail + +
+If set, the return value of a pipeline is the value of the last +(rightmost) command to exit with a non-zero status, or zero if all +commands in the pipeline exit successfully. +This option is disabled by default. +
posix + +
+Change the behavior of +bash + +where the default operation differs +from the POSIX standard to match the standard (posix mode). +
privileged + +
+Same as +-p. + +
verbose + +
+Same as +-v. + +
vi + +
+Use a vi-style command line editing interface. +This also affects the editing interface used for read -e. +
xtrace + +
+Same as +-x. + +

+

+

+ +If +-o + +is supplied with no option-name, the values of the current options are +printed. +If ++o + +is supplied with no option-name, a series of +set + +commands to recreate the current option settings is displayed on +the standard output. +

+ +
-p + +
+Turn on +privileged + +mode. In this mode, the +$ENV + + +and +$BASH_ENV + + +files are not processed, shell functions are not inherited from the +environment, and the +SHELLOPTS, + + +BASHOPTS, + + +CDPATH, + + +and +GLOBIGNORE + + +variables, if they appear in the environment, are ignored. +If the shell is started with the effective user (group) id not equal to the +real user (group) id, and the -p option is not supplied, these actions +are taken and the effective user id is set to the real user id. +If the -p option is supplied at startup, the effective user id is +not reset. +Turning this option off causes the effective user +and group ids to be set to the real user and group ids. +
-t + +
+Exit after reading and executing one command. +
-u + +
+Treat unset variables and parameters other than the special +parameters "@" and "*" as an error when performing +parameter expansion. If expansion is attempted on an +unset variable or parameter, the shell prints an error message, and, +if not interactive, exits with a non-zero status. +
-v + +
+Print shell input lines as they are read. +
-x + +
+After expanding each simple command, +for command, case command, select command, or +arithmetic for command, display the expanded value of +PS4, + + +followed by the command and its expanded arguments +or associated word list. +
-B + +
+The shell performs brace expansion (see +Brace Expansion + +above). This is on by default. +
-C + +
+If set, +bash + +does not overwrite an existing file with the +>, + +>&, + +and +<> + +redirection operators. This may be overridden when +creating output files by using the redirection operator +>| + +instead of +>. + +
-E + +
+If set, any trap on ERR is inherited by shell functions, command +substitutions, and commands executed in a subshell environment. +The ERR trap is normally not inherited in such cases. +
-H + +
+Enable +! + +style history substitution. This option is on by +default when the shell is interactive. +
-P + +
+If set, the shell does not follow symbolic links when executing +commands such as +cd + +that change the current working directory. It uses the +physical directory structure instead. By default, +bash + +follows the logical chain of directories when performing commands +which change the current directory. +
-T + +
+If set, any traps on DEBUG and RETURN are inherited by shell +functions, command substitutions, and commands executed in a +subshell environment. +The DEBUG and RETURN traps are normally not inherited +in such cases. +
-- + +
+If no arguments follow this option, then the positional parameters are +unset. Otherwise, the positional parameters are set to the +args, even if some of them begin with a +-. + +
- + +
+Signal the end of options, cause all remaining args to be +assigned to the positional parameters. The +-x + +and +-v + +options are turned off. +If there are no args, +the positional parameters remain unchanged. + +
+

+ +The options are off by default unless otherwise noted. +Using + rather than - causes these options to be turned off. +The options can also be specified as arguments to an invocation of +the shell. +The current set of options may be found in +$-. + +The return status is always true unless an invalid option is encountered. +

+ +
shift [n]
+The positional parameters from n+1 ... are renamed to +$1 + +.... + +Parameters represented by the numbers $# +down to $#-n+1 are unset. +n + +must be a non-negative number less than or equal to $#. +If +n + +is 0, no parameters are changed. +If +n + +is not given, it is assumed to be 1. +If +n + +is greater than $#, the positional parameters are not changed. +The return status is greater than zero if +n + +is greater than +$# + +or less than zero; otherwise 0. +
shopt [-pqsu] [-o] [optname ...]
+Toggle the values of variables controlling optional shell behavior. +With no options, or with the +-p + +option, a list of all settable options is displayed, with +an indication of whether or not each is set. +The -p option causes output to be displayed in a form that +may be reused as input. +Other options have the following meanings: +
+ +
+
-s + +
+Enable (set) each optname. +
-u + +
+Disable (unset) each optname. +
-q + +
+Suppresses normal output (quiet mode); the return status indicates +whether the optname is set or unset. +If multiple optname arguments are given with +-q, + +the return status is zero if all optnames are enabled; non-zero +otherwise. +
-o + +
+Restricts the values of optname to be those defined for the +-o + +option to the +set + +builtin. + +
+

+ +If either +-s + +or +-u + +is used with no optname arguments, the display is limited to +those options which are set or unset, respectively. +Unless otherwise noted, the shopt options are disabled (unset) +by default. +

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

+ +The list of shopt options is: +

+ + + +

+
autocd + +
+If set, a command name that is the name of a directory is executed as if +it were the argument to the cd command. +This option is only used by interactive shells. +
cdable_vars + +
+If set, an argument to the +cd + +builtin command that +is not a directory is assumed to be the name of a variable whose +value is the directory to change to. +
cdspell + +
+If set, minor errors in the spelling of a directory component in a +cd + +command will be corrected. +The errors checked for are transposed characters, +a missing character, and 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. +
checkhash + +
+If set, bash checks that a command found in the hash +table exists before trying to execute it. If a hashed command no +longer exists, a normal path search is performed. +
checkjobs + +
+If set, bash lists the status of any stopped and running jobs before +exiting an interactive shell. If any jobs are running, this causes +the exit to be deferred until a second exit is attempted without an +intervening command (see +JOB CONTROL + + +above). The shell always +postpones exiting if any jobs are stopped. +
checkwinsize + +
+If set, bash checks the window size after each command +and, if necessary, updates the values of +LINES + + +and +COLUMNS. + + +
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. +
compat31 + +
+If set, +bash + +changes its behavior to that of version 3.1 with respect to quoted +arguments to the conditional command's =~ operator. +
compat32 + +
+If set, +bash + +changes its behavior to that of version 3.2 with respect to locale-specific +string comparison when using the conditional command's < and > operators. +
compat40 + +
+If set, +bash + +changes its behavior to that of version 4.0 with respect to locale-specific +string comparison when using the conditional command's < and > operators +and the effect of interrupting a command list. +
dirspell + +
+If set, +bash + +attempts spelling correction on directory names during word completion +if the directory name initially supplied does not exist. +
dotglob + +
+If set, +bash + +includes filenames beginning with a `.' in the results of pathname +expansion. +
execfail + +
+If set, a non-interactive shell will not exit if +it cannot execute the file specified as an argument to the +exec + +builtin command. An interactive shell does not exit if +exec + +fails. +
expand_aliases + +
+If set, aliases are expanded as described above under +ALIASES. + + +This option is enabled by default for interactive shells. +
extdebug + +
+If set, behavior intended for use by debuggers is enabled: +
+
+
1. + +
+The -F option to the declare builtin displays the source +file name and line number corresponding to each function name supplied +as an argument. +
2. + +
+If the command run by the DEBUG trap returns a non-zero value, the +next command is skipped and not executed. +
3. + +
+If the command run by the DEBUG trap returns a value of 2, and the +shell is executing in a subroutine (a shell function or a shell script +executed by the . or source builtins), a call to +return is simulated. +
4. + +
+BASH_ARGC + + +and +BASH_ARGV + + +are updated as described in their descriptions above. +
5. + +
+Function tracing is enabled: command substitution, shell functions, and +subshells invoked with ( command ) inherit the +DEBUG and RETURN traps. +
6. + +
+Error tracing is enabled: command substitution, shell functions, and +subshells invoked with ( command ) inherit the +ERROR trap. +
+ +
extglob + +
+If set, the extended pattern matching features described above under +Pathname Expansion are enabled. +
extquote + +
+If set, $aqstringaq and $"string" quoting is +performed within ${parameter} expansions +enclosed in double quotes. This option is enabled by default. +
failglob + +
+If set, patterns which fail to match filenames during pathname expansion +result in an expansion error. +
force_fignore + +
+If set, the suffixes specified by the +FIGNORE + + +shell variable +cause words to be ignored when performing word completion even if +the ignored words are the only possible completions. +See +SHELL VARIABLES +above for a description of +FIGNORE. + + +This option is enabled by default. +
globstar + +
+If set, the pattern ** used in a pathname expansion context will +match a files and zero or more directories and subdirectories. +If the pattern is followed by a /, only directories and +subdirectories match. +
gnu_errfmt + +
+If set, shell error messages are written in the standard GNU error +message format. +
histappend + +
+If set, the history list is appended to the file named by the value +of the +HISTFILE + + +variable when the shell exits, rather than overwriting the file. +
histreedit + +
+If set, and +readline + +is being used, a user is given the opportunity to re-edit a +failed history substitution. +
histverify + +
+If set, and +readline + +is being used, the results of history substitution are not immediately +passed to the shell parser. Instead, the resulting line is loaded into +the readline editing buffer, allowing further modification. +
hostcomplete + +
+If set, and +readline + +is being used, bash will attempt to perform hostname completion when a +word containing a @ is being completed (see +Completing + +under +READLINE + + +above). +This is enabled by default. +
huponexit + +
+If set, bash will send +SIGHUP + + +to all jobs when an interactive login shell exits. +
interactive_comments + +
+If set, allow a word beginning with +# + +to cause that word and all remaining characters on that +line to be ignored in an interactive shell (see +COMMENTS + + +above). This option is enabled by default. +
lithist + +
+If set, and the +cmdhist + +option is enabled, multi-line commands are saved to the history with +embedded newlines rather than using semicolon separators where possible. +
login_shell + +
+The shell sets this option if it is started as a login shell (see +INVOCATION + + +above). +The value may not be changed. +
mailwarn + +
+If set, and a file that bash is checking for mail has been +accessed since the last time it was checked, the message ``The mail in +mailfile has been read'' is displayed. +
no_empty_cmd_completion + +
+If set, and +readline + +is being used, +bash + +will not attempt to search the +PATH + + +for possible completions when +completion is attempted on an empty line. +
nocaseglob + +
+If set, +bash + +matches filenames in a case-insensitive fashion when performing pathname +expansion (see +Pathname Expansion + +above). +
nocasematch + +
+If set, +bash + +matches patterns in a case-insensitive fashion when performing matching +while executing case or [[ conditional commands. +
nullglob + +
+If set, +bash + +allows patterns which match no +files (see +Pathname Expansion + +above) +to expand to a null string, rather than themselves. +
progcomp + +
+If set, the programmable completion facilities (see +Programmable Completion above) are enabled. +This option is enabled by default. +
promptvars + +
+If set, prompt strings undergo +parameter expansion, command substitution, arithmetic +expansion, and quote removal after being expanded as described in +PROMPTING + + +above. This option is enabled by default. +
restricted_shell + +
+The shell sets this option if it is started in restricted mode (see +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. +
shift_verbose + +
+If set, the +shift + +builtin prints an error message when the shift count exceeds the +number of positional parameters. +
sourcepath + +
+If set, the +source (.) builtin uses the value of +PATH + + +to find the directory containing the file supplied as an argument. +This option is enabled by default. +
xpg_echo + +
+If set, the echo builtin expands backslash-escape sequences +by default. +
+ +
suspend [-f]
+Suspend the execution of this shell until it receives a +SIGCONT + + +signal. A login shell cannot be suspended; the +-f + +option can be used to override this and force the suspension. +The return status is 0 unless the shell is a login shell and +-f + +is not supplied, or if job control is not enabled. +
test expr
+ +
[ expr ]
+Return a status of 0 or 1 depending on +the evaluation of the conditional expression +expr. + +Each operator and operand must be a separate argument. +Expressions are composed of the primaries described above under +CONDITIONAL EXPRESSIONS. + + +test does not accept any options, nor does it accept and ignore +an argument of -- as signifying the end of options. +

+ + +Expressions may be combined using the following operators, listed +in decreasing order of precedence. +The evaluation depends on the number of arguments; see below. +

+ +
+
! expr + +
+True if +expr + +is false. +
( expr ) + +
+Returns the value of expr. +This may be used to override the normal precedence of operators. +
expr1 -a expr2
+True if both +expr1 + +and +expr2 + +are true. +
expr1 -o expr2
+True if either +expr1 + +or +expr2 + +is true. + +
+

+ +test and [ evaluate conditional +expressions using a set of rules based on the number of arguments. +

+ + + +

+
0 arguments
+The expression is false. +
1 argument
+The expression is true if and only if the argument is not null. +
2 arguments
+If the first argument is !, the expression is true if and +only if the second argument is null. +If the first argument is one of the unary conditional operators listed above +under +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. +
3 arguments
+If the second argument is one of the binary conditional operators listed above +under +CONDITIONAL EXPRESSIONS, + + +the result of the expression is the result of the binary test using +the first and third arguments as operands. +The -a and -o operators are considered binary operators +when there are three arguments. +If the first argument is !, the value is the negation of +the two-argument test using the second and third arguments. +If the first argument is exactly ( and the third argument is +exactly ), the result is the one-argument test of the second +argument. +Otherwise, the expression is false. +
4 arguments
+If the first argument is !, the result is the negation of +the three-argument expression composed of the remaining arguments. +Otherwise, the expression is parsed and evaluated according to +precedence using the rules listed above. +
5 or more arguments
+The expression is parsed and evaluated according to precedence +using the rules listed above. +
+ + +
times + +
+Print the accumulated user and system times for the shell and +for processes run from the shell. The return status is 0. +
trap [-lp] [[arg] sigspec ...]
+The command +arg + +is to be read and executed when the shell receives +signal(s) +sigspec. + +If +arg + +is absent (and there is a single sigspec) or +-, + +each specified signal is +reset to its original disposition (the value it had +upon entrance to the shell). +If +arg + +is the null string the signal specified by each +sigspec + +is ignored by the shell and by the commands it invokes. +If +arg + +is not present and +-p + +has been supplied, then the trap commands associated with each +sigspec + +are displayed. +If no arguments are supplied or if only +-p + +is given, +trap + +prints the list of commands associated with each signal. +The +-l + +option causes the shell to print a list of signal names and +their corresponding numbers. +Each +sigspec + +is either +a signal name defined in <signal.h>, or a signal number. +Signal names are case insensitive and the SIG prefix is optional. +

+ + +If a +sigspec + +is +EXIT + + +(0) the command +arg + +is executed on exit from the shell. +If a +sigspec + +is +DEBUG, + + +the command +arg + +is executed before every simple command, for command, +case command, select command, every arithmetic for +command, and before the first command executes in a shell function (see +SHELL GRAMMAR + + +above). +Refer to the description of the extdebug option to the +shopt builtin for details of its effect on the DEBUG trap. +If a +sigspec + +is +RETURN, + + +the command +arg + +is executed each time a shell function or a script executed with the +. or source builtins finishes executing. +

+ + +If a +sigspec + +is +ERR, + + +the command +arg + +is executed whenever a simple command has a non-zero exit status, +subject to the following conditions. +The +ERR + + +trap is not executed if the failed +command is part of the command list immediately following a +while + +or +until + +keyword, +part of the test in an +if + +statement, part of a command executed in a +&& + +or +|| + +list, or if the command's return value is +being inverted via +!. + +These are the same conditions obeyed by the errexit option. +

+ + +Signals ignored upon entry to the shell cannot be trapped or reset. +Trapped signals that are not being ignored are reset to their original +values in a subshell or subshell environment when one is created. +The return status is false if any +sigspec + +is invalid; otherwise +trap + +returns true. +

type [-aftpP] name [name ...]
+With no options, +indicate how each +name + +would be interpreted if used as a command name. +If the +-t + +option is used, +type + +prints a string which is one of +alias, + +keyword, + +function, + +builtin, + +or +file + +if +name + +is an alias, shell reserved word, function, builtin, or disk file, +respectively. +If the +name + +is not found, then nothing is printed, and an exit status of false +is returned. +If the +-p + +option is used, +type + +either returns the name of the disk file +that would be executed if +name + +were specified as a command name, +or nothing if +type -t name + +would not return +file. + +The +-P + +option forces a +PATH + + +search for each name, even if +type -t name + +would not return +file. + +If a command is hashed, +-p + +and +-P + +print the hashed value, not necessarily the file that appears +first in +PATH. + + +If the +-a + +option is used, +type + +prints all of the places that contain +an executable named +name. + +This includes aliases and functions, +if and only if the +-p + +option is not also used. +The table of hashed commands is not consulted +when using +-a. + +The +-f + +option suppresses shell function lookup, as with the command builtin. +type + +returns true if all of the arguments are found, false if +any are not found. +
ulimit [-HSTabcdefilmnpqrstuvx [limit]]
+Provides control over the resources available to the shell and to +processes started by it, on systems that allow such control. +The -H and -S options specify that the hard or soft limit is +set for the given resource. +A hard limit cannot be increased by a non-root user once it is set; +a soft limit may be increased up to the value of the hard limit. +If neither -H nor -S is specified, both the soft and hard +limits are set. +The value of +limit + +can be a number in the unit specified for the resource +or one of the special values +hard, + +soft, + +or +unlimited, + +which stand for the current hard limit, the current soft limit, and +no limit, respectively. +If +limit + +is omitted, the current value of the soft limit of the resource is +printed, unless the -H 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: +
+ +
+
-a + +
+All current limits are reported +
-b + +
+The maximum socket buffer size +
-c + +
+The maximum size of core files created +
-d + +
+The maximum size of a process's data segment +
-e + +
+The maximum scheduling priority ("nice") +
-f + +
+The maximum size of files written by the shell and its children +
-i + +
+The maximum number of pending signals +
-l + +
+The maximum size that may be locked into memory +
-m + +
+The maximum resident set size (many systems do not honor this limit) +
-n + +
+The maximum number of open file descriptors (most systems do not +allow this value to be set) +
-p + +
+The pipe size in 512-byte blocks (this may not be set) +
-q + +
+The maximum number of bytes in POSIX message queues +
-r + +
+The maximum real-time scheduling priority +
-s + +
+The maximum stack size +
-t + +
+The maximum amount of cpu time in seconds +
-u + +
+The maximum number of processes available to a single user +
-v + +
+The maximum amount of virtual memory available to the shell +
-x + +
+The maximum number of file locks +
-T + +
+The maximum number of threads + +
+

+ +If +limit + +is given, it is the new value of the specified resource (the +-a + +option is display only). +If no option is given, then +-f + +is assumed. Values are in 1024-byte increments, except for +-t, + +which is in seconds, +-p, + +which is in units of 512-byte blocks, +and +-T, + +-b, + +-n, + +and +-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. +

+ +
umask [-p] [-S] [mode]
+The user file-creation mask is set to +mode. + +If +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 +chmod(1). + +If +mode + +is omitted, the current value of the mask is printed. +The +-S + +option causes the mask to be printed in symbolic form; the +default output is an octal number. +If the +-p + +option is supplied, and +mode + +is omitted, the output is in a form that may be reused as input. +The return status is 0 if the mode was successfully changed or if +no mode argument was supplied, and false otherwise. +
unalias [-a] [name ...]
+Remove each name from the list of defined aliases. If +-a + +is supplied, all alias definitions are removed. The return +value is true unless a supplied +name + +is not a defined alias. +
unset [-fv] [name ...]
+For each +name, + +remove the corresponding variable or function. +If no options are supplied, or the +-v + +option is given, each +name + +refers to a shell variable. +Read-only variables may not be unset. +If +-f + +is specified, each +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 +COMP_WORDBREAKS, + + +RANDOM, + + +SECONDS, + + +LINENO, + + +HISTCMD, + + +FUNCNAME, + + +GROUPS, + + +or +DIRSTACK + + +are unset, they lose their special properties, even if they are +subsequently reset. The exit status is true unless a +name + +is readonly. +
wait [n ...]
+Wait for each specified process and return its termination status. +Each +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 +n + +is not given, all currently active child processes +are waited for, and the return status is zero. If +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. + + +
+  +

RESTRICTED SHELL

+ + + +

+ +If +bash + +is started with the name +rbash, + +or the +-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 +bash + +with the exception that the following are disallowed or not performed: +

+
*
+changing directories with cd +
*
+setting or unsetting the values of +SHELL, + + +PATH, + + +ENV, + + +or +BASH_ENV + + +
*
+specifying command names containing +/ + +
*
+specifying a file name containing a +/ + +as an argument to the +. + +builtin command +
*
+Specifying a filename containing a slash as an argument to the +-p + +option to the +hash + +builtin command +
*
+importing function definitions from the shell environment at startup +
*
+parsing the value of +SHELLOPTS + + +from the shell environment at startup +
*
+redirecting output using the >, >|, <>, >&, &>, and >> redirection operators +
*
+using the +exec + +builtin command to replace the shell with another command +
*
+adding or deleting builtin commands with the +-f + +and +-d + +options to the +enable + +builtin command +
*
+Using the enable builtin command to enable disabled shell builtins +
*
+specifying the +-p + +option to the +command + +builtin command +
*
+turning off restricted mode with +set +r or set +o restricted. +
+

+ +These restrictions are enforced after any startup files are read. +

+ + + When a command that is found to be a shell script is executed +(see +COMMAND EXECUTION + + + +above), + +rbash + +turns off any restrictions in the shell spawned to execute the +script. + + +  +

SEE ALSO

+ + +
+
Bash Reference Manual, Brian Fox and Chet Ramey
+
The Gnu Readline Library, Brian Fox and Chet Ramey
+
The Gnu History Library, Brian Fox and Chet Ramey
+
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE
+
sh(1), ksh(1), csh(1)
+
emacs(1), vi(1)
+
readline(3)
+ +
+  +

FILES

+ + +
+
+/bin/bash + +
+The bash executable +
+/etc/profile + +
+The systemwide initialization file, executed for login shells +
+~/.bash_profile + +
+The personal initialization file, executed for login shells +
+~/.bashrc + +
+The individual per-interactive-shell startup file +
+~/.bash_logout + +
+The individual login shell cleanup file, executed when a login shell exits +
+~/.inputrc + +
+Individual readline initialization file + +
+  +

AUTHORS

+ +Brian Fox, Free Software Foundation +
+ +bfox@gnu.org +

+ +Chet Ramey, Case Western Reserve University +
+ +chet.ramey@case.edu +  +

BUG REPORTS

+ +If you find a bug in +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 +bash. + +The latest version is always available from +ftp://ftp.gnu.org/pub/bash/. +

+ +Once you have determined that a bug actually exists, use the +bashbug + +command to submit a bug report. +If you have a fix, you are encouraged to mail that as well! +Suggestions and `philosophical' bug reports may be mailed +to bug-bash@gnu.org or posted to the Usenet +newsgroup +gnu.bash.bug. + +

+ +ALL bug reports should include: +

+ + +

+
The version number of bash
+
The hardware and operating system
+
The compiler used to compile
+
A description of the bug behaviour
+
A short script or `recipe' which exercises the bug
+ +
+

+ +bashbug + +inserts the first three items automatically into the template +it provides for filing a bug report. +

+ +Comments and bug reports concerning +this manual page should be directed to +chet@po.cwru.edu. + +  +

BUGS

+ +

+ +It's too big and too slow. +

+ +There are some subtle differences between +bash + +and traditional versions of +sh, + +mostly because of the +POSIX + + +specification. +

+ +Aliases are confusing in some uses. +

+ +Shell builtin commands and functions are not stoppable/restartable. +

+ +Compound commands and command sequences of the form `a ; b ; c' +are not handled gracefully when process suspension is attempted. +When a process is stopped, the shell immediately executes the next +command in the sequence. +It suffices to place the sequence of commands between +parentheses to force it into a subshell, which may be stopped as +a unit. +

+ +Array variables may not (yet) be exported. +

+ +There may be only one active coprocess at a time. + + + +


+ + + +
GNU Bash-4.12009 December 29BASH(1) +
+
+ 

Index

+
+
NAME
+
SYNOPSIS
+
COPYRIGHT
+
DESCRIPTION
+
OPTIONS
+
ARGUMENTS
+
INVOCATION
+
DEFINITIONS
+
RESERVED WORDS
+
SHELL GRAMMAR
+
+
Simple Commands
+
Pipelines
+
Lists
+
Compound Commands
+
Coprocesses
+
Shell Function Definitions
+
+
COMMENTS
+
QUOTING
+
PARAMETERS
+
+
Positional Parameters
+
Special Parameters
+
Shell Variables
+
Arrays
+
+
EXPANSION
+
+
Brace Expansion
+
Tilde Expansion
+
Parameter Expansion
+
Command Substitution
+
Arithmetic Expansion
+
Process Substitution
+
Word Splitting
+
Pathname Expansion
+
Quote Removal
+
+
REDIRECTION
+
+
Redirecting Input
+
Redirecting Output
+
Appending Redirected Output
+
Redirecting Standard Output and Standard Error
+
Appending Standard Output and Standard Error
+
Here Documents
+
Here Strings
+
Duplicating File Descriptors
+
Moving File Descriptors
+
Opening File Descriptors for Reading and Writing
+
+
ALIASES
+
FUNCTIONS
+
ARITHMETIC EVALUATION
+
CONDITIONAL EXPRESSIONS
+
SIMPLE COMMAND EXPANSION
+
COMMAND EXECUTION
+
COMMAND EXECUTION ENVIRONMENT
+
ENVIRONMENT
+
EXIT STATUS
+
SIGNALS
+
JOB CONTROL
+
PROMPTING
+
READLINE
+
+
Readline Notation
+
Readline Initialization
+
Readline Key Bindings
+
Readline Variables
+
Readline Conditional Constructs
+
Searching
+
Readline Command Names
+
Commands for Moving
+
Commands for Manipulating the History
+
Commands for Changing Text
+
Killing and Yanking
+
Numeric Arguments
+
Completing
+
Keyboard Macros
+
Miscellaneous
+
Programmable Completion
+
+
HISTORY
+
HISTORY EXPANSION
+
+
Event Designators
+
Word Designators
+
Modifiers
+
+
SHELL BUILTIN COMMANDS
+
RESTRICTED SHELL
+
SEE ALSO
+
FILES
+
AUTHORS
+
BUG REPORTS
+
BUGS
+
+
+This document was created by man2html from bash.1.
+Time: 30 December 2009 13:07:38 EST + + diff --git a/doc/bash.pdf b/doc/bash.pdf new file mode 100644 index 0000000..cb36c5e Binary files /dev/null and b/doc/bash.pdf differ diff --git a/doc/bash.ps b/doc/bash.ps new file mode 100644 index 0000000..8b4d573 --- /dev/null +++ b/doc/bash.ps @@ -0,0 +1,8202 @@ +%!PS-Adobe-3.0 +%%Creator: groff version 1.19.2 +%%CreationDate: Wed Dec 30 13:07:37 2009 +%%DocumentNeededResources: font Times-Roman +%%+ font Times-Bold +%%+ font Times-Italic +%%+ font Courier +%%+ font Symbol +%%DocumentSuppliedResources: procset grops 1.19 2 +%%Pages: 70 +%%PageOrder: Ascend +%%DocumentMedia: Default 595 842 0 () () +%%Orientation: Portrait +%%EndComments +%%BeginDefaults +%%PageMedia: Default +%%EndDefaults +%%BeginProlog +%%BeginResource: procset grops 1.19 2 +%!PS-Adobe-3.0 Resource-ProcSet +/setpacking where{ +pop +currentpacking +true setpacking +}if +/grops 120 dict dup begin +/SC 32 def +/A/show load def +/B{0 SC 3 -1 roll widthshow}bind def +/C{0 exch ashow}bind def +/D{0 exch 0 SC 5 2 roll awidthshow}bind def +/E{0 rmoveto show}bind def +/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def +/G{0 rmoveto 0 exch ashow}bind def +/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/I{0 exch rmoveto show}bind def +/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def +/K{0 exch rmoveto 0 exch ashow}bind def +/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/M{rmoveto show}bind def +/N{rmoveto 0 SC 3 -1 roll widthshow}bind def +/O{rmoveto 0 exch ashow}bind def +/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/Q{moveto show}bind def +/R{moveto 0 SC 3 -1 roll widthshow}bind def +/S{moveto 0 exch ashow}bind def +/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/SF{ +findfont exch +[exch dup 0 exch 0 exch neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/MF{ +findfont +[5 2 roll +0 3 1 roll +neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/level0 0 def +/RES 0 def +/PL 0 def +/LS 0 def +/MANUAL{ +statusdict begin/manualfeed true store end +}bind def +/PLG{ +gsave newpath clippath pathbbox grestore +exch pop add exch pop +}bind def +/BP{ +/level0 save def +1 setlinecap +1 setlinejoin +72 RES div dup scale +LS{ +90 rotate +}{ +0 PL translate +}ifelse +1 -1 scale +}bind def +/EP{ +level0 restore +showpage +}def +/DA{ +newpath arcn stroke +}bind def +/SN{ +transform +.25 sub exch .25 sub exch +round .25 add exch round .25 add exch +itransform +}bind def +/DL{ +SN +moveto +SN +lineto stroke +}bind def +/DC{ +newpath 0 360 arc closepath +}bind def +/TM matrix def +/DE{ +TM currentmatrix pop +translate scale newpath 0 0 .5 0 360 arc closepath +TM setmatrix +}bind def +/RC/rcurveto load def +/RL/rlineto load def +/ST/stroke load def +/MT/moveto load def +/CL/closepath load def +/Fr{ +setrgbcolor fill +}bind def +/setcmykcolor where{ +pop +/Fk{ +setcmykcolor fill +}bind def +}if +/Fg{ +setgray fill +}bind def +/FL/fill load def +/LW/setlinewidth load def +/Cr/setrgbcolor load def +/setcmykcolor where{ +pop +/Ck/setcmykcolor load def +}if +/Cg/setgray load def +/RE{ +findfont +dup maxlength 1 index/FontName known not{1 add}if dict begin +{ +1 index/FID ne{def}{pop pop}ifelse +}forall +/Encoding exch def +dup/FontName exch def +currentdict end definefont pop +}bind def +/DEFS 0 def +/EBEGIN{ +moveto +DEFS begin +}bind def +/EEND/end load def +/CNT 0 def +/level1 0 def +/PBEGIN{ +/level1 save def +translate +div 3 1 roll div exch scale +neg exch neg exch translate +0 setgray +0 setlinecap +1 setlinewidth +0 setlinejoin +10 setmiterlimit +[]0 setdash +/setstrokeadjust where{ +pop +false setstrokeadjust +}if +/setoverprint where{ +pop +false setoverprint +}if +newpath +/CNT countdictstack def +userdict begin +/showpage{}def +/setpagedevice{}def +}bind def +/PEND{ +countdictstack CNT sub{end}repeat +level1 restore +}bind def +end def +/setpacking where{ +pop +setpacking +}if +%%EndResource +%%EndProlog +%%BeginSetup +%%BeginFeature: *PageSize Default +<< /PageSize [ 595 842 ] /ImagingBBox null >> setpagedevice +%%EndFeature +%%IncludeResource: font Times-Roman +%%IncludeResource: font Times-Bold +%%IncludeResource: font Times-Italic +%%IncludeResource: font Courier +%%IncludeResource: font Symbol +grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 +def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron +/Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent +/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen +/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon +/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O +/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex +/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y +/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft +/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl +/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut +/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash +/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen +/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft +/logicalnot/minus/registered/macron/degree/plusminus/twosuperior +/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior +/ordmasculine/guilsinglright/onequarter/onehalf/threequarters +/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE +/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn +/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash +/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def +/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE +/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 +(bash \255 GNU Bourne-Ag)108 96 Q(ain SHell)-.05 E F1(SYNOPSIS)72 112.8 +Q/F2 10/Times-Bold@0 SF(bash)108 124.8 Q F0([options] [\214le])2.5 E F1 +(COPYRIGHT)72 141.6 Q F0(Bash is Cop)108 153.6 Q +(yright \251 1989-2009 by the Free Softw)-.1 E(are F)-.1 E +(oundation, Inc.)-.15 E F1(DESCRIPTION)72 170.4 Q F2(Bash)108 182.4 Q F0 +.973(is an)3.474 F F2(sh)3.473 E F0 .973 +(-compatible command language interpreter that e)B -.15(xe)-.15 G .973 +(cutes commands read from the standard).15 F(input or from a \214le.)108 +194.4 Q F2(Bash)5 E F0(also incorporates useful features from the)2.5 E +/F3 10/Times-Italic@0 SF -.4(Ko)2.5 G(rn).4 E F0(and)2.5 E F3(C)2.5 E F0 +(shells \()2.5 E F2(ksh)A F0(and)2.5 E F2(csh)2.5 E F0(\).)A F2(Bash)108 +211.2 Q F0 .527(is intended to be a conformant implementation of the Sh\ +ell and Utilities portion of the IEEE POSIX)3.027 F +(speci\214cation \(IEEE Standard 1003.1\).)108 223.2 Q F2(Bash)5 E F0 +(can be con\214gured to be POSIX-conformant by def)2.5 E(ault.)-.1 E F1 +(OPTIONS)72 240 Q F0 .52(In addition to the single-character shell opti\ +ons documented in the description of the)108 252 R F2(set)3.02 E F0 -.2 +(bu)3.02 G .52(iltin command,).2 F F2(bash)108 264 Q F0 +(interprets the follo)2.5 E(wing options when it is in)-.25 E -.2(vo)-.4 +G -.1(ke).2 G(d:).1 E F2108 280.8 Q F3(string)4.166 E F0 .796 +(If the)12.354 F F23.296 E F0 .796 +(option is present, then commands are read from)3.296 F F3(string)3.296 +E F0 5.796(.I).22 G 3.297(ft)-5.796 G .797(here are ar)-3.297 F .797 +(guments after)-.18 F(the)158 292.8 Q F3(string)2.5 E F0 2.5(,t).22 G +(he)-2.5 E 2.5(ya)-.15 G +(re assigned to the positional parameters, starting with)-2.5 E F2($0) +2.5 E F0(.)A F2108 304.8 Q F0(If the)41.52 E F22.5 E F0 +(option is present, the shell is)2.5 E F3(inter)2.5 E(active)-.15 E F0 +(.).18 E F2108 316.8 Q F0(Mak)41.52 E(e)-.1 E F2(bash)2.5 E F0 +(act as if it had been in)2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(da).1 G 2.5 +(sal)-2.5 G(ogin shell \(see)-2.5 E/F4 9/Times-Bold@0 SF(INV)2.5 E(OCA) +-.405 E(TION)-.855 E F0(belo)2.25 E(w\).)-.25 E F2108 328.8 Q F0 +(If the)39.86 E F22.5 E F0(option is present, the shell becomes) +2.5 E F3 -.37(re)2.5 G(stricted).37 E F0(\(see)3.27 E F4 +(RESTRICTED SHELL)2.5 E F0(belo)2.25 E(w\).)-.25 E F2108 340.8 Q +F0 .602(If the)40.41 F F23.102 E F0 .602 +(option is present, or if no ar)3.102 F .602 +(guments remain after option processing, then commands)-.18 F .616 +(are read from the standard input.)158 352.8 R .617(This option allo) +5.617 F .617(ws the positional parameters to be set when)-.25 F(in)158 +364.8 Q -.2(vo)-.4 G(king an interacti).2 E .3 -.15(ve s)-.25 H(hell.) +.15 E F2108 376.8 Q F0 3.184(Al)37.08 G .684 +(ist of all double-quoted strings preceded by)-3.184 F F2($)3.184 E F0 +.684(is printed on the standard output.)3.184 F .683(These are)5.683 F +.458(the strings that are subject to language translation when the curr\ +ent locale is not)158 388.8 R F2(C)2.958 E F0(or)2.959 E F2(POSIX)2.959 +E F0(.)A(This implies the)158 400.8 Q F22.5 E F0 +(option; no commands will be e)2.5 E -.15(xe)-.15 G(cuted.).15 E F2 +([\255+]O [)108 412.8 Q F3(shopt_option)A F2(])A F3(shopt_option)158 +424.8 Q F0 1.097(is one of the shell options accepted by the)3.597 F F2 +(shopt)3.597 E F0 -.2(bu)3.597 G 1.097(iltin \(see).2 F F4 1.096 +(SHELL B)3.596 F(UIL)-.09 E(TIN)-.828 E(COMMANDS)158 436.8 Q F0(belo) +3.002 E 3.252(w\). If)-.25 F F3(shopt_option)3.253 E F0 .753 +(is present,)3.253 F F23.253 E F0 .753(sets the v)3.253 F .753 +(alue of that option;)-.25 F F2(+O)3.253 E F0(unsets)3.253 E 2.625 +(it. If)158 448.8 R F3(shopt_option)2.625 E F0 .125 +(is not supplied, the names and v)2.625 F .124 +(alues of the shell options accepted by)-.25 F F2(shopt)2.624 E F0 .505 +(are printed on the standard output.)158 460.8 R .505(If the in)5.505 F +-.2(vo)-.4 G .505(cation option is).2 F F2(+O)3.005 E F0 3.005(,t)C .506 +(he output is displayed in a)-3.005 F +(format that may be reused as input.)158 472.8 Q F2108 484.8 Q F0 +(A)38.6 E F23.364 E F0 .864 +(signals the end of options and disables further option processing.) +3.364 F(An)5.863 E 3.363(ya)-.15 G -.18(rg)-3.363 G .863(uments after) +.18 F(the)158 496.8 Q F22.5 E F0 +(are treated as \214lenames and ar)2.5 E 2.5(guments. An)-.18 F(ar)2.5 E +(gument of)-.18 E F22.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to) +.25 E F22.5 E F0(.)A F2(Bash)108 513.6 Q F0 .303 +(also interprets a number of multi-character options.)2.803 F .304 +(These options must appear on the command line)5.303 F +(before the single-character options to be recognized.)108 525.6 Q F2 +108 542.4 Q(ugger)-.2 E F0 .475(Arrange for the deb)144 +554.4 R .475(ugger pro\214le to be e)-.2 F -.15(xe)-.15 G .475 +(cuted before the shell starts.).15 F -.45(Tu)5.474 G .474(rns on e).45 +F .474(xtended deb)-.15 F(ug-)-.2 E .452 +(ging mode \(see the description of the)144 566.4 R F2(extdeb)2.952 E +(ug)-.2 E F0 .452(option to the)2.952 F F2(shopt)2.952 E F0 -.2(bu)2.952 +G .452(iltin belo).2 F .452(w\) and shell func-)-.25 F +(tion tracing \(see the description of the)144 578.4 Q F2 +(\255o functrace)2.5 E F0(option to the)2.5 E F2(set)2.5 E F0 -.2(bu)2.5 +G(iltin belo).2 E(w\).)-.25 E F2(\255\255dump\255po\255strings)108 590.4 +Q F0(Equi)144 602.4 Q -.25(va)-.25 G(lent to).25 E F22.5 E F0 2.5 +(,b)C(ut the output is in the GNU)-2.7 E F3 -.1(ge)2.5 G(tte).1 E(xt)-.2 +E F2(po)2.5 E F0(\(portable object\) \214le format.)2.5 E F2 +(\255\255dump\255strings)108 614.4 Q F0(Equi)144 626.4 Q -.25(va)-.25 G +(lent to).25 E F22.5 E F0(.)A F2(\255\255help)108 638.4 Q F0 +(Display a usage message on standard output and e)6.26 E +(xit successfully)-.15 E(.)-.65 E F2108 650.4 Q F3 +(\214le)2.5 E F2108 662.4 Q(c\214le)-.18 E F3(\214le)2.5 E F0 +(Ex)144 674.4 Q 1.599(ecute commands from)-.15 F F3(\214le)6.009 E F0 +1.598(instead of the standard personal initialization \214le)4.279 F F3 +(~/.bashr)3.598 E(c)-.37 E F0 1.598(if the)4.408 F(shell is interacti) +144 686.4 Q .3 -.15(ve \()-.25 H(see).15 E F4(INV)2.5 E(OCA)-.405 E +(TION)-.855 E F0(belo)2.25 E(w\).)-.25 E F2(\255\255login)108 703.2 Q F0 +(Equi)144 715.2 Q -.25(va)-.25 G(lent to).25 E F22.5 E F0(.)A +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(1)190.955 E 0 Cg EP +%%Page: 2 2 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(\255\255noediting)108 84 Q F0 +(Do not use the GNU)144 96 Q F1 -.18(re)2.5 G(adline).18 E F0 +(library to read command lines when the shell is interacti)2.5 E -.15 +(ve)-.25 G(.).15 E F1(\255\255nopr)108 112.8 Q(o\214le)-.18 E F0 .017 +(Do not read either the system-wide startup \214le)144 124.8 R/F2 10 +/Times-Italic@0 SF(/etc/pr)4.183 E(o\214le)-.45 E F0 .017(or an)4.183 F +2.517(yo)-.15 G 2.517(ft)-2.517 G .018 +(he personal initialization \214les)-2.517 F F2(~/.bash_pr)144 136.8 Q +(o\214le)-.45 E F0(,).18 E F2(~/.bash_lo)2.698 E(gin)-.1 E F0 2.698(,o) +.24 G(r)-2.698 E F2(~/.pr)2.698 E(o\214le)-.45 E F0 5.198(.B).18 G 2.698 +(yd)-5.198 G(ef)-2.698 E(ault,)-.1 E F1(bash)2.698 E F0 .198 +(reads these \214les when it is in)2.698 F -.2(vo)-.4 G -.1(ke).2 G +2.697(da).1 G(s)-2.697 E 2.5(al)144 148.8 S(ogin shell \(see)-2.5 E/F3 9 +/Times-Bold@0 SF(INV)2.5 E(OCA)-.405 E(TION)-.855 E F0(belo)2.25 E(w\).) +-.25 E F1108 165.6 Q(c)-.18 E F0 1.228(Do not read and e) +5.34 F -.15(xe)-.15 G 1.228(cute the personal initialization \214le).15 +F F2(~/.bashr)3.228 E(c)-.37 E F0 1.228(if the shell is interacti)4.038 +F -.15(ve)-.25 G 6.228(.T).15 G(his)-6.228 E(option is on by def)144 +177.6 Q(ault if the shell is in)-.1 E -.2(vo)-.4 G -.1(ke).2 G 2.5(da).1 +G(s)-2.5 E F1(sh)2.5 E F0(.)A F1(\255\255posix)108 194.4 Q F0 1.783 +(Change the beha)144 206.4 R 1.782(vior of)-.2 F F1(bash)4.282 E F0 +1.782(where the def)4.282 F 1.782(ault operation dif)-.1 F 1.782 +(fers from the POSIX standard to)-.25 F(match the standard \()144 218.4 +Q F2(posix mode)A F0(\).)A F1108 235.2 Q(estricted)-.18 E F0 +(The shell becomes restricted \(see)144 247.2 Q F3(RESTRICTED SHELL)2.5 +E F0(belo)2.25 E(w\).)-.25 E F1108 264 Q(erbose)-.1 E F0(Equi) +144 276 Q -.25(va)-.25 G(lent to).25 E F15 E F0(.)A F1108 +292.8 Q(ersion)-.1 E F0(Sho)144 304.8 Q 2.5(wv)-.25 G +(ersion information for this instance of)-2.65 E F1(bash)2.5 E F0 +(on the standard output and e)2.5 E(xit successfully)-.15 E(.)-.65 E/F4 +10.95/Times-Bold@0 SF(ARGUMENTS)72 321.6 Q F0 .016(If ar)108 333.6 R +.016(guments remain after option processing, and neither the)-.18 F F1 +2.516 E F0 .016(nor the)2.516 F F12.516 E F0 .016 +(option has been supplied, the \214rst)2.516 F(ar)108 345.6 Q .041(gume\ +nt is assumed to be the name of a \214le containing shell commands.)-.18 +F(If)5.041 E F1(bash)2.541 E F0 .041(is in)2.541 F -.2(vo)-.4 G -.1(ke) +.2 G 2.541(di).1 G 2.541(nt)-2.541 G .041(his f)-2.541 F(ashion,)-.1 E +F1($0)108 357.6 Q F0 .936(is set to the name of the \214le, and the pos\ +itional parameters are set to the remaining ar)3.435 F(guments.)-.18 E +F1(Bash)5.936 E F0 .234(reads and e)108 369.6 R -.15(xe)-.15 G .234 +(cutes commands from this \214le, then e).15 F(xits.)-.15 E F1(Bash) +5.234 E F0 1.334 -.55('s e)D .234(xit status is the e).4 F .233 +(xit status of the last com-)-.15 F .348(mand e)108 381.6 R -.15(xe)-.15 +G .348(cuted in the script.).15 F .348(If no commands are e)5.348 F -.15 +(xe)-.15 G .348(cuted, the e).15 F .349(xit status is 0.)-.15 F .349 +(An attempt is \214rst made to)5.349 F .254 +(open the \214le in the current directory)108 393.6 R 2.754(,a)-.65 G +.253 +(nd, if no \214le is found, then the shell searches the directories in) +-2.754 F F3 -.666(PA)2.753 G(TH)-.189 E F0(for the script.)108 405.6 Q +F4(INV)72 422.4 Q(OCA)-.493 E(TION)-1.04 E F0(A)108 434.4 Q F2(lo)2.5 E +(gin shell)-.1 E F0(is one whose \214rst character of ar)2.5 E +(gument zero is a)-.18 E F12.5 E F0 2.5(,o)C 2.5(ro)-2.5 G +(ne started with the)-2.5 E F1(\255\255login)2.5 E F0(option.)2.5 E(An) +108 451.2 Q F2(inter)2.814 E(active)-.15 E F0 .314 +(shell is one started without non-option ar)2.814 F .315 +(guments and without the)-.18 F F12.815 E F0 .315 +(option whose standard)2.815 F 1.5 +(input and error are both connected to terminals \(as determined by)108 +463.2 R F2(isatty)4 E F0 1.5(\(3\)\), or one started with the).32 F F1 +4 E F0(option.)108 475.2 Q F3(PS1)5.289 E F0 .289(is set and)2.539 +F F1<24ad>2.789 E F0(includes)2.789 E F1(i)2.789 E F0(if)2.789 E F1 +(bash)2.789 E F0 .289(is interacti)2.789 F -.15(ve)-.25 G 2.789(,a).15 G +(llo)-2.789 E .29(wing a shell script or a startup \214le to test this) +-.25 F(state.)108 487.2 Q .033(The follo)108 504 R .033 +(wing paragraphs describe ho)-.25 F(w)-.25 E F1(bash)2.532 E F0 -.15 +(exe)2.532 G .032(cutes its startup \214les.).15 F .032(If an)5.032 F +2.532(yo)-.15 G 2.532(ft)-2.532 G .032(he \214les e)-2.532 F .032 +(xist b)-.15 F .032(ut cannot be)-.2 F(read,)108 516 Q F1(bash)3.085 E +F0 .585(reports an error)3.085 F 5.585(.T)-.55 G .585(ildes are e)-5.935 +F .586(xpanded in \214le names as described belo)-.15 F 3.086(wu)-.25 G +(nder)-3.086 E F1 -.18(Ti)3.086 G .586(lde Expansion).18 F F0(in the)108 +528 Q F3(EXP)2.5 E(ANSION)-.666 E F0(section.)2.25 E(When)108 544.8 Q F1 +(bash)2.896 E F0 .396(is in)2.896 F -.2(vo)-.4 G -.1(ke).2 G 2.896(da).1 +G 2.896(sa)-2.896 G 2.896(ni)-2.896 G(nteracti)-2.896 E .696 -.15(ve l) +-.25 H .396(ogin shell, or as a non-interacti).15 F .695 -.15(ve s)-.25 +H .395(hell with the).15 F F1(\255\255login)2.895 E F0 .395(option, it) +2.895 F 1.333(\214rst reads and e)108 556.8 R -.15(xe)-.15 G 1.333 +(cutes commands from the \214le).15 F F2(/etc/pr)3.833 E(o\214le)-.45 E +F0 3.834(,i)C 3.834(ft)-3.834 G 1.334(hat \214le e)-3.834 F 3.834 +(xists. After)-.15 F 1.334(reading that \214le, it)3.834 F .249 +(looks for)108 568.8 R F2(~/.bash_pr)2.749 E(o\214le)-.45 E F0(,)A F2 +(~/.bash_lo)2.749 E(gin)-.1 E F0 2.749(,a)C(nd)-2.749 E F2(~/.pr)2.749 E +(o\214le)-.45 E F0 2.749(,i)C 2.749(nt)-2.749 G .249(hat order)-2.749 F +2.748(,a)-.4 G .248(nd reads and e)-2.748 F -.15(xe)-.15 G .248 +(cutes commands from).15 F .796(the \214rst one that e)108 580.8 R .796 +(xists and is readable.)-.15 F(The)5.796 E F1(\255\255nopr)3.296 E +(o\214le)-.18 E F0 .797(option may be used when the shell is started to) +3.296 F(inhibit this beha)108 592.8 Q(vior)-.2 E(.)-.55 E +(When a login shell e)108 609.6 Q(xits,)-.15 E F1(bash)2.5 E F0 +(reads and e)2.5 E -.15(xe)-.15 G(cutes commands from the \214le).15 E +F2(~/.bash_lo)2.5 E(gout)-.1 E F0 2.5(,i)C 2.5(fi)-2.5 G 2.5(te)-2.5 G +(xists.)-2.65 E 1.698(When an interacti)108 626.4 R 1.998 -.15(ve s)-.25 +H 1.698(hell that is not a login shell is started,).15 F F1(bash)4.197 E +F0 1.697(reads and e)4.197 F -.15(xe)-.15 G 1.697(cutes commands from) +.15 F F2(~/.bashr)108 638.4 Q(c)-.37 E F0 2.535(,i)C 2.535(ft)-2.535 G +.035(hat \214le e)-2.535 F 2.535(xists. This)-.15 F .036 +(may be inhibited by using the)2.535 F F12.536 E(c)-.18 E F0 +2.536(option. The)2.536 F F12.536 E(c\214le)-.18 E F2(\214le) +2.536 E F0 .036(option will)2.536 F(force)108 650.4 Q F1(bash)2.5 E F0 +(to read and e)2.5 E -.15(xe)-.15 G(cute commands from).15 E F2(\214le) +2.5 E F0(instead of)2.5 E F2(~/.bashr)2.5 E(c)-.37 E F0(.)A(When)108 +667.2 Q F1(bash)5.306 E F0 2.806(is started non-interacti)5.306 F -.15 +(ve)-.25 G(ly).15 E 5.306(,t)-.65 G 5.306(or)-5.306 G 2.806 +(un a shell script, for e)-5.306 F 2.805(xample, it looks for the v)-.15 +F(ariable)-.25 E F3 -.27(BA)108 679.2 S(SH_ENV).27 E F0 1.01(in the en) +3.26 F 1.01(vironment, e)-.4 F 1.01(xpands its v)-.15 F 1.01 +(alue if it appears there, and uses the e)-.25 F 1.011(xpanded v)-.15 F +1.011(alue as the)-.25 F(name of a \214le to read and e)108 691.2 Q -.15 +(xe)-.15 G(cute.).15 E F1(Bash)5 E F0(beha)2.5 E -.15(ve)-.2 G 2.5(sa) +.15 G 2.5(si)-2.5 G 2.5(ft)-2.5 G(he follo)-2.5 E(wing command were e) +-.25 E -.15(xe)-.15 G(cuted:).15 E/F5 10/Courier@0 SF +(if [ \255n "$BASH_ENV" ]; then . "$BASH_ENV"; fi)144 709.2 Q F0 -.2(bu) +108 727.2 S 2.5(tt).2 G(he v)-2.5 E(alue of the)-.25 E F3 -.666(PA)2.5 G +(TH)-.189 E F0 -.25(va)2.25 G +(riable is not used to search for the \214le name.).25 E(GNU Bash-4.1)72 +768 Q(2009 December 29)135.965 E(2)190.955 E 0 Cg EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(If)108 84 Q/F1 10/Times-Bold@0 SF(bash)3.417 E F0 .917(is in) +3.417 F -.2(vo)-.4 G -.1(ke).2 G 3.417(dw).1 G .917(ith the name)-3.417 +F F1(sh)3.417 E F0 3.417(,i)C 3.417(tt)-3.417 G .917 +(ries to mimic the startup beha)-3.417 F .917(vior of historical v)-.2 F +.917(ersions of)-.15 F F1(sh)3.417 E F0(as)3.417 E .145 +(closely as possible, while conforming to the POSIX standard as well.) +108 96 R .145(When in)5.145 F -.2(vo)-.4 G -.1(ke).2 G 2.645(da).1 G +2.645(sa)-2.645 G 2.645(ni)-2.645 G(nteracti)-2.645 E .445 -.15(ve l) +-.25 H(ogin).15 E 1.264(shell, or a non-interacti)108 108 R 1.564 -.15 +(ve s)-.25 H 1.264(hell with the).15 F F1(\255\255login)3.764 E F0 1.264 +(option, it \214rst attempts to read and e)3.764 F -.15(xe)-.15 G 1.263 +(cute commands).15 F(from)108 120 Q/F2 10/Times-Italic@0 SF(/etc/pr) +4.142 E(o\214le)-.45 E F0(and)3.172 E F2(~/.pr)2.992 E(o\214le)-.45 E F0 +2.992(,i).18 G 2.992(nt)-2.992 G .492(hat order)-2.992 F 5.492(.T)-.55 G +(he)-5.492 E F1(\255\255nopr)2.992 E(o\214le)-.18 E F0 .493 +(option may be used to inhibit this beha)2.993 F(vior)-.2 E(.)-.55 E +.418(When in)108 132 R -.2(vo)-.4 G -.1(ke).2 G 2.918(da).1 G 2.918(sa) +-2.918 G 2.918(ni)-2.918 G(nteracti)-2.918 E .718 -.15(ve s)-.25 H .418 +(hell with the name).15 F F1(sh)2.918 E F0(,)A F1(bash)2.918 E F0 .418 +(looks for the v)2.918 F(ariable)-.25 E/F3 9/Times-Bold@0 SF(ENV)2.918 E +/F4 9/Times-Roman@0 SF(,)A F0 -.15(ex)2.667 G .417(pands its v).15 F +(alue)-.25 E .171(if it is de\214ned, and uses the e)108 144 R .171 +(xpanded v)-.15 F .171(alue as the name of a \214le to read and e)-.25 F +-.15(xe)-.15 G 2.671(cute. Since).15 F 2.671(as)2.671 G .171(hell in) +-2.671 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E(as)108 156 Q F1(sh)3.081 E F0 +.581(does not attempt to read and e)3.081 F -.15(xe)-.15 G .581 +(cute commands from an).15 F 3.08(yo)-.15 G .58 +(ther startup \214les, the)-3.08 F F13.08 E(c\214le)-.18 E F0 +.58(option has)3.08 F .182(no ef)108 168 R 2.682(fect. A)-.25 F +(non-interacti)2.682 E .482 -.15(ve s)-.25 H .182(hell in).15 F -.2(vo) +-.4 G -.1(ke).2 G 2.682(dw).1 G .182(ith the name)-2.682 F F1(sh)2.682 E +F0 .182(does not attempt to read an)2.682 F 2.683(yo)-.15 G .183 +(ther startup \214les.)-2.683 F(When in)108 180 Q -.2(vo)-.4 G -.1(ke).2 +G 2.5(da).1 G(s)-2.5 E F1(sh)2.5 E F0(,)A F1(bash)2.5 E F0(enters)2.5 E +F2(posix)3.75 E F0(mode after the startup \214les are read.)3.03 E(When) +108 196.8 Q F1(bash)2.727 E F0 .226(is started in)2.727 F F2(posix)3.976 +E F0 .226(mode, as with the)3.256 F F1(\255\255posix)2.726 E F0 .226 +(command line option, it follo)2.726 F .226(ws the POSIX stan-)-.25 F +.341(dard for startup \214les.)108 208.8 R .341(In this mode, interacti) +5.341 F .641 -.15(ve s)-.25 H .341(hells e).15 F .341(xpand the)-.15 F +F3(ENV)2.841 E F0 -.25(va)2.591 G .342(riable and commands are read and) +.25 F -.15(exe)108 220.8 S(cuted from the \214le whose name is the e).15 +E(xpanded v)-.15 E 2.5(alue. No)-.25 F(other startup \214les are read.) +2.5 E F1(Bash)108 237.6 Q F0 .644(attempts to determine when it is bein\ +g run with its standard input connected to a a netw)3.144 F .643 +(ork connec-)-.1 F .229(tion, as if by the remote shell daemon, usually) +108 249.6 R F2 -.1(rs)2.729 G(hd).1 E F0 2.729(,o)C 2.73(rt)-2.729 G .23 +(he secure shell daemon)-2.73 F F2(sshd)2.73 E F0 5.23(.I)C(f)-5.23 E F1 +(bash)2.73 E F0 .23(determines it)2.73 F .741(is being run in this f)108 +261.6 R .741(ashion, it reads and e)-.1 F -.15(xe)-.15 G .741 +(cutes commands from).15 F F2(~/.bashr)3.241 E(c)-.37 E F0 3.241(,i)C +3.241(ft)-3.241 G .741(hat \214le e)-3.241 F .741(xists and is read-) +-.15 F 2.97(able. It)108 273.6 R .47(will not do this if in)2.97 F -.2 +(vo)-.4 G -.1(ke).2 G 2.97(da).1 G(s)-2.97 E F1(sh)2.97 E F0 5.47(.T)C +(he)-5.47 E F12.97 E(c)-.18 E F0 .47 +(option may be used to inhibit this beha)2.97 F(vior)-.2 E 2.97(,a)-.4 G +.47(nd the)-2.97 F F1108 285.6 Q(c\214le)-.18 E F0 .886 +(option may be used to force another \214le to be read, b)3.387 F(ut)-.2 +E F2 -.1(rs)3.386 G(hd).1 E F0 .886(does not generally in)3.386 F -.2 +(vo)-.4 G 1.086 -.1(ke t).2 H .886(he shell).1 F +(with those options or allo)108 297.6 Q 2.5(wt)-.25 G +(hem to be speci\214ed.)-2.5 E 1.207 +(If the shell is started with the ef)108 314.4 R(fecti)-.25 E 1.507 -.15 +(ve u)-.25 H 1.208 +(ser \(group\) id not equal to the real user \(group\) id, and the).15 F +F13.708 E F0 .536(option is not supplied, no startup \214les are \ +read, shell functions are not inherited from the en)108 326.4 R .535 +(vironment, the)-.4 F F3(SHELLOPTS)108 338.4 Q F4(,)A F3 -.27(BA)2.959 G +(SHOPTS).27 E F4(,)A F3(CDP)2.959 E -.855(AT)-.666 G(H).855 E F4(,)A F0 +(and)2.959 E F3(GLOBIGNORE)3.209 E F0 -.25(va)2.959 G .709 +(riables, if the).25 F 3.209(ya)-.15 G .71(ppear in the en)-3.209 F .71 +(vironment, are)-.4 F .905(ignored, and the ef)108 350.4 R(fecti)-.25 E +1.205 -.15(ve u)-.25 H .904(ser id is set to the real user id.).15 F +.904(If the)5.904 F F13.404 E F0 .904(option is supplied at in) +3.404 F -.2(vo)-.4 G .904(cation, the).2 F(startup beha)108 362.4 Q +(vior is the same, b)-.2 E(ut the ef)-.2 E(fecti)-.25 E .3 -.15(ve u) +-.25 H(ser id is not reset.).15 E/F5 10.95/Times-Bold@0 SF(DEFINITIONS) +72 379.2 Q F0(The follo)108 391.2 Q +(wing de\214nitions are used throughout the rest of this document.)-.25 +E F1(blank)108 403.2 Q F0 2.5(As)11.54 G(pace or tab)-2.5 E(.)-.4 E F1 +-.1(wo)108 415.2 S(rd).1 E F0 2.5(As)13.88 G +(equence of characters considered as a single unit by the shell.)-2.5 E +(Also kno)5 E(wn as a)-.25 E F1(tok)2.5 E(en)-.1 E F0(.)A F1(name)108 +427.2 Q F0(A)12.67 E F2(wor)3.005 E(d)-.37 E F0 .165 +(consisting only of alphanumeric characters and underscores, and be) +3.435 F .166(ginning with an alpha-)-.15 F +(betic character or an underscore.)144 439.2 Q(Also referred to as an)5 +E F1(identi\214er)2.5 E F0(.)A F1(metacharacter)108 451.2 Q F0 2.5(Ac) +144 463.2 S(haracter that, when unquoted, separates w)-2.5 E 2.5 +(ords. One)-.1 F(of the follo)2.5 E(wing:)-.25 E F1 5(|&;\(\)<>s)144 +475.2 S 2.5(pace tab)-5 F(contr)108 487.2 Q(ol operator)-.18 E F0(A)144 +499.2 Q F2(tok)2.5 E(en)-.1 E F0(that performs a control function.)2.5 E +(It is one of the follo)5 E(wing symbols:)-.25 E/F6 10/Symbol SF +144 511.2 Q F1 5(&&)5 G 5(&;;)-5 G 5(;\(\)||)-5 G 10(&<)-5 G(newline>) +-10 E F5(RESER)72 528 Q(VED W)-.602 E(ORDS)-.11 E F2 .307(Reserved wor) +108 540 R(ds)-.37 E F0 .307(are w)2.807 F .307(ords that ha)-.1 F .607 +-.15(ve a s)-.2 H .306(pecial meaning to the shell.).15 F .306 +(The follo)5.306 F .306(wing w)-.25 F .306(ords are recognized as)-.1 F +(reserv)108 552 Q .227(ed when unquoted and either the \214rst w)-.15 F +.227(ord of a simple command \(see)-.1 F F3 .227(SHELL GRAMMAR)2.727 F +F0(belo)2.477 E .227(w\) or)-.25 F(the third w)108 564 Q(ord of a)-.1 E +F1(case)2.5 E F0(or)2.5 E F1 -.25(fo)2.5 G(r).25 E F0(command:)2.5 E F1 +11.916(!c)144 580.8 S 9.416(ase do done elif else esac \214 f)-11.916 F +9.415(or function if in select then until)-.25 F 7.5 +(while { } time [[ ]])144 592.8 R F5(SHELL GRAMMAR)72 609.6 Q F1 +(Simple Commands)87 621.6 Q F0(A)108 633.6 Q F2 .388(simple command) +2.888 F F0 .388(is a sequence of optional v)2.888 F .389 +(ariable assignments follo)-.25 F .389(wed by)-.25 F F1(blank)2.889 E F0 +.389(-separated w)B .389(ords and)-.1 F .816 +(redirections, and terminated by a)108 645.6 R F2(contr)3.316 E .815 +(ol oper)-.45 F(ator)-.15 E F0 5.815(.T)C .815(he \214rst w)-5.815 F +.815(ord speci\214es the command to be e)-.1 F -.15(xe)-.15 G(cuted,).15 +E(and is passed as ar)108 657.6 Q(gument zero.)-.18 E(The remaining w)5 +E(ords are passed as ar)-.1 E(guments to the in)-.18 E -.2(vo)-.4 G -.1 +(ke).2 G 2.5(dc).1 G(ommand.)-2.5 E .175(The return v)108 674.4 R .175 +(alue of a)-.25 F F2 .175(simple command)2.675 F F0 .175(is its e)2.675 +F .175(xit status, or 128+)-.15 F F2(n)A F0 .176 +(if the command is terminated by signal)3.508 F F2(n)2.676 E F0(.).24 E +F1(Pipelines)87 691.2 Q F0(A)108 703.2 Q F2(pipeline)2.996 E F0 .496(is\ + a sequence of one or more commands separated by one of the control ope\ +rators)2.996 F F1(|)2.996 E F0(or)2.996 E F1(|&)2.996 E F0 5.496(.T)C +(he)-5.496 E(format for a pipeline is:)108 715.2 Q(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(3)190.955 E 0 Cg EP +%%Page: 4 4 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E([)144 84 Q/F1 10/Times-Bold@0 SF(time)A F0([)2.5 E F1A F0 +(]] [ ! ])A/F2 10/Times-Italic@0 SF(command)2.5 E F0 2.5([[)2.5 G F1(|) +-2.5 E/F3 10/Symbol SFA F1(|&)A F0(])A F2(command2)2.5 E F0(... ]) +2.5 E .243(The standard output of)108 100.8 R F2(command)2.943 E F0 .244 +(is connected via a pipe to the standard input of)3.513 F F2(command2) +2.744 E F0 5.244(.T).02 G .244(his connec-)-5.244 F .643 +(tion is performed before an)108 112.8 R 3.143(yr)-.15 G .642 +(edirections speci\214ed by the command \(see)-3.143 F/F4 9/Times-Bold@0 +SF(REDIRECTION)3.142 E F0(belo)2.892 E 3.142(w\). If)-.25 F F1(|&)3.142 +E F0(is)3.142 E 1.43(used, the standard error of)108 124.8 R F2(command) +3.93 E F0 1.431(is connected to)3.93 F F2(command2)3.931 E F0 2.531 -.55 +('s s)D 1.431(tandard input through the pipe; it is).55 F 1.197 +(shorthand for)108 136.8 R F1 1.197(2>&1 |)3.697 F F0 6.197(.T)C 1.197 +(his implicit redirection of the standard error is performed after an) +-6.197 F 3.696(yr)-.15 G(edirections)-3.696 E +(speci\214ed by the command.)108 148.8 Q .48 +(The return status of a pipeline is the e)108 165.6 R .48 +(xit status of the last command, unless the)-.15 F F1(pipefail)2.98 E F0 +.48(option is enabled.)2.98 F(If)108 177.6 Q F1(pipefail)2.687 E F0 .187 +(is enabled, the pipeline')2.687 F 2.687(sr)-.55 G .186 +(eturn status is the v)-2.687 F .186 +(alue of the last \(rightmost\) command to e)-.25 F .186(xit with a)-.15 +F .61(non-zero status, or zero if all commands e)108 189.6 R .611 +(xit successfully)-.15 F 5.611(.I)-.65 G 3.111(ft)-5.611 G .611 +(he reserv)-3.111 F .611(ed w)-.15 F(ord)-.1 E F1(!)3.111 E F0 .611 +(precedes a pipeline, the)5.611 F -.15(ex)108 201.6 S .55 +(it status of that pipeline is the logical ne).15 F -.05(ga)-.15 G .55 +(tion of the e).05 F .55(xit status as described abo)-.15 F -.15(ve)-.15 +G 5.55(.T).15 G .55(he shell w)-5.55 F .55(aits for)-.1 F +(all commands in the pipeline to terminate before returning a v)108 +213.6 Q(alue.)-.25 E .298(If the)108 230.4 R F1(time)2.799 E F0(reserv) +2.799 E .299(ed w)-.15 F .299(ord precedes a pipeline, the elapsed as w\ +ell as user and system time consumed by its)-.1 F -.15(exe)108 242.4 S +.14(cution are reported when the pipeline terminates.).15 F(The)5.139 E +F12.639 E F0 .139(option changes the output format to that spec-) +2.639 F .779(i\214ed by POSIX.)108 254.4 R(The)5.779 E F4(TIMEFORMA) +3.279 E(T)-.855 E F0 -.25(va)3.029 G .779 +(riable may be set to a format string that speci\214es ho).25 F 3.28(wt) +-.25 G .78(he timing)-3.28 F +(information should be displayed; see the description of)108 266.4 Q F4 +(TIMEFORMA)2.5 E(T)-.855 E F0(under)2.25 E F1(Shell V)2.5 E(ariables) +-.92 E F0(belo)2.5 E -.65(w.)-.25 G(Each command in a pipeline is e)108 +283.2 Q -.15(xe)-.15 G +(cuted as a separate process \(i.e., in a subshell\).).15 E F1(Lists)87 +300 Q F0(A)108 312 Q F2(list)2.601 E F0 .101(is a sequence of one or mo\ +re pipelines separated by one of the operators)2.601 F F1(;)2.6 E F0(,)A +F1(&)2.6 E F0(,)A F1(&&)2.6 E F0 2.6(,o)C(r)-2.6 E F32.6 E F0 2.6 +(,a)C .1(nd option-)-2.6 F(ally terminated by one of)108 324 Q F1(;)2.5 +E F0(,)A F1(&)2.5 E F0 2.5(,o)C(r)-2.5 E F1()2.5 E F0(.)A .656 +(Of these list operators,)108 340.8 R F1(&&)3.156 E F0(and)3.156 E F3 +3.156 E F0(ha)3.156 E .956 -.15(ve e)-.2 H .656 +(qual precedence, follo).15 F .656(wed by)-.25 F F1(;)3.156 E F0(and) +3.156 E F1(&)3.156 E F0 3.156(,w)C .656(hich ha)-3.156 F .957 -.15(ve e) +-.2 H .657(qual prece-).15 F(dence.)108 352.8 Q 2.5(As)108 369.6 S +(equence of one or more ne)-2.5 E(wlines may appear in a)-.25 E F2(list) +2.5 E F0(instead of a semicolon to delimit commands.)2.5 E .029 +(If a command is terminated by the control operator)108 386.4 R F1(&) +2.529 E F0 2.529(,t)C .029(he shell e)-2.529 F -.15(xe)-.15 G .029 +(cutes the command in the).15 F F2(bac)2.528 E(kgr)-.2 E(ound)-.45 E F0 +(in)2.528 E 2.875(as)108 398.4 S 2.875(ubshell. The)-2.875 F .375 +(shell does not w)2.875 F .375 +(ait for the command to \214nish, and the return status is 0.)-.1 F .376 +(Commands sepa-)5.376 F .849(rated by a)108 410.4 R F1(;)3.349 E F0 .849 +(are e)3.349 F -.15(xe)-.15 G .848(cuted sequentially; the shell w).15 F +.848(aits for each command to terminate in turn.)-.1 F .848(The return) +5.848 F(status is the e)108 422.4 Q(xit status of the last command e) +-.15 E -.15(xe)-.15 G(cuted.).15 E .632(AND and OR lists are sequences \ +of one of more pipelines separated by the)108 439.2 R F1(&&)3.132 E F0 +(and)3.133 E F33.133 E F0 .633(control operators,)3.133 F +(respecti)108 451.2 Q -.15(ve)-.25 G(ly).15 E 5(.A)-.65 G +(ND and OR lists are e)-5 E -.15(xe)-.15 G(cuted with left associati).15 +E(vity)-.25 E 5(.A)-.65 G 2.5(nA)-5 G(ND list has the form)-2.5 E F2 +(command1)144 468 Q F1(&&)2.5 E F2(command2)2.5 E(command2)108.2 484.8 Q +F0(is e)2.52 E -.15(xe)-.15 G(cuted if, and only if,).15 E F2(command1) +2.7 E F0(returns an e)2.5 E(xit status of zero.)-.15 E +(An OR list has the form)108 501.6 Q F2(command1)144 518.4 Q F32.5 +E F2(command2)2.5 E(command2)108.2 540 Q F0 .729(is e)3.249 F -.15(xe) +-.15 G .729(cuted if and only if).15 F F2(command1)3.429 E F0 .729 +(returns a non-zero e)3.229 F .729(xit status.)-.15 F .728 +(The return status of AND)5.729 F(and OR lists is the e)108 552 Q +(xit status of the last command e)-.15 E -.15(xe)-.15 G +(cuted in the list.).15 E F1(Compound Commands)87 568.8 Q F0(A)108 580.8 +Q F2(compound command)2.5 E F0(is one of the follo)2.5 E(wing:)-.25 E +(\()108 597.6 Q F2(list)A F0(\))A F2(list)17.11 E F0 .011(is e)2.511 F +-.15(xe)-.15 G .011(cuted in a subshell en).15 F .011(vironment \(see) +-.4 F F4 .011(COMMAND EXECUTION ENVIR)2.511 F(ONMENT)-.27 E F0(belo) +2.262 E(w\).)-.25 E -1.11(Va)144 609.6 S 1.064(riable assignments and b) +1.11 F 1.064(uiltin commands that af)-.2 F 1.064(fect the shell')-.25 F +3.564(se)-.55 G -.4(nv)-3.564 G 1.064(ironment do not remain in).4 F(ef) +144 621.6 Q(fect after the command completes.)-.25 E +(The return status is the e)5 E(xit status of)-.15 E F2(list)2.5 E F0(.) +A({)108 638.4 Q F2(list)2.5 E F0 2.5(;})C F2(list)3.89 E F0 .401 +(is simply e)2.901 F -.15(xe)-.15 G .401(cuted in the current shell en) +.15 F(vironment.)-.4 E F2(list)5.401 E F0 .402 +(must be terminated with a ne)2.901 F .402(wline or)-.25 F 3.215 +(semicolon. This)144 650.4 R .715(is kno)3.215 F .715(wn as a)-.25 F F2 +(gr)3.215 E .715(oup command)-.45 F F0 5.715(.T)C .715 +(he return status is the e)-5.715 F .714(xit status of)-.15 F F2(list) +3.214 E F0 5.714(.N)C(ote)-5.714 E .219(that unlik)144 662.4 R 2.719(et) +-.1 G .219(he metacharacters)-2.719 F F1(\()2.719 E F0(and)2.719 E F1 +(\))2.719 E F0(,)A F1({)2.719 E F0(and)2.719 E F1(})2.719 E F0(are)2.719 +E F2 -.37(re)2.72 G .22(served wor).37 F(ds)-.37 E F0 .22 +(and must occur where a reserv)2.72 F(ed)-.15 E -.1(wo)144 674.4 S .257 +(rd is permitted to be recognized.).1 F .257(Since the)5.257 F 2.757(yd) +-.15 G 2.756(on)-2.757 G .256(ot cause a w)-2.756 F .256(ord break, the) +-.1 F 2.756(ym)-.15 G .256(ust be separated)-2.756 F(from)144 686.4 Q F2 +(list)2.5 E F0(by whitespace or another shell metacharacter)2.5 E(.)-.55 +E(\(\()108 703.2 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F0(\)\))A(The)144 +715.2 Q F2 -.2(ex)2.551 G(pr).2 E(ession)-.37 E F0 .051(is e)2.551 F +-.25(va)-.25 G .051(luated according to the rules described belo).25 F +2.552(wu)-.25 G(nder)-2.552 E F4 .052(ARITHMETIC EV)2.552 F(ALU)-1.215 E +(A-)-.54 E(TION)144 727.2 Q/F5 9/Times-Roman@0 SF(.)A F0 .411(If the v) +4.911 F .411(alue of the e)-.25 F .411(xpression is non-zero, the retur\ +n status is 0; otherwise the return status)-.15 F(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(4)190.955 E 0 Cg EP +%%Page: 5 5 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(is 1.)144 84 Q(This is e)5 E(xactly equi)-.15 E -.25(va)-.25 G +(lent to).25 E/F1 10/Times-Bold@0 SF(let ")2.5 E/F2 10/Times-Italic@0 SF +-.2(ex)C(pr).2 E(ession)-.37 E F1(")A F0(.)A F1([[)108 100.8 Q F2 -.2 +(ex)2.5 G(pr).2 E(ession)-.37 E F1(]])2.5 E F0 1.299 +(Return a status of 0 or 1 depending on the e)144 112.8 R -.25(va)-.25 G +1.3(luation of the conditional e).25 F(xpression)-.15 E F2 -.2(ex)3.8 G +(pr).2 E(ession)-.37 E F0(.)A 2.274 +(Expressions are composed of the primaries described belo)144 124.8 R +4.773(wu)-.25 G(nder)-4.773 E/F3 9/Times-Bold@0 SF(CONDITION)4.773 E +2.273(AL EXPRES-)-.18 F(SIONS)144 136.8 Q/F4 9/Times-Roman@0 SF(.)A F0 +-.8(Wo)5.632 G 1.133(rd splitting and pathname e).8 F 1.133 +(xpansion are not performed on the w)-.15 F 1.133(ords between the)-.1 F +F1([[)3.633 E F0(and)144 148.8 Q F1(]])2.964 E F0 2.964(;t)C .464 +(ilde e)-2.964 F .464(xpansion, parameter and v)-.15 F .464(ariable e) +-.25 F .463(xpansion, arithmetic e)-.15 F .463 +(xpansion, command substi-)-.15 F 1.081 +(tution, process substitution, and quote remo)144 160.8 R -.25(va)-.15 G +3.581(la).25 G 1.081(re performed.)-3.581 F 1.081 +(Conditional operators such as)6.081 F F13.581 E F0 +(must be unquoted to be recognized as primaries.)144 172.8 Q +(When used with)144 190.8 Q F1([[)2.5 E F0 2.5(,T)C(he)-2.5 E F1(<)2.5 E +F0(and)2.5 E F1(>)2.5 E F0(operators sort le)2.5 E +(xicographically using the current locale.)-.15 E .503(When the)144 +208.8 R F1(==)3.003 E F0(and)3.002 E F1(!=)3.002 E F0 .502(operators ar\ +e used, the string to the right of the operator is considered a pat-) +3.002 F 1.224(tern and matched according to the rules described belo)144 +220.8 R 3.724(wu)-.25 G(nder)-3.724 E F1 -.1(Pa)3.724 G(tter).1 E 3.725 +(nM)-.15 G(atching)-3.725 E F0 6.225(.I)C 3.725(ft)-6.225 G 1.225 +(he shell)-3.725 F(option)144 232.8 Q F1(nocasematch)3.405 E F0 .904 +(is enabled, the match is performed without re)3.405 F -.05(ga)-.15 G +.904(rd to the case of alphabetic).05 F 2.751(characters. The)144 244.8 +R .251(return v)2.751 F .251(alue is 0 if the string matches \()-.25 F +F1(==)A F0 2.751(\)o)C 2.751(rd)-2.751 G .251(oes not match \()-2.751 F +F1(!=)A F0 2.751(\)t)C .252(he pattern, and)-2.751 F 2.5(1o)144 256.8 S +2.5(therwise. An)-2.5 F 2.5(yp)-.15 G(art of the pattern may be quoted \ +to force it to be matched as a string.)-2.5 E .243 +(An additional binary operator)144 274.8 R(,)-.4 E F1(=~)2.743 E F0 +2.743(,i)C 2.743(sa)-2.743 G -.25(va)-2.943 G .243 +(ilable, with the same precedence as).25 F F1(==)2.743 E F0(and)2.743 E +F1(!=)2.743 E F0 5.243(.W)C .243(hen it is)-5.243 F 1.953 +(used, the string to the right of the operator is considered an e)144 +286.8 R 1.954(xtended re)-.15 F 1.954(gular e)-.15 F 1.954 +(xpression and)-.15 F .207(matched accordingly \(as in)144 298.8 R F2 +-.37(re)2.707 G -.1(ge)-.03 G(x)-.1 E F0 2.707(\(3\)\). The)B .207 +(return v)2.707 F .207 +(alue is 0 if the string matches the pattern, and 1)-.25 F 3.345 +(otherwise. If)144 310.8 R .845(the re)3.345 F .845(gular e)-.15 F .846 +(xpression is syntactically incorrect, the conditional e)-.15 F +(xpression')-.15 E 3.346(sr)-.55 G(eturn)-3.346 E -.25(va)144 322.8 S +.667(lue is 2.).25 F .667(If the shell option)5.667 F F1(nocasematch) +3.167 E F0 .667(is enabled, the match is performed without re)3.167 F +-.05(ga)-.15 G .666(rd to).05 F .378(the case of alphabetic characters.) +144 334.8 R(An)5.378 E 2.878(yp)-.15 G .378 +(art of the pattern may be quoted to force it to be matched)-2.878 F +.265(as a string.)144 346.8 R .265 +(Substrings matched by parenthesized sube)5.265 F .265 +(xpressions within the re)-.15 F .265(gular e)-.15 F .265(xpression are) +-.15 F(sa)144 358.8 Q -.15(ve)-.2 G 3.096(di).15 G 3.097(nt)-3.096 G +.597(he array v)-3.097 F(ariable)-.25 E F3 -.27(BA)3.097 G(SH_REMA).27 E +(TCH)-.855 E F4(.)A F0 .597(The element of)5.097 F F3 -.27(BA)3.097 G +(SH_REMA).27 E(TCH)-.855 E F0 .597(with inde)2.847 F 3.097(x0i)-.15 G(s) +-3.097 E .049(the portion of the string matching the entire re)144 370.8 +R .049(gular e)-.15 F 2.549(xpression. The)-.15 F .049(element of)2.549 +F F3 -.27(BA)2.549 G(SH_REMA).27 E(TCH)-.855 E F0(with inde)144 382.8 Q +(x)-.15 E F2(n)2.5 E F0(is the portion of the string matching the)2.5 E +F2(n)2.5 E F0(th parenthesized sube)A(xpression.)-.15 E .785 +(Expressions may be combined using the follo)144 400.8 R .786 +(wing operators, listed in decreasing order of prece-)-.25 F(dence:)144 +412.8 Q F1(\()144 430.8 Q F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F1(\)) +2.5 E F0 .523(Returns the v)180 442.8 R .522(alue of)-.25 F F2 -.2(ex) +3.022 G(pr).2 E(ession)-.37 E F0 5.522(.T)C .522(his may be used to o) +-5.522 F -.15(ve)-.15 G .522(rride the normal precedence of).15 F +(operators.)180 454.8 Q F1(!)144 466.8 Q F2 -.2(ex)2.5 G(pr).2 E(ession) +-.37 E F0 -.35(Tr)180 478.8 S(ue if).35 E F2 -.2(ex)2.5 G(pr).2 E +(ession)-.37 E F0(is f)2.74 E(alse.)-.1 E F2 -.2(ex)144 490.8 S(pr).2 E +(ession1)-.37 E F1(&&)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0 +-.35(Tr)180 502.8 S(ue if both).35 E F2 -.2(ex)2.5 G(pr).2 E(ession1) +-.37 E F0(and)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0(are true.) +2.52 E F2 -.2(ex)144 514.8 S(pr).2 E(ession1)-.37 E/F5 10/Symbol SF +2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0 -.35(Tr)180 526.8 +S(ue if either).35 E F2 -.2(ex)2.5 G(pr).2 E(ession1)-.37 E F0(or)2.5 E +F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0(is true.)2.52 E(The)144 543.6 +Q F1(&&)3.298 E F0(and)3.298 E F53.298 E F0 .798 +(operators do not e)3.298 F -.25(va)-.25 G(luate).25 E F2 -.2(ex)3.298 G +(pr).2 E(ession2)-.37 E F0 .798(if the v)3.298 F .798(alue of)-.25 F F2 +-.2(ex)3.298 G(pr).2 E(ession1)-.37 E F0 .799(is suf)3.298 F .799 +(\214cient to)-.25 F(determine the return v)144 555.6 Q +(alue of the entire conditional e)-.25 E(xpression.)-.15 E F1 -.25(fo) +108 572.4 S(r).25 E F2(name)2.5 E F0 2.5([[)2.5 G F1(in)A F0([)2.5 E F2 +(wor)2.5 E 2.5(d.)-.37 G(..)-2.5 E F0 2.5(]];])2.5 G F1(do)A F2(list)2.5 +E F0(;)2.5 E F1(done)2.5 E F0 .424(The list of w)144 584.4 R .424 +(ords follo)-.1 F(wing)-.25 E F1(in)2.924 E F0 .423(is e)2.924 F .423 +(xpanded, generating a list of items.)-.15 F .423(The v)5.423 F(ariable) +-.25 E F2(name)2.923 E F0 .423(is set to)2.923 F .653 +(each element of this list in turn, and)144 596.4 R F2(list)3.153 E F0 +.653(is e)3.153 F -.15(xe)-.15 G .653(cuted each time.).15 F .653 +(If the)5.653 F F1(in)3.153 E F2(wor)3.153 E(d)-.37 E F0 .653 +(is omitted, the)3.153 F F1 -.25(fo)3.153 G(r).25 E F0 .649(command e) +144 608.4 R -.15(xe)-.15 G(cutes).15 E F2(list)3.149 E F0 .648 +(once for each positional parameter that is set \(see)3.148 F F3 -.666 +(PA)3.148 G(RAMETERS).666 E F0(belo)2.898 E(w\).)-.25 E .153 +(The return status is the e)144 620.4 R .153 +(xit status of the last command that e)-.15 F -.15(xe)-.15 G 2.654 +(cutes. If).15 F .154(the e)2.654 F .154(xpansion of the items)-.15 F +(follo)144 632.4 Q(wing)-.25 E F1(in)2.5 E F0 +(results in an empty list, no commands are e)2.5 E -.15(xe)-.15 G +(cuted, and the return status is 0.).15 E F1 -.25(fo)108 649.2 S(r).25 E +F0(\(\()2.5 E F2 -.2(ex)2.5 G(pr1).2 E F0(;)2.5 E F2 -.2(ex)2.5 G(pr2).2 +E F0(;)2.5 E F2 -.2(ex)2.5 G(pr3).2 E F0(\)\) ;)2.5 E F1(do)2.5 E F2 +(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0 1.236(First, the arithmetic e) +144 661.2 R(xpression)-.15 E F2 -.2(ex)3.736 G(pr1).2 E F0 1.235(is e) +3.736 F -.25(va)-.25 G 1.235 +(luated according to the rules described belo).25 F 3.735(wu)-.25 G +(nder)-3.735 E F3 .561(ARITHMETIC EV)144 673.2 R(ALU)-1.215 E -.855(AT) +-.54 G(ION).855 E F4(.)A F0 .561(The arithmetic e)5.061 F(xpression)-.15 +E F2 -.2(ex)3.061 G(pr2).2 E F0 .562(is then e)3.062 F -.25(va)-.25 G +.562(luated repeatedly until).25 F .592(it e)144 685.2 R -.25(va)-.25 G +.592(luates to zero.).25 F .592(Each time)5.592 F F2 -.2(ex)3.092 G(pr2) +.2 E F0 -.25(eva)3.092 G .592(luates to a non-zero v).25 F(alue,)-.25 E +F2(list)3.092 E F0 .591(is e)3.092 F -.15(xe)-.15 G .591 +(cuted and the arith-).15 F .228(metic e)144 697.2 R(xpression)-.15 E F2 +-.2(ex)2.728 G(pr3).2 E F0 .229(is e)2.728 F -.25(va)-.25 G 2.729 +(luated. If).25 F(an)2.729 E 2.729(ye)-.15 G .229 +(xpression is omitted, it beha)-2.879 F -.15(ve)-.2 G 2.729(sa).15 G +2.729(si)-2.729 G 2.729(fi)-2.729 G 2.729(te)-2.729 G -.25(va)-2.979 G +.229(luates to 1.).25 F .228(The return v)144 709.2 R .228 +(alue is the e)-.25 F .228(xit status of the last command in)-.15 F F2 +(list)2.728 E F0 .227(that is e)2.728 F -.15(xe)-.15 G .227(cuted, or f) +.15 F .227(alse if an)-.1 F 2.727(yo)-.15 G 2.727(ft)-2.727 G(he)-2.727 +E -.15(ex)144 721.2 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(5)190.955 E 0 Cg EP +%%Page: 6 6 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(select)108 84 Q/F2 10/Times-Italic@0 SF +(name)2.5 E F0([)2.5 E F1(in)2.5 E F2(wor)2.5 E(d)-.37 E F0 2.5(];)2.5 G +F1(do)A F2(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0 .432(The list of w)144 +96 R .432(ords follo)-.1 F(wing)-.25 E F1(in)2.932 E F0 .432(is e)2.932 +F .432(xpanded, generating a list of items.)-.15 F .433(The set of e) +5.433 F .433(xpanded w)-.15 F(ords)-.1 E .843 +(is printed on the standard error)144 108 R 3.342(,e)-.4 G .842 +(ach preceded by a number)-3.342 F 5.842(.I)-.55 G 3.342(ft)-5.842 G(he) +-3.342 E F1(in)3.342 E F2(wor)3.342 E(d)-.37 E F0 .842 +(is omitted, the posi-)3.342 F .201(tional parameters are printed \(see) +144 120 R/F3 9/Times-Bold@0 SF -.666(PA)2.701 G(RAMETERS).666 E F0(belo) +2.451 E 2.701(w\). The)-.25 F F3(PS3)2.701 E F0 .201 +(prompt is then displayed and a)2.451 F .214 +(line read from the standard input.)144 132 R .213 +(If the line consists of a number corresponding to one of the dis-)5.214 +F 1.537(played w)144 144 R 1.537(ords, then the v)-.1 F 1.537(alue of) +-.25 F F2(name)4.397 E F0 1.537(is set to that w)4.217 F 4.037(ord. If) +-.1 F 1.538(the line is empty)4.038 F 4.038(,t)-.65 G 1.538(he w)-4.038 +F 1.538(ords and)-.1 F .066(prompt are displayed ag)144 156 R 2.566 +(ain. If)-.05 F .065(EOF is read, the command completes.)2.566 F(An) +5.065 E 2.565(yo)-.15 G .065(ther v)-2.565 F .065(alue read causes)-.25 +F F2(name)144 168 Q F0 .972(to be set to null.)3.652 F .972 +(The line read is sa)5.972 F -.15(ve)-.2 G 3.473(di).15 G 3.473(nt) +-3.473 G .973(he v)-3.473 F(ariable)-.25 E F3(REPL)3.473 E(Y)-.828 E/F4 +9/Times-Roman@0 SF(.)A F0(The)5.473 E F2(list)3.563 E F0 .973(is e)4.153 +F -.15(xe)-.15 G .973(cuted after).15 F .072(each selection until a)144 +180 R F1(br)2.571 E(eak)-.18 E F0 .071(command is e)2.571 F -.15(xe)-.15 +G 2.571(cuted. The).15 F -.15(ex)2.571 G .071(it status of).15 F F1 +(select)2.571 E F0 .071(is the e)2.571 F .071(xit status of the)-.15 F +(last command e)144 192 Q -.15(xe)-.15 G(cuted in).15 E F2(list)2.5 E F0 +2.5(,o).68 G 2.5(rz)-2.5 G(ero if no commands were e)-2.5 E -.15(xe)-.15 +G(cuted.).15 E F1(case)108 208.8 Q F2(wor)2.5 E(d)-.37 E F1(in)2.5 E F0 +2.5([[)2.5 G(\(])-2.5 E F2(pattern)2.5 E F0([)2.5 E F1(|)2.5 E F2 +(pattern)2.5 E F0 2.5(].)2.5 G(.. \))-2.5 E F2(list)2.5 E F0(;; ] ...) +2.5 E F1(esac)2.5 E F0(A)144 220.8 Q F1(case)3.264 E F0 .764 +(command \214rst e)3.264 F(xpands)-.15 E F2(wor)3.264 E(d)-.37 E F0 +3.264(,a)C .764(nd tries to match it ag)-3.264 F .764(ainst each)-.05 F +F2(pattern)3.264 E F0 .765(in turn, using the)3.264 F .596 +(same matching rules as for pathname e)144 232.8 R .595(xpansion \(see) +-.15 F F1 -.1(Pa)3.095 G .595(thname Expansion).1 F F0(belo)3.095 E +3.095(w\). The)-.25 F F2(wor)3.095 E(d)-.37 E F0(is)3.095 E -.15(ex)144 +244.8 S 1.092(panded using tilde e).15 F 1.092 +(xpansion, parameter and v)-.15 F 1.092(ariable e)-.25 F 1.092 +(xpansion, arithmetic substitution, com-)-.15 F 1.268 +(mand substitution, process substitution and quote remo)144 256.8 R -.25 +(va)-.15 G 3.768(l. Each).25 F F2(pattern)3.768 E F0 -.15(ex)3.768 G +1.268(amined is e).15 F(xpanded)-.15 E .353(using tilde e)144 268.8 R +.353(xpansion, parameter and v)-.15 F .353(ariable e)-.25 F .353 +(xpansion, arithmetic substitution, command substi-)-.15 F 1.517 +(tution, and process substitution.)144 280.8 R 1.517 +(If the shell option)6.517 F F1(nocasematch)4.016 E F0 1.516 +(is enabled, the match is per)4.016 F(-)-.2 E 1.346(formed without re) +144 292.8 R -.05(ga)-.15 G 1.346 +(rd to the case of alphabetic characters.).05 F 1.347 +(When a match is found, the corre-)6.347 F(sponding)144 304.8 Q F2(list) +2.777 E F0 .277(is e)2.777 F -.15(xe)-.15 G 2.777(cuted. If).15 F(the) +2.777 E F1(;;)2.777 E F0 .277 +(operator is used, no subsequent matches are attempted after the)2.777 F +.848(\214rst pattern match.)144 316.8 R(Using)5.848 E F1(;&)3.348 E F0 +.849(in place of)3.349 F F1(;;)3.349 E F0 .849(causes e)3.349 F -.15(xe) +-.15 G .849(cution to continue with the).15 F F2(list)3.349 E F0 +(associated)3.349 E .078(with the ne)144 328.8 R .078 +(xt set of patterns.)-.15 F(Using)5.078 E F1(;;&)2.578 E F0 .078 +(in place of)2.578 F F1(;;)2.578 E F0 .077 +(causes the shell to test the ne)2.578 F .077(xt pattern list in)-.15 F +.227(the statement, if an)144 340.8 R 1.527 -.65(y, a)-.15 H .227(nd e) +.65 F -.15(xe)-.15 G .227(cute an).15 F 2.727(ya)-.15 G(ssociated)-2.727 +E F2(list)2.727 E F0 .227(on a successful match.)2.727 F .227(The e) +5.227 F .227(xit status is zero)-.15 F(if no pattern matches.)144 352.8 +Q(Otherwise, it is the e)5 E(xit status of the last command e)-.15 E +-.15(xe)-.15 G(cuted in).15 E F2(list)2.5 E F0(.)A F1(if)108 369.6 Q F2 +(list)2.5 E F0(;)A F1(then)2.5 E F2(list;)2.5 E F0([)2.5 E F1(elif)2.5 E +F2(list)2.5 E F0(;)A F1(then)2.5 E F2(list)2.5 E F0 2.5(;].)C(.. [)-2.5 +E F1(else)2.5 E F2(list)2.5 E F0 2.5(;])C F1<8c>A F0(The)144 381.6 Q F1 +(if)2.978 E F2(list)3.068 E F0 .478(is e)3.658 F -.15(xe)-.15 G 2.978 +(cuted. If).15 F .478(its e)2.978 F .478(xit status is zero, the)-.15 F +F1(then)2.978 E F2(list)2.978 E F0 .478(is e)2.978 F -.15(xe)-.15 G +2.978(cuted. Otherwise,).15 F(each)2.978 E F1(elif)2.977 E F2(list)2.977 +E F0 1.087(is e)144 393.6 R -.15(xe)-.15 G 1.087 +(cuted in turn, and if its e).15 F 1.087 +(xit status is zero, the corresponding)-.15 F F1(then)3.587 E F2(list) +3.587 E F0 1.088(is e)3.588 F -.15(xe)-.15 G 1.088(cuted and the).15 F +.104(command completes.)144 405.6 R .103(Otherwise, the)5.104 F F1(else) +2.603 E F2(list)2.603 E F0 .103(is e)2.603 F -.15(xe)-.15 G .103 +(cuted, if present.).15 F .103(The e)5.103 F .103(xit status is the e) +-.15 F .103(xit sta-)-.15 F(tus of the last command e)144 417.6 Q -.15 +(xe)-.15 G(cuted, or zero if no condition tested true.).15 E F1(while) +108 434.4 Q F2(list)2.5 E F0(;)A F1(do)2.5 E F2(list)2.5 E F0(;)A F1 +(done)2.5 E(until)108 446.4 Q F2(list)2.5 E F0(;)A F1(do)2.5 E F2(list) +2.5 E F0(;)A F1(done)2.5 E F0(The)144 458.4 Q F1(while)3.103 E F0 .603 +(command continuously e)3.103 F -.15(xe)-.15 G .603(cutes the).15 F F1 +(do)3.103 E F2(list)3.103 E F0 .603(as long as the last command in)3.103 +F F2(list)3.104 E F0(returns)3.104 E .471(an e)144 470.4 R .471 +(xit status of zero.)-.15 F(The)5.471 E F1(until)2.971 E F0 .471 +(command is identical to the)2.971 F F1(while)2.97 E F0 .47(command, e) +2.97 F .47(xcept that the test)-.15 F .095(is ne)144 482.4 R -.05(ga) +-.15 G .095(ted; the).05 F F1(do)2.595 E F2(list)2.685 E F0 .095(is e) +3.275 F -.15(xe)-.15 G .095(cuted as long as the last command in).15 F +F2(list)2.685 E F0 .096(returns a non-zero e)3.276 F .096(xit status.) +-.15 F 1.307(The e)144 494.4 R 1.307(xit status of the)-.15 F F1(while) +3.807 E F0(and)3.807 E F1(until)3.807 E F0 1.307(commands is the e)3.807 +F 1.306(xit status of the last)-.15 F F1(do)3.806 E F2(list)3.806 E F0 +(command)3.806 E -.15(exe)144 506.4 S(cuted, or zero if none w).15 E +(as e)-.1 E -.15(xe)-.15 G(cuted.).15 E F1(Copr)87 523.2 Q(ocesses)-.18 +E F0(A)108 535.2 Q F2(copr)3.712 E(ocess)-.45 E F0 1.212 +(is a shell command preceded by the)3.712 F F1(copr)3.713 E(oc)-.18 E F0 +(reserv)3.713 E 1.213(ed w)-.15 F 3.713(ord. A)-.1 F 1.213 +(coprocess is e)3.713 F -.15(xe)-.15 G 1.213(cuted asyn-).15 F .575(chr\ +onously in a subshell, as if the command had been terminated with the) +108 547.2 R F1(&)3.074 E F0 .574(control operator)3.074 F 3.074(,w)-.4 G +.574(ith a tw)-3.074 F(o-)-.1 E -.1(wa)108 559.2 S 2.5(yp).1 G +(ipe established between the e)-2.5 E -.15(xe)-.15 G +(cuting shell and the coprocess.).15 E(The format for a coprocess is:) +108 576 Q F1(copr)144 592.8 Q(oc)-.18 E F0([)2.5 E F2 -.27(NA)C(ME).27 E +F0(])A F2(command)2.5 E F0([)2.5 E F2 -.37(re)C(dir).37 E(ections)-.37 E +F0(])A .922(This creates a coprocess named)108 609.6 R F2 -.27(NA)3.422 +G(ME).27 E F0 5.922(.I)C(f)-5.922 E F2 -.27(NA)3.422 G(ME).27 E F0 .923 +(is not supplied, the def)3.422 F .923(ault name is)-.1 F F2(COPR)3.423 +E(OC)-.4 E F0(.)A F2 -.27(NA)5.923 G(ME).27 E F0 .64 +(must not be supplied if)108 621.6 R F2(command)3.14 E F0 .64(is a)3.14 +F F2 .64(simple command)3.14 F F0 .64(\(see abo)3.14 F -.15(ve)-.15 G +.64(\); otherwise, it is interpreted as the \214rst).15 F -.1(wo)108 +633.6 S .163(rd of the simple command.).1 F .163(When the coproc is e) +5.163 F -.15(xe)-.15 G .163(cuted, the shell creates an array v).15 F +.163(ariable \(see)-.25 F F1(Arrays)2.663 E F0(belo)108 645.6 Q .512 +(w\) named)-.25 F F2 -.27(NA)3.012 G(ME).27 E F0 .512(in the conte)3.012 +F .511(xt of the e)-.15 F -.15(xe)-.15 G .511(cuting shell.).15 F .511 +(The standard output of)5.511 F F2(command)3.211 E F0 .511(is connected) +3.781 F .81(via a pipe to a \214le descriptor in the e)108 657.6 R -.15 +(xe)-.15 G .811(cuting shell, and that \214le descriptor is assigned to) +.15 F F2 -.27(NA)3.311 G(ME).27 E F0 3.311([0]. The)B .717 +(standard input of)108 669.6 R F2(command)3.417 E F0 .716 +(is connected via a pipe to a \214le descriptor in the e)3.987 F -.15 +(xe)-.15 G .716(cuting shell, and that \214le).15 F .702 +(descriptor is assigned to)108 681.6 R F2 -.27(NA)3.202 G(ME).27 E F0 +3.202([1]. This)B .703(pipe is established before an)3.203 F 3.203(yr) +-.15 G .703(edirections speci\214ed by the com-)-3.203 F 1.184 +(mand \(see)108 693.6 R F3(REDIRECTION)3.684 E F0(belo)3.434 E 3.684 +(w\). The)-.25 F 1.183(\214le descriptors can be utilized as ar)3.684 F +1.183(guments to shell commands)-.18 F .07 +(and redirections using standard w)108 705.6 R .07(ord e)-.1 F 2.57 +(xpansions. The)-.15 F .07(process id of the shell spa)2.57 F .07 +(wned to e)-.15 F -.15(xe)-.15 G .07(cute the copro-).15 F .632 +(cess is a)108 717.6 R -.25(va)-.2 G .631(ilable as the v).25 F .631 +(alue of the v)-.25 F(ariable)-.25 E F2 -.27(NA)3.131 G(ME).27 E F0 +3.131(_PID. The)B F1(wait)3.131 E F0 -.2(bu)3.131 G .631 +(iltin command may be used to w).2 F(ait)-.1 E +(for the coprocess to terminate.)108 729.6 Q(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(6)190.955 E 0 Cg EP +%%Page: 7 7 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(The return status of a coprocess is the e)108 84 Q(xit status of) +-.15 E/F1 10/Times-Italic@0 SF(command)2.5 E F0(.)A/F2 10/Times-Bold@0 +SF(Shell Function De\214nitions)87 100.8 Q F0 2.697(As)108 112.8 S .198 +(hell function is an object that is called lik)-2.697 F 2.698(eas)-.1 G +.198(imple command and e)-2.698 F -.15(xe)-.15 G .198 +(cutes a compound command with).15 F 2.5(an)108 124.8 S .5 -.25(ew s) +-2.5 H(et of positional parameters.).25 E +(Shell functions are declared as follo)5 E(ws:)-.25 E([)108 141.6 Q F2 +(function)2.5 E F0(])2.5 E F1(name)2.5 E F0(\(\))2.5 E F1 +(compound\255command)2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ection)-.37 +E F0(])A 1.403(This de\214nes a function named)144 153.6 R F1(name)3.902 +E F0 6.402(.T)C 1.402(he reserv)-6.402 F 1.402(ed w)-.15 F(ord)-.1 E F2 +(function)3.902 E F0 1.402(is optional.)3.902 F 1.402(If the)6.402 F F2 +(function)3.902 E F0(reserv)144 165.6 Q .162(ed w)-.15 F .162 +(ord is supplied, the parentheses are optional.)-.1 F(The)5.162 E F1 +(body)2.662 E F0 .162(of the function is the compound)2.662 F(command) +144 177.6 Q F1(compound\255command)2.784 E F0(\(see)3.354 E F2 .084 +(Compound Commands)2.584 F F0(abo)2.584 E -.15(ve)-.15 G 2.584(\). That) +.15 F .084(command is usually a)2.584 F F1(list)144 189.6 Q F0 .044 +(of commands between { and }, b)2.544 F .044(ut may be an)-.2 F 2.544 +(yc)-.15 G .044(ommand listed under)-2.544 F F2 .044(Compound Commands) +2.544 F F0(abo)144 201.6 Q -.15(ve)-.15 G(.).15 E F1 +(compound\255command)6.671 E F0 1.671(is e)4.171 F -.15(xe)-.15 G 1.671 +(cuted whene).15 F -.15(ve)-.25 G(r).15 E F1(name)4.171 E F0 1.671 +(is speci\214ed as the name of a simple)4.171 F 3.008(command. An)144 +213.6 R 3.009(yr)-.15 G .509(edirections \(see)-3.009 F/F3 9 +/Times-Bold@0 SF(REDIRECTION)3.009 E F0(belo)2.759 E .509 +(w\) speci\214ed when a function is de\214ned are)-.25 F .581 +(performed when the function is e)144 225.6 R -.15(xe)-.15 G 3.081 +(cuted. The).15 F -.15(ex)3.081 G .58 +(it status of a function de\214nition is zero unless a).15 F .177(synta\ +x error occurs or a readonly function with the same name already e)144 +237.6 R 2.678(xists. When)-.15 F -.15(exe)2.678 G .178(cuted, the).15 F +-.15(ex)144 249.6 S .64(it status of a function is the e).15 F .64 +(xit status of the last command e)-.15 F -.15(xe)-.15 G .64 +(cuted in the body).15 F 5.64(.\()-.65 G(See)-5.64 E F3(FUNC-)3.14 E +(TIONS)144 261.6 Q F0(belo)2.25 E -.65(w.)-.25 G(\)).65 E/F4 10.95 +/Times-Bold@0 SF(COMMENTS)72 278.4 Q F0 .982(In a non-interacti)108 +290.4 R 1.282 -.15(ve s)-.25 H .982(hell, or an interacti).15 F 1.282 +-.15(ve s)-.25 H .982(hell in which the).15 F F2(interacti)3.482 E -.1 +(ve)-.1 G(_comments).1 E F0 .982(option to the)3.482 F F2(shopt)3.482 E +F0 -.2(bu)108 302.4 S .952(iltin is enabled \(see).2 F F3 .952(SHELL B) +3.452 F(UIL)-.09 E .952(TIN COMMANDS)-.828 F F0(belo)3.202 E .952 +(w\), a w)-.25 F .952(ord be)-.1 F .952(ginning with)-.15 F F2(#)3.451 E +F0 .951(causes that w)3.451 F(ord)-.1 E .604 +(and all remaining characters on that line to be ignored.)108 314.4 R +.605(An interacti)5.605 F .905 -.15(ve s)-.25 H .605(hell without the) +.15 F F2(interacti)3.105 E -.1(ve)-.1 G(_com-).1 E(ments)108 326.4 Q F0 +1.337(option enabled does not allo)3.837 F 3.837(wc)-.25 G 3.836 +(omments. The)-3.837 F F2(interacti)3.836 E -.1(ve)-.1 G(_comments).1 E +F0 1.336(option is on by def)3.836 F 1.336(ault in)-.1 F(interacti)108 +338.4 Q .3 -.15(ve s)-.25 H(hells.).15 E F4 -.11(QU)72 355.2 S -.438(OT) +.11 G(ING).438 E F1(Quoting)108 367.2 Q F0 .477(is used to remo)2.977 F +.777 -.15(ve t)-.15 H .477 +(he special meaning of certain characters or w).15 F .477 +(ords to the shell.)-.1 F .478(Quoting can be)5.478 F .185 +(used to disable special treatment for special characters, to pre)108 +379.2 R -.15(ve)-.25 G .185(nt reserv).15 F .184(ed w)-.15 F .184 +(ords from being recognized as)-.1 F(such, and to pre)108 391.2 Q -.15 +(ve)-.25 G(nt parameter e).15 E(xpansion.)-.15 E .288(Each of the)108 +408 R F1(metac)2.788 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 .288 +(listed abo)2.788 F .588 -.15(ve u)-.15 H(nder).15 E F3(DEFINITIONS) +2.788 E F0 .288(has special meaning to the shell and must be)2.538 F +(quoted if it is to represent itself.)108 420 Q 1.345 +(When the command history e)108 436.8 R 1.344(xpansion f)-.15 F 1.344 +(acilities are being used \(see)-.1 F F3(HIST)3.844 E(OR)-.162 E 3.594 +(YE)-.315 G(XP)-3.594 E(ANSION)-.666 E F0(belo)3.594 E 1.344(w\), the) +-.25 F F1(history e)108 448.8 Q(xpansion)-.2 E F0(character)2.5 E 2.5 +(,u)-.4 G(sually)-2.5 E F2(!)2.5 E F0 2.5(,m)C(ust be quoted to pre)-2.5 +E -.15(ve)-.25 G(nt history e).15 E(xpansion.)-.15 E +(There are three quoting mechanisms: the)108 465.6 Q F1(escape c)2.5 E +(har)-.15 E(acter)-.15 E F0 2.5(,s).73 G +(ingle quotes, and double quotes.)-2.5 E 2.974(An)108 482.4 S .474 +(on-quoted backslash \()-2.974 F F2(\\)A F0 2.974(\)i)C 2.974(st)-2.974 +G(he)-2.974 E F1 .474(escape c)2.974 F(har)-.15 E(acter)-.15 E F0 5.474 +(.I).73 G 2.974(tp)-5.474 G(reserv)-2.974 E .474(es the literal v)-.15 F +.474(alue of the ne)-.25 F .475(xt character that)-.15 F(follo)108 494.4 +Q 1.554(ws, with the e)-.25 F 1.553(xception of . If)-.25 F(a)4.053 E F2(\\)4.053 E F0( pair appears, and the backslash is not itself)-.25 F 1.122 +(quoted, the)108 506.4 R F2(\\)3.622 E F0( is treated as a line continuation \(that is, it is remo)-.25 F +-.15(ve)-.15 G 3.622(df).15 G 1.123(rom the input stream and)-3.622 F +(ef)108 518.4 Q(fecti)-.25 E -.15(ve)-.25 G(ly ignored\).).15 E .295 +(Enclosing characters in single quotes preserv)108 535.2 R .295 +(es the literal v)-.15 F .295(alue of each character within the quotes.) +-.25 F 2.795(As)5.295 G(in-)-2.795 E +(gle quote may not occur between single quotes, e)108 547.2 Q -.15(ve) +-.25 G 2.5(nw).15 G(hen preceded by a backslash.)-2.5 E .033 +(Enclosing characters in double quotes preserv)108 564 R .034 +(es the literal v)-.15 F .034 +(alue of all characters within the quotes, with the)-.25 F -.15(ex)108 +576 S .828(ception of).15 F F2($)3.328 E F0(,)A F2<92>3.328 E F0(,)A F2 +(\\)3.328 E F0 3.328(,a)C .828(nd, when history e)-3.328 F .828 +(xpansion is enabled,)-.15 F F2(!)3.328 E F0 5.828(.T)C .828 +(he characters)-5.828 F F2($)3.328 E F0(and)3.328 E F2<92>3.328 E F0 +.827(retain their special)3.328 F .074(meaning within double quotes.)108 +588 R .074(The backslash retains its special meaning only when follo) +5.074 F .075(wed by one of the)-.25 F(follo)108 600 Q .205 +(wing characters:)-.25 F F2($)2.705 E F0(,)A F2<92>2.705 E F0(,)A F2(") +3.538 E F0(,).833 E F2(\\)2.705 E F0 2.705(,o)C(r)-2.705 E F2() +2.705 E F0 5.205(.A)C .204 +(double quote may be quoted within double quotes by pre-)-2.5 F .081 +(ceding it with a backslash.)108 612 R .082(If enabled, history e)5.082 +F .082(xpansion will be performed unless an)-.15 F F2(!)2.582 E F0 .082 +(appearing in double)5.082 F(quotes is escaped using a backslash.)108 +624 Q(The backslash preceding the)5 E F2(!)2.5 E F0(is not remo)5 E -.15 +(ve)-.15 G(d.).15 E(The special parameters)108 640.8 Q F2(*)2.5 E F0 +(and)2.5 E F2(@)2.5 E F0(ha)2.5 E .3 -.15(ve s)-.2 H +(pecial meaning when in double quotes \(see).15 E F3 -.666(PA)2.5 G +(RAMETERS).666 E F0(belo)2.25 E(w\).)-.25 E -.8(Wo)108 657.6 S .212 +(rds of the form).8 F F2($)2.712 E F0<08>A F1(string)A F0 2.712<0861>C +.211(re treated specially)-2.712 F 5.211(.T)-.65 G .211(he w)-5.211 F +.211(ord e)-.1 F .211(xpands to)-.15 F F1(string)2.711 E F0 2.711(,w)C +.211(ith backslash-escaped char)-2.711 F(-)-.2 E .604 +(acters replaced as speci\214ed by the ANSI C standard.)108 669.6 R .605 +(Backslash escape sequences, if present, are decoded)5.605 F(as follo) +108 681.6 Q(ws:)-.25 E F2(\\a)144 693.6 Q F0(alert \(bell\))28.22 E F2 +(\\b)144 705.6 Q F0(backspace)27.66 E F2(\\e)144 717.6 Q F0 +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(7)190.955 E 0 Cg EP +%%Page: 8 8 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(\\E)144 84 Q F0(an escape character)26.55 E +F1(\\f)144 96 Q F0(form feed)29.89 E F1(\\n)144 108 Q F0(ne)27.66 E 2.5 +(wl)-.25 G(ine)-2.5 E F1(\\r)144 120 Q F0(carriage return)28.78 E F1 +(\\t)144 132 Q F0(horizontal tab)29.89 E F1(\\v)144 144 Q F0 -.15(ve) +28.22 G(rtical tab).15 E F1(\\\\)144 156 Q F0(backslash)30.44 E F1<5c08> +144 168 Q F0(single quote)30.44 E F1(\\")144 180 Q F0(double quote)27.67 +E F1(\\)144 192 Q/F2 10/Times-Italic@0 SF(nnn)A F0 +(the eight-bit character whose v)18.22 E(alue is the octal v)-.25 E +(alue)-.25 E F2(nnn)2.5 E F0(\(one to three digits\))2.5 E F1(\\x)144 +204 Q F2(HH)A F0(the eight-bit character whose v)13.78 E(alue is the he) +-.25 E(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E +2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1(\\c)144 216 Q F2(x)A +F0 2.5(ac)24.34 G(ontrol-)-2.5 E F2(x)A F0(character)2.5 E(The e)108 +232.8 Q(xpanded result is single-quoted, as if the dollar sign had not \ +been present.)-.15 E 2.64(Ad)108 249.6 S .14 +(ouble-quoted string preceded by a dollar sign \()-2.64 F F1($)A F0(")A +F2(string)A F0 .14("\) will cause the string to be translated according) +B .495(to the current locale.)108 261.6 R .495(If the current locale is) +5.495 F F1(C)2.995 E F0(or)2.995 E F1(POSIX)2.995 E F0 2.995(,t)C .495 +(he dollar sign is ignored.)-2.995 F .496(If the string is trans-)5.496 +F(lated and replaced, the replacement is double-quoted.)108 273.6 Q/F3 +10.95/Times-Bold@0 SF -.81(PA)72 290.4 S(RAMETERS).81 E F0(A)108 302.4 Q +F2(par)4.593 E(ameter)-.15 E F0 .843(is an entity that stores v)4.073 F +3.343(alues. It)-.25 F .843(can be a)3.343 F F2(name)3.342 E F0 3.342 +(,an).18 G(umber)-3.342 E 3.342(,o)-.4 G 3.342(ro)-3.342 G .842 +(ne of the special characters)-3.342 F .822(listed belo)108 314.4 R +3.323(wu)-.25 G(nder)-3.323 E F1 .823(Special P)3.323 F(arameters)-.1 E +F0 5.823(.A)C F2(variable)-2.21 E F0 .823(is a parameter denoted by a) +3.503 F F2(name)3.323 E F0 5.823(.A).18 G -.25(va)-2.5 G .823 +(riable has a).25 F F2(value)108 326.4 Q F0 .369(and zero or more)2.869 +F F2(attrib)2.869 E(utes)-.2 E F0 5.369(.A)C(ttrib)-5.369 E .369 +(utes are assigned using the)-.2 F F1(declar)2.868 E(e)-.18 E F0 -.2(bu) +2.868 G .368(iltin command \(see).2 F F1(declar)2.868 E(e)-.18 E F0 +(belo)108 338.4 Q 2.5(wi)-.25 G(n)-2.5 E/F4 9/Times-Bold@0 SF(SHELL B) +2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E/F5 9/Times-Roman@0 SF(\).)A F0 +2.754(Ap)108 355.2 S .254(arameter is set if it has been assigned a v) +-2.754 F 2.754(alue. The)-.25 F .254(null string is a v)2.754 F .255 +(alid v)-.25 F 2.755(alue. Once)-.25 F 2.755(av)2.755 G .255 +(ariable is set, it)-3.005 F(may be unset only by using the)108 367.2 Q +F1(unset)2.5 E F0 -.2(bu)2.5 G(iltin command \(see).2 E F4(SHELL B)2.5 E +(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E(A)108 384 Q +F2(variable)2.79 E F0(may be assigned to by a statement of the form)2.68 +E F2(name)144 400.8 Q F0(=[)A F2(value)A F0(])A(If)108 417.6 Q F2(value) +3.023 E F0 .233(is not gi)2.913 F -.15(ve)-.25 G .233(n, the v).15 F +.232(ariable is assigned the null string.)-.25 F(All)5.232 E F2(values) +3.022 E F0(under)3.002 E .232(go tilde e)-.18 F .232 +(xpansion, parameter)-.15 F .515(and v)108 429.6 R .515(ariable e)-.25 F +.515(xpansion, command substitution, arithmetic e)-.15 F .515 +(xpansion, and quote remo)-.15 F -.25(va)-.15 G 3.015(l\().25 G(see) +-3.015 E F4(EXP)3.015 E(ANSION)-.666 E F0(belo)108 441.6 Q 2.699 +(w\). If)-.25 F .199(the v)2.699 F .199(ariable has its)-.25 F F1 +(integer)2.698 E F0(attrib)2.698 E .198(ute set, then)-.2 F F2(value) +2.988 E F0 .198(is e)2.878 F -.25(va)-.25 G .198 +(luated as an arithmetic e).25 F .198(xpression e)-.15 F -.15(ve)-.25 G +(n).15 E .901(if the $\(\(...\)\) e)108 453.6 R .901 +(xpansion is not used \(see)-.15 F F1 .901(Arithmetic Expansion)3.401 F +F0(belo)3.401 E 3.402(w\). W)-.25 F .902 +(ord splitting is not performed,)-.8 F 1.179(with the e)108 465.6 R +1.179(xception of)-.15 F F1("$@")3.679 E F0 1.179(as e)3.679 F 1.179 +(xplained belo)-.15 F 3.679(wu)-.25 G(nder)-3.679 E F1 1.178(Special P) +3.678 F(arameters)-.1 E F0 6.178(.P)C 1.178(athname e)-6.328 F 1.178 +(xpansion is not)-.15 F 3.648(performed. Assignment)108 477.6 R 1.148 +(statements may also appear as ar)3.648 F 1.149(guments to the)-.18 F F1 +(alias)3.649 E F0(,)A F1(declar)3.649 E(e)-.18 E F0(,)A F1(typeset)3.649 +E F0(,)A F1(export)3.649 E F0(,)A F1 -.18(re)108 489.6 S(adonly).18 E F0 +2.5(,a)C(nd)-2.5 E F1(local)2.5 E F0 -.2(bu)2.5 G(iltin commands.).2 E +.377(In the conte)108 506.4 R .377 +(xt where an assignment statement is assigning a v)-.15 F .376 +(alue to a shell v)-.25 F .376(ariable or array inde)-.25 F .376 +(x, the +=)-.15 F .257 +(operator can be used to append to or add to the v)108 518.4 R(ariable') +-.25 E 2.757(sp)-.55 G(re)-2.757 E .257(vious v)-.25 F 2.757(alue. When) +-.25 F .257(+= is applied to a v)2.757 F(ariable)-.25 E .373 +(for which the inte)108 530.4 R .373(ger attrib)-.15 F .372 +(ute has been set,)-.2 F F2(value)2.872 E F0 .372(is e)2.872 F -.25(va) +-.25 G .372(luated as an arithmetic e).25 F .372 +(xpression and added to the)-.15 F -.25(va)108 542.4 S(riable').25 E +2.888(sc)-.55 G .388(urrent v)-2.888 F .388(alue, which is also e)-.25 F +-.25(va)-.25 G 2.889(luated. When).25 F .389 +(+= is applied to an array v)2.889 F .389(ariable using compound)-.25 F +.186(assignment \(see)108 554.4 R F1(Arrays)2.686 E F0(belo)2.686 E .186 +(w\), the v)-.25 F(ariable')-.25 E 2.685(sv)-.55 G .185 +(alue is not unset \(as it is when using =\), and ne)-2.935 F 2.685(wv) +-.25 G .185(alues are)-2.935 F 1.384(appended to the array be)108 566.4 +R 1.384(ginning at one greater than the array')-.15 F 3.885(sm)-.55 G +1.385(aximum inde)-3.885 F 3.885(x\()-.15 G 1.385(for inde)-3.885 F -.15 +(xe)-.15 G 3.885(da).15 G 1.385(rrays\) or)-3.885 F .123 +(added as additional k)108 578.4 R -.15(ey)-.1 G.15 E .123 +(alue pairs in an associati)-.25 F .423 -.15(ve a)-.25 H(rray).15 E +5.123(.W)-.65 G .122(hen applied to a string-v)-5.123 F .122(alued v) +-.25 F(ariable,)-.25 E F2(value)2.622 E F0(is e)108 590.4 Q +(xpanded and appended to the v)-.15 E(ariable')-.25 E 2.5(sv)-.55 G +(alue.)-2.75 E F1 -.2(Po)87 607.2 S(sitional P).2 E(arameters)-.1 E F0 +(A)108 619.2 Q F2 .705(positional par)4.455 F(ameter)-.15 E F0 .706(is \ +a parameter denoted by one or more digits, other than the single digit \ +0.)3.935 F(Posi-)5.706 E .445 +(tional parameters are assigned from the shell')108 631.2 R 2.944(sa) +-.55 G -.18(rg)-2.944 G .444(uments when it is in).18 F -.2(vo)-.4 G -.1 +(ke).2 G .444(d, and may be reassigned using).1 F(the)108 643.2 Q F1 +(set)3.333 E F0 -.2(bu)3.333 G .833(iltin command.).2 F .834(Positional\ + parameters may not be assigned to with assignment statements.)5.833 F +(The)5.834 E .334(positional parameters are temporarily replaced when a\ + shell function is e)108 655.2 R -.15(xe)-.15 G .333(cuted \(see).15 F +F4(FUNCTIONS)2.833 E F0(belo)2.583 E(w\).)-.25 E 1.403(When a positiona\ +l parameter consisting of more than a single digit is e)108 672 R 1.404 +(xpanded, it must be enclosed in)-.15 F(braces \(see)108 684 Q F4(EXP) +2.5 E(ANSION)-.666 E F0(belo)2.25 E(w\).)-.25 E F1(Special P)87 700.8 Q +(arameters)-.1 E F0 1.675(The shell treats se)108 712.8 R -.15(ve)-.25 G +1.675(ral parameters specially).15 F 6.675(.T)-.65 G 1.674 +(hese parameters may only be referenced; assignment to)-6.675 F +(them is not allo)108 724.8 Q(wed.)-.25 E(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(8)190.955 E 0 Cg EP +%%Page: 9 9 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(*)108 84 Q F0 .605 +(Expands to the positional parameters, starting from one.)31 F .606 +(When the e)5.605 F .606(xpansion occurs within dou-)-.15 F .084 +(ble quotes, it e)144 96 R .084(xpands to a single w)-.15 F .084 +(ord with the v)-.1 F .084 +(alue of each parameter separated by the \214rst char)-.25 F(-)-.2 E +.003(acter of the)144 108 R/F2 9/Times-Bold@0 SF(IFS)2.503 E F0 .003 +(special v)2.253 F 2.503(ariable. That)-.25 F .003(is, ")2.503 F F1($*)A +F0 2.503("i)C 2.503(se)-2.503 G(qui)-2.503 E -.25(va)-.25 G .003 +(lent to ").25 F F1($1)A/F3 10/Times-Italic@0 SF(c)A F1($2)A F3(c)A F1 +(...)A F0 .003(", where)B F3(c)2.703 E F0 .004(is the \214rst char)2.813 +F(-)-.2 E .769(acter of the v)144 120 R .769(alue of the)-.25 F F2(IFS) +3.269 E F0 -.25(va)3.019 G 3.269(riable. If).25 F F2(IFS)3.268 E F0 .768 +(is unset, the parameters are separated by spaces.)3.018 F(If)5.768 E F2 +(IFS)144 132 Q F0(is null, the parameters are joined without interv)2.25 +E(ening separators.)-.15 E F1(@)108 144 Q F0 .605 +(Expands to the positional parameters, starting from one.)26.7 F .606 +(When the e)5.605 F .606(xpansion occurs within dou-)-.15 F .114 +(ble quotes, each parameter e)144 156 R .114(xpands to a separate w)-.15 +F 2.614(ord. That)-.1 F .113(is, ")2.613 F F1($@)A F0 2.613("i)C 2.613 +(se)-2.613 G(qui)-2.613 E -.25(va)-.25 G .113(lent to ").25 F F1($1)A F0 +2.613("")C F1($2)-2.613 E F0 2.613(".)C(..)-2.613 E .134 +(If the double-quoted e)144 168 R .134(xpansion occurs within a w)-.15 F +.135(ord, the e)-.1 F .135(xpansion of the \214rst parameter is joined) +-.15 F .151(with the be)144 180 R .151(ginning part of the original w) +-.15 F .151(ord, and the e)-.1 F .15 +(xpansion of the last parameter is joined with)-.15 F .337 +(the last part of the original w)144 192 R 2.837(ord. When)-.1 F .338 +(there are no positional parameters, ")2.837 F F1($@)A F0 2.838("a)C(nd) +-2.838 E F1($@)2.838 E F0 -.15(ex)2.838 G(pand).15 E +(to nothing \(i.e., the)144 204 Q 2.5(ya)-.15 G(re remo)-2.5 E -.15(ve) +-.15 G(d\).).15 E F1(#)108 216 Q F0 +(Expands to the number of positional parameters in decimal.)31 E F1(?) +108 228 Q F0(Expands to the e)31 E(xit status of the most recently e) +-.15 E -.15(xe)-.15 G(cuted fore).15 E(ground pipeline.)-.15 E F1108 +240 Q F0 .882 +(Expands to the current option \215ags as speci\214ed upon in)30.3 F -.2 +(vo)-.4 G .881(cation, by the).2 F F1(set)3.381 E F0 -.2(bu)3.381 G .881 +(iltin command, or).2 F(those set by the shell itself \(such as the)144 +252 Q F12.5 E F0(option\).)2.5 E F1($)108 264 Q F0 .214 +(Expands to the process ID of the shell.)31 F .214 +(In a \(\) subshell, it e)5.214 F .214 +(xpands to the process ID of the current)-.15 F +(shell, not the subshell.)144 276 Q F1(!)108 288 Q F0 +(Expands to the process ID of the most recently e)32.67 E -.15(xe)-.15 G +(cuted background \(asynchronous\) command.).15 E F1(0)108 300 Q F0 +1.692(Expands to the name of the shell or shell script.)31 F 1.691 +(This is set at shell initialization.)6.692 F(If)6.691 E F1(bash)4.191 E +F0(is)4.191 E(in)144 312 Q -.2(vo)-.4 G -.1(ke).2 G 3.077(dw).1 G .577 +(ith a \214le of commands,)-3.077 F F1($0)3.077 E F0 .578 +(is set to the name of that \214le.)3.077 F(If)5.578 E F1(bash)3.078 E +F0 .578(is started with the)3.078 F F13.078 E F0 .369 +(option, then)144 324 R F1($0)2.869 E F0 .369(is set to the \214rst ar) +2.869 F .369(gument after the string to be e)-.18 F -.15(xe)-.15 G .369 +(cuted, if one is present.).15 F(Other)5.368 E(-)-.2 E +(wise, it is set to the \214le name used to in)144 336 Q -.2(vo)-.4 G +-.1(ke).2 G F1(bash)2.6 E F0 2.5(,a)C 2.5(sg)-2.5 G -2.15 -.25(iv e)-2.5 +H 2.5(nb).25 G 2.5(ya)-2.5 G -.18(rg)-2.5 G(ument zero.).18 E F1(_)108 +348 Q F0 .054(At shell startup, set to the absolute pathname used to in) +31 F -.2(vo)-.4 G .255 -.1(ke t).2 H .055 +(he shell or shell script being e).1 F -.15(xe)-.15 G(cuted).15 E .692 +(as passed in the en)144 360 R .692(vironment or ar)-.4 F .691 +(gument list.)-.18 F(Subsequently)5.691 E 3.191(,e)-.65 G .691 +(xpands to the last ar)-3.341 F .691(gument to the)-.18 F(pre)144 372 Q +.57(vious command, after e)-.25 F 3.07(xpansion. Also)-.15 F .571 +(set to the full pathname used to in)3.071 F -.2(vo)-.4 G .771 -.1(ke e) +.2 H .571(ach command).1 F -.15(exe)144 384 S 1.6 +(cuted and placed in the en).15 F 1.6(vironment e)-.4 F 1.6 +(xported to that command.)-.15 F 1.6(When checking mail, this)6.6 F +(parameter holds the name of the mail \214le currently being check)144 +396 Q(ed.)-.1 E F1(Shell V)87 412.8 Q(ariables)-.92 E F0(The follo)108 +424.8 Q(wing v)-.25 E(ariables are set by the shell:)-.25 E F1 -.3(BA) +108 441.6 S(SH).3 E F0(Expands to the full \214le name used to in)9.07 E +-.2(vo)-.4 G .2 -.1(ke t).2 H(his instance of).1 E F1(bash)2.5 E F0(.)A +F1 -.3(BA)108 453.6 S(SHOPTS).3 E F0 2.548(Ac)144 465.6 S .049 +(olon-separated list of enabled shell options.)-2.548 F .049(Each w) +5.049 F .049(ord in the list is a v)-.1 F .049(alid ar)-.25 F .049 +(gument for the)-.18 F F12.549 E F0 1.398(option to the)144 477.6 +R F1(shopt)3.898 E F0 -.2(bu)3.898 G 1.398(iltin command \(see).2 F F2 +1.398(SHELL B)3.898 F(UIL)-.09 E 1.398(TIN COMMANDS)-.828 F F0(belo) +3.648 E 3.898(w\). The)-.25 F(options)3.898 E .476(appearing in)144 +489.6 R F2 -.27(BA)2.976 G(SHOPTS).27 E F0 .476(are those reported as) +2.726 F F3(on)3.206 E F0(by)3.217 E F1(shopt)2.977 E F0 5.477(.I)C 2.977 +(ft)-5.477 G .477(his v)-2.977 F .477(ariable is in the en)-.25 F +(vironment)-.4 E(when)144 501.6 Q F1(bash)3.142 E F0 .642(starts up, ea\ +ch shell option in the list will be enabled before reading an)3.142 F +3.141(ys)-.15 G .641(tartup \214les.)-3.141 F(This v)144 513.6 Q +(ariable is read-only)-.25 E(.)-.65 E F1 -.3(BA)108 525.6 S(SHPID).3 E +F0 .36(Expands to the process id of the current)144 537.6 R F1(bash) +2.861 E F0 2.861(process. This)2.861 F(dif)2.861 E .361(fers from)-.25 F +F1($$)2.861 E F0 .361(under certain circum-)2.861 F +(stances, such as subshells that do not require)144 549.6 Q F1(bash)2.5 +E F0(to be re-initialized.)2.5 E F1 -.3(BA)108 561.6 S(SH_ALIASES).3 E +F0 1.195(An associati)144 573.6 R 1.495 -.15(ve a)-.25 H 1.195(rray v) +.15 F 1.195(ariable whose members correspond to the internal list of al\ +iases as main-)-.25 F .318(tained by the)144 585.6 R F1(alias)2.818 E F0 +-.2(bu)2.818 G .318(iltin Elements added to this array appear in the al\ +ias list; unsetting array ele-).2 F(ments cause aliases to be remo)144 +597.6 Q -.15(ve)-.15 G 2.5(df).15 G(rom the alias list.)-2.5 E F1 -.3 +(BA)108 609.6 S(SH_ARGC).3 E F0 .935(An array v)144 621.6 R .935 +(ariable whose v)-.25 F .934 +(alues are the number of parameters in each frame of the current)-.25 F +F1(bash)3.434 E F0 -.15(exe)144 633.6 S .535(cution call stack.).15 F +.535(The number of parameters to the current subroutine \(shell functio\ +n or script)5.535 F -.15(exe)144 645.6 S .142(cuted with).15 F F1(.) +2.642 E F0(or)2.642 E F1(sour)2.642 E(ce)-.18 E F0 2.642(\)i)C 2.642(sa) +-2.642 G 2.642(tt)-2.642 G .142(he top of the stack.)-2.642 F .141 +(When a subroutine is e)5.141 F -.15(xe)-.15 G .141 +(cuted, the number of).15 F 2.63(parameters passed is pushed onto)144 +657.6 R F2 -.27(BA)5.13 G(SH_ARGC).27 E/F4 9/Times-Roman@0 SF(.)A F0 +2.63(The shell sets)7.13 F F2 -.27(BA)5.131 G(SH_ARGC).27 E F0 2.631 +(only when in)4.881 F -.15(ex)144 669.6 S(tended deb).15 E +(ugging mode \(see the description of the)-.2 E F1(extdeb)2.5 E(ug)-.2 E +F0(option to the)2.5 E F1(shopt)2.5 E F0 -.2(bu)2.5 G(iltin belo).2 E +(w\))-.25 E F1 -.3(BA)108 681.6 S(SH_ARGV).3 E F0 .98(An array v)144 +693.6 R .979(ariable containing all of the parameters in the current) +-.25 F F1(bash)3.479 E F0 -.15(exe)3.479 G .979(cution call stack.).15 F +(The)5.979 E .275(\214nal parameter of the last subroutine call is at t\ +he top of the stack; the \214rst parameter of the initial)144 705.6 R +1.424(call is at the bottom.)144 717.6 R 1.424(When a subroutine is e) +6.424 F -.15(xe)-.15 G 1.424 +(cuted, the parameters supplied are pushed onto).15 F F2 -.27(BA)144 +729.6 S(SH_ARGV).27 E F4(.)A F0 2.197(The shell sets)6.697 F F2 -.27(BA) +4.697 G(SH_ARGV).27 E F0 2.197(only when in e)4.447 F 2.197(xtended deb) +-.15 F 2.197(ugging mode \(see the)-.2 F(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(9)190.955 E 0 Cg EP +%%Page: 10 10 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(description of the)144 84 Q/F1 10/Times-Bold@0 SF(extdeb)2.5 E +(ug)-.2 E F0(option to the)2.5 E F1(shopt)2.5 E F0 -.2(bu)2.5 G +(iltin belo).2 E(w\))-.25 E F1 -.3(BA)108 96 S(SH_CMDS).3 E F0 .668 +(An associati)144 108 R .968 -.15(ve a)-.25 H .668(rray v).15 F .668(ar\ +iable whose members correspond to the internal hash table of commands) +-.25 F .146(as maintained by the)144 120 R F1(hash)2.646 E F0 -.2(bu) +2.646 G 2.646(iltin. Elements).2 F .146 +(added to this array appear in the hash table; unsetting)2.646 F +(array elements cause commands to be remo)144 132 Q -.15(ve)-.15 G 2.5 +(df).15 G(rom the hash table.)-2.5 E F1 -.3(BA)108 144 S(SH_COMMAND).3 E +F0 1.243(The command currently being e)144 156 R -.15(xe)-.15 G 1.243 +(cuted or about to be e).15 F -.15(xe)-.15 G 1.242 +(cuted, unless the shell is e).15 F -.15(xe)-.15 G 1.242(cuting a).15 F +(command as the result of a trap, in which case it is the command e)144 +168 Q -.15(xe)-.15 G(cuting at the time of the trap.).15 E F1 -.3(BA)108 +180 S(SH_EXECUTION_STRING).3 E F0(The command ar)144 192 Q +(gument to the)-.18 E F12.5 E F0(in)2.5 E -.2(vo)-.4 G +(cation option.).2 E F1 -.3(BA)108 204 S(SH_LINENO).3 E F0 .034 +(An array v)144 216 R .034(ariable whose members are the line numbers i\ +n source \214les corresponding to each mem-)-.25 F 3.491(ber of)144 228 +R/F2 9/Times-Bold@0 SF(FUNCN)5.991 E(AME)-.18 E/F3 9/Times-Roman@0 SF(.) +A F1(${B)7.991 E(ASH_LINENO[)-.3 E/F4 10/Times-Italic@0 SF($i)A F1(]})A +F0 3.491(is the line number in the source \214le where)5.991 F F1 +(${FUNCN)144 240 Q(AME[)-.2 E F4($i)A F1(]})A F0 -.1(wa)3.311 G 3.311 +(sc).1 G .811(alled \(or)-3.311 F F1(${B)3.311 E(ASH_LINENO[)-.3 E F4 +($i-1)A F1(]})A F0 .811(if referenced within another shell)3.311 F 4.987 +(function\). The)144 252 R 2.487(corresponding source \214le name is) +4.987 F F1(${B)4.986 E(ASH_SOURCE[)-.3 E F4($i)A F1(]})A F0 7.486(.U)C +(se)-7.486 E F2(LINENO)4.986 E F0(to)4.736 E +(obtain the current line number)144 264 Q(.)-.55 E F1 -.3(BA)108 276 S +(SH_REMA).3 E(TCH)-.95 E F0 .005(An array v)144 288 R .005 +(ariable whose members are assigned by the)-.25 F F1(=~)2.506 E F0 .006 +(binary operator to the)2.506 F F1([[)2.506 E F0 .006(conditional com-) +2.506 F 2.507(mand. The)144 300 R .007(element with inde)2.507 F 2.507 +(x0i)-.15 G 2.507(st)-2.507 G .007 +(he portion of the string matching the entire re)-2.507 F .006(gular e) +-.15 F(xpression.)-.15 E .997(The element with inde)144 312 R(x)-.15 E +F4(n)3.497 E F0 .997(is the portion of the string matching the)3.497 F +F4(n)3.498 E F0 .998(th parenthesized sube)B(xpres-)-.15 E 2.5 +(sion. This)144 324 R -.25(va)2.5 G(riable is read-only).25 E(.)-.65 E +F1 -.3(BA)108 336 S(SH_SOURCE).3 E F0 .89(An array v)144 348 R .889(ari\ +able whose members are the source \214lenames corresponding to the elem\ +ents in the)-.25 F F2(FUNCN)144 360 Q(AME)-.18 E F0(array v)2.25 E +(ariable.)-.25 E F1 -.3(BA)108 372 S(SH_SUBSHELL).3 E F0 .401 +(Incremented by one each time a subshell or subshell en)144 384 R .401 +(vironment is spa)-.4 F 2.902(wned. The)-.15 F .402(initial v)2.902 F +.402(alue is)-.25 F(0.)144 396 Q F1 -.3(BA)108 408 S(SH_VERSINFO).3 E F0 +2.645(Ar)144 420 S .145(eadonly array v)-2.645 F .144 +(ariable whose members hold v)-.25 F .144 +(ersion information for this instance of)-.15 F F1(bash)2.644 E F0 5.144 +(.T)C(he)-5.144 E -.25(va)144 432 S +(lues assigned to the array members are as follo).25 E(ws:)-.25 E F1 -.3 +(BA)144 450 S(SH_VERSINFO[).3 E F0(0)A F1(])A F0(The major v)24.74 E +(ersion number \(the)-.15 E F4 -.37(re)2.5 G(lease).37 E F0(\).)A F1 -.3 +(BA)144 462 S(SH_VERSINFO[).3 E F0(1)A F1(])A F0(The minor v)24.74 E +(ersion number \(the)-.15 E F4(ver)2.5 E(sion)-.1 E F0(\).)A F1 -.3(BA) +144 474 S(SH_VERSINFO[).3 E F0(2)A F1(])A F0(The patch le)24.74 E -.15 +(ve)-.25 G(l.).15 E F1 -.3(BA)144 486 S(SH_VERSINFO[).3 E F0(3)A F1(])A +F0(The b)24.74 E(uild v)-.2 E(ersion.)-.15 E F1 -.3(BA)144 498 S +(SH_VERSINFO[).3 E F0(4)A F1(])A F0(The release status \(e.g.,)24.74 E +F4(beta1)2.5 E F0(\).)A F1 -.3(BA)144 510 S(SH_VERSINFO[).3 E F0(5)A F1 +(])A F0(The v)24.74 E(alue of)-.25 E F2(MA)2.5 E(CHTYPE)-.495 E F3(.)A +F1 -.3(BA)108 526.8 S(SH_VERSION).3 E F0 +(Expands to a string describing the v)144 538.8 Q +(ersion of this instance of)-.15 E F1(bash)2.5 E F0(.)A F1(COMP_CW)108 +555.6 Q(ORD)-.1 E F0 .396(An inde)144 567.6 R 2.896(xi)-.15 G(nto)-2.896 +E F1(${COMP_W)2.896 E(ORDS})-.1 E F0 .396(of the w)2.896 F .396 +(ord containing the current cursor position.)-.1 F .397(This v)5.397 F +(ari-)-.25 E 1.181(able is a)144 579.6 R -.25(va)-.2 G 1.181 +(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 3.681 +(db).1 G 3.681(yt)-3.681 G 1.18(he programmable completion f)-3.681 F +1.18(acilities \(see)-.1 F F1(Pr)144 591.6 Q(ogrammable Completion)-.18 +E F0(belo)2.5 E(w\).)-.25 E F1(COMP_KEY)108 608.4 Q F0(The k)144 620.4 Q +.3 -.15(ey \()-.1 H(or \214nal k).15 E .3 -.15(ey o)-.1 H 2.5(fak).15 G +.3 -.15(ey s)-2.6 H(equence\) used to in).15 E -.2(vo)-.4 G .2 -.1(ke t) +.2 H(he current completion function.).1 E F1(COMP_LINE)108 637.2 Q F0 +1.207(The current command line.)144 649.2 R 1.208(This v)6.208 F 1.208 +(ariable is a)-.25 F -.25(va)-.2 G 1.208 +(ilable only in shell functions and e).25 F 1.208(xternal com-)-.15 F +2.849(mands in)144 661.2 R -.2(vo)-.4 G -.1(ke).2 G 5.349(db).1 G 5.349 +(yt)-5.349 G 2.849(he programmable completion f)-5.349 F 2.849 +(acilities \(see)-.1 F F1(Pr)5.349 E 2.848(ogrammable Completion)-.18 F +F0(belo)144 673.2 Q(w\).)-.25 E F1(COMP_POINT)108 690 Q F0 .666 +(The inde)144 702 R 3.166(xo)-.15 G 3.166(ft)-3.166 G .666 +(he current cursor position relati)-3.166 F .966 -.15(ve t)-.25 H 3.166 +(ot).15 G .666(he be)-3.166 F .666(ginning of the current command.)-.15 +F .667(If the)5.667 F .535 +(current cursor position is at the end of the current command, the v)144 +714 R .534(alue of this v)-.25 F .534(ariable is equal to)-.25 F F1 +(${#COMP_LINE})144 726 Q F0 7.005(.T)C 2.005(his v)-7.005 F 2.005 +(ariable is a)-.25 F -.25(va)-.2 G 2.006 +(ilable only in shell functions and e).25 F 2.006(xternal commands)-.15 +F(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(10)185.955 E 0 Cg EP +%%Page: 11 11 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(in)144 84 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G +(he programmable completion f)-2.5 E(acilities \(see)-.1 E/F1 10 +/Times-Bold@0 SF(Pr)2.5 E(ogrammable Completion)-.18 E F0(belo)2.5 E +(w\).)-.25 E F1(COMP_TYPE)108 100.8 Q F0 .042(Set to an inte)144 112.8 R +.042(ger v)-.15 F .041(alue corresponding to the type of completion att\ +empted that caused a completion)-.25 F .337(function to be called:)144 +124.8 R/F2 10/Times-Italic@0 SF -.5(TA)2.837 G(B).5 E F0 2.837(,f)C .337 +(or normal completion,)-2.837 F F2(?)2.837 E F0 2.837(,f)C .337 +(or listing completions after successi)-2.837 F .638 -.15(ve t)-.25 H +(abs,).15 E F2(!)144 136.8 Q F0 4.092(,f)C 1.592(or listing alternati) +-4.092 F -.15(ve)-.25 G 4.092(so).15 G 4.092(np)-4.092 G 1.592(artial w) +-4.092 F 1.592(ord completion,)-.1 F F2(@)4.092 E F0 4.092(,t)C 4.092 +(ol)-4.092 G 1.592(ist completions if the w)-4.092 F 1.591(ord is not) +-.1 F 1.552(unmodi\214ed, or)144 148.8 R F2(%)4.052 E F0 4.052(,f)C +1.552(or menu completion.)-4.052 F 1.552(This v)6.552 F 1.552 +(ariable is a)-.25 F -.25(va)-.2 G 1.552 +(ilable only in shell functions and).25 F -.15(ex)144 160.8 S 2.929 +(ternal commands in).15 F -.2(vo)-.4 G -.1(ke).2 G 5.429(db).1 G 5.429 +(yt)-5.429 G 2.929(he programmable completion f)-5.429 F 2.929 +(acilities \(see)-.1 F F1(Pr)5.428 E(ogrammable)-.18 E(Completion)144 +172.8 Q F0(belo)2.5 E(w\).)-.25 E F1(COMP_W)108 189.6 Q(ORDBREAKS)-.1 E +F0 1.335(The set of characters that the)144 201.6 R F1 -.18(re)3.836 G +(adline).18 E F0 1.336(library treats as w)3.836 F 1.336 +(ord separators when performing w)-.1 F(ord)-.1 E 3.126(completion. If) +144 213.6 R/F3 9/Times-Bold@0 SF(COMP_W)3.126 E(ORDBREAKS)-.09 E F0 .626 +(is unset, it loses its special properties, e)2.876 F -.15(ve)-.25 G +3.125(ni).15 G 3.125(fi)-3.125 G 3.125(ti)-3.125 G 3.125(ss)-3.125 G +(ubse-)-3.125 E(quently reset.)144 225.6 Q F1(COMP_W)108 242.4 Q(ORDS) +-.1 E F0 .653(An array v)144 254.4 R .653(ariable \(see)-.25 F F1 +(Arrays)3.153 E F0(belo)3.153 E .654(w\) consisting of the indi)-.25 F +.654(vidual w)-.25 F .654(ords in the current command)-.1 F 4.333 +(line. The)144 266.4 R 1.832(line is split into w)4.332 F 1.832(ords as) +-.1 F F1 -.18(re)4.332 G(adline).18 E F0 -.1(wo)4.332 G 1.832 +(uld split it, using).1 F F3(COMP_W)4.332 E(ORDBREAKS)-.09 E F0(as)4.082 +E .831(described abo)144 278.4 R -.15(ve)-.15 G 5.831(.T).15 G .831 +(his v)-5.831 F .831(ariable is a)-.25 F -.25(va)-.2 G .832 +(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 3.332 +(db).1 G 3.332(yt)-3.332 G .832(he programmable)-3.332 F(completion f) +144 290.4 Q(acilities \(see)-.1 E F1(Pr)2.5 E(ogrammable Completion)-.18 +E F0(belo)2.5 E(w\).)-.25 E F1(DIRST)108 307.2 Q -.55(AC)-.9 G(K).55 E +F0 2.26(An array v)144 319.2 R 2.26(ariable \(see)-.25 F F1(Arrays)4.76 +E F0(belo)4.76 E 2.26 +(w\) containing the current contents of the directory stack.)-.25 F +1.094(Directories appear in the stack in the order the)144 331.2 R 3.594 +(ya)-.15 G 1.095(re displayed by the)-3.594 F F1(dirs)3.595 E F0 -.2(bu) +3.595 G 3.595(iltin. Assigning).2 F(to)3.595 E 1.432 +(members of this array v)144 343.2 R 1.432 +(ariable may be used to modify directories already in the stack, b)-.25 +F 1.431(ut the)-.2 F F1(pushd)144 355.2 Q F0(and)2.746 E F1(popd)2.746 E +F0 -.2(bu)2.746 G .246(iltins must be used to add and remo).2 F .546 +-.15(ve d)-.15 H 2.746(irectories. Assignment).15 F .246(to this v)2.746 +F(ariable)-.25 E .351(will not change the current directory)144 367.2 R +5.35(.I)-.65 G(f)-5.35 E F3(DIRST)2.85 E -.495(AC)-.81 G(K).495 E F0 .35 +(is unset, it loses its special properties, e)2.6 F -.15(ve)-.25 G 2.85 +(ni).15 G(f)-2.85 E(it is subsequently reset.)144 379.2 Q F1(EUID)108 +396 Q F0 1.103(Expands to the ef)11 F(fecti)-.25 E 1.403 -.15(ve u)-.25 +H 1.103(ser ID of the current user).15 F 3.603(,i)-.4 G 1.103 +(nitialized at shell startup.)-3.603 F 1.104(This v)6.103 F 1.104 +(ariable is)-.25 F(readonly)144 408 Q(.)-.65 E F1(FUNCN)108 424.8 Q(AME) +-.2 E F0 .479(An array v)144 436.8 R .479 +(ariable containing the names of all shell functions currently in the e) +-.25 F -.15(xe)-.15 G .478(cution call stack.).15 F .276 +(The element with inde)144 448.8 R 2.776(x0i)-.15 G 2.776(st)-2.776 G +.276(he name of an)-2.776 F 2.777(yc)-.15 G(urrently-e)-2.777 E -.15(xe) +-.15 G .277(cuting shell function.).15 F .277(The bottom-most)5.277 F +.25(element is)144 460.8 R/F4 10/Courier@0 SF("main")2.75 E F0 5.25(.T)C +.25(his v)-5.25 F .25(ariable e)-.25 F .25 +(xists only when a shell function is e)-.15 F -.15(xe)-.15 G 2.75 +(cuting. Assignments).15 F(to)2.75 E F3(FUNCN)144 472.8 Q(AME)-.18 E F0 +(ha)2.634 E .684 -.15(ve n)-.2 H 2.884(oe).15 G -.25(ff)-2.884 G .384 +(ect and return an error status.).25 F(If)5.385 E F3(FUNCN)2.885 E(AME) +-.18 E F0 .385(is unset, it loses its special)2.635 F(properties, e)144 +484.8 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss) +-2.5 G(ubsequently reset.)-2.5 E F1(GR)108 501.6 Q(OUPS)-.3 E F0 1.229 +(An array v)144 513.6 R 1.228(ariable containing the list of groups of \ +which the current user is a member)-.25 F 6.228(.A)-.55 G(ssign-)-6.228 +E .596(ments to)144 525.6 R F3(GR)3.096 E(OUPS)-.27 E F0(ha)2.847 E .897 +-.15(ve n)-.2 H 3.097(oe).15 G -.25(ff)-3.097 G .597 +(ect and return an error status.).25 F(If)5.597 E F3(GR)3.097 E(OUPS) +-.27 E F0 .597(is unset, it loses its spe-)2.847 F(cial properties, e) +144 537.6 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5 +(ss)-2.5 G(ubsequently reset.)-2.5 E F1(HISTCMD)108 554.4 Q F0 .356 +(The history number)144 566.4 R 2.856(,o)-.4 G 2.856(ri)-2.856 G(nde) +-2.856 E 2.856(xi)-.15 G 2.856(nt)-2.856 G .356 +(he history list, of the current command.)-2.856 F(If)5.356 E F3 +(HISTCMD)2.855 E F0 .355(is unset, it)2.605 F +(loses its special properties, e)144 578.4 Q -.15(ve)-.25 G 2.5(ni).15 G +2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1 +(HOSTN)108 595.2 Q(AME)-.2 E F0 +(Automatically set to the name of the current host.)144 607.2 Q F1 +(HOSTTYPE)108 624 Q F0 .222(Automatically set to a string that uniquely\ + describes the type of machine on which)144 636 R F1(bash)2.723 E F0 +.223(is e)2.723 F -.15(xe)-.15 G(cut-).15 E 2.5(ing. The)144 648 R(def) +2.5 E(ault is system-dependent.)-.1 E F1(LINENO)108 664.8 Q F0 1.408(Ea\ +ch time this parameter is referenced, the shell substitutes a decimal n\ +umber representing the)144 676.8 R .078(current sequential line number \ +\(starting with 1\) within a script or function.)144 688.8 R .079 +(When not in a script or)5.078 F .307(function, the v)144 700.8 R .307 +(alue substituted is not guaranteed to be meaningful.)-.25 F(If)5.306 E +F3(LINENO)2.806 E F0 .306(is unset, it loses its)2.556 F +(special properties, e)144 712.8 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi) +-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(11)185.955 E 0 Cg EP +%%Page: 12 12 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(MA)108 84 Q(CHTYPE)-.55 E F0 .898(Automati\ +cally set to a string that fully describes the system type on which)144 +96 R F1(bash)3.398 E F0 .899(is e)3.398 F -.15(xe)-.15 G .899 +(cuting, in).15 F(the standard GNU)144 108 Q/F2 10/Times-Italic@0 SF +(cpu-company-system)2.5 E F0 2.5(format. The)2.5 F(def)2.5 E +(ault is system-dependent.)-.1 E F1(OLDPWD)108 124.8 Q F0(The pre)144 +136.8 Q(vious w)-.25 E(orking directory as set by the)-.1 E F1(cd)2.5 E +F0(command.)2.5 E F1(OPT)108 153.6 Q(ARG)-.9 E F0 1.627(The v)144 165.6 +R 1.627(alue of the last option ar)-.25 F 1.627(gument processed by the) +-.18 F F1(getopts)4.127 E F0 -.2(bu)4.127 G 1.626(iltin command \(see).2 +F/F3 9/Times-Bold@0 SF(SHELL)4.126 E -.09(BU)144 177.6 S(IL).09 E +(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1(OPTIND)108 194.4 Q +F0 1.651(The inde)144 206.4 R 4.151(xo)-.15 G 4.151(ft)-4.151 G 1.651 +(he ne)-4.151 F 1.651(xt ar)-.15 F 1.652(gument to be processed by the) +-.18 F F1(getopts)4.152 E F0 -.2(bu)4.152 G 1.652(iltin command \(see).2 +F F3(SHELL)4.152 E -.09(BU)144 218.4 S(IL).09 E(TIN COMMANDS)-.828 E F0 +(belo)2.25 E(w\).)-.25 E F1(OSTYPE)108 235.2 Q F0 .329(Automatically se\ +t to a string that describes the operating system on which)144 247.2 R +F1(bash)2.829 E F0 .329(is e)2.829 F -.15(xe)-.15 G 2.829(cuting. The) +.15 F(def)144 259.2 Q(ault is system-dependent.)-.1 E F1(PIPEST)108 276 +Q -.95(AT)-.9 G(US).95 E F0 .61(An array v)144 288 R .61(ariable \(see) +-.25 F F1(Arrays)3.11 E F0(belo)3.11 E .61(w\) containing a list of e) +-.25 F .61(xit status v)-.15 F .61(alues from the processes in)-.25 F +(the most-recently-e)144 300 Q -.15(xe)-.15 G(cuted fore).15 E +(ground pipeline \(which may contain only a single command\).)-.15 E F1 +(PPID)108 316.8 Q F0(The process ID of the shell')12.67 E 2.5(sp)-.55 G +2.5(arent. This)-2.5 F -.25(va)2.5 G(riable is readonly).25 E(.)-.65 E +F1(PWD)108 333.6 Q F0(The current w)12.67 E +(orking directory as set by the)-.1 E F1(cd)2.5 E F0(command.)2.5 E F1 +(RANDOM)108 350.4 Q F0 .566 +(Each time this parameter is referenced, a random inte)144 362.4 R .565 +(ger between 0 and 32767 is generated.)-.15 F(The)5.565 E .01 +(sequence of random numbers may be initialized by assigning a v)144 +374.4 R .01(alue to)-.25 F F3(RANDOM)2.51 E/F4 9/Times-Roman@0 SF(.)A F0 +(If)4.51 E F3(RANDOM)2.51 E F0(is)2.26 E +(unset, it loses its special properties, e)144 386.4 Q -.15(ve)-.25 G +2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G +(ubsequently reset.)-2.5 E F1(REPL)108 403.2 Q(Y)-.92 E F0 +(Set to the line of input read by the)144 415.2 Q F1 -.18(re)2.5 G(ad) +.18 E F0 -.2(bu)2.5 G(iltin command when no ar).2 E +(guments are supplied.)-.18 E F1(SECONDS)108 432 Q F0 .795(Each time th\ +is parameter is referenced, the number of seconds since shell in)144 444 +R -.2(vo)-.4 G .795(cation is returned.).2 F .712(If a v)144 456 R .712 +(alue is assigned to)-.25 F F3(SECONDS)3.212 E F4(,)A F0 .712(the v) +2.962 F .712(alue returned upon subsequent references is the number)-.25 +F .408(of seconds since the assignment plus the v)144 468 R .408 +(alue assigned.)-.25 F(If)5.408 E F3(SECONDS)2.908 E F0 .407 +(is unset, it loses its special)2.658 F(properties, e)144 480 Q -.15(ve) +-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G +(ubsequently reset.)-2.5 E F1(SHELLOPTS)108 496.8 Q F0 3.262(Ac)144 +508.8 S .763(olon-separated list of enabled shell options.)-3.262 F .763 +(Each w)5.763 F .763(ord in the list is a v)-.1 F .763(alid ar)-.25 F +.763(gument for the)-.18 F F1144 520.8 Q F0 1.174(option to the) +3.674 F F1(set)3.674 E F0 -.2(bu)3.674 G 1.174(iltin command \(see).2 F +F3 1.173(SHELL B)3.673 F(UIL)-.09 E 1.173(TIN COMMANDS)-.828 F F0(belo) +3.423 E 3.673(w\). The)-.25 F(options)3.673 E .019(appearing in)144 +532.8 R F3(SHELLOPTS)2.519 E F0 .019(are those reported as)2.269 F F2 +(on)2.749 E F0(by)2.759 E F1 .019(set \255o)2.519 F F0 5.019(.I)C 2.519 +(ft)-5.019 G .019(his v)-2.519 F .02(ariable is in the en)-.25 F +(vironment)-.4 E(when)144 544.8 Q F1(bash)3.142 E F0 .642(starts up, ea\ +ch shell option in the list will be enabled before reading an)3.142 F +3.141(ys)-.15 G .641(tartup \214les.)-3.141 F(This v)144 556.8 Q +(ariable is read-only)-.25 E(.)-.65 E F1(SHL)108 573.6 Q(VL)-.92 E F0 +(Incremented by one each time an instance of)144 585.6 Q F1(bash)2.5 E +F0(is started.)2.5 E F1(UID)108 602.4 Q F0 +(Expands to the user ID of the current user)17.67 E 2.5(,i)-.4 G +(nitialized at shell startup.)-2.5 E(This v)5 E(ariable is readonly)-.25 +E(.)-.65 E .993(The follo)108 619.2 R .993(wing v)-.25 F .994 +(ariables are used by the shell.)-.25 F .994(In some cases,)5.994 F F1 +(bash)3.494 E F0 .994(assigns a def)3.494 F .994(ault v)-.1 F .994 +(alue to a v)-.25 F(ariable;)-.25 E(these cases are noted belo)108 631.2 +Q -.65(w.)-.25 G F1 -.3(BA)108 648 S(SH_ENV).3 E F0 .506 +(If this parameter is set when)144 660 R F1(bash)3.006 E F0 .506(is e) +3.006 F -.15(xe)-.15 G .505(cuting a shell script, its v).15 F .505 +(alue is interpreted as a \214lename)-.25 F .354 +(containing commands to initialize the shell, as in)144 672 R F2 +(~/.bashr)2.855 E(c)-.37 E F0 5.355(.T).31 G .355(he v)-5.355 F .355 +(alue of)-.25 F F3 -.27(BA)2.855 G(SH_ENV).27 E F0 .355(is subjected) +2.605 F .525(to parameter e)144 684 R .525 +(xpansion, command substitution, and arithmetic e)-.15 F .525 +(xpansion before being interpreted)-.15 F(as a \214le name.)144 696 Q F3 +-.666(PA)5 G(TH)-.189 E F0 +(is not used to search for the resultant \214le name.)2.25 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(12)185.955 E 0 Cg EP +%%Page: 13 13 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(CDP)108 84 Q -.95(AT)-.74 G(H).95 E F0 +1.247(The search path for the)144 96 R F1(cd)3.747 E F0 3.747 +(command. This)3.747 F 1.248 +(is a colon-separated list of directories in which the)3.747 F 3.796 +(shell looks for destination directories speci\214ed by the)144 108 R F1 +(cd)6.295 E F0 6.295(command. A)6.295 F 3.795(sample v)6.295 F 3.795 +(alue is)-.25 F/F2 10/Courier@0 SF(".:~:/usr")144 120 Q F0(.)A F1 -.3 +(BA)108 132 S(SH_XTRA).3 E(CEFD)-.55 E F0 .48(If set to an inte)144 144 +R .48(ger corresponding to a v)-.15 F .481(alid \214le descriptor)-.25 F +(,)-.4 E F1(bash)2.981 E F0 .481(will write the trace output gener)2.981 +F(-)-.2 E 3.114(ated when)144 156 R F2 3.114(set -x)5.614 F F0 3.114 +(is enabled to that \214le descriptor)5.614 F 8.114(.T)-.55 G 3.114 +(he \214le descriptor is closed when)-8.114 F/F3 9/Times-Bold@0 SF -.27 +(BA)144 168 S(SH_XTRA).27 E(CEFD)-.495 E F0 .138 +(is unset or assigned a ne)2.388 F 2.638(wv)-.25 G 2.638 +(alue. Unsetting)-2.888 F F3 -.27(BA)2.638 G(SH_XTRA).27 E(CEFD)-.495 E +F0 .138(or assigning it)2.388 F 2.531(the empty string causes the trace\ + output to be sent to the standard error)144 180 R 7.53(.N)-.55 G 2.53 +(ote that setting)-7.53 F F3 -.27(BA)144 192 S(SH_XTRA).27 E(CEFD)-.495 +E F0 .74(to 2 \(the standard error \214le descriptor\) and then unsetti\ +ng it will result in the)2.99 F(standard error being closed.)144 204 Q +F1(COLUMNS)108 216 Q F0 .425(Used by the)144 228 R F1(select)2.925 E F0 +-.2(bu)2.925 G .425(iltin command to determine the terminal width when \ +printing selection lists.).2 F +(Automatically set upon receipt of a SIGWINCH.)144 240 Q F1(COMPREPL)108 +252 Q(Y)-.92 E F0 .847(An array v)144 264 R .848(ariable from which)-.25 +F F1(bash)3.348 E F0 .848 +(reads the possible completions generated by a shell function)3.348 F +(in)144 276 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G +(he programmable completion f)-2.5 E(acility \(see)-.1 E F1(Pr)2.5 E +(ogrammable Completion)-.18 E F0(belo)2.5 E(w\).)-.25 E F1(EMA)108 288 Q +(CS)-.55 E F0(If)144 300 Q F1(bash)2.536 E F0 .036(\214nds this v)2.536 +F .036(ariable in the en)-.25 F .036 +(vironment when the shell starts with v)-.4 F(alue)-.25 E F2(t)2.535 E +F0 2.535(,i)C 2.535(ta)-2.535 G .035(ssumes that the)-2.535 F +(shell is running in an emacs shell b)144 312 Q(uf)-.2 E +(fer and disables line editing.)-.25 E F1(FCEDIT)108 324 Q F0(The def) +144 336 Q(ault editor for the)-.1 E F1(fc)2.5 E F0 -.2(bu)2.5 G +(iltin command.).2 E F1(FIGNORE)108 348 Q F0 2.598(Ac)144 360 S .098 +(olon-separated list of suf)-2.598 F<8c78>-.25 E .098 +(es to ignore when performing \214lename completion \(see)-.15 F F3 +(READLINE)2.599 E F0(belo)144 372 Q 2.705(w\). A)-.25 F .205 +(\214lename whose suf)2.705 F .205(\214x matches one of the entries in) +-.25 F F3(FIGNORE)2.705 E F0 .205(is e)2.455 F .204 +(xcluded from the list)-.15 F(of matched \214lenames.)144 384 Q 2.5(As)5 +G(ample v)-2.5 E(alue is)-.25 E F2(".o:~")2.5 E F0(.)A F1(GLOBIGNORE)108 +396 Q F0 3.118(Ac)144 408 S .618(olon-separated list of patterns de\214\ +ning the set of \214lenames to be ignored by pathname e)-3.118 F(xpan-) +-.15 E 3.132(sion. If)144 420 R 3.132<618c>3.132 G .632 +(lename matched by a pathname e)-3.132 F .632 +(xpansion pattern also matches one of the patterns in)-.15 F F3 +(GLOBIGNORE)144 432 Q/F4 9/Times-Roman@0 SF(,)A F0(it is remo)2.25 E +-.15(ve)-.15 G 2.5(df).15 G(rom the list of matches.)-2.5 E F1 +(HISTCONTR)108 444 Q(OL)-.3 E F0 2.653(Ac)144 456 S .153 +(olon-separated list of v)-2.653 F .153(alues controlling ho)-.25 F +2.653(wc)-.25 G .153(ommands are sa)-2.653 F -.15(ve)-.2 G 2.653(do).15 +G 2.653(nt)-2.653 G .153(he history list.)-2.653 F .154(If the list) +5.153 F .491(of v)144 468 R .491(alues includes)-.25 F/F5 10 +/Times-Italic@0 SF(ignor)2.991 E(espace)-.37 E F0 2.991(,l).18 G .491 +(ines which be)-2.991 F .491(gin with a)-.15 F F1(space)2.991 E F0 .49 +(character are not sa)2.991 F -.15(ve)-.2 G 2.99(di).15 G 2.99(nt)-2.99 +G .49(he his-)-2.99 F .557(tory list.)144 480 R 3.057(Av)5.557 G .557 +(alue of)-3.307 F F5(ignor)3.067 E(edups)-.37 E F0 .557 +(causes lines matching the pre)3.327 F .558 +(vious history entry to not be sa)-.25 F -.15(ve)-.2 G(d.).15 E 2.959 +(Av)144 492 S .459(alue of)-3.209 F F5(ignor)2.969 E(eboth)-.37 E F0 +.459(is shorthand for)3.239 F F5(ignor)2.959 E(espace)-.37 E F0(and) +2.959 E F5(ignor)2.958 E(edups)-.37 E F0 5.458(.A)C -.25(va)-2.5 G .458 +(lue of).25 F F5(er)2.958 E(asedups)-.15 E F0(causes)2.958 E .698 +(all pre)144 504 R .698 +(vious lines matching the current line to be remo)-.25 F -.15(ve)-.15 G +3.198(df).15 G .699(rom the history list before that line is)-3.198 F +(sa)144 516 Q -.15(ve)-.2 G 2.764(d. An).15 F 2.764(yv)-.15 G .264 +(alue not in the abo)-3.014 F .563 -.15(ve l)-.15 H .263 +(ist is ignored.).15 F(If)5.263 E F3(HISTCONTR)2.763 E(OL)-.27 E F0 .263 +(is unset, or does not include)2.513 F 2.941(av)144 528 S .441(alid v) +-3.191 F .441(alue, all lines read by the shell parser are sa)-.25 F +-.15(ve)-.2 G 2.942(do).15 G 2.942(nt)-2.942 G .442 +(he history list, subject to the v)-2.942 F .442(alue of)-.25 F F3 +(HISTIGNORE)144 540 Q F4(.)A F0 1.981(The second and subsequent lines o\ +f a multi-line compound command are not)6.482 F +(tested, and are added to the history re)144 552 Q -.05(ga)-.15 G +(rdless of the v).05 E(alue of)-.25 E F3(HISTCONTR)2.5 E(OL)-.27 E F4(.) +A F1(HISTFILE)108 564 Q F0 .181 +(The name of the \214le in which command history is sa)144 576 R -.15 +(ve)-.2 G 2.681(d\().15 G(see)-2.681 E F3(HIST)2.681 E(OR)-.162 E(Y) +-.315 E F0(belo)2.431 E 2.682(w\). The)-.25 F(def)2.682 E .182(ault v) +-.1 F(alue)-.25 E(is)144 588 Q F5(~/.bash_history)2.5 E F0 5(.I)C 2.5 +(fu)-5 G(nset, the command history is not sa)-2.5 E -.15(ve)-.2 G 2.5 +(dw).15 G(hen an interacti)-2.5 E .3 -.15(ve s)-.25 H(hell e).15 E +(xits.)-.15 E F1(HISTFILESIZE)108 600 Q F0 1.623 +(The maximum number of lines contained in the history \214le.)144 612 R +1.622(When this v)6.623 F 1.622(ariable is assigned a)-.25 F -.25(va)144 +624 S .305(lue, the history \214le is truncated, if necessary).25 F +2.805(,b)-.65 G 2.805(yr)-2.805 G(emo)-2.805 E .305 +(ving the oldest entries, to contain no more)-.15 F .602 +(than that number of lines.)144 636 R .602(The def)5.602 F .602(ault v) +-.1 F .602(alue is 500.)-.25 F .601 +(The history \214le is also truncated to this size)5.602 F +(after writing it when an interacti)144 648 Q .3 -.15(ve s)-.25 H +(hell e).15 E(xits.)-.15 E F1(HISTIGNORE)108 660 Q F0 2.657(Ac)144 672 S +.157(olon-separated list of patterns used to decide which command lines\ + should be sa)-2.657 F -.15(ve)-.2 G 2.658(do).15 G 2.658(nt)-2.658 G +.158(he his-)-2.658 F .708(tory list.)144 684 R .708 +(Each pattern is anchored at the be)5.708 F .707 +(ginning of the line and must match the complete line)-.15 F .625 +(\(no implicit `)144 696 R F1(*)A F0 3.125('i)C 3.125(sa)-3.125 G 3.125 +(ppended\). Each)-3.125 F .626(pattern is tested ag)3.125 F .626 +(ainst the line after the checks speci\214ed by)-.05 F F3(HISTCONTR)144 +708 Q(OL)-.27 E F0 1.793(are applied.)4.043 F 1.793 +(In addition to the normal shell pattern matching characters, `)6.793 F +F1(&)A F0(')A 2.514(matches the pre)144 720 R 2.514(vious history line.) +-.25 F(`)7.514 E F1(&)A F0 5.014('m)C 2.514 +(ay be escaped using a backslash; the backslash is)-5.014 F +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(13)185.955 E 0 Cg EP +%%Page: 14 14 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(remo)144 84 Q -.15(ve)-.15 G 3.353(db).15 G .853 +(efore attempting a match.)-3.353 F .852 +(The second and subsequent lines of a multi-line compound)5.852 F +(command are not tested, and are added to the history re)144 96 Q -.05 +(ga)-.15 G(rdless of the v).05 E(alue of)-.25 E/F1 9/Times-Bold@0 SF +(HISTIGNORE)2.5 E/F2 9/Times-Roman@0 SF(.)A/F3 10/Times-Bold@0 SF +(HISTSIZE)108 108 Q F0 1.942 +(The number of commands to remember in the command history \(see)144 120 +R F1(HIST)4.443 E(OR)-.162 E(Y)-.315 E F0(belo)4.193 E 4.443(w\). The) +-.25 F(def)144 132 Q(ault v)-.1 E(alue is 500.)-.25 E F3(HISTTIMEFORMA) +108 144 Q(T)-.95 E F0 .952(If this v)144 156 R .952 +(ariable is set and not null, its v)-.25 F .951 +(alue is used as a format string for)-.25 F/F4 10/Times-Italic@0 SF +(strftime)3.451 E F0 .951(\(3\) to print the)B .672 +(time stamp associated with each history entry displayed by the)144 168 +R F3(history)3.173 E F0 -.2(bu)3.173 G 3.173(iltin. If).2 F .673(this v) +3.173 F .673(ariable is)-.25 F .144 +(set, time stamps are written to the history \214le so the)144 180 R +2.644(ym)-.15 G .144(ay be preserv)-2.644 F .144 +(ed across shell sessions.)-.15 F(This)5.144 E(uses the history comment\ + character to distinguish timestamps from other history lines.)144 192 Q +F3(HOME)108 204 Q F0 1.27 +(The home directory of the current user; the def)144 216 R 1.27(ault ar) +-.1 F 1.27(gument for the)-.18 F F3(cd)3.77 E F0 -.2(bu)3.77 G 1.27 +(iltin command.).2 F(The)6.27 E -.25(va)144 228 S(lue of this v).25 E +(ariable is also used when performing tilde e)-.25 E(xpansion.)-.15 E F3 +(HOSTFILE)108 240 Q F0 1.015 +(Contains the name of a \214le in the same format as)144 252 R F4 +(/etc/hosts)5.181 E F0 1.015(that should be read when the shell)5.181 F +.55(needs to complete a hostname.)144 264 R .551 +(The list of possible hostname completions may be changed while)5.551 F +1.059(the shell is running; the ne)144 276 R 1.059 +(xt time hostname completion is attempted after the v)-.15 F 1.058 +(alue is changed,)-.25 F F3(bash)144 288 Q F0 .138 +(adds the contents of the ne)2.638 F 2.638<778c>-.25 G .138(le to the e) +-2.638 F .138(xisting list.)-.15 F(If)5.138 E F1(HOSTFILE)2.638 E F0 +.138(is set, b)2.388 F .139(ut has no v)-.2 F .139(alue, or)-.25 F .518 +(does not name a readable \214le,)144 300 R F3(bash)3.018 E F0 .518 +(attempts to read)3.018 F F4(/etc/hosts)4.683 E F0 .517 +(to obtain the list of possible host-)4.683 F(name completions.)144 312 +Q(When)5 E F1(HOSTFILE)2.5 E F0(is unset, the hostname list is cleared.) +2.25 E F3(IFS)108 324 Q F0(The)20.44 E F4 .555(Internal F)3.635 F .555 +(ield Separ)-.45 F(ator)-.15 E F0 .555(that is used for w)3.785 F .556 +(ord splitting after e)-.1 F .556(xpansion and to split lines into)-.15 +F -.1(wo)144 336 S(rds with the).1 E F3 -.18(re)2.5 G(ad).18 E F0 -.2 +(bu)2.5 G(iltin command.).2 E(The def)5 E(ault v)-.1 E(alue is `)-.25 E +(`')-.25 E('.)-.74 E F3(IGNOREEOF)108 348 Q +F0 .503(Controls the action of an interacti)144 360 R .803 -.15(ve s) +-.25 H .503(hell on receipt of an).15 F F1(EOF)3.003 E F0 .503 +(character as the sole input.)2.753 F .503(If set,)5.503 F .426(the v) +144 372 R .426(alue is the number of consecuti)-.25 F -.15(ve)-.25 G F1 +(EOF)3.076 E F0 .426 +(characters which must be typed as the \214rst characters)2.676 F .303 +(on an input line before)144 384 R F3(bash)2.802 E F0 -.15(ex)2.802 G +2.802(its. If).15 F .302(the v)2.802 F .302(ariable e)-.25 F .302 +(xists b)-.15 F .302(ut does not ha)-.2 F .602 -.15(ve a n)-.2 H .302 +(umeric v).15 F .302(alue, or has)-.25 F(no v)144 396 Q(alue, the def) +-.25 E(ault v)-.1 E(alue is 10.)-.25 E(If it does not e)5 E(xist,)-.15 E +F1(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F3 +(INPUTRC)108 408 Q F0 1.435(The \214lename for the)144 420 R F3 -.18(re) +3.936 G(adline).18 E F0 1.436(startup \214le, o)3.936 F -.15(ve)-.15 G +1.436(rriding the def).15 F 1.436(ault of)-.1 F F4(~/.inputr)5.602 E(c) +-.37 E F0(\(see)5.602 E F1(READLINE)3.936 E F0(belo)144 432 Q(w\).)-.25 +E F3(LANG)108 444 Q F0 1.24(Used to determine the locale cate)7.11 F +1.239(gory for an)-.15 F 3.739(yc)-.15 G(ate)-3.739 E 1.239 +(gory not speci\214cally selected with a v)-.15 F(ariable)-.25 E +(starting with)144 456 Q F3(LC_)2.5 E F0(.)A F3(LC_ALL)108 468 Q F0 .973 +(This v)144 480 R .973(ariable o)-.25 F -.15(ve)-.15 G .973 +(rrides the v).15 F .973(alue of)-.25 F F1(LANG)3.473 E F0 .973(and an) +3.223 F 3.473(yo)-.15 G(ther)-3.473 E F3(LC_)3.473 E F0 -.25(va)3.473 G +.974(riable specifying a locale cate-).25 F(gory)144 492 Q(.)-.65 E F3 +(LC_COLLA)108 504 Q(TE)-.95 E F0 .412(This v)144 516 R .412(ariable det\ +ermines the collation order used when sorting the results of pathname e) +-.25 F(xpansion,)-.15 E 1.464(and determines the beha)144 528 R 1.464 +(vior of range e)-.2 F 1.465(xpressions, equi)-.15 F -.25(va)-.25 G +1.465(lence classes, and collating sequences).25 F(within pathname e)144 +540 Q(xpansion and pattern matching.)-.15 E F3(LC_CTYPE)108 552 Q F0 +1.936(This v)144 564 R 1.936 +(ariable determines the interpretation of characters and the beha)-.25 F +1.935(vior of character classes)-.2 F(within pathname e)144 576 Q +(xpansion and pattern matching.)-.15 E F3(LC_MESSA)108 588 Q(GES)-.55 E +F0(This v)144 600 Q(ariable determines the locale used to translate dou\ +ble-quoted strings preceded by a)-.25 E F3($)2.5 E F0(.)A F3(LC_NUMERIC) +108 612 Q F0(This v)144 624 Q(ariable determines the locale cate)-.25 E +(gory used for number formatting.)-.15 E F3(LINES)108 636 Q F0 1.218 +(Used by the)5.99 F F3(select)3.718 E F0 -.2(bu)3.718 G 1.219(iltin com\ +mand to determine the column length for printing selection lists.).2 F +(Automatically set upon receipt of a)144 648 Q F1(SIGWINCH)2.5 E F2(.)A +F3(MAIL)108 660 Q F0 .188 +(If this parameter is set to a \214le name and the)8.78 F F1(MAILP)2.687 +E -.855(AT)-.666 G(H).855 E F0 -.25(va)2.437 G .187(riable is not set,) +.25 F F3(bash)2.687 E F0 .187(informs the user)2.687 F(of the arri)144 +672 Q -.25(va)-.25 G 2.5(lo).25 G 2.5(fm)-2.5 G +(ail in the speci\214ed \214le.)-2.5 E F3(MAILCHECK)108 684 Q F0 .098 +(Speci\214es ho)144 696 R 2.598(wo)-.25 G .098(ften \(in seconds\)) +-2.598 F F3(bash)2.598 E F0 .098(checks for mail.)2.598 F .098(The def) +5.098 F .098(ault is 60 seconds.)-.1 F .099(When it is time)5.099 F .224 +(to check for mail, the shell does so before displaying the primary pro\ +mpt.)144 708 R .223(If this v)5.223 F .223(ariable is unset,)-.25 F .066 +(or set to a v)144 720 R .066(alue that is not a number greater than or\ + equal to zero, the shell disables mail checking.)-.25 F(GNU Bash-4.1)72 +768 Q(2009 December 29)135.965 E(14)185.955 E 0 Cg EP +%%Page: 15 15 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(MAILP)108 84 Q -.95(AT)-.74 G(H).95 E F0 +2.815(Ac)144 96 S .314(olon-separated list of \214le names to be check) +-2.815 F .314(ed for mail.)-.1 F .314 +(The message to be printed when mail)5.314 F(arri)144 108 Q -.15(ve)-.25 +G 3.42(si).15 G 3.42(nap)-3.42 G .92(articular \214le may be speci\214e\ +d by separating the \214le name from the message with a)-3.42 F 2.808 +(`?'. When)144 120 R .308(used in the te)2.808 F .308 +(xt of the message,)-.15 F F1($_)2.808 E F0 -.15(ex)2.808 G .308 +(pands to the name of the current mail\214le.).15 F(Exam-)5.307 E(ple:) +144 132 Q F1(MAILP)144 144 Q -.95(AT)-.74 G(H).95 E F0(=\010/v)A +(ar/mail/bfox?"Y)-.25 E(ou ha)-1.1 E .3 -.15(ve m)-.2 H +(ail":~/shell\255mail?"$_ has mail!"\010).15 E F1(Bash)144 156 Q F0 .388 +(supplies a def)2.888 F .388(ault v)-.1 F .388(alue for this v)-.25 F +.388(ariable, b)-.25 F .389 +(ut the location of the user mail \214les that it uses is)-.2 F +(system dependent \(e.g., /v)144 168 Q(ar/mail/)-.25 E F1($USER)A F0 +(\).)A F1(OPTERR)108 180 Q F0 .39(If set to the v)144 192 R .39(alue 1,) +-.25 F F1(bash)2.89 E F0 .389(displays error messages generated by the) +2.889 F F1(getopts)2.889 E F0 -.2(bu)2.889 G .389(iltin command \(see).2 +F/F2 9/Times-Bold@0 SF .359(SHELL B)144 204 R(UIL)-.09 E .359 +(TIN COMMANDS)-.828 F F0(belo)2.609 E(w\).)-.25 E F2(OPTERR)5.359 E F0 +.36(is initialized to 1 each time the shell is in)2.609 F -.2(vo)-.4 G +-.1(ke).2 G(d).1 E(or a shell script is e)144 216 Q -.15(xe)-.15 G +(cuted.).15 E F1 -.74(PA)108 228 S(TH)-.21 E F0 .588 +(The search path for commands.)9.91 F .587 +(It is a colon-separated list of directories in which the shell looks) +5.588 F .471(for commands \(see)144 240 R F2 .471(COMMAND EXECUTION) +2.971 F F0(belo)2.722 E 2.972(w\). A)-.25 F .472 +(zero-length \(null\) directory name in the)2.972 F -.25(va)144 252 S +.536(lue of).25 F F2 -.666(PA)3.036 G(TH)-.189 E F0 .535 +(indicates the current directory)2.786 F 5.535(.A)-.65 G .535 +(null directory name may appear as tw)-2.5 F 3.035(oa)-.1 G(djacent) +-3.035 E .867(colons, or as an initial or trailing colon.)144 264 R .868 +(The def)5.868 F .868(ault path is system-dependent, and is set by the) +-.1 F 26.329(administrator who installs)144 276 R F1(bash)28.829 E F0 +31.329(.A)C 26.328(common v)-2.501 F 26.328(alue is)-.25 F/F3 10 +/Courier@0 SF(/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin)144 288 +Q F0(.)A F1(POSIXL)108 300 Q(Y_CORRECT)-.92 E F0 .471(If this v)144 312 +R .471(ariable is in the en)-.25 F .471(vironment when)-.4 F F1(bash) +2.971 E F0 .471(starts, the shell enters)2.971 F/F4 10/Times-Italic@0 SF +.472(posix mode)2.972 F F0 .472(before reading)2.972 F .011 +(the startup \214les, as if the)144 324 R F1(\255\255posix)2.511 E F0 +(in)2.511 E -.2(vo)-.4 G .011(cation option had been supplied.).2 F .011 +(If it is set while the shell is)5.011 F(running,)144 336 Q F1(bash)2.5 +E F0(enables)2.5 E F4(posix mode)2.5 E F0 2.5(,a)C 2.5(si)-2.5 G 2.5(ft) +-2.5 G(he command)-2.5 E F3(set -o posix)2.5 E F0(had been e)2.5 E -.15 +(xe)-.15 G(cuted.).15 E F1(PR)108 348 Q(OMPT_COMMAND)-.3 E F0 +(If set, the v)144 360 Q(alue is e)-.25 E -.15(xe)-.15 G +(cuted as a command prior to issuing each primary prompt.).15 E F1(PR) +108 372 Q(OMPT_DIR)-.3 E(TRIM)-.4 E F0 .676 +(If set to a number greater than zero, the v)144 384 R .676 +(alue is used as the number of trailing directory compo-)-.25 F .923 +(nents to retain when e)144 396 R .923(xpanding the)-.15 F F1(\\w)3.423 +E F0(and)3.423 E F1(\\W)3.423 E F0 .923(prompt string escapes \(see) +3.423 F F2(PR)3.423 E(OMPTING)-.27 E F0(belo)3.173 E(w\).)-.25 E +(Characters remo)144 408 Q -.15(ve)-.15 G 2.5(da).15 G +(re replaced with an ellipsis.)-2.5 E F1(PS1)108 420 Q F0 .064(The v) +19.33 F .065(alue of this parameter is e)-.25 F .065(xpanded \(see)-.15 +F F2(PR)2.565 E(OMPTING)-.27 E F0(belo)2.315 E .065 +(w\) and used as the primary prompt)-.25 F 2.5(string. The)144 432 R +(def)2.5 E(ault v)-.1 E(alue is `)-.25 E(`)-.74 E F1(\\s\255\\v\\$)A F0 +-.74('')2.5 G(.).74 E F1(PS2)108 444 Q F0 .118(The v)19.33 F .118 +(alue of this parameter is e)-.25 F .118(xpanded as with)-.15 F F2(PS1) +2.617 E F0 .117(and used as the secondary prompt string.)2.367 F(The) +5.117 E(def)144 456 Q(ault is `)-.1 E(`)-.74 E F1(>)A F0 -.74('')2.5 G +(.).74 E F1(PS3)108 468 Q F0 1.115(The v)19.33 F 1.115 +(alue of this parameter is used as the prompt for the)-.25 F F1(select) +3.615 E F0 1.116(command \(see)3.616 F F2 1.116(SHELL GRAM-)3.616 F(MAR) +144 480 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E F1(PS4)108 492 Q F0 +.101(The v)19.33 F .101(alue of this parameter is e)-.25 F .101 +(xpanded as with)-.15 F F2(PS1)2.6 E F0 .1(and the v)2.35 F .1 +(alue is printed before each command)-.25 F F1(bash)144 504 Q F0 .291 +(displays during an e)2.791 F -.15(xe)-.15 G .292(cution trace.).15 F +.292(The \214rst character of)5.292 F F2(PS4)2.792 E F0 .292 +(is replicated multiple times, as)2.542 F(necessary)144 516 Q 2.5(,t) +-.65 G 2.5(oi)-2.5 G(ndicate multiple le)-2.5 E -.15(ve)-.25 G +(ls of indirection.).15 E(The def)5 E(ault is `)-.1 E(`)-.74 E F1(+)A F0 +-.74('')2.5 G(.).74 E F1(SHELL)108 528 Q F0 .664 +(The full pathname to the shell is k)144 540 R .664(ept in this en)-.1 F +.664(vironment v)-.4 F 3.164(ariable. If)-.25 F .663 +(it is not set when the shell)3.164 F(starts,)144 552 Q F1(bash)2.5 E F0 +(assigns to it the full pathname of the current user')2.5 E 2.5(sl)-.55 +G(ogin shell.)-2.5 E F1(TIMEFORMA)108 564 Q(T)-.95 E F0 .826(The v)144 +576 R .826 +(alue of this parameter is used as a format string specifying ho)-.25 F +3.327(wt)-.25 G .827(he timing information for)-3.327 F .649 +(pipelines pre\214x)144 588 R .649(ed with the)-.15 F F1(time)3.149 E F0 +(reserv)3.149 E .649(ed w)-.15 F .648(ord should be displayed.)-.1 F +(The)5.648 E F1(%)3.148 E F0 .648(character introduces)3.148 F .711 +(an escape sequence that is e)144 600 R .711(xpanded to a time v)-.15 F +.712(alue or other information.)-.25 F .712(The escape sequences)5.712 F +(and their meanings are as follo)144 612 Q +(ws; the braces denote optional portions.)-.25 E F1(%%)144 630 Q F0 2.5 +(Al)30 G(iteral)-2.5 E F1(%)2.5 E F0(.)A F1(%[)144 642 Q F4(p)A F1 +(][l]R)A F0(The elapsed time in seconds.)11.68 E F1(%[)144 654 Q F4(p)A +F1(][l]U)A F0(The number of CPU seconds spent in user mode.)11.68 E F1 +(%[)144 666 Q F4(p)A F1(][l]S)A F0 +(The number of CPU seconds spent in system mode.)13.34 E F1(%P)144 678 Q +F0(The CPU percentage, computed as \(%U + %S\) / %R.)33.89 E .87 +(The optional)144 694.8 R F4(p)3.37 E F0 .87(is a digit specifying the) +3.37 F F4(pr)3.37 E(ecision)-.37 E F0 3.37(,t)C .87 +(he number of fractional digits after a decimal)-3.37 F 2.525(point. A) +144 706.8 R -.25(va)2.525 G .025 +(lue of 0 causes no decimal point or fraction to be output.).25 F .026 +(At most three places after the)5.025 F .538 +(decimal point may be speci\214ed; v)144 718.8 R .538(alues of)-.25 F F4 +(p)3.038 E F0 .537(greater than 3 are changed to 3.)3.037 F(If)5.537 E +F4(p)3.037 E F0 .537(is not speci\214ed,)3.037 F(the v)144 730.8 Q +(alue 3 is used.)-.25 E(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E +(15)185.955 E 0 Cg EP +%%Page: 16 16 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E .667(The optional)144 84 R/F1 10/Times-Bold@0 SF(l)3.167 E F0 +.668(speci\214es a longer format, including minutes, of the form)3.168 F +/F2 10/Times-Italic@0 SF(MM)3.168 E F0(m)A F2(SS)A F0(.)A F2(FF)A F0 +3.168(s. The)B -.25(va)3.168 G(lue).25 E(of)144 96 Q F2(p)2.5 E F0 +(determines whether or not the fraction is included.)2.5 E .001 +(If this v)144 112.8 R .001(ariable is not set,)-.25 F F1(bash)2.501 E +F0 .001(acts as if it had the v)2.501 F(alue)-.25 E F1($\010\\nr)2.5 E +(eal\\t%3lR\\nuser\\t%3lU\\nsys%3lS\010)-.18 E F0(.)A .494(If the v)144 +124.8 R .494(alue is null, no timing information is displayed.)-.25 F +2.994(At)5.494 G .494(railing ne)-2.994 F .494 +(wline is added when the for)-.25 F(-)-.2 E(mat string is displayed.)144 +136.8 Q F1(TMOUT)108 153.6 Q F0 .941(If set to a v)144 165.6 R .941 +(alue greater than zero,)-.25 F/F3 9/Times-Bold@0 SF(TMOUT)3.441 E F0 +.941(is treated as the def)3.191 F .941(ault timeout for the)-.1 F F1 +-.18(re)3.441 G(ad).18 E F0 -.2(bu)3.441 G(iltin.).2 E(The)144 177.6 Q +F1(select)2.81 E F0 .31(command terminates if input does not arri)2.81 F +.611 -.15(ve a)-.25 H(fter).15 E F3(TMOUT)2.811 E F0 .311 +(seconds when input is com-)2.561 F .886(ing from a terminal.)144 189.6 +R .886(In an interacti)5.886 F 1.185 -.15(ve s)-.25 H .885(hell, the v) +.15 F .885(alue is interpreted as the number of seconds to)-.25 F -.1 +(wa)144 201.6 S .546(it for input after issuing the primary prompt.).1 F +F1(Bash)5.546 E F0 .546(terminates after w)3.046 F .546 +(aiting for that number of)-.1 F(seconds if input does not arri)144 +213.6 Q -.15(ve)-.25 G(.).15 E F1(TMPDIR)108 230.4 Q F0 .274(If set,)144 +242.4 R F1(Bash)2.774 E F0 .274(uses its v)2.774 F .274 +(alue as the name of a directory in which)-.25 F F1(Bash)2.773 E F0 .273 +(creates temporary \214les for the)2.773 F(shell')144 254.4 Q 2.5(su) +-.55 G(se.)-2.5 E F1(auto_r)108 271.2 Q(esume)-.18 E F0 .53(This v)144 +283.2 R .53(ariable controls ho)-.25 F 3.03(wt)-.25 G .531 +(he shell interacts with the user and job control.)-3.03 F .531 +(If this v)5.531 F .531(ariable is set,)-.25 F .539(single w)144 295.2 R +.538(ord simple commands without redirections are treated as candidates\ + for resumption of an)-.1 F -.15(ex)144 307.2 S .366(isting stopped job) +.15 F 5.366(.T)-.4 G .366(here is no ambiguity allo)-5.366 F .366 +(wed; if there is more than one job be)-.25 F .367(ginning with)-.15 F +1.125(the string typed, the job most recently accessed is selected.)144 +319.2 R(The)6.125 E F2(name)3.985 E F0 1.124(of a stopped job, in this) +3.805 F(conte)144 331.2 Q 1.132 +(xt, is the command line used to start it.)-.15 F 1.133(If set to the v) +6.133 F(alue)-.25 E F2 -.2(ex)3.633 G(act).2 E F0 3.633(,t).68 G 1.133 +(he string supplied must)-3.633 F .625 +(match the name of a stopped job e)144 343.2 R .624(xactly; if set to) +-.15 F F2(substring)3.124 E F0 3.124(,t).22 G .624 +(he string supplied needs to match a)-3.124 F .884 +(substring of the name of a stopped job)144 355.2 R 5.884(.T)-.4 G(he) +-5.884 E F2(substring)3.724 E F0 -.25(va)3.604 G .885(lue pro).25 F .885 +(vides functionality analogous to)-.15 F(the)144 367.2 Q F1(%?)3.334 E +F0 .834(job identi\214er \(see)5.834 F F3 .834(JOB CONTR)3.334 F(OL)-.27 +E F0(belo)3.084 E 3.334(w\). If)-.25 F .834(set to an)3.334 F 3.334(yo) +-.15 G .834(ther v)-3.334 F .833(alue, the supplied string)-.25 F .315 +(must be a pre\214x of a stopped job')144 379.2 R 2.816(sn)-.55 G .316 +(ame; this pro)-2.816 F .316(vides functionality analogous to the)-.15 F +F1(%)2.816 E F2(string)A F0(job)2.816 E(identi\214er)144 391.2 Q(.)-.55 +E F1(histchars)108 408 Q F0 2.07(The tw)144 420 R 4.57(oo)-.1 G 4.57(rt) +-4.57 G 2.07(hree characters which control history e)-4.57 F 2.07 +(xpansion and tok)-.15 F 2.07(enization \(see)-.1 F F3(HIST)4.569 E(OR) +-.162 E(Y)-.315 E(EXP)144 432 Q(ANSION)-.666 E F0(belo)3.465 E 3.715 +(w\). The)-.25 F 1.215(\214rst character is the)3.715 F F2 1.216 +(history e)3.715 F(xpansion)-.2 E F0(character)3.716 E 3.716(,t)-.4 G +1.216(he character which)-3.716 F .798(signals the start of a history e) +144 444 R .798(xpansion, normally `)-.15 F F1(!)A F0 3.298('. The)B .798 +(second character is the)3.298 F F2(quic)3.298 E 3.298(ks)-.2 G +(ubstitu-)-3.298 E(tion)144 456 Q F0(character)2.739 E 2.739(,w)-.4 G +.239(hich is used as shorthand for re-running the pre)-2.739 F .24 +(vious command entered, substitut-)-.25 F .576 +(ing one string for another in the command.)144 468 R .575(The def)5.575 +F .575(ault is `)-.1 F F1(^)A F0 3.075('. The)B .575 +(optional third character is the)3.075 F .223(character which indicates\ + that the remainder of the line is a comment when found as the \214rst \ +char)144 480 R(-)-.2 E 1.294(acter of a w)144 492 R 1.294 +(ord, normally `)-.1 F F1(#)A F0 3.794('. The)B 1.293 +(history comment character causes history substitution to be)3.794 F +.379(skipped for the remaining w)144 504 R .379(ords on the line.)-.1 F +.38(It does not necessarily cause the shell parser to treat)5.379 F +(the rest of the line as a comment.)144 516 Q F1(Arrays)87 532.8 Q(Bash) +108 544.8 Q F0(pro)3.391 E .891(vides one-dimensional inde)-.15 F -.15 +(xe)-.15 G 3.391(da).15 G .891(nd associati)-3.391 F 1.191 -.15(ve a) +-.25 H .891(rray v).15 F 3.391(ariables. An)-.25 F 3.391(yv)-.15 G .89 +(ariable may be used as an)-3.641 F(inde)108 556.8 Q -.15(xe)-.15 G +2.573(da).15 G .073(rray; the)-2.573 F F1(declar)2.573 E(e)-.18 E F0 -.2 +(bu)2.573 G .073(iltin will e).2 F .073(xplicitly declare an array)-.15 +F 5.073(.T)-.65 G .074(here is no maximum limit on the size of)-5.073 F +.329(an array)108 568.8 R 2.829(,n)-.65 G .329(or an)-2.829 F 2.829(yr) +-.15 G .329(equirement that members be inde)-2.829 F -.15(xe)-.15 G +2.829(do).15 G 2.829(ra)-2.829 G .328(ssigned contiguously)-2.829 F +5.328(.I)-.65 G(nde)-5.328 E -.15(xe)-.15 G 2.828(da).15 G .328 +(rrays are refer)-2.828 F(-)-.2 E 1.386(enced using inte)108 580.8 R +1.386(gers \(including arithmetic e)-.15 F 3.887(xpressions\) and)-.15 F +1.387(are zero-based; associati)3.887 F 1.687 -.15(ve a)-.25 H 1.387 +(rrays are refer).15 F(-)-.2 E(enced using arbitrary strings.)108 592.8 +Q 2.463(An inde)108 609.6 R -.15(xe)-.15 G 4.963(da).15 G 2.463 +(rray is created automatically if an)-4.963 F 4.963(yv)-.15 G 2.462 +(ariable is assigned to using the syntax)-5.213 F F2(name)4.962 E F0([)A +F2(sub-)A(script)108 621.6 Q F0(]=)A F2(value)A F0 5.682(.T)C(he)-5.682 +E F2(subscript)3.522 E F0 .682(is treated as an arithmetic e)3.862 F +.682(xpression that must e)-.15 F -.25(va)-.25 G .682 +(luate to a number greater).25 F .75(than or equal to zero.)108 633.6 R +2.349 -.8(To e)5.749 H .749(xplicitly declare an inde).65 F -.15(xe)-.15 +G 3.249(da).15 G(rray)-3.249 E 3.249(,u)-.65 G(se)-3.249 E F1(declar) +3.249 E 3.249<65ad>-.18 G(a)-3.249 E F2(name)3.249 E F0(\(see)3.249 E F3 +.749(SHELL B)3.249 F(UIL)-.09 E(TIN)-.828 E(COMMANDS)108 645.6 Q F0 +(belo)2.25 E(w\).)-.25 E F1(declar)5 E 2.5<65ad>-.18 G(a)-2.5 E F2(name) +2.5 E F1([)A F2(subscript)A F1(])A F0(is also accepted; the)2.5 E F2 +(subscript)2.5 E F0(is ignored.)2.5 E(Associati)108 662.4 Q .3 -.15 +(ve a)-.25 H(rrays are created using).15 E F1(declar)2.5 E 2.5<65ad>-.18 +G(A)-2.5 E F2(name)2.5 E F0(.)A(Attrib)108 679.2 Q .94 +(utes may be speci\214ed for an array v)-.2 F .941(ariable using the) +-.25 F F1(declar)3.441 E(e)-.18 E F0(and)3.441 E F1 -.18(re)3.441 G +(adonly).18 E F0 -.2(bu)3.441 G 3.441(iltins. Each).2 F(attrib)3.441 E +(ute)-.2 E(applies to all members of an array)108 691.2 Q(.)-.65 E 1.647 +(Arrays are assigned to using compound assignments of the form)108 708 R +F2(name)4.147 E F0(=)A F1(\()A F0 -.25(va)C(lue).25 E F2(1)A F0 1.647 +(... v)4.147 F(alue)-.25 E F2(n)A F1(\))A F0 4.147(,w)C 1.647(here each) +-4.147 F F2(value)108 720 Q F0 .122(is of the form [)2.622 F F2 +(subscript)A F0(]=)A F2(string)A F0 5.122(.I)C(nde)-5.122 E -.15(xe)-.15 +G 2.622(da).15 G .122(rray assignments do not require the brack)-2.622 F +.122(et and subscript.)-.1 F(GNU Bash-4.1)72 768 Q(2009 December 29) +135.965 E(16)185.955 E 0 Cg EP +%%Page: 17 17 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E .164(When assigning to inde)108 84 R -.15(xe)-.15 G 2.663(da).15 +G .163(rrays, if the optional brack)-2.663 F .163 +(ets and subscript are supplied, that inde)-.1 F 2.663(xi)-.15 G 2.663 +(sa)-2.663 G(ssigned)-2.663 E 1.41(to; otherwise the inde)108 96 R 3.91 +(xo)-.15 G 3.91(ft)-3.91 G 1.41(he element assigned is the last inde) +-3.91 F 3.911(xa)-.15 G 1.411(ssigned to by the statement plus one.) +-3.911 F(Inde)108 108 Q(xing starts at zero.)-.15 E +(When assigning to an associati)108 124.8 Q .3 -.15(ve a)-.25 H(rray).15 +E 2.5(,t)-.65 G(he subscript is required.)-2.5 E .24 +(This syntax is also accepted by the)108 141.6 R/F1 10/Times-Bold@0 SF +(declar)2.74 E(e)-.18 E F0 -.2(bu)2.739 G 2.739(iltin. Indi).2 F .239 +(vidual array elements may be assigned to using the)-.25 F/F2 10 +/Times-Italic@0 SF(name)108 153.6 Q F0([)A F2(subscript)A F0(]=)A F2 +(value)A F0(syntax introduced abo)2.5 E -.15(ve)-.15 G(.).15 E(An)108 +170.4 Q 3.575(ye)-.15 G 1.075 +(lement of an array may be referenced using ${)-3.575 F F2(name)A F0([)A +F2(subscript)A F0 3.575(]}. The)B 1.076(braces are required to a)3.576 F +-.2(vo)-.2 G(id).2 E 1.542(con\215icts with pathname e)108 182.4 R 4.041 +(xpansion. If)-.15 F F2(subscript)4.041 E F0(is)4.041 E F1(@)4.041 E F0 +(or)4.041 E F1(*)4.041 E F0 4.041(,t)C 1.541(he w)-4.041 F 1.541(ord e) +-.1 F 1.541(xpands to all members of)-.15 F F2(name)4.041 E F0(.)A 1.056 +(These subscripts dif)108 194.4 R 1.056(fer only when the w)-.25 F 1.057 +(ord appears within double quotes.)-.1 F 1.057(If the w)6.057 F 1.057 +(ord is double-quoted,)-.1 F(${)108 206.4 Q F2(name)A F0 .521([*]} e)B +.521(xpands to a single w)-.15 F .521(ord with the v)-.1 F .52 +(alue of each array member separated by the \214rst character)-.25 F +1.374(of the)108 218.4 R/F3 9/Times-Bold@0 SF(IFS)3.874 E F0 1.374 +(special v)3.624 F 1.375(ariable, and ${)-.25 F F2(name)A F0 1.375 +([@]} e)B 1.375(xpands each element of)-.15 F F2(name)3.875 E F0 1.375 +(to a separate w)3.875 F 3.875(ord. When)-.1 F 2.028 +(there are no array members, ${)108 230.4 R F2(name)A F0 2.028([@]} e)B +2.028(xpands to nothing.)-.15 F 2.027(If the double-quoted e)7.028 F +2.027(xpansion occurs)-.15 F .758(within a w)108 242.4 R .759 +(ord, the e)-.1 F .759 +(xpansion of the \214rst parameter is joined with the be)-.15 F .759 +(ginning part of the original w)-.15 F(ord,)-.1 E .516(and the e)108 +254.4 R .516(xpansion of the last parameter is joined with the last par\ +t of the original w)-.15 F 3.015(ord. This)-.1 F .515(is analogous)3.015 +F .227(to the e)108 266.4 R .228(xpansion of the special parameters)-.15 +F F1(*)2.728 E F0(and)2.728 E F1(@)2.728 E F0(\(see)2.728 E F1 .228 +(Special P)2.728 F(arameters)-.1 E F0(abo)2.728 E -.15(ve)-.15 G 2.728 +(\). ${#).15 F F2(name)A F0([)A F2(subscript)A F0(]})A -.15(ex)108 278.4 +S .886(pands to the length of ${).15 F F2(name)A F0([)A F2(subscript)A +F0 3.386(]}. If)B F2(subscript)3.386 E F0(is)3.386 E F1(*)3.386 E F0(or) +3.386 E F1(@)3.386 E F0 3.386(,t)C .886(he e)-3.386 F .886 +(xpansion is the number of ele-)-.15 F .462(ments in the array)108 290.4 +R 5.462(.R)-.65 G .462(eferencing an array v)-5.462 F .463 +(ariable without a subscript is equi)-.25 F -.25(va)-.25 G .463 +(lent to referencing the array).25 F(with a subscript of 0.)108 302.4 Q +.168(An array v)108 319.2 R .168 +(ariable is considered set if a subscript has been assigned a v)-.25 F +2.668(alue. The)-.25 F .168(null string is a v)2.668 F .168(alid v)-.25 +F(alue.)-.25 E(The)108 336 Q F1(unset)2.766 E F0 -.2(bu)2.766 G .267 +(iltin is used to destro).2 F 2.767(ya)-.1 G(rrays.)-2.767 E F1(unset) +5.267 E F2(name)2.767 E F0([)A F2(subscript)A F0 2.767(]d)C(estro)-2.767 +E .267(ys the array element at inde)-.1 F(x)-.15 E F2(sub-)2.767 E +(script)108 348 Q F0 6.205(.C)C 1.205(are must be tak)-6.205 F 1.205 +(en to a)-.1 F -.2(vo)-.2 G 1.205(id unw).2 F 1.205(anted side ef)-.1 F +1.204(fects caused by pathname e)-.25 F(xpansion.)-.15 E F1(unset)6.204 +E F2(name)3.704 E F0(,)A(where)108 360 Q F2(name)2.5 E F0(is an array) +2.5 E 2.5(,o)-.65 G(r)-2.5 E F1(unset)2.5 E F2(name)2.5 E F0([)A F2 +(subscript)A F0(], where)A F2(subscript)2.5 E F0(is)2.5 E F1(*)2.5 E F0 +(or)2.5 E F1(@)2.5 E F0 2.5(,r)C(emo)-2.5 E -.15(ve)-.15 G 2.5(st).15 G +(he entire array)-2.5 E(.)-.65 E(The)108 376.8 Q F1(declar)3.573 E(e) +-.18 E F0(,)A F1(local)3.573 E F0 3.573(,a)C(nd)-3.573 E F1 -.18(re) +3.573 G(adonly).18 E F0 -.2(bu)3.573 G 1.073(iltins each accept a).2 F +F13.573 E F0 1.073(option to specify an inde)3.573 F -.15(xe)-.15 +G 3.574(da).15 G 1.074(rray and a)-3.574 F F13.574 E F0 .752 +(option to specify an associati)108 388.8 R 1.052 -.15(ve a)-.25 H(rray) +.15 E 5.752(.T)-.65 G(he)-5.752 E F1 -.18(re)3.252 G(ad).18 E F0 -.2(bu) +3.252 G .752(iltin accepts a).2 F F13.252 E F0 .751 +(option to assign a list of w)3.251 F .751(ords read)-.1 F .502 +(from the standard input to an array)108 400.8 R 5.502(.T)-.65 G(he) +-5.502 E F1(set)3.002 E F0(and)3.002 E F1(declar)3.002 E(e)-.18 E F0 -.2 +(bu)3.002 G .502(iltins display array v).2 F .502(alues in a w)-.25 F +.503(ay that allo)-.1 F(ws)-.25 E(them to be reused as assignments.)108 +412.8 Q/F4 10.95/Times-Bold@0 SF(EXP)72 429.6 Q(ANSION)-.81 E F0 .76(Ex\ +pansion is performed on the command line after it has been split into w) +108 441.6 R 3.26(ords. There)-.1 F .76(are se)3.26 F -.15(ve)-.25 G 3.26 +(nk).15 G .76(inds of)-3.26 F -.15(ex)108 453.6 S .369 +(pansion performed:).15 F F2(br)2.869 E .369(ace e)-.15 F(xpansion)-.2 E +F0(,).24 E F2 .369(tilde e)2.869 F(xpansion)-.2 E F0(,).24 E F2(par) +2.869 E .369(ameter and variable e)-.15 F(xpansion)-.2 E F0(,).24 E F2 +.37(command sub-)2.869 F(stitution)108 465.6 Q F0(,).24 E F2 +(arithmetic e)2.5 E(xpansion)-.2 E F0(,).24 E F2(wor)2.5 E 2.5(ds)-.37 G +(plitting)-2.5 E F0 2.5(,a).22 G(nd)-2.5 E F2(pathname e)2.5 E(xpansion) +-.2 E F0(.).24 E .471(The order of e)108 482.4 R .471 +(xpansions is: brace e)-.15 F .471(xpansion, tilde e)-.15 F .471 +(xpansion, parameter)-.15 F 2.971(,v)-.4 G .47(ariable and arithmetic e) +-3.221 F(xpansion)-.15 E +(and command substitution \(done in a left-to-right f)108 494.4 Q +(ashion\), w)-.1 E(ord splitting, and pathname e)-.1 E(xpansion.)-.15 E +(On systems that can support it, there is an additional e)108 511.2 Q +(xpansion a)-.15 E -.25(va)-.2 G(ilable:).25 E F2(pr)2.5 E +(ocess substitution)-.45 E F0(.)A 1.486(Only brace e)108 528 R 1.486 +(xpansion, w)-.15 F 1.486(ord splitting, and pathname e)-.1 F 1.487 +(xpansion can change the number of w)-.15 F 1.487(ords of the)-.1 F -.15 +(ex)108 540 S 1.165(pansion; other e).15 F 1.165(xpansions e)-.15 F +1.165(xpand a single w)-.15 F 1.165(ord to a single w)-.1 F 3.665 +(ord. The)-.1 F 1.164(only e)3.665 F 1.164(xceptions to this are the) +-.15 F -.15(ex)108 552 S(pansions of ").15 E F1($@)A F0 2.5("a)C(nd ") +-2.5 E F1(${)A F2(name)A F1([@]})A F0 2.5("a)C 2.5(se)-2.5 G +(xplained abo)-2.65 E .3 -.15(ve \()-.15 H(see).15 E F3 -.666(PA)2.5 G +(RAMETERS).666 E/F5 9/Times-Roman@0 SF(\).)A F1(Brace Expansion)87 568.8 +Q F2(Br)108.58 580.8 Q .606(ace e)-.15 F(xpansion)-.2 E F0 .606 +(is a mechanism by which arbitrary strings may be generated.)3.346 F +.606(This mechanism is similar)5.606 F(to)108 592.8 Q F2 .415 +(pathname e)2.915 F(xpansion)-.2 E F0 2.915(,b)C .415 +(ut the \214lenames generated need not e)-3.115 F 2.915(xist. P)-.15 F +.415(atterns to be brace e)-.15 F .415(xpanded tak)-.15 F 2.915(et)-.1 G +(he)-2.915 E .151(form of an optional)108 604.8 R F2(pr)2.651 E(eamble) +-.37 E F0 2.651(,f).18 G(ollo)-2.651 E .151 +(wed by either a series of comma-separated strings or a sequence e)-.25 +F(xpres-)-.15 E .563(sion between a pair of braces, follo)108 616.8 R +.563(wed by an optional)-.25 F F2(postscript)3.063 E F0 5.563(.T).68 G +.563(he preamble is pre\214x)-5.563 F .563(ed to each string)-.15 F .659 +(contained within the braces, and the postscript is then appended to ea\ +ch resulting string, e)108 628.8 R .659(xpanding left to)-.15 F(right.) +108 640.8 Q .719(Brace e)108 657.6 R .719(xpansions may be nested.)-.15 +F .719(The results of each e)5.719 F .719 +(xpanded string are not sorted; left to right order is)-.15 F(preserv) +108 669.6 Q 2.5(ed. F)-.15 F(or e)-.15 E(xample, a)-.15 E F1({)A F0 +(d,c,b)A F1(})A F0 2.5(ee)C(xpands into `ade ace abe'.)-2.65 E 3.242(As) +108 686.4 S .742(equence e)-3.242 F .742(xpression tak)-.15 F .742 +(es the form)-.1 F F1({)3.242 E F2(x)A F1(..)A F2(y)A F1([..)A F2(incr)A +F1(]})A F0 3.242(,w)C(here)-3.242 E F2(x)3.242 E F0(and)3.243 E F2(y) +3.243 E F0 .743(are either inte)3.243 F .743(gers or single characters,) +-.15 F(and)108 698.4 Q F2(incr)3.032 E F0 3.032(,a)C 3.032(no)-3.032 G +.532(ptional increment, is an inte)-3.032 F(ger)-.15 E 5.532(.W)-.55 G +.532(hen inte)-5.532 F .532(gers are supplied, the e)-.15 F .532 +(xpression e)-.15 F .531(xpands to each)-.15 F .077(number between)108 +710.4 R F2(x)2.577 E F0(and)2.577 E F2(y)2.577 E F0 2.577(,i)C(nclusi) +-2.577 E -.15(ve)-.25 G 5.077(.S).15 G .077(upplied inte)-5.077 F .077 +(gers may be pre\214x)-.15 F .077(ed with)-.15 F F2(0)2.577 E F0 .078 +(to force each term to ha)2.578 F .378 -.15(ve t)-.2 H(he).15 E .015 +(same width.)108 722.4 R .015(When either)5.015 F F2(x)2.515 E F0(or) +2.515 E F2(y)2.515 E F0(be)2.515 E .014(gins with a zero, the shell att\ +empts to force all generated terms to contain)-.15 F(GNU Bash-4.1)72 768 +Q(2009 December 29)135.965 E(17)185.955 E 0 Cg EP +%%Page: 18 18 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E 1.143(the same number of digits, zero-padding where necessary)108 +84 R 6.143(.W)-.65 G 1.143(hen characters are supplied, the e)-6.143 F +(xpression)-.15 E -.15(ex)108 96 S .542(pands to each character le).15 F +.542(xicographically between)-.15 F/F1 10/Times-Italic@0 SF(x)3.042 E F0 +(and)3.042 E F1(y)3.042 E F0 3.042(,i)C(nclusi)-3.042 E -.15(ve)-.25 G +5.542(.N).15 G .542(ote that both)-5.542 F F1(x)3.041 E F0(and)3.041 E +F1(y)3.041 E F0 .541(must be of)3.041 F .182(the same type.)108 108 R +.182(When the increment is supplied, it is used as the dif)5.182 F .183 +(ference between each term.)-.25 F .183(The def)5.183 F(ault)-.1 E +(increment is 1 or -1 as appropriate.)108 120 Q .582(Brace e)108 136.8 R +.582(xpansion is performed before an)-.15 F 3.082(yo)-.15 G .581(ther e) +-3.082 F .581(xpansions, and an)-.15 F 3.081(yc)-.15 G .581 +(haracters special to other e)-3.081 F(xpansions)-.15 E .015 +(are preserv)108 148.8 R .015(ed in the result.)-.15 F .015 +(It is strictly te)5.015 F(xtual.)-.15 E/F2 10/Times-Bold@0 SF(Bash) +5.016 E F0 .016(does not apply an)2.516 F 2.516(ys)-.15 G .016 +(yntactic interpretation to the con-)-2.516 F(te)108 160.8 Q +(xt of the e)-.15 E(xpansion or the te)-.15 E(xt between the braces.) +-.15 E 3.633(Ac)108 177.6 S 1.133(orrectly-formed brace e)-3.633 F 1.132 +(xpansion must contain unquoted opening and closing braces, and at leas\ +t one)-.15 F 3.44(unquoted comma or a v)108 189.6 R 3.441 +(alid sequence e)-.25 F 5.941(xpression. An)-.15 F 5.941(yi)-.15 G 3.441 +(ncorrectly formed brace e)-5.941 F 3.441(xpansion is left)-.15 F 2.755 +(unchanged. A)108 201.6 R F2({)2.755 E F0(or)2.755 E F2(,)2.755 E F0 +.255(may be quoted with a backslash to pre)2.755 F -.15(ve)-.25 G .255 +(nt its being considered part of a brace e).15 F(xpres-)-.15 E 2.91 +(sion. T)108 213.6 R 2.91(oa)-.8 G -.2(vo)-3.11 G .41 +(id con\215icts with parameter e).2 F .411(xpansion, the string)-.15 F +F2(${)2.911 E F0 .411(is not considered eligible for brace e)2.911 F +(xpan-)-.15 E(sion.)108 225.6 Q 1.476(This construct is typically used \ +as shorthand when the common pre\214x of the strings to be generated is) +108 242.4 R(longer than in the abo)108 254.4 Q .3 -.15(ve ex)-.15 H +(ample:).15 E(mkdir /usr/local/src/bash/{old,ne)144 271.2 Q -.65(w,)-.25 +G(dist,b).65 E(ugs})-.2 E(or)108 283.2 Q(cho)144 295.2 Q +(wn root /usr/{ucb/{e)-.25 E(x,edit},lib/{e)-.15 E(x?.?*,ho)-.15 E(w_e) +-.25 E(x}})-.15 E .618(Brace e)108 312 R .618 +(xpansion introduces a slight incompatibility with historical v)-.15 F +.618(ersions of)-.15 F F2(sh)3.118 E F0(.)A F2(sh)5.618 E F0 .618 +(does not treat open-)3.118 F .248 +(ing or closing braces specially when the)108 324 R 2.748(ya)-.15 G .247 +(ppear as part of a w)-2.748 F .247(ord, and preserv)-.1 F .247 +(es them in the output.)-.15 F F2(Bash)5.247 E F0(remo)108 336 Q -.15 +(ve)-.15 G 3.53(sb).15 G 1.03(races from w)-3.53 F 1.03 +(ords as a consequence of brace e)-.1 F 3.53(xpansion. F)-.15 F 1.03 +(or e)-.15 F 1.03(xample, a w)-.15 F 1.03(ord entered to)-.1 F F2(sh) +3.53 E F0(as)3.53 E F1(\214le{1,2})108 348 Q F0 .515 +(appears identically in the output.)3.015 F .515(The same w)5.515 F .515 +(ord is output as)-.1 F F1 .514(\214le1 \214le2)4.925 F F0 .514(after e) +3.034 F .514(xpansion by)-.15 F F2(bash)3.014 E F0(.)A .436 +(If strict compatibility with)108 360 R F2(sh)2.936 E F0 .436 +(is desired, start)2.936 F F2(bash)2.936 E F0 .436(with the)2.936 F F2 +(+B)2.936 E F0 .436(option or disable brace e)2.936 F .437 +(xpansion with the)-.15 F F2(+B)108 372 Q F0(option to the)2.5 E F2(set) +2.5 E F0(command \(see)2.5 E/F3 9/Times-Bold@0 SF(SHELL B)2.5 E(UIL)-.09 +E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F2 -.18(Ti)87 388.8 S +(lde Expansion).18 E F0 1.087(If a w)108 400.8 R 1.087(ord be)-.1 F +1.087(gins with an unquoted tilde character \(`)-.15 F F2(~)A F0 1.086 +('\), all of the characters preceding the \214rst unquoted)B .185(slash\ + \(or all characters, if there is no unquoted slash\) are considered a) +108 412.8 R F1(tilde-pr)2.685 E(e\214x)-.37 E F0 5.185(.I)C 2.685(fn) +-5.185 G .185(one of the characters)-2.685 F .726(in the tilde-pre\214x\ + are quoted, the characters in the tilde-pre\214x follo)108 424.8 R .725 +(wing the tilde are treated as a possible)-.25 F F1(lo)108 436.8 Q .522 +(gin name)-.1 F F0 5.522(.I)C 3.022(ft)-5.522 G .522 +(his login name is the null string, the tilde is replaced with the v) +-3.022 F .523(alue of the shell parameter)-.25 F F3(HOME)108 448.8 Q/F4 +9/Times-Roman@0 SF(.)A F0(If)4.787 E F3(HOME)2.787 E F0 .287 +(is unset, the home directory of the user e)2.537 F -.15(xe)-.15 G .286 +(cuting the shell is substituted instead.).15 F(Other)5.286 E(-)-.2 E(w\ +ise, the tilde-pre\214x is replaced with the home directory associated \ +with the speci\214ed login name.)108 460.8 Q .092 +(If the tilde-pre\214x is a `~+', the v)108 477.6 R .092 +(alue of the shell v)-.25 F(ariable)-.25 E F3(PWD)2.592 E F0 .092 +(replaces the tilde-pre\214x.)2.342 F .093(If the tilde-pre\214x is) +5.093 F 3.404(a`)108 489.6 S .904(~\255', the v)-3.404 F .904 +(alue of the shell v)-.25 F(ariable)-.25 E F3(OLDPWD)3.404 E F4(,)A F0 +.904(if it is set, is substituted.)3.154 F .903(If the characters follo) +5.903 F .903(wing the)-.25 F 1.641 +(tilde in the tilde-pre\214x consist of a number)108 501.6 R F1(N)4.141 +E F0 4.142(,o)C 1.642(ptionally pre\214x)-4.142 F 1.642 +(ed by a `+' or a `\255', the tilde-pre\214x is)-.15 F 1.438(replaced w\ +ith the corresponding element from the directory stack, as it w)108 +513.6 R 1.437(ould be displayed by the)-.1 F F2(dirs)3.937 E F0 -.2(bu) +108 525.6 S .454(iltin in).2 F -.2(vo)-.4 G -.1(ke).2 G 2.954(dw).1 G +.454(ith the tilde-pre\214x as an ar)-2.954 F 2.954(gument. If)-.18 F +.454(the characters follo)2.954 F .455 +(wing the tilde in the tilde-pre\214x)-.25 F +(consist of a number without a leading `+' or `\255', `+' is assumed.) +108 537.6 Q(If the login name is in)108 554.4 Q -.25(va)-.4 G +(lid, or the tilde e).25 E(xpansion f)-.15 E(ails, the w)-.1 E +(ord is unchanged.)-.1 E .167(Each v)108 571.2 R .167 +(ariable assignment is check)-.25 F .167(ed for unquoted tilde-pre\214x) +-.1 F .167(es immediately follo)-.15 F .167(wing a)-.25 F F2(:)2.667 E +F0 .167(or the \214rst)2.667 F F2(=)2.666 E F0 5.166(.I)C(n)-5.166 E +.281(these cases, tilde e)108 583.2 R .282(xpansion is also performed.) +-.15 F(Consequently)5.282 E 2.782(,o)-.65 G .282 +(ne may use \214le names with tildes in assign-)-2.782 F(ments to)108 +595.2 Q F3 -.666(PA)2.5 G(TH)-.189 E F4(,)A F3(MAILP)2.25 E -.855(AT) +-.666 G(H).855 E F4(,)A F0(and)2.25 E F3(CDP)2.5 E -.855(AT)-.666 G(H) +.855 E F4(,)A F0(and the shell assigns the e)2.25 E(xpanded v)-.15 E +(alue.)-.25 E F2 -.1(Pa)87 612 S(rameter Expansion).1 E F0 1.606(The `) +108 624 R F2($)A F0 4.106('c)C 1.606(haracter introduces parameter e) +-4.106 F 1.605(xpansion, command substitution, or arithmetic e)-.15 F +4.105(xpansion. The)-.15 F .406(parameter name or symbol to be e)108 636 +R .407(xpanded may be enclosed in braces, which are optional b)-.15 F +.407(ut serv)-.2 F 2.907(et)-.15 G 2.907(op)-2.907 G(ro-)-2.907 E .033 +(tect the v)108 648 R .033(ariable to be e)-.25 F .033 +(xpanded from characters immediately follo)-.15 F .032 +(wing it which could be interpreted as part)-.25 F(of the name.)108 660 +Q 1.189 +(When braces are used, the matching ending brace is the \214rst `)108 +676.8 R F2(})A F0 3.69('n)C 1.19(ot escaped by a backslash or within a) +-3.69 F 2.15(quoted string, and not within an embedded arithmetic e)108 +688.8 R 2.15(xpansion, command substitution, or parameter)-.15 F -.15 +(ex)108 700.8 S(pansion.).15 E(GNU Bash-4.1)72 768 Q(2009 December 29) +135.965 E(18)185.955 E 0 Cg EP +%%Page: 19 19 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(${)108 84 Q/F1 10/Times-Italic@0 SF(par)A(ameter)-.15 E F0(})A +1.204(The v)144 96 R 1.204(alue of)-.25 F F1(par)3.704 E(ameter)-.15 E +F0 1.204(is substituted.)3.704 F 1.204(The braces are required when) +6.204 F F1(par)4.955 E(ameter)-.15 E F0 1.205(is a positional)4.435 F +.264(parameter with more than one digit, or when)144 108 R F1(par)4.014 +E(ameter)-.15 E F0 .264(is follo)3.494 F .264 +(wed by a character which is not to)-.25 F +(be interpreted as part of its name.)144 120 Q .685 +(If the \214rst character of)108 136.8 R F1(par)3.185 E(ameter)-.15 E F0 +.685(is an e)3.185 F .685(xclamation point \()-.15 F/F2 10/Times-Bold@0 +SF(!)A F0 .685(\), a le)B -.15(ve)-.25 G 3.186(lo).15 G 3.186(fv)-3.186 +G .686(ariable indirection is introduced.)-3.436 F F2(Bash)108 148.8 Q +F0 .106(uses the v)2.606 F .106(alue of the v)-.25 F .106 +(ariable formed from the rest of)-.25 F F1(par)2.606 E(ameter)-.15 E F0 +.106(as the name of the v)2.606 F .106(ariable; this v)-.25 F(ari-)-.25 +E .351(able is then e)108 160.8 R .351(xpanded and that v)-.15 F .352 +(alue is used in the rest of the substitution, rather than the v)-.25 F +.352(alue of)-.25 F F1(par)2.852 E(ame-)-.15 E(ter)108 172.8 Q F0 2.52 +(itself. This)2.52 F .02(is kno)2.52 F .02(wn as)-.25 F F1(indir)2.52 E +.02(ect e)-.37 F(xpansion)-.2 E F0 5.019(.T)C .019(he e)-5.019 F .019 +(xceptions to this are the e)-.15 F .019(xpansions of ${!)-.15 F F1(pr)A +(e\214x)-.37 E F0 .019(*} and)B(${)108 184.8 Q F2(!)A F1(name)A F0([)A +F1(@)A F0 .762(]} described belo)B 4.563 -.65(w. T)-.25 H .763(he e).65 +F .763(xclamation point must immediately follo)-.15 F 3.263(wt)-.25 G +.763(he left brace in order to)-3.263 F(introduce indirection.)108 196.8 +Q .334(In each of the cases belo)108 213.6 R -.65(w,)-.25 G F1(wor)3.484 +E(d)-.37 E F0 .334(is subject to tilde e)2.834 F .334 +(xpansion, parameter e)-.15 F .334(xpansion, command substitution,)-.15 +F(and arithmetic e)108 225.6 Q(xpansion.)-.15 E .697 +(When not performing substring e)108 242.4 R .698 +(xpansion, using the forms documented belo)-.15 F -.65(w,)-.25 G F2 +(bash)3.848 E F0 .698(tests for a parameter)3.198 F +(that is unset or null.)108 254.4 Q(Omitting the colon results in a tes\ +t only for a parameter that is unset.)5 E(${)108 271.2 Q F1(par)A +(ameter)-.15 E F2<3aad>A F1(wor)A(d)-.37 E F0(})A F2 .723(Use Default V) +144 283.2 R(alues)-.92 E F0 5.723(.I)C(f)-5.723 E F1(par)4.473 E(ameter) +-.15 E F0 .723(is unset or null, the e)3.953 F .722(xpansion of)-.15 F +F1(wor)3.562 E(d)-.37 E F0 .722(is substituted.)3.992 F(Other)5.722 E(-) +-.2 E(wise, the v)144 295.2 Q(alue of)-.25 E F1(par)3.75 E(ameter)-.15 E +F0(is substituted.)3.23 E(${)108 307.2 Q F1(par)A(ameter)-.15 E F2(:=)A +F1(wor)A(d)-.37 E F0(})A F2 2.004(Assign Default V)144 319.2 R(alues) +-.92 E F0 7.004(.I)C(f)-7.004 E F1(par)5.754 E(ameter)-.15 E F0 2.005 +(is unset or null, the e)5.234 F 2.005(xpansion of)-.15 F F1(wor)4.845 E +(d)-.37 E F0 2.005(is assigned to)5.275 F F1(par)144 331.2 Q(ameter)-.15 +E F0 5.279(.T).73 G .279(he v)-5.279 F .279(alue of)-.25 F F1(par)4.029 +E(ameter)-.15 E F0 .278(is then substituted.)3.508 F .278 +(Positional parameters and special param-)5.278 F +(eters may not be assigned to in this w)144 343.2 Q(ay)-.1 E(.)-.65 E +(${)108 355.2 Q F1(par)A(ameter)-.15 E F2(:?)A F1(wor)A(d)-.37 E F0(})A +F2 .535(Display Err)144 367.2 R .535(or if Null or Unset)-.18 F F0 5.535 +(.I)C(f)-5.535 E F1(par)4.285 E(ameter)-.15 E F0 .535 +(is null or unset, the e)3.765 F .535(xpansion of)-.15 F F1(wor)3.035 E +(d)-.37 E F0 .535(\(or a mes-)3.035 F .662(sage to that ef)144 379.2 R +.662(fect if)-.25 F F1(wor)3.502 E(d)-.37 E F0 .661(is not present\) is\ + written to the standard error and the shell, if it is not)3.932 F +(interacti)144 391.2 Q -.15(ve)-.25 G 2.5(,e).15 G 2.5(xits. Otherwise,) +-2.65 F(the v)2.5 E(alue of)-.25 E F1(par)2.5 E(ameter)-.15 E F0 +(is substituted.)2.5 E(${)108 403.2 Q F1(par)A(ameter)-.15 E F2(:+)A F1 +(wor)A(d)-.37 E F0(})A F2 .745(Use Alter)144 415.2 R .745(nate V)-.15 F +(alue)-.92 E F0 5.745(.I)C(f)-5.745 E F1(par)4.495 E(ameter)-.15 E F0 +.745(is null or unset, nothing is substituted, otherwise the e)3.975 F +(xpan-)-.15 E(sion of)144 427.2 Q F1(wor)2.84 E(d)-.37 E F0 +(is substituted.)3.27 E(${)108 439.2 Q F1(par)A(ameter)-.15 E F2(:)A F1 +(of)A(fset)-.18 E F0(})A(${)108 451.2 Q F1(par)A(ameter)-.15 E F2(:)A F1 +(of)A(fset)-.18 E F2(:)A F1(length)A F0(})A F2 .797 +(Substring Expansion.)144 463.2 R F0 .796(Expands to up to)5.797 F F1 +(length)3.296 E F0 .796(characters of)3.296 F F1(par)3.296 E(ameter)-.15 +E F0 .796(starting at the character)3.296 F .228(speci\214ed by)144 +475.2 R F1(of)2.728 E(fset)-.18 E F0 5.228(.I)C(f)-5.228 E F1(length) +2.728 E F0 .229(is omitted, e)2.729 F .229(xpands to the substring of) +-.15 F F1(par)2.729 E(ameter)-.15 E F0 .229(starting at the char)2.729 F +(-)-.2 E .433(acter speci\214ed by)144 487.2 R F1(of)2.933 E(fset)-.18 E +F0(.)A F1(length)5.433 E F0(and)2.933 E F1(of)2.933 E(fset)-.18 E F0 +.433(are arithmetic e)2.933 F .433(xpressions \(see)-.15 F/F3 9 +/Times-Bold@0 SF .432(ARITHMETIC EV)2.933 F(ALU-)-1.215 E -.855(AT)144 +499.2 S(ION).855 E F0(belo)2.576 E(w\).)-.25 E F1(length)5.326 E F0 .326 +(must e)2.826 F -.25(va)-.25 G .326 +(luate to a number greater than or equal to zero.).25 F(If)5.327 E F1 +(of)2.827 E(fset)-.18 E F0 -.25(eva)2.827 G(luates).25 E .016 +(to a number less than zero, the v)144 511.2 R .015 +(alue is used as an of)-.25 F .015(fset from the end of the v)-.25 F +.015(alue of)-.25 F F1(par)2.515 E(ameter)-.15 E F0 5.015(.I)C(f)-5.015 +E F1(par)144 523.2 Q(ameter)-.15 E F0(is)3.25 E F2(@)3.25 E F0 3.25(,t)C +.75(he result is)-3.25 F F1(length)3.25 E F0 .75 +(positional parameters be)3.25 F .75(ginning at)-.15 F F1(of)3.25 E +(fset)-.18 E F0 5.75(.I)C(f)-5.75 E F1(par)3.25 E(ameter)-.15 E F0 .75 +(is an)3.25 F(inde)144 535.2 Q -.15(xe)-.15 G 2.702(da).15 G .201 +(rray name subscripted by @ or *, the result is the)-2.702 F F1(length) +2.701 E F0 .201(members of the array be)2.701 F(ginning)-.15 E 1.282 +(with ${)144 547.2 R F1(par)A(ameter)-.15 E F0([)A F1(of)A(fset)-.18 E +F0 3.782(]}. A)B(ne)3.782 E -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G F1 +(of)3.932 E(fset)-.18 E F0 1.282(is tak)3.782 F 1.282(en relati)-.1 F +1.582 -.15(ve t)-.25 H 3.782(oo).15 G 1.283(ne greater than the maximum) +-3.782 F(inde)144 559.2 Q 3.435(xo)-.15 G 3.435(ft)-3.435 G .935 +(he speci\214ed array)-3.435 F 5.935(.S)-.65 G .935(ubstring e)-5.935 F +.935(xpansion applied to an associati)-.15 F 1.234 -.15(ve a)-.25 H .934 +(rray produces unde-).15 F .261(\214ned results.)144 571.2 R .261 +(Note that a ne)5.261 F -.05(ga)-.15 G(ti).05 E .561 -.15(ve o)-.25 H +-.25(ff).15 G .261 +(set must be separated from the colon by at least one space to).25 F -.2 +(avo)144 583.2 S .155(id being confused with the :- e).2 F 2.655 +(xpansion. Substring)-.15 F(inde)2.655 E .154 +(xing is zero-based unless the positional)-.15 F .532 +(parameters are used, in which case the inde)144 595.2 R .532 +(xing starts at 1 by def)-.15 F 3.032(ault. If)-.1 F F1(of)3.032 E(fset) +-.18 E F0 .532(is 0, and the posi-)3.032 F(tional parameters are used,) +144 607.2 Q F2($0)2.5 E F0(is pre\214x)2.5 E(ed to the list.)-.15 E(${) +108 624 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(*)A F0(})A(${)108 636 Q F2(!)A +F1(pr)A(e\214x)-.37 E F2(@)A F0(})A F2 .085(Names matching pr)144 648 R +(e\214x.)-.18 E F0 .084(Expands to the names of v)5.085 F .084 +(ariables whose names be)-.25 F .084(gin with)-.15 F F1(pr)2.584 E +(e\214x)-.37 E F0 2.584(,s)C(epa-)-2.584 E .257 +(rated by the \214rst character of the)144 660 R F3(IFS)2.757 E F0 .257 +(special v)2.507 F 2.757(ariable. When)-.25 F F1(@)2.758 E F0 .258 +(is used and the e)2.758 F .258(xpansion appears)-.15 F +(within double quotes, each v)144 672 Q(ariable name e)-.25 E +(xpands to a separate w)-.15 E(ord.)-.1 E(${)108 688.8 Q F2(!)A F1(name) +A F0([)A F1(@)A F0(]})A(${)108 700.8 Q F2(!)A F1(name)A F0([)A F1(*)A F0 +(]})A F2 2.036(List of array k)144 712.8 R(eys.)-.1 E F0(If)7.036 E F1 +(name)4.536 E F0 2.036(is an array v)4.536 F 2.036(ariable, e)-.25 F +2.036(xpands to the list of array indices \(k)-.15 F -.15(ey)-.1 G(s\)) +.15 E .595(assigned in)144 724.8 R F1(name)3.095 E F0 5.595(.I)C(f) +-5.595 E F1(name)3.095 E F0 .595(is not an array)3.095 F 3.095(,e)-.65 G +.595(xpands to 0 if)-3.245 F F1(name)3.095 E F0 .596 +(is set and null otherwise.)3.095 F(When)5.596 E(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(19)185.955 E 0 Cg EP +%%Page: 20 20 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Italic@0 SF(@)144 84 Q F0(is used and the e)2.5 E +(xpansion appears within double quotes, each k)-.15 E .3 -.15(ey ex)-.1 +H(pands to a separate w).15 E(ord.)-.1 E(${)108 100.8 Q/F2 10 +/Times-Bold@0 SF(#)A F1(par)A(ameter)-.15 E F0(})A F2 -.1(Pa)144 112.8 S +.471(rameter length.).1 F F0 .471(The length in characters of the v) +5.471 F .471(alue of)-.25 F F1(par)2.971 E(ameter)-.15 E F0 .47 +(is substituted.)2.97 F(If)5.47 E F1(par)4.22 E(ame-)-.15 E(ter)144 +124.8 Q F0(is)4.438 E F2(*)3.708 E F0(or)3.708 E F2(@)3.708 E F0 3.708 +(,t)C 1.208(he v)-3.708 F 1.208 +(alue substituted is the number of positional parameters.)-.25 F(If) +6.209 E F1(par)4.959 E(ameter)-.15 E F0 1.209(is an)4.439 F +(array name subscripted by)144 136.8 Q F2(*)2.5 E F0(or)2.5 E F2(@)2.5 E +F0 2.5(,t)C(he v)-2.5 E +(alue substituted is the number of elements in the array)-.25 E(.)-.65 E +(${)108 153.6 Q F1(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)-.37 E F0(})A +(${)108 165.6 Q F1(par)A(ameter)-.15 E F2(##)A F1(wor)A(d)-.37 E F0(})A +F2(Remo)144 177.6 Q 1.396 -.1(ve m)-.1 H 1.196(atching pr).1 F 1.196 +(e\214x patter)-.18 F(n.)-.15 E F0(The)6.196 E F1(wor)4.036 E(d)-.37 E +F0 1.196(is e)4.466 F 1.196 +(xpanded to produce a pattern just as in path-)-.15 F .151(name e)144 +189.6 R 2.651(xpansion. If)-.15 F .152(the pattern matches the be)2.652 +F .152(ginning of the v)-.15 F .152(alue of)-.25 F F1(par)2.652 E +(ameter)-.15 E F0 2.652(,t).73 G .152(hen the result of)-2.652 F 1.4 +(the e)144 201.6 R 1.4(xpansion is the e)-.15 F 1.4(xpanded v)-.15 F 1.4 +(alue of)-.25 F F1(par)5.15 E(ameter)-.15 E F0 1.4 +(with the shortest matching pattern \(the `)4.63 F(`)-.74 E F2(#)A F0 +-.74('')C .281(case\) or the longest matching pattern \(the `)144 213.6 +R(`)-.74 E F2(##)A F0 1.761 -.74('' c)D .281(ase\) deleted.).74 F(If) +5.281 E F1(par)4.031 E(ameter)-.15 E F0(is)3.511 E F2(@)2.781 E F0(or) +2.781 E F2(*)2.782 E F0 2.782(,t)C .282(he pattern)-2.782 F(remo)144 +225.6 Q -.25(va)-.15 G 3.274(lo).25 G .774 +(peration is applied to each positional parameter in turn, and the e) +-3.274 F .774(xpansion is the resul-)-.15 F .401(tant list.)144 237.6 R +(If)5.401 E F1(par)4.151 E(ameter)-.15 E F0 .401(is an array v)3.631 F +.401(ariable subscripted with)-.25 F F2(@)2.901 E F0(or)2.901 E F2(*) +2.901 E F0 2.902(,t)C .402(he pattern remo)-2.902 F -.25(va)-.15 G 2.902 +(lo).25 G(peration)-2.902 E +(is applied to each member of the array in turn, and the e)144 249.6 Q +(xpansion is the resultant list.)-.15 E(${)108 266.4 Q F1(par)A(ameter) +-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108 278.4 Q F1(par)A(ameter) +-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 290.4 Q .347 -.1 +(ve m)-.1 H .147(atching suf\214x patter).1 F(n.)-.15 E F0(The)5.147 E +F1(wor)2.647 E(d)-.37 E F0 .147(is e)2.647 F .146 +(xpanded to produce a pattern just as in pathname)-.15 F -.15(ex)144 +302.4 S 3.088(pansion. If).15 F .588 +(the pattern matches a trailing portion of the e)3.088 F .588(xpanded v) +-.15 F .588(alue of)-.25 F F1(par)3.088 E(ameter)-.15 E F0 3.088(,t).73 +G .588(hen the)-3.088 F .226(result of the e)144 314.4 R .226 +(xpansion is the e)-.15 F .226(xpanded v)-.15 F .226(alue of)-.25 F F1 +(par)3.976 E(ameter)-.15 E F0 .226 +(with the shortest matching pattern \(the)3.456 F -.74(``)144 326.4 S F2 +(%).74 E F0 1.521 -.74('' c)D .042 +(ase\) or the longest matching pattern \(the `).74 F(`)-.74 E F2(%%)A F0 +1.522 -.74('' c)D .042(ase\) deleted.).74 F(If)5.042 E F1(par)3.792 E +(ameter)-.15 E F0(is)3.272 E F2(@)2.542 E F0(or)2.542 E F2(*)2.542 E F0 +2.542(,t)C(he)-2.542 E .441(pattern remo)144 338.4 R -.25(va)-.15 G +2.941(lo).25 G .441 +(peration is applied to each positional parameter in turn, and the e) +-2.941 F .44(xpansion is the)-.15 F .24(resultant list.)144 350.4 R(If) +5.24 E F1(par)3.99 E(ameter)-.15 E F0 .24(is an array v)3.47 F .241 +(ariable subscripted with)-.25 F F2(@)2.741 E F0(or)2.741 E F2(*)2.741 E +F0 2.741(,t)C .241(he pattern remo)-2.741 F -.25(va)-.15 G 2.741(lo).25 +G(per)-2.741 E(-)-.2 E +(ation is applied to each member of the array in turn, and the e)144 +362.4 Q(xpansion is the resultant list.)-.15 E(${)108 379.2 Q F1(par)A +(ameter)-.15 E F2(/)A F1(pattern)A F2(/)A F1(string)A F0(})A F2 -.1(Pa) +144 391.2 S(tter).1 E 3.607(ns)-.15 G(ubstitution.)-3.607 E F0(The)6.107 +E F1(pattern)3.607 E F0 1.107(is e)3.607 F 1.106 +(xpanded to produce a pattern just as in pathname e)-.15 F(xpan-)-.15 E +(sion.)144 403.2 Q F1 -.8(Pa)6.033 G -.15(ra).8 G(meter).15 E F0 1.033 +(is e)3.533 F 1.033(xpanded and the longest match of)-.15 F F1(pattern) +3.533 E F0(ag)3.533 E 1.034(ainst its v)-.05 F 1.034 +(alue is replaced with)-.25 F F1(string)144 415.2 Q F0 5.161(.I)C(f) +-5.161 E F1(pattern)2.661 E F0(be)2.661 E .161(gins with)-.15 F F2(/) +2.661 E F0 2.661(,a)C .161(ll matches of)-2.661 F F1(pattern)2.661 E F0 +.16(are replaced with)2.661 F F1(string)2.66 E F0 5.16(.N)C .16 +(ormally only the)-5.16 F .806(\214rst match is replaced.)144 427.2 R +(If)5.806 E F1(pattern)3.306 E F0(be)3.306 E .806(gins with)-.15 F F2(#) +3.306 E F0 3.306(,i)C 3.307(tm)-3.306 G .807(ust match at the be)-3.307 +F .807(ginning of the e)-.15 F(xpanded)-.15 E -.25(va)144 439.2 S .621 +(lue of).25 F F1(par)3.121 E(ameter)-.15 E F0 5.621(.I)C(f)-5.621 E F1 +(pattern)3.121 E F0(be)3.121 E .621(gins with)-.15 F F2(%)3.121 E F0 +3.121(,i)C 3.121(tm)-3.121 G .62(ust match at the end of the e)-3.121 F +.62(xpanded v)-.15 F .62(alue of)-.25 F F1(par)144 451.2 Q(ameter)-.15 E +F0 6.253(.I)C(f)-6.253 E F1(string)3.753 E F0 1.253(is null, matches of) +3.753 F F1(pattern)3.753 E F0 1.253(are deleted and the)3.753 F F2(/) +3.753 E F0(follo)3.753 E(wing)-.25 E F1(pattern)3.753 E F0 1.254(may be) +3.754 F 2.679(omitted. If)144 463.2 R F1(par)3.929 E(ameter)-.15 E F0 +(is)3.409 E F2(@)2.679 E F0(or)2.679 E F2(*)2.679 E F0 2.679(,t)C .178 +(he substitution operation is applied to each positional parameter) +-2.679 F .618(in turn, and the e)144 475.2 R .619 +(xpansion is the resultant list.)-.15 F(If)5.619 E F1(par)4.369 E +(ameter)-.15 E F0 .619(is an array v)3.849 F .619 +(ariable subscripted with)-.25 F F2(@)144 487.2 Q F0(or)3.224 E F2(*) +3.224 E F0 3.224(,t)C .723(he substitution operation is applied to each\ + member of the array in turn, and the e)-3.224 F(xpan-)-.15 E +(sion is the resultant list.)144 499.2 Q(${)108 516 Q F1(par)A(ameter) +-.15 E F2(^)A F1(pattern)A F0(})A(${)108 528 Q F1(par)A(ameter)-.15 E F2 +(^^)A F1(pattern)A F0(})A(${)108 540 Q F1(par)A(ameter)-.15 E F2(,)A F1 +(pattern)A F0(})A(${)108 552 Q F1(par)A(ameter)-.15 E F2(,,)A F1 +(pattern)A F0(})A F2 .437(Case modi\214cation.)144 564 R F0 .437(This e) +5.437 F .438(xpansion modi\214es the case of alphabetic characters in) +-.15 F F1(par)2.938 E(ameter)-.15 E F0 5.438(.T)C(he)-5.438 E F1 +(pattern)144 576 Q F0 .814(is e)3.314 F .813 +(xpanded to produce a pattern just as in pathname e)-.15 F 3.313 +(xpansion. The)-.15 F F2(^)3.313 E F0 .813(operator con)3.313 F -.15(ve) +-.4 G(rts).15 E(lo)144 588 Q .18(wercase letters matching)-.25 F F1 +(pattern)2.681 E F0 .181(to uppercase; the)2.681 F F2(,)2.681 E F0 .181 +(operator con)2.681 F -.15(ve)-.4 G .181(rts matching uppercase letters) +.15 F .085(to lo)144 600 R 2.585(wercase. The)-.25 F F2(^^)2.585 E F0 +(and)2.585 E F2(,,)2.585 E F0 -.15(ex)2.585 G .085(pansions con).15 F +-.15(ve)-.4 G .085(rt each matched character in the e).15 F .085 +(xpanded v)-.15 F .085(alue; the)-.25 F F2(^)2.585 E F0(and)144 612 Q F2 +(,)3.434 E F0 -.15(ex)3.434 G .934(pansions match and con).15 F -.15(ve) +-.4 G .934(rt only the \214rst character in the e).15 F .935(xpanded v) +-.15 F 3.435(alue.. If)-.25 F F1(pattern)3.435 E F0(is)3.435 E 1.121 +(omitted, it is treated lik)144 624 R 3.621(ea)-.1 G F2(?)A F0 3.621(,w) +C 1.121(hich matches e)-3.621 F -.15(ve)-.25 G 1.121(ry character).15 F +6.12(.I)-.55 G(f)-6.12 E F1(par)4.87 E(ameter)-.15 E F0(is)4.35 E F2(@) +3.62 E F0(or)3.62 E F2(*)3.62 E F0 3.62(,t)C 1.12(he case)-3.62 F 1.335 +(modi\214cation operation is applied to each positional parameter in tu\ +rn, and the e)144 636 R 1.335(xpansion is the)-.15 F 1.308 +(resultant list.)144 648 R(If)6.308 E F1(par)5.058 E(ameter)-.15 E F0 +1.308(is an array v)4.538 F 1.308(ariable subscripted with)-.25 F F2(@) +3.808 E F0(or)3.808 E F2(*)3.808 E F0 3.808(,t)C 1.308 +(he case modi\214cation)-3.808 F +(operation is applied to each member of the array in turn, and the e)144 +660 Q(xpansion is the resultant list.)-.15 E F2(Command Substitution)87 +676.8 Q F1 1.697(Command substitution)108 688.8 R F0(allo)4.197 E 1.697 +(ws the output of a command to replace the command name.)-.25 F 1.698 +(There are tw)6.698 F(o)-.1 E(forms:)108 700.8 Q F2($\()144 722.4 Q F1 +(command)A F2(\))1.666 E F0(GNU Bash-4.1)72 768 Q(2009 December 29) +135.965 E(20)185.955 E 0 Cg EP +%%Page: 21 21 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(or)108 84 Q/F1 10/Times-Bold@0 SF<92>144 96 Q/F2 10 +/Times-Italic@0 SF(command)A F1<92>A(Bash)108 112.8 Q F0 .02 +(performs the e)2.52 F .02(xpansion by e)-.15 F -.15(xe)-.15 G(cuting) +.15 E F2(command)2.519 E F0 .019 +(and replacing the command substitution with the stan-)2.519 F .768 +(dard output of the command, with an)108 124.8 R 3.268(yt)-.15 G .768 +(railing ne)-3.268 F .768(wlines deleted.)-.25 F .768(Embedded ne)5.768 +F .768(wlines are not deleted, b)-.25 F(ut)-.2 E(the)108 136.8 Q 3.219 +(ym)-.15 G .719(ay be remo)-3.219 F -.15(ve)-.15 G 3.219(dd).15 G .719 +(uring w)-3.219 F .719(ord splitting.)-.1 F .719 +(The command substitution)5.719 F F1($\(cat)3.219 E F2(\214le)3.219 E F1 +(\))A F0 .718(can be replaced by the)3.219 F(equi)108 148.8 Q -.25(va) +-.25 G(lent b).25 E(ut f)-.2 E(aster)-.1 E F1($\(<)2.5 E F2(\214le)2.5 E +F1(\))A F0(.)A 1.724(When the old-style backquote form of substitution \ +is used, backslash retains its literal meaning e)108 165.6 R(xcept)-.15 +E .315(when follo)108 177.6 R .315(wed by)-.25 F F1($)2.815 E F0(,)A F1 +<92>2.815 E F0 2.815(,o)C(r)-2.815 E F1(\\)2.815 E F0 5.315(.T)C .314(h\ +e \214rst backquote not preceded by a backslash terminates the command \ +sub-)-5.315 F 3.886(stitution. When)108 189.6 R 1.386(using the $\() +3.886 F F2(command).833 E F0 3.886(\)f)1.666 G 1.387 +(orm, all characters between the parentheses mak)-3.886 F 3.887(eu)-.1 G +3.887(pt)-3.887 G 1.387(he com-)-3.887 F +(mand; none are treated specially)108 201.6 Q(.)-.65 E .894 +(Command substitutions may be nested.)108 218.4 R 2.494 -.8(To n)5.894 H +.894(est when using the backquoted form, escape the inner back-).8 F +(quotes with backslashes.)108 230.4 Q .422 +(If the substitution appears within double quotes, w)108 247.2 R .422 +(ord splitting and pathname e)-.1 F .423(xpansion are not performed)-.15 +F(on the results.)108 259.2 Q F1(Arithmetic Expansion)87 276 Q F0 1.035 +(Arithmetic e)108 288 R 1.035(xpansion allo)-.15 F 1.035(ws the e)-.25 F +-.25(va)-.25 G 1.034(luation of an arithmetic e).25 F 1.034 +(xpression and the substitution of the result.)-.15 F +(The format for arithmetic e)108 300 Q(xpansion is:)-.15 E F1($\(\()144 +316.8 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(\)\))A F0(The)108 333.6 Q +F2 -.2(ex)2.665 G(pr).2 E(ession)-.37 E F0 .165 +(is treated as if it were within double quotes, b)2.905 F .166 +(ut a double quote inside the parentheses is not)-.2 F 1.075 +(treated specially)108 345.6 R 6.075(.A)-.65 G 1.074(ll tok)-6.075 F +1.074(ens in the e)-.1 F 1.074(xpression under)-.15 F 1.074 +(go parameter e)-.18 F 1.074(xpansion, string e)-.15 F 1.074 +(xpansion, command)-.15 F(substitution, and quote remo)108 357.6 Q -.25 +(va)-.15 G 2.5(l. Arithmetic).25 F -.15(ex)2.5 G +(pansions may be nested.).15 E 1.378(The e)108 374.4 R -.25(va)-.25 G +1.378(luation is performed according to the rules listed belo).25 F +3.878(wu)-.25 G(nder)-3.878 E/F3 9/Times-Bold@0 SF 1.378(ARITHMETIC EV) +3.878 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.) +A F0(If)5.879 E F2 -.2(ex)108 386.4 S(pr).2 E(ession)-.37 E F0(is in) +2.74 E -.25(va)-.4 G(lid,).25 E F1(bash)2.5 E F0 +(prints a message indicating f)2.5 E(ailure and no substitution occurs.) +-.1 E F1(Pr)87 403.2 Q(ocess Substitution)-.18 E F2(Pr)108 415.2 Q .971 +(ocess substitution)-.45 F F0 .971 +(is supported on systems that support named pipes \()3.471 F F2(FIFOs)A +F0 3.47(\)o)C 3.47(rt)-3.47 G(he)-3.47 E F1(/de)3.47 E(v/fd)-.15 E F0 +.97(method of)3.47 F .021(naming open \214les.)108 427.2 R .021(It tak) +5.021 F .021(es the form of)-.1 F F1(<\()2.521 E F2(list)A F1(\)).833 E +F0(or)2.521 E F1(>\()2.521 E F2(list)A F1(\)).833 E F0 5.021(.T)C .021 +(he process)-5.021 F F2(list)2.521 E F0 .021 +(is run with its input or output con-)2.521 F .059(nected to a)108 439.2 +R F2(FIFO)2.559 E F0 .058(or some \214le in)2.559 F F1(/de)2.558 E(v/fd) +-.15 E F0 5.058(.T)C .058(he name of this \214le is passed as an ar) +-5.058 F .058(gument to the current com-)-.18 F .13 +(mand as the result of the e)108 451.2 R 2.63(xpansion. If)-.15 F(the) +2.63 E F1(>\()2.63 E F2(list)A F1(\)).833 E F0 .13 +(form is used, writing to the \214le will pro)2.63 F .131 +(vide input for)-.15 F F2(list)2.631 E F0(.)A(If the)108 463.2 Q F1(<\() +2.5 E F2(list)A F1(\)).833 E F0 +(form is used, the \214le passed as an ar)2.5 E +(gument should be read to obtain the output of)-.18 E F2(list)2.5 E F0 +(.)A .897(When a)108 480 R -.25(va)-.2 G .896(ilable, process substitut\ +ion is performed simultaneously with parameter and v).25 F .896 +(ariable e)-.25 F(xpansion,)-.15 E +(command substitution, and arithmetic e)108 492 Q(xpansion.)-.15 E F1 +-.75(Wo)87 508.8 S(rd Splitting).75 E F0 1.142 +(The shell scans the results of parameter e)108 520.8 R 1.143 +(xpansion, command substitution, and arithmetic e)-.15 F 1.143 +(xpansion that)-.15 F(did not occur within double quotes for)108 532.8 Q +F2(wor)2.5 E 2.5(ds)-.37 G(plitting)-2.5 E F0(.).22 E .063 +(The shell treats each character of)108 549.6 R F3(IFS)2.563 E F0 .063 +(as a delimiter)2.313 F 2.563(,a)-.4 G .063 +(nd splits the results of the other e)-2.563 F .063(xpansions into w) +-.15 F(ords)-.1 E 1.788(on these characters.)108 561.6 R(If)6.788 E F3 +(IFS)4.288 E F0 1.788(is unset, or its v)4.038 F 1.789(alue is e)-.25 F +(xactly)-.15 E F1()4.289 E F0 4.289(,t)C 1.789 +(he def)-4.289 F 1.789(ault, then)-.1 F .022(sequences of)108 573.6 R F1 +()2.522 E F0(,)A F1()2.522 E F0 2.521(,a)C(nd)-2.521 E F1 +()2.521 E F0 .021(at the be)2.521 F .021 +(ginning and end of the results of the pre)-.15 F .021(vious e)-.25 F +(xpan-)-.15 E .585(sions are ignored, and an)108 585.6 R 3.086(ys)-.15 G +.586(equence of)-3.086 F F3(IFS)3.086 E F0 .586 +(characters not at the be)2.836 F .586(ginning or end serv)-.15 F .586 +(es to delimit w)-.15 F(ords.)-.1 E(If)108 597.6 Q F3(IFS)3.617 E F0 +1.117(has a v)3.367 F 1.117(alue other than the def)-.25 F 1.117 +(ault, then sequences of the whitespace characters)-.1 F F1(space)3.617 +E F0(and)3.617 E F1(tab)3.617 E F0(are)3.617 E .315(ignored at the be) +108 609.6 R .315(ginning and end of the w)-.15 F .315 +(ord, as long as the whitespace character is in the v)-.1 F .315 +(alue of)-.25 F F3(IFS)2.815 E F0(\(an)2.566 E F3(IFS)108 621.6 Q F0 +1.054(whitespace character\).)3.304 F(An)6.054 E 3.554(yc)-.15 G 1.054 +(haracter in)-3.554 F F3(IFS)3.554 E F0 1.053(that is not)3.303 F F3 +(IFS)3.553 E F0 1.053(whitespace, along with an)3.303 F 3.553(ya)-.15 G +(djacent)-3.553 E F3(IFS)3.553 E F0 .331 +(whitespace characters, delimits a \214eld.)108 633.6 R 2.831(As)5.331 G +.332(equence of)-2.831 F F3(IFS)2.832 E F0 .332 +(whitespace characters is also treated as a delim-)2.582 F(iter)108 +645.6 Q 5(.I)-.55 G 2.5(ft)-5 G(he v)-2.5 E(alue of)-.25 E F3(IFS)2.5 E +F0(is null, no w)2.25 E(ord splitting occurs.)-.1 E 1.879 +(Explicit null ar)108 662.4 R 1.879(guments \()-.18 F F1 .833("").833 G +F0(or)3.545 E F1 .833<0808>5.211 G F0 4.378(\)a)C 1.878(re retained.) +-4.378 F 1.878(Unquoted implicit null ar)6.878 F 1.878 +(guments, resulting from the)-.18 F -.15(ex)108 674.4 S .176 +(pansion of parameters that ha).15 F .476 -.15(ve n)-.2 H 2.676(ov).15 G +.176(alues, are remo)-2.926 F -.15(ve)-.15 G 2.676(d. If).15 F 2.677(ap) +2.677 G .177(arameter with no v)-2.677 F .177(alue is e)-.25 F .177 +(xpanded within)-.15 F(double quotes, a null ar)108 686.4 Q +(gument results and is retained.)-.18 E(Note that if no e)108 703.2 Q +(xpansion occurs, no splitting is performed.)-.15 E(GNU Bash-4.1)72 768 +Q(2009 December 29)135.965 E(21)185.955 E 0 Cg EP +%%Page: 22 22 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF -.1(Pa)87 84 S(thname Expansion).1 E F0 +.371(After w)108 96 R .371(ord splitting, unless the)-.1 F F12.871 +E F0 .371(option has been set,)2.871 F F1(bash)2.871 E F0 .37 +(scans each w)2.87 F .37(ord for the characters)-.1 F F1(*)2.87 E F0(,)A +F1(?)2.87 E F0 2.87(,a)C(nd)-2.87 E F1([)2.87 E F0(.)A .677 +(If one of these characters appears, then the w)108 108 R .677 +(ord is re)-.1 F -.05(ga)-.15 G .677(rded as a).05 F/F2 10 +/Times-Italic@0 SF(pattern)3.177 E F0 3.177(,a).24 G .678 +(nd replaced with an alphabeti-)-3.177 F 1.457 +(cally sorted list of \214le names matching the pattern.)108 120 R 1.456 +(If no matching \214le names are found, and the shell)6.457 F(option)108 +132 Q F1(nullglob)2.537 E F0 .038(is not enabled, the w)2.537 F .038 +(ord is left unchanged.)-.1 F .038(If the)5.038 F F1(nullglob)2.538 E F0 +.038(option is set, and no matches are)2.538 F .306(found, the w)108 144 +R .306(ord is remo)-.1 F -.15(ve)-.15 G 2.806(d. If).15 F(the)2.805 E F1 +(failglob)2.805 E F0 .305 +(shell option is set, and no matches are found, an error message)2.805 F +.928(is printed and the command is not e)108 156 R -.15(xe)-.15 G 3.428 +(cuted. If).15 F .928(the shell option)3.428 F F1(nocaseglob)3.428 E F0 +.929(is enabled, the match is per)3.429 F(-)-.2 E .033 +(formed without re)108 168 R -.05(ga)-.15 G .033 +(rd to the case of alphabetic characters.).05 F .032 +(When a pattern is used for pathname e)5.032 F(xpansion,)-.15 E .104 +(the character)108 180 R F1 -.63(``)2.604 G -.55(.').63 G(')-.08 E F0 +.104(at the start of a name or immediately follo)5.104 F .105 +(wing a slash must be matched e)-.25 F(xplicitly)-.15 E 2.605(,u)-.65 G +(nless)-2.605 E .888(the shell option)108 192 R F1(dotglob)3.388 E F0 +.888(is set.)3.388 F .887 +(When matching a pathname, the slash character must al)5.888 F -.1(wa) +-.1 G .887(ys be matched).1 F -.15(ex)108 204 S(plicitly).15 E 6.165(.I) +-.65 G 3.665(no)-6.165 G 1.165(ther cases, the)-3.665 F F1 -.63(``)3.665 +G -.55(.').63 G(')-.08 E F0 1.166(character is not treated specially) +6.165 F 6.166(.S)-.65 G 1.166(ee the description of)-6.166 F F1(shopt) +3.666 E F0(belo)3.666 E(w)-.25 E(under)108 216 Q/F3 9/Times-Bold@0 SF +.478(SHELL B)2.978 F(UIL)-.09 E .478(TIN COMMANDS)-.828 F F0 .477 +(for a description of the)2.728 F F1(nocaseglob)2.977 E F0(,)A F1 +(nullglob)2.977 E F0(,)A F1(failglob)2.977 E F0 2.977(,a)C(nd)-2.977 E +F1(dotglob)2.977 E F0(shell options.)108 228 Q(The)108 244.8 Q F3 +(GLOBIGNORE)2.63 E F0 .13(shell v)2.38 F .131 +(ariable may be used to restrict the set of \214le names matching a)-.25 +F F2(pattern)2.631 E F0 5.131(.I).24 G(f)-5.131 E F3(GLO-)2.631 E +(BIGNORE)108 256.8 Q F0 2.015(is set, each matching \214le name that al\ +so matches one of the patterns in)4.265 F F3(GLOBIGNORE)4.515 E F0(is) +4.264 E(remo)108 268.8 Q -.15(ve)-.15 G 2.503(df).15 G .003 +(rom the list of matches.)-2.503 F .003(The \214le names)5.003 F F1 -.63 +(``)2.503 G -.55(.').63 G(')-.08 E F0(and)5.003 E F1 -.63(``)2.503 G(..) +.63 E -.63('')-.55 G F0 .004(are al)5.633 F -.1(wa)-.1 G .004 +(ys ignored when).1 F F3(GLOBIGNORE)2.504 E F0(is)2.254 E .046 +(set and not null.)108 280.8 R(Ho)5.046 E(we)-.25 E -.15(ve)-.25 G .846 +-.4(r, s).15 H(etting).4 E F3(GLOBIGNORE)2.546 E F0 .046 +(to a non-null v)2.296 F .045(alue has the ef)-.25 F .045 +(fect of enabling the)-.25 F F1(dotglob)2.545 E F0 .613 +(shell option, so all other \214le names be)108 292.8 R .614 +(ginning with a)-.15 F F1 -.63(``)3.114 G -.55(.').63 G(')-.08 E F0 .614 +(will match.)5.614 F 2.214 -.8(To g)5.614 H .614(et the old beha).8 F +.614(vior of ignoring)-.2 F .457(\214le names be)108 304.8 R .457 +(ginning with a)-.15 F F1 -.63(``)2.957 G -.55(.').63 G(')-.08 E F0 +2.957(,m)C(ak)-2.957 E(e)-.1 E F1 -.63(``)2.957 G(.*').63 E(')-.63 E F0 +.457(one of the patterns in)5.457 F F3(GLOBIGNORE)2.957 E/F4 9 +/Times-Roman@0 SF(.)A F0(The)4.957 E F1(dotglob)2.956 E F0 .456 +(option is)2.956 F(disabled when)108 316.8 Q F3(GLOBIGNORE)2.5 E F0 +(is unset.)2.25 E F1 -.1(Pa)108 333.6 S(tter).1 E 2.5(nM)-.15 G(atching) +-2.5 E F0(An)108 350.4 Q 3.138(yc)-.15 G .638(haracter that appears in \ +a pattern, other than the special pattern characters described belo) +-3.138 F 1.938 -.65(w, m)-.25 H(atches).65 E 3.62(itself. The)108 362.4 +R 1.12(NUL character may not occur in a pattern.)3.62 F 3.62(Ab)6.12 G +1.12(ackslash escapes the follo)-3.62 F 1.12(wing character; the)-.25 F +.576(escaping backslash is discarded when matching.)108 374.4 R .576 +(The special pattern characters must be quoted if the)5.576 F 3.076(ya) +-.15 G(re)-3.076 E(to be matched literally)108 386.4 Q(.)-.65 E +(The special pattern characters ha)108 403.2 Q .3 -.15(ve t)-.2 H +(he follo).15 E(wing meanings:)-.25 E F1(*)108 420 Q F0 .455(Matches an) +31 F 2.955(ys)-.15 G .455(tring, including the null string.)-2.955 F +.455(When the)5.455 F F1(globstar)2.955 E F0 .455 +(shell option is enabled, and)2.955 F F1(*)2.955 E F0(is)2.955 E .314 +(used in a pathname e)144 432 R .314(xpansion conte)-.15 F .314(xt, tw) +-.15 F 2.814(oa)-.1 G(djacent)-2.814 E F1(*)2.814 E F0 2.814(su)C .314 +(sed as a single pattern will match all \214les)-2.814 F 1.183 +(and zero or more directories and subdirectories.)144 444 R 1.183 +(If follo)6.183 F 1.183(wed by a)-.25 F F1(/)3.683 E F0 3.683(,t)C 1.383 +-.1(wo a)-3.683 H(djacent).1 E F1(*)3.683 E F0 3.683(sw)C 1.183 +(ill match)-3.683 F(only directories and subdirectories.)144 456 Q F1(?) +108 468 Q F0(Matches an)31 E 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 +E F1([...])108 480 Q F0 .256(Matches an)21.84 F 2.756(yo)-.15 G .257 +(ne of the enclosed characters.)-2.756 F 2.757(Ap)5.257 G .257 +(air of characters separated by a h)-2.757 F .257(yphen denotes a)-.05 F +F2 -.15(ra)144 492 S(ng).15 E 3.29(ee)-.1 G(xpr)-3.49 E(ession)-.37 E F0 +3.29(;a)C 1.09 -.15(ny c)-3.29 H .789 +(haracter that sorts between those tw).15 F 3.289(oc)-.1 G .789 +(haracters, inclusi)-3.289 F -.15(ve)-.25 G 3.289(,u).15 G .789 +(sing the cur)-3.289 F(-)-.2 E .349(rent locale')144 504 R 2.849(sc)-.55 +G .349(ollating sequence and character set, is matched.)-2.849 F .35 +(If the \214rst character follo)5.349 F .35(wing the)-.25 F F1([)2.85 E +F0 .564(is a)144 516 R F1(!)3.064 E F0 .564(or a)5.564 F F1(^)3.064 E F0 +.564(then an)3.064 F 3.064(yc)-.15 G .564 +(haracter not enclosed is matched.)-3.064 F .563 +(The sorting order of characters in range)5.564 F -.15(ex)144 528 S .467 +(pressions is determined by the current locale and the v).15 F .467 +(alue of the)-.25 F F3(LC_COLLA)2.967 E(TE)-.855 E F0 .467(shell v)2.717 +F(ariable,)-.25 E 1.077(if set.)144 540 R(A)6.077 E F13.577 E F0 +1.077(may be matched by including it as the \214rst or last character i\ +n the set.)3.577 F(A)6.076 E F1(])3.576 E F0 1.076(may be)3.576 F +(matched by including it as the \214rst character in the set.)144 552 Q +-.4(Wi)144 570 S(thin).4 E F1([)2.914 E F0(and)2.914 E F1(])2.914 E F0 +(,)A F2 -.15(ch)2.914 G(ar).15 E .414(acter classes)-.15 F F0 .415 +(can be speci\214ed using the syntax)2.915 F F1([:)2.915 E F2(class)A F1 +(:])A F0 2.915(,w)C(here)-2.915 E F2(class)2.915 E F0 .415(is one of) +2.915 F(the follo)144 582 Q +(wing classes de\214ned in the POSIX standard:)-.25 E F1 5.421 +(alnum alpha ascii blank cntrl digit graph lo)144 594 R 5.421 +(wer print punct space upper w)-.1 F(ord)-.1 E(xdigit)144 606 Q F0 2.518 +(Ac)144 618 S .018(haracter class matches an)-2.518 F 2.518(yc)-.15 G +.019(haracter belonging to that class.)-2.518 F(The)5.019 E F1 -.1(wo) +2.519 G(rd).1 E F0 .019(character class matches)2.519 F +(letters, digits, and the character _.)144 630 Q -.4(Wi)144 648 S(thin) +.4 E F1([)3.547 E F0(and)3.547 E F1(])3.547 E F0 3.547(,a)C(n)-3.547 E +F2 1.046(equivalence class)3.546 F F0 1.046 +(can be speci\214ed using the syntax)3.546 F F1([=)3.546 E F2(c)A F1(=]) +A F0 3.546(,w)C 1.046(hich matches all)-3.546 F(characters with the sam\ +e collation weight \(as de\214ned by the current locale\) as the charac\ +ter)144 660 Q F2(c)2.5 E F0(.)A -.4(Wi)144 678 S(thin).4 E F1([)2.5 E F0 +(and)2.5 E F1(])2.5 E F0 2.5(,t)C(he syntax)-2.5 E F1([.)2.5 E F2 +(symbol)A F1(.])A F0(matches the collating symbol)2.5 E F2(symbol)2.5 E +F0(.)A .704(If the)108 694.8 R F1(extglob)3.204 E F0 .705 +(shell option is enabled using the)3.204 F F1(shopt)3.205 E F0 -.2(bu) +3.205 G .705(iltin, se).2 F -.15(ve)-.25 G .705(ral e).15 F .705 +(xtended pattern matching operators)-.15 F .256(are recognized.)108 +706.8 R .256(In the follo)5.256 F .256(wing description, a)-.25 F F2 +(pattern-list)2.755 E F0 .255 +(is a list of one or more patterns separated by a)2.755 F F1(|)2.755 E +F0(.)A(Composite patterns may be formed using one or more of the follo) +108 718.8 Q(wing sub-patterns:)-.25 E(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(22)185.955 E 0 Cg EP +%%Page: 23 23 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(?\()144 84 Q/F2 10/Times-Italic@0 SF +(pattern-list).833 E F1(\)).833 E F0 +(Matches zero or one occurrence of the gi)180 96 Q -.15(ve)-.25 G 2.5 +(np).15 G(atterns)-2.5 E F1(*\()144 108 Q F2(pattern-list).833 E F1(\)) +.833 E F0(Matches zero or more occurrences of the gi)180 120 Q -.15(ve) +-.25 G 2.5(np).15 G(atterns)-2.5 E F1(+\()144 132 Q F2(pattern-list).833 +E F1(\)).833 E F0(Matches one or more occurrences of the gi)180 144 Q +-.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(@\()144 156 Q F2 +(pattern-list).833 E F1(\)).833 E F0(Matches one of the gi)180 168 Q +-.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(!\()144 180 Q F2 +(pattern-list).833 E F1(\)).833 E F0(Matches an)180 192 Q(ything e)-.15 +E(xcept one of the gi)-.15 E -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E +F1(Quote Remo)87 208.8 Q -.1(va)-.1 G(l).1 E F0 1.112 +(After the preceding e)108 220.8 R 1.112 +(xpansions, all unquoted occurrences of the characters)-.15 F F1(\\) +3.613 E F0(,)A F1<08>3.613 E F0 3.613(,a)C(nd)-3.613 E F1(")4.446 E F0 +1.113(that did not result)4.446 F(from one of the abo)108 232.8 Q .3 +-.15(ve ex)-.15 H(pansions are remo).15 E -.15(ve)-.15 G(d.).15 E/F3 +10.95/Times-Bold@0 SF(REDIRECTION)72 249.6 Q F0 .545 +(Before a command is e)108 261.6 R -.15(xe)-.15 G .545 +(cuted, its input and output may be).15 F F2 -.37(re)3.045 G(dir).37 E +(ected)-.37 E F0 .545(using a special notation interpreted)3.815 F .616 +(by the shell.)108 273.6 R .617(Redirection may also be used to open an\ +d close \214les for the current shell e)5.616 F -.15(xe)-.15 G .617 +(cution en).15 F(viron-)-.4 E 3.275(ment. The)108 285.6 R(follo)3.275 E +.774(wing redirection operators may precede or appear an)-.25 F .774 +(ywhere within a)-.15 F F2 .774(simple command)3.614 F F0(or)4.044 E +(may follo)108 297.6 Q 2.5(wa)-.25 G F2(command)A F0 5(.R).77 G +(edirections are processed in the order the)-5 E 2.5(ya)-.15 G(ppear) +-2.5 E 2.5(,f)-.4 G(rom left to right.)-2.5 E .771(Each redirection tha\ +t may be preceded by a \214le descriptor number may instead be preceded\ + by a w)108 314.4 R .772(ord of)-.1 F .293(the form {)108 326.4 R F2 +(varname)A F0 2.793(}. In)B .293 +(this case, for each redirection operator e)2.793 F .293 +(xcept >&- and <&-, the shell will allocate)-.15 F 3.498<618c>108 338.4 +S .999(le descriptor greater than 10 and assign it to)-3.498 F F2 +(varname)3.499 E F0 5.999(.I)C 3.499(f>)-5.999 G .999 +(&- or <&- is preceded by {)-3.499 F F2(varname)A F0 .999(}, the)B -.25 +(va)108 350.4 S(lue of).25 E F2(varname)2.5 E F0 +(de\214nes the \214le descriptor to close.)2.5 E .284(In the follo)108 +367.2 R .283(wing descriptions, if the \214le descriptor number is omit\ +ted, and the \214rst character of the redirect-)-.25 F .512 +(ion operator is)108 379.2 R F1(<)3.012 E F0 3.012(,t)C .512 +(he redirection refers to the standard input \(\214le descriptor 0\).) +-3.012 F .512(If the \214rst character of the)5.512 F +(redirection operator is)108 391.2 Q F1(>)2.5 E F0 2.5(,t)C +(he redirection refers to the standard output \(\214le descriptor 1\).) +-2.5 E .825(The w)108 408 R .825(ord follo)-.1 F .824 +(wing the redirection operator in the follo)-.25 F .824 +(wing descriptions, unless otherwise noted, is sub-)-.25 F .772 +(jected to brace e)108 420 R .773(xpansion, tilde e)-.15 F .773 +(xpansion, parameter e)-.15 F .773 +(xpansion, command substitution, arithmetic e)-.15 F(xpan-)-.15 E .844 +(sion, quote remo)108 432 R -.25(va)-.15 G .843(l, pathname e).25 F .843 +(xpansion, and w)-.15 F .843(ord splitting.)-.1 F .843(If it e)5.843 F +.843(xpands to more than one w)-.15 F(ord,)-.1 E F1(bash)3.343 E F0 +(reports an error)108 444 Q(.)-.55 E +(Note that the order of redirections is signi\214cant.)108 460.8 Q -.15 +(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 477.6 Q F1(>)2.5 +E F0(dirlist 2)2.5 E F1(>&)A F0(1)A +(directs both standard output and standard error to the \214le)108 494.4 +Q F2(dirlist)2.5 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144 +511.2 Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .527 +(directs only the standard output to \214le)108 528 R F2(dirlist)3.027 E +F0 3.027(,b).68 G .527(ecause the standard error w)-3.027 F .527 +(as duplicated from the standard)-.1 F +(output before the standard output w)108 540 Q(as redirected to)-.1 E F2 +(dirlist)2.5 E F0(.).68 E F1(Bash)108 556.8 Q F0 .599(handles se)3.099 F +-.15(ve)-.25 G .599(ral \214lenames specially when the).15 F 3.099(ya) +-.15 G .598(re used in redirections, as described in the follo)-3.099 F +(wing)-.25 E(table:)108 568.8 Q F1(/de)144 585.6 Q(v/fd/)-.15 E F2(fd)A +F0(If)180 597.6 Q F2(fd)2.5 E F0(is a v)2.5 E(alid inte)-.25 E(ger)-.15 +E 2.5<2c8c>-.4 G(le descriptor)-2.5 E F2(fd)2.5 E F0(is duplicated.)2.5 +E F1(/de)144 609.6 Q(v/stdin)-.15 E F0(File descriptor 0 is duplicated.) +180 621.6 Q F1(/de)144 633.6 Q(v/stdout)-.15 E F0 +(File descriptor 1 is duplicated.)180 645.6 Q F1(/de)144 657.6 Q +(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180 669.6 Q F1(/de) +144 681.6 Q(v/tcp/)-.15 E F2(host)A F1(/)A F2(port)A F0(If)180 693.6 Q +F2(host)2.996 E F0 .496(is a v)2.996 F .496 +(alid hostname or Internet address, and)-.25 F F2(port)2.997 E F0 .497 +(is an inte)2.997 F .497(ger port number or ser)-.15 F(-)-.2 E +(vice name,)180 705.6 Q F1(bash)2.5 E F0 +(attempts to open a TCP connection to the corresponding sock)2.5 E(et.) +-.1 E(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(23)185.955 E 0 Cg +EP +%%Page: 24 24 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(/de)144 84 Q(v/udp/)-.15 E/F2 10 +/Times-Italic@0 SF(host)A F1(/)A F2(port)A F0(If)180 96 Q F2(host)2.997 +E F0 .497(is a v)2.997 F .497(alid hostname or Internet address, and) +-.25 F F2(port)2.996 E F0 .496(is an inte)2.996 F .496 +(ger port number or ser)-.15 F(-)-.2 E(vice name,)180 108 Q F1(bash)2.5 +E F0(attempts to open a UDP connection to the corresponding sock)2.5 E +(et.)-.1 E 2.5(Af)108 124.8 S +(ailure to open or create a \214le causes the redirection to f)-2.6 E +(ail.)-.1 E .946(Redirections using \214le descriptors greater than 9 s\ +hould be used with care, as the)108 141.6 R 3.447(ym)-.15 G .947 +(ay con\215ict with \214le)-3.447 F +(descriptors the shell uses internally)108 153.6 Q(.)-.65 E F1(Redir)87 +170.4 Q(ecting Input)-.18 E F0 .391 +(Redirection of input causes the \214le whose name results from the e) +108 182.4 R .391(xpansion of)-.15 F F2(wor)3.231 E(d)-.37 E F0 .391 +(to be opened for read-)3.661 F(ing on \214le descriptor)108 194.4 Q F2 +(n)2.5 E F0 2.5(,o).24 G 2.5(rt)-2.5 G +(he standard input \(\214le descriptor 0\) if)-2.5 E F2(n)2.86 E F0 +(is not speci\214ed.)2.74 E +(The general format for redirecting input is:)108 211.2 Q([)144 228 Q F2 +(n)A F0(])A F1(<)A F2(wor)A(d)-.37 E F1(Redir)87 244.8 Q(ecting Output) +-.18 E F0 .174 +(Redirection of output causes the \214le whose name results from the e) +108 256.8 R .175(xpansion of)-.15 F F2(wor)3.015 E(d)-.37 E F0 .175 +(to be opened for writ-)3.445 F .825(ing on \214le descriptor)108 268.8 +R F2(n)3.325 E F0 3.325(,o).24 G 3.325(rt)-3.325 G .824 +(he standard output \(\214le descriptor 1\) if)-3.325 F F2(n)3.684 E F0 +.824(is not speci\214ed.)3.564 F .824(If the \214le does not)5.824 F +-.15(ex)108 280.8 S(ist it is created; if it does e).15 E +(xist it is truncated to zero size.)-.15 E +(The general format for redirecting output is:)108 297.6 Q([)144 314.4 Q +F2(n)A F0(])A F1(>)A F2(wor)A(d)-.37 E F0 .154 +(If the redirection operator is)108 331.2 R F1(>)2.654 E F0 2.654(,a)C +.154(nd the)-2.654 F F1(noclob)2.654 E(ber)-.1 E F0 .154(option to the) +2.654 F F1(set)2.655 E F0 -.2(bu)2.655 G .155 +(iltin has been enabled, the redirection).2 F .658(will f)108 343.2 R +.658(ail if the \214le whose name results from the e)-.1 F .658 +(xpansion of)-.15 F F2(wor)3.158 E(d)-.37 E F0 -.15(ex)3.158 G .657 +(ists and is a re).15 F .657(gular \214le.)-.15 F .657(If the redi-) +5.657 F .408(rection operator is)108 355.2 R F1(>|)2.909 E F0 2.909(,o)C +2.909(rt)-2.909 G .409(he redirection operator is)-2.909 F F1(>)2.909 E +F0 .409(and the)2.909 F F1(noclob)2.909 E(ber)-.1 E F0 .409 +(option to the)2.909 F F1(set)2.909 E F0 -.2(bu)2.909 G .409 +(iltin command).2 F(is not enabled, the redirection is attempted e)108 +367.2 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214le named by) +-2.5 E F2(wor)2.5 E(d)-.37 E F0 -.15(ex)2.5 G(ists.).15 E F1 -.25(Ap)87 +384 S(pending Redir).25 E(ected Output)-.18 E F0 .642 +(Redirection of output in this f)108 396 R .642 +(ashion causes the \214le whose name results from the e)-.1 F .641 +(xpansion of)-.15 F F2(wor)3.481 E(d)-.37 E F0 .641(to be)3.911 F .473 +(opened for appending on \214le descriptor)108 408 R F2(n)2.973 E F0 +2.974(,o).24 G 2.974(rt)-2.974 G .474 +(he standard output \(\214le descriptor 1\) if)-2.974 F F2(n)3.334 E F0 +.474(is not speci\214ed.)3.214 F(If)5.474 E(the \214le does not e)108 +420 Q(xist it is created.)-.15 E +(The general format for appending output is:)108 436.8 Q([)144 453.6 Q +F2(n)A F0(])A F1(>>)A F2(wor)A(d)-.37 E F1(Redir)87 475.2 Q +(ecting Standard Output and Standard Err)-.18 E(or)-.18 E F0 .249 +(This construct allo)108 487.2 R .249(ws both the standard output \(\ +\214le descriptor 1\) and the standard error output \(\214le descrip-) +-.25 F(tor 2\) to be redirected to the \214le whose name is the e)108 +499.2 Q(xpansion of)-.15 E F2(wor)2.5 E(d)-.37 E F0(.).77 E +(There are tw)108 516 Q 2.5(of)-.1 G +(ormats for redirecting standard output and standard error:)-2.5 E F1 +(&>)144 532.8 Q F2(wor)A(d)-.37 E F0(and)108 544.8 Q F1(>&)144 556.8 Q +F2(wor)A(d)-.37 E F0(Of the tw)108 573.6 Q 2.5(of)-.1 G +(orms, the \214rst is preferred.)-2.5 E(This is semantically equi)5 E +-.25(va)-.25 G(lent to).25 E F1(>)144 590.4 Q F2(wor)A(d)-.37 E F0(2)2.5 +E F1(>&)A F0(1)A F1 -.25(Ap)87 612 S +(pending Standard Output and Standard Err).25 E(or)-.18 E F0 .248 +(This construct allo)108 624 R .249(ws both the standard output \(\214l\ +e descriptor 1\) and the standard error output \(\214le descrip-)-.25 F +(tor 2\) to be appended to the \214le whose name is the e)108 636 Q +(xpansion of)-.15 E F2(wor)2.5 E(d)-.37 E F0(.).77 E +(The format for appending standard output and standard error is:)108 +652.8 Q F1(&>>)144 669.6 Q F2(wor)A(d)-.37 E F0 +(This is semantically equi)108 686.4 Q -.25(va)-.25 G(lent to).25 E F1 +(>>)144 703.2 Q F2(wor)A(d)-.37 E F0(2)2.5 E F1(>&)A F0(1)A +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(24)185.955 E 0 Cg EP +%%Page: 25 25 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(Her)87 84 Q 2.5(eD)-.18 G(ocuments)-2.5 E +F0 .33(This type of redirection instructs the shell to read input from \ +the current source until a line containing only)108 96 R/F2 10 +/Times-Italic@0 SF(delimiter)108.35 108 Q F0 .614 +(\(with no trailing blanks\) is seen.)3.844 F .615 +(All of the lines read up to that point are then used as the stan-)5.615 +F(dard input for a command.)108 120 Q(The format of here-documents is:) +108 136.8 Q F1(<<)144 153.6 Q F0([)A F1A F0(])A F2(wor)A(d)-.37 E +(her)164 165.6 Q(e-document)-.37 E(delimiter)144 177.6 Q F0 .128 +(No parameter e)108 194.4 R .127 +(xpansion, command substitution, arithmetic e)-.15 F .127 +(xpansion, or pathname e)-.15 F .127(xpansion is performed)-.15 F(on)108 +206.4 Q F2(wor)3.274 E(d)-.37 E F0 5.774(.I).77 G 3.274(fa)-5.774 G +1.074 -.15(ny c)-3.274 H .774(haracters in).15 F F2(wor)3.614 E(d)-.37 E +F0 .774(are quoted, the)4.044 F F2(delimiter)3.624 E F0 .774 +(is the result of quote remo)4.004 F -.25(va)-.15 G 3.275(lo).25 G(n) +-3.275 E F2(wor)3.275 E(d)-.37 E F0 3.275(,a).77 G(nd)-3.275 E .905 +(the lines in the here-document are not e)108 218.4 R 3.405(xpanded. If) +-.15 F F2(wor)3.405 E(d)-.37 E F0 .904 +(is unquoted, all lines of the here-document are)3.405 F .694 +(subjected to parameter e)108 230.4 R .695 +(xpansion, command substitution, and arithmetic e)-.15 F 3.195 +(xpansion. In)-.15 F .695(the latter case, the)3.195 F +(character sequence)108 242.4 Q F1(\\)2.5 E F0(is ignored, and) +2.5 E F1(\\)2.5 E F0(must be used to quote the characters)2.5 E F1(\\) +2.5 E F0(,)A F1($)2.5 E F0 2.5(,a)C(nd)-2.5 E F1<92>2.5 E F0(.)A .602 +(If the redirection operator is)108 259.2 R F1(<<\255)3.101 E F0 3.101 +(,t)C .601(hen all leading tab characters are stripped from input lines\ + and the line)-3.101 F(containing)108 271.2 Q F2(delimiter)2.5 E F0 5 +(.T).73 G(his allo)-5 E +(ws here-documents within shell scripts to be indented in a natural f) +-.25 E(ashion.)-.1 E F1(Her)87 288 Q 2.5(eS)-.18 G(trings)-2.5 E F0 2.5 +(Av)108 300 S(ariant of here documents, the format is:)-2.75 E F1(<<<) +144 316.8 Q F2(wor)A(d)-.37 E F0(The)108 333.6 Q F2(wor)2.5 E(d)-.37 E +F0(is e)2.5 E +(xpanded and supplied to the command on its standard input.)-.15 E F1 +(Duplicating File Descriptors)87 350.4 Q F0(The redirection operator)108 +362.4 Q([)144 379.2 Q F2(n)A F0(])A F1(<&)A F2(wor)A(d)-.37 E F0 .126 +(is used to duplicate input \214le descriptors.)108 396 R(If)5.127 E F2 +(wor)2.967 E(d)-.37 E F0 -.15(ex)3.397 G .127 +(pands to one or more digits, the \214le descriptor denoted).15 F(by)108 +408 Q F2(n)3.318 E F0 .458(is made to be a cop)3.198 F 2.958(yo)-.1 G +2.958(ft)-2.958 G .457(hat \214le descriptor)-2.958 F 5.457(.I)-.55 G +2.957(ft)-5.457 G .457(he digits in)-2.957 F F2(wor)3.297 E(d)-.37 E F0 +.457(do not specify a \214le descriptor open)3.727 F .149 +(for input, a redirection error occurs.)108 420 R(If)5.149 E F2(wor) +2.989 E(d)-.37 E F0 -.25(eva)3.419 G .149(luates to).25 F F12.649 E +F0 2.65<2c8c>C .15(le descriptor)-2.65 F F2(n)3.01 E F0 .15(is closed.) +2.89 F(If)5.15 E F2(n)3.01 E F0 .15(is not speci\214ed,)2.89 F +(the standard input \(\214le descriptor 0\) is used.)108 432 Q +(The operator)108 448.8 Q([)144 465.6 Q F2(n)A F0(])A F1(>&)A F2(wor)A +(d)-.37 E F0 .444 +(is used similarly to duplicate output \214le descriptors.)108 482.4 R +(If)5.444 E F2(n)3.304 E F0 .443 +(is not speci\214ed, the standard output \(\214le descrip-)3.183 F 1.357 +(tor 1\) is used.)108 494.4 R 1.357(If the digits in)6.357 F F2(wor) +4.197 E(d)-.37 E F0 1.358(do not specify a \214le descriptor open for o\ +utput, a redirection error)4.627 F 2.597(occurs. As)108 506.4 R 2.597 +(as)2.597 G .097(pecial case, if)-2.597 F F2(n)2.596 E F0 .096 +(is omitted, and)2.596 F F2(wor)2.596 E(d)-.37 E F0 .096(does not e) +2.596 F .096(xpand to one or more digits, the standard out-)-.15 F +(put and standard error are redirected as described pre)108 518.4 Q +(viously)-.25 E(.)-.65 E F1(Mo)87 535.2 Q(ving File Descriptors)-.1 E F0 +(The redirection operator)108 547.2 Q([)144 564 Q F2(n)A F0(])A F1(<&)A +F2(digit)A F1A F0(mo)108 580.8 Q -.15(ve)-.15 G 3.035(st).15 G .535 +(he \214le descriptor)-3.035 F F2(digit)3.035 E F0 .535 +(to \214le descriptor)3.035 F F2(n)3.035 E F0 3.035(,o).24 G 3.035(rt) +-3.035 G .536(he standard input \(\214le descriptor 0\) if)-3.035 F F2 +(n)3.036 E F0 .536(is not speci-)3.036 F(\214ed.)108 592.8 Q F2(digit)5 +E F0(is closed after being duplicated to)2.5 E F2(n)2.5 E F0(.)A +(Similarly)108 609.6 Q 2.5(,t)-.65 G(he redirection operator)-2.5 E([) +144 626.4 Q F2(n)A F0(])A F1(>&)A F2(digit)A F1A F0(mo)108 643.2 Q +-.15(ve)-.15 G 2.786(st).15 G .286(he \214le descriptor)-2.786 F F2 +(digit)2.786 E F0 .286(to \214le descriptor)2.786 F F2(n)2.786 E F0 +2.786(,o).24 G 2.786(rt)-2.786 G .285 +(he standard output \(\214le descriptor 1\) if)-2.786 F F2(n)2.785 E F0 +.285(is not speci-)2.785 F(\214ed.)108 655.2 Q F1 +(Opening File Descriptors f)87 672 Q(or Reading and Writing)-.25 E F0 +(The redirection operator)108 684 Q([)144 700.8 Q F2(n)A F0(])A F1(<>)A +F2(wor)A(d)-.37 E F0 1.349(causes the \214le whose name is the e)108 +717.6 R 1.349(xpansion of)-.15 F F2(wor)4.189 E(d)-.37 E F0 1.349 +(to be opened for both reading and writing on \214le)4.619 F(descriptor) +108 729.6 Q F2(n)2.5 E F0 2.5(,o).24 G 2.5(ro)-2.5 G 2.5<6e8c>-2.5 G +(le descriptor 0 if)-2.5 E F2(n)2.86 E F0(is not speci\214ed.)2.74 E +(If the \214le does not e)5 E(xist, it is created.)-.15 E(GNU Bash-4.1) +72 768 Q(2009 December 29)135.965 E(25)185.955 E 0 Cg EP +%%Page: 26 26 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10.95/Times-Bold@0 SF(ALIASES)72 84 Q/F2 10/Times-Italic@0 SF +(Aliases)108 96 Q F0(allo)3.174 E 3.174(was)-.25 G .674 +(tring to be substituted for a w)-3.174 F .674 +(ord when it is used as the \214rst w)-.1 F .673 +(ord of a simple command.)-.1 F .394(The shell maintains a list of alia\ +ses that may be set and unset with the)108 108 R/F3 10/Times-Bold@0 SF +(alias)2.894 E F0(and)2.894 E F3(unalias)2.894 E F0 -.2(bu)2.894 G .394 +(iltin commands).2 F(\(see)108 120 Q/F4 9/Times-Bold@0 SF 1.98(SHELL B) +4.48 F(UIL)-.09 E 1.98(TIN COMMANDS)-.828 F F0(belo)4.23 E 4.48 +(w\). The)-.25 F 1.98(\214rst w)4.48 F 1.979 +(ord of each simple command, if unquoted, is)-.1 F(check)108 132 Q .472 +(ed to see if it has an alias.)-.1 F .472(If so, that w)5.472 F .473 +(ord is replaced by the te)-.1 F .473(xt of the alias.)-.15 F .473 +(The characters)5.473 F F3(/)2.973 E F0(,)A F3($)2.973 E F0(,)A F3<92> +2.973 E F0(,)A(and)108 144 Q F3(=)3.612 E F0 1.112(and an)3.612 F 3.612 +(yo)-.15 G 3.612(ft)-3.612 G 1.112(he shell)-3.612 F F2(metac)3.612 E +(har)-.15 E(acter)-.15 E(s)-.1 E F0 1.112 +(or quoting characters listed abo)3.612 F 1.411 -.15(ve m)-.15 H 1.111 +(ay not appear in an alias).15 F 3.619(name. The)108 156 R 1.119 +(replacement te)3.619 F 1.119(xt may contain an)-.15 F 3.619(yv)-.15 G +1.119(alid shell input, including shell metacharacters.)-3.869 F 1.12 +(The \214rst)6.12 F -.1(wo)108 168 S .514(rd of the replacement te).1 F +.514(xt is tested for aliases, b)-.15 F .514(ut a w)-.2 F .513 +(ord that is identical to an alias being e)-.1 F .513(xpanded is)-.15 F +.295(not e)108 180 R .295(xpanded a second time.)-.15 F .296 +(This means that one may alias)5.295 F F3(ls)2.796 E F0(to)2.796 E F3 +.296(ls \255F)2.796 F F0 2.796(,f)C .296(or instance, and)-2.796 F F3 +(bash)2.796 E F0 .296(does not try)2.796 F .543(to recursi)108 192 R +-.15(ve)-.25 G .543(ly e).15 F .543(xpand the replacement te)-.15 F +3.043(xt. If)-.15 F .543(the last character of the alias v)3.043 F .542 +(alue is a)-.25 F F2(blank)3.042 E F0 3.042(,t).67 G .542(hen the ne) +-3.042 F(xt)-.15 E(command w)108 204 Q(ord follo)-.1 E +(wing the alias is also check)-.25 E(ed for alias e)-.1 E(xpansion.)-.15 +E(Aliases are created and listed with the)108 220.8 Q F3(alias)2.5 E F0 +(command, and remo)2.5 E -.15(ve)-.15 G 2.5(dw).15 G(ith the)-2.5 E F3 +(unalias)2.5 E F0(command.)2.5 E .284 +(There is no mechanism for using ar)108 237.6 R .284 +(guments in the replacement te)-.18 F 2.784(xt. If)-.15 F(ar)2.784 E +.284(guments are needed, a shell func-)-.18 F(tion should be used \(see) +108 249.6 Q F4(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E 1.22 +(Aliases are not e)108 266.4 R 1.22 +(xpanded when the shell is not interacti)-.15 F -.15(ve)-.25 G 3.72(,u) +.15 G 1.22(nless the)-3.72 F F3(expand_aliases)3.72 E F0 1.22 +(shell option is set)3.72 F(using)108 278.4 Q F3(shopt)2.5 E F0 +(\(see the description of)2.5 E F3(shopt)2.5 E F0(under)2.5 E F4 +(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 +E .435 +(The rules concerning the de\214nition and use of aliases are some)108 +295.2 R .436(what confusing.)-.25 F F3(Bash)5.436 E F0(al)2.936 E -.1 +(wa)-.1 G .436(ys reads at least).1 F .338 +(one complete line of input before e)108 307.2 R -.15(xe)-.15 G .338 +(cuting an).15 F 2.838(yo)-.15 G 2.838(ft)-2.838 G .338 +(he commands on that line.)-2.838 F .337(Aliases are e)5.337 F .337 +(xpanded when)-.15 F 3.403(ac)108 319.2 S .904 +(ommand is read, not when it is e)-3.403 F -.15(xe)-.15 G 3.404 +(cuted. Therefore,).15 F .904 +(an alias de\214nition appearing on the same line as)3.404 F 1.162 +(another command does not tak)108 331.2 R 3.662(ee)-.1 G -.25(ff)-3.662 +G 1.162(ect until the ne).25 F 1.162(xt line of input is read.)-.15 F +1.161(The commands follo)6.161 F 1.161(wing the)-.25 F .277 +(alias de\214nition on that line are not af)108 343.2 R .277 +(fected by the ne)-.25 F 2.777(wa)-.25 G 2.777(lias. This)-2.777 F(beha) +2.777 E .277(vior is also an issue when functions)-.2 F .699(are e)108 +355.2 R -.15(xe)-.15 G 3.199(cuted. Aliases).15 F .699(are e)3.199 F +.699(xpanded when a function de\214nition is read, not when the functio\ +n is e)-.15 F -.15(xe)-.15 G(cuted,).15 E .494 +(because a function de\214nition is itself a compound command.)108 367.2 +R .495(As a consequence, aliases de\214ned in a func-)5.494 F .085 +(tion are not a)108 379.2 R -.25(va)-.2 G .084 +(ilable until after that function is e).25 F -.15(xe)-.15 G 2.584 +(cuted. T).15 F 2.584(ob)-.8 G 2.584(es)-2.584 G .084(afe, al)-2.584 F +-.1(wa)-.1 G .084(ys put alias de\214nitions on a sepa-).1 F +(rate line, and do not use)108 391.2 Q F3(alias)2.5 E F0 +(in compound commands.)2.5 E -.15(Fo)108 408 S 2.5(ra).15 G(lmost e)-2.5 +E -.15(ve)-.25 G(ry purpose, aliases are superseded by shell functions.) +.15 E F1(FUNCTIONS)72 424.8 Q F0 3.467(As)108 436.8 S .967 +(hell function, de\214ned as described abo)-3.467 F 1.267 -.15(ve u)-.15 +H(nder).15 E F4 .967(SHELL GRAMMAR)3.467 F/F5 9/Times-Roman@0 SF(,)A F0 +.968(stores a series of commands for)3.217 F 1.002(later e)108 448.8 R +-.15(xe)-.15 G 3.502(cution. When).15 F 1.002(the name of a shell funct\ +ion is used as a simple command name, the list of com-)3.502 F .315 +(mands associated with that function name is e)108 460.8 R -.15(xe)-.15 +G 2.816(cuted. Functions).15 F .316(are e)2.816 F -.15(xe)-.15 G .316 +(cuted in the conte).15 F .316(xt of the current)-.15 F .036 +(shell; no ne)108 472.8 R 2.536(wp)-.25 G .036 +(rocess is created to interpret them \(contrast this with the e)-2.536 F +-.15(xe)-.15 G .036(cution of a shell script\).).15 F .035(When a)5.035 +F .639(function is e)108 484.8 R -.15(xe)-.15 G .639(cuted, the ar).15 F +.639 +(guments to the function become the positional parameters during its e) +-.18 F -.15(xe)-.15 G(cution.).15 E .533(The special parameter)108 496.8 +R F3(#)3.033 E F0 .532(is updated to re\215ect the change.)3.033 F .532 +(Special parameter 0 is unchanged.)5.532 F .532(The \214rst ele-)5.532 F +(ment of the)108 508.8 Q F4(FUNCN)2.5 E(AME)-.18 E F0 -.25(va)2.25 G +(riable is set to the name of the function while the function is e).25 E +-.15(xe)-.15 G(cuting.).15 E 1.25(All other aspects of the shell e)108 +525.6 R -.15(xe)-.15 G 1.25(cution en).15 F 1.25 +(vironment are identical between a function and its caller with)-.4 F +1.049(these e)108 537.6 R 3.548(xceptions: the)-.15 F F4(DEB)3.548 E(UG) +-.09 E F0(and)3.298 E F3(RETURN)3.548 E F0 1.048 +(traps \(see the description of the)3.548 F F3(trap)3.548 E F0 -.2(bu) +3.548 G 1.048(iltin under).2 F F4(SHELL)3.548 E -.09(BU)108 549.6 S(IL) +.09 E .478(TIN COMMANDS)-.828 F F0(belo)2.728 E .479 +(w\) are not inherited unless the function has been gi)-.25 F -.15(ve) +-.25 G 2.979(nt).15 G(he)-2.979 E F3(trace)2.979 E F0(attrib)2.979 E +.479(ute \(see)-.2 F .421(the description of the)108 561.6 R F4(declar) +2.92 E(e)-.162 E F0 -.2(bu)2.67 G .42(iltin belo).2 F .42(w\) or the) +-.25 F F3 .42(\255o functrace)2.92 F F0 .42 +(shell option has been enabled with the)2.92 F F3(set)2.92 E F0 -.2(bu) +108 573.6 S .071(iltin \(in which case all functions inherit the).2 F F3 +(DEB)2.572 E(UG)-.1 E F0(and)2.572 E F3(RETURN)2.572 E F0 .072 +(traps\), and the)2.572 F F4(ERR)2.572 E F0 .072(trap is not inher)2.322 +F(-)-.2 E(ited unless the)108 585.6 Q F3(\255o errtrace)2.5 E F0 +(shell option has been enabled.)2.5 E -1.11(Va)108 602.4 S .656 +(riables local to the function may be declared with the)1.11 F F3(local) +3.155 E F0 -.2(bu)3.155 G .655(iltin command.).2 F(Ordinarily)5.655 E +3.155(,v)-.65 G .655(ariables and)-3.405 F(their v)108 614.4 Q +(alues are shared between the function and its caller)-.25 E(.)-.55 E +.043(If the b)108 631.2 R .043(uiltin command)-.2 F F3 -.18(re)2.543 G +(tur).18 E(n)-.15 E F0 .043(is e)2.543 F -.15(xe)-.15 G .043 +(cuted in a function, the function completes and e).15 F -.15(xe)-.15 G +.044(cution resumes with).15 F 1.012(the ne)108 643.2 R 1.012 +(xt command after the function call.)-.15 F(An)6.011 E 3.511(yc)-.15 G +1.011(ommand associated with the)-3.511 F F3(RETURN)3.511 E F0 1.011 +(trap is e)3.511 F -.15(xe)-.15 G(cuted).15 E .213(before e)108 655.2 R +-.15(xe)-.15 G .213(cution resumes.).15 F .213 +(When a function completes, the v)5.213 F .214 +(alues of the positional parameters and the spe-)-.25 F(cial parameter) +108 667.2 Q F3(#)2.5 E F0(are restored to the v)2.5 E(alues the)-.25 E +2.5(yh)-.15 G(ad prior to the function')-2.5 E 2.5(se)-.55 G -.15(xe) +-2.65 G(cution.).15 E 1.359 +(Function names and de\214nitions may be listed with the)108 684 R F3 +3.858 E F0 1.358(option to the)3.858 F F3(declar)3.858 E(e)-.18 E +F0(or)3.858 E F3(typeset)3.858 E F0 -.2(bu)3.858 G 1.358(iltin com-).2 F +3.39(mands. The)108 696 R F33.39 E F0 .89(option to)3.39 F F3 +(declar)3.39 E(e)-.18 E F0(or)3.39 E F3(typeset)3.39 E F0 .89 +(will list the function names only \(and optionally the source)3.39 F +.327(\214le and line number)108 708 R 2.827(,i)-.4 G 2.827(ft)-2.827 G +(he)-2.827 E F3(extdeb)2.827 E(ug)-.2 E F0 .326 +(shell option is enabled\).)2.827 F .326(Functions may be e)5.326 F .326 +(xported so that subshells)-.15 F 1.297(automatically ha)108 720 R 1.597 +-.15(ve t)-.2 H 1.297(hem de\214ned with the).15 F F33.797 E F0 +1.297(option to the)3.797 F F3(export)3.798 E F0 -.2(bu)3.798 G 3.798 +(iltin. A).2 F 1.298(function de\214nition may be)3.798 F(GNU Bash-4.1) +72 768 Q(2009 December 29)135.965 E(26)185.955 E 0 Cg EP +%%Page: 27 27 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E .161(deleted using the)108 84 R/F1 10/Times-Bold@0 SF2.661 +E F0 .161(option to the)2.661 F F1(unset)2.661 E F0 -.2(bu)2.661 G 2.661 +(iltin. Note).2 F .16(that shell functions and v)2.661 F .16 +(ariables with the same name)-.25 F 1.325 +(may result in multiple identically-named entries in the en)108 96 R +1.325(vironment passed to the shell')-.4 F 3.825(sc)-.55 G 3.825 +(hildren. Care)-3.825 F(should be tak)108 108 Q +(en in cases where this may cause a problem.)-.1 E +(Functions may be recursi)108 124.8 Q -.15(ve)-.25 G 5(.N).15 G 2.5(ol) +-5 G(imit is imposed on the number of recursi)-2.5 E .3 -.15(ve c)-.25 H +(alls.).15 E/F2 10.95/Times-Bold@0 SF(ARITHMETIC EV)72 141.6 Q(ALU) +-1.478 E -1.04(AT)-.657 G(ION)1.04 E F0 2.298(The shell allo)108 153.6 R +2.297(ws arithmetic e)-.25 F 2.297(xpressions to be e)-.15 F -.25(va) +-.25 G 2.297(luated, under certain circumstances \(see the).25 F F1(let) +4.797 E F0(and)4.797 E F1(declar)108 165.6 Q(e)-.18 E F0 -.2(bu)2.705 G +.205(iltin commands and).2 F F1 .205(Arithmetic Expansion)2.705 F F0 +2.705(\). Ev)B .205(aluation is done in \214x)-.25 F .206(ed-width inte) +-.15 F .206(gers with no)-.15 F .429(check for o)108 177.6 R -.15(ve) +-.15 G(r\215o).15 E 1.729 -.65(w, t)-.25 H .429(hough di).65 F .428 +(vision by 0 is trapped and \215agged as an error)-.25 F 5.428(.T)-.55 G +.428(he operators and their prece-)-5.428 F 1.919(dence, associati)108 +189.6 R(vity)-.25 E 4.419(,a)-.65 G 1.919(nd v)-4.419 F 1.919 +(alues are the same as in the C language.)-.25 F 1.92(The follo)6.92 F +1.92(wing list of operators is)-.25 F(grouped into le)108 201.6 Q -.15 +(ve)-.25 G(ls of equal-precedence operators.).15 E(The le)5 E -.15(ve) +-.25 G(ls are listed in order of decreasing precedence.).15 E/F3 10 +/Times-Italic@0 SF(id)108 218.4 Q F1(++)A F3(id)2.5 E F1A F0 -.25 +(va)144 230.4 S(riable post-increment and post-decrement).25 E F1(++)108 +242.4 Q F3(id)A F12.5 E F3(id)A F0 -.25(va)144 254.4 S +(riable pre-increment and pre-decrement).25 E F1 2.5108 266.4 S F0 +(unary minus and plus)19.6 E F1 2.5(!~)108 278.4 S F0 +(logical and bitwise ne)24.34 E -.05(ga)-.15 G(tion).05 E F1(**)108 +290.4 Q F0 -.15(ex)26 G(ponentiation).15 E F1 2.5(*/%)108 302.4 S F0 +(multiplication, di)10.72 E(vision, remainder)-.25 E F1 2.5<2bad>108 +314.4 S F0(addition, subtraction)19.6 E F1(<< >>)108 326.4 Q F0 +(left and right bitwise shifts)10.7 E F1(<= >= < >)108 338.4 Q F0 +(comparison)144 350.4 Q F1(== !=)108 362.4 Q F0(equality and inequality) +13.07 E F1(&)108 374.4 Q F0(bitwise AND)27.67 E F1(^)108 386.4 Q F0 +(bitwise e)32.67 E(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F1(|)108 +398.4 Q F0(bitwise OR)33.8 E F1(&&)108 410.4 Q F0(logical AND)19.34 E F1 +(||)108 422.4 Q F0(logical OR)31.6 E F3 -.2(ex)108 434.4 S(pr).2 E F1(?) +A F3 -.2(ex)C(pr).2 E F1(:)A F3 -.2(ex)C(pr).2 E F0 +(conditional operator)144 446.4 Q F1 2.5(=*)108 458.4 S 2.5(=/)-2.5 G +2.5(=%)-2.5 G 2.5(=+)-2.5 G 2.5<3dad>-2.5 G 2.5(=<)-2.5 G +(<= >>= &= ^= |=)-2.5 E F0(assignment)144 470.4 Q F3 -.2(ex)108 482.4 S +(pr1).2 E F1(,)2.5 E F3 -.2(ex)2.5 G(pr2).2 E F0(comma)144 494.4 Q .68 +(Shell v)108 511.2 R .68(ariables are allo)-.25 F .68 +(wed as operands; parameter e)-.25 F .68 +(xpansion is performed before the e)-.15 F .68(xpression is e)-.15 F +-.25(va)-.25 G(lu-).25 E 3.507(ated. W)108 523.2 R 1.007(ithin an e)-.4 +F 1.007(xpression, shell v)-.15 F 1.007 +(ariables may also be referenced by name without using the parameter) +-.25 F -.15(ex)108 535.2 S 1.041(pansion syntax.).15 F 3.541(As)6.041 G +1.041(hell v)-3.541 F 1.041(ariable that is null or unset e)-.25 F -.25 +(va)-.25 G 1.04(luates to 0 when referenced by name without).25 F 1.466 +(using the parameter e)108 547.2 R 1.466(xpansion syntax.)-.15 F 1.467 +(The v)6.466 F 1.467(alue of a v)-.25 F 1.467(ariable is e)-.25 F -.25 +(va)-.25 G 1.467(luated as an arithmetic e).25 F(xpression)-.15 E 1.39 +(when it is referenced, or when a v)108 559.2 R 1.389 +(ariable which has been gi)-.25 F -.15(ve)-.25 G 3.889(nt).15 G(he) +-3.889 E F3(inte)3.889 E -.1(ge)-.4 G(r).1 E F0(attrib)3.889 E 1.389 +(ute using)-.2 F F1(declar)3.889 E 3.889(e-)-.18 G(i)-3.889 E F0(is) +3.889 E .343(assigned a v)108 571.2 R 2.843(alue. A)-.25 F .343(null v) +2.843 F .343(alue e)-.25 F -.25(va)-.25 G .343(luates to 0.).25 F 2.843 +(As)5.343 G .343(hell v)-2.843 F .343(ariable need not ha)-.25 F .643 +-.15(ve i)-.2 H .343(ts inte).15 F .344(ger attrib)-.15 F .344 +(ute turned on)-.2 F(to be used in an e)108 583.2 Q(xpression.)-.15 E +1.406(Constants with a leading 0 are interpreted as octal numbers.)108 +600 R 3.906(Al)6.406 G 1.406(eading 0x or 0X denotes he)-3.906 F +(xadecimal.)-.15 E .589(Otherwise, numbers tak)108 612 R 3.089(et)-.1 G +.589(he form [)-3.089 F F3(base#)A F0 .589(]n, where)B F3(base)3.089 E +F0 .59(is a decimal number between 2 and 64 represent-)3.089 F .093 +(ing the arithmetic base, and)108 624 R F3(n)2.593 E F0 .093 +(is a number in that base.)2.593 F(If)5.093 E F3(base#)2.593 E F0 .092 +(is omitted, then base 10 is used.)2.593 F .092(The digits)5.092 F .064 +(greater than 9 are represented by the lo)108 636 R .064 +(wercase letters, the uppercase letters, @, and _, in that order)-.25 F +5.065(.I)-.55 G(f)-5.065 E F3(base)2.565 E F0 .433 +(is less than or equal to 36, lo)108 648 R .432(wercase and uppercase l\ +etters may be used interchangeably to represent num-)-.25 F +(bers between 10 and 35.)108 660 Q .234(Operators are e)108 676.8 R -.25 +(va)-.25 G .234(luated in order of precedence.).25 F(Sub-e)5.234 E .234 +(xpressions in parentheses are e)-.15 F -.25(va)-.25 G .235 +(luated \214rst and may).25 F -.15(ove)108 688.8 S +(rride the precedence rules abo).15 E -.15(ve)-.15 G(.).15 E F2 +(CONDITION)72 705.6 Q(AL EXPRESSIONS)-.219 E F0 .256(Conditional e)108 +717.6 R .256(xpressions are used by the)-.15 F F1([[)2.755 E F0 .255 +(compound command and the)2.755 F F1(test)2.755 E F0(and)2.755 E F1([) +2.755 E F0 -.2(bu)2.755 G .255(iltin commands to test).2 F .77 +(\214le attrib)108 729.6 R .77 +(utes and perform string and arithmetic comparisons.)-.2 F .77 +(Expressions are formed from the follo)5.77 F(wing)-.25 E(GNU Bash-4.1) +72 768 Q(2009 December 29)135.965 E(27)185.955 E 0 Cg EP +%%Page: 28 28 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E 1.041(unary or binary primaries.)108 84 R 1.041(If an)6.041 F(y) +-.15 E/F1 10/Times-Italic@0 SF(\214le)3.541 E F0(ar)3.541 E 1.04 +(gument to one of the primaries is of the form)-.18 F F1(/de)3.54 E +(v/fd/n)-.15 E F0 3.54(,t)C 1.04(hen \214le)-3.54 F(descriptor)108 96 Q +F1(n)3.788 E F0 1.289(is check)3.788 F 3.789(ed. If)-.1 F(the)3.789 E F1 +(\214le)3.789 E F0(ar)3.789 E 1.289 +(gument to one of the primaries is one of)-.18 F F1(/de)3.789 E(v/stdin) +-.15 E F0(,)A F1(/de)3.789 E(v/stdout)-.15 E F0 3.789(,o)C(r)-3.789 E F1 +(/de)108 108 Q(v/stderr)-.15 E F0 2.5<2c8c>C +(le descriptor 0, 1, or 2, respecti)-2.5 E -.15(ve)-.25 G(ly).15 E 2.5 +(,i)-.65 G 2.5(sc)-2.5 G(heck)-2.5 E(ed.)-.1 E .722 +(Unless otherwise speci\214ed, primaries that operate on \214les follo) +108 124.8 R 3.221(ws)-.25 G .721(ymbolic links and operate on the tar) +-3.221 F(get)-.18 E(of the link, rather than the link itself.)108 136.8 +Q(When used with)108 154.8 Q/F2 10/Times-Bold@0 SF([[)2.5 E F0 2.5(,T)C +(he)-2.5 E F2(<)2.5 E F0(and)2.5 E F2(>)2.5 E F0(operators sort le)2.5 E +(xicographically using the current locale.)-.15 E F2108 178.8 Q F1 +(\214le)2.5 E F0 -.35(Tr)10.58 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex) +2.5 G(ists.).15 E F2108 190.8 Q F1(\214le)2.5 E F0 -.35(Tr)10.02 G +(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is a block special \214le.).15 E F2108 202.8 Q F1 +(\214le)2.5 E F0 -.35(Tr)11.14 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex) +2.5 G(ists and is a character special \214le.).15 E F2108 214.8 Q +F1(\214le)2.5 E F0 -.35(Tr)10.02 G(ue if).35 E F1(\214le)2.5 E F0 -.15 +(ex)2.5 G(ists and is a directory).15 E(.)-.65 E F2108 226.8 Q F1 +(\214le)2.5 E F0 -.35(Tr)11.14 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex) +2.5 G(ists.).15 E F2108 238.8 Q F1(\214le)2.5 E F0 -.35(Tr)12.25 G +(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a re).15 E +(gular \214le.)-.15 E F2108 250.8 Q F1(\214le)2.5 E F0 -.35(Tr) +10.58 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is set-group-id.).15 E F2108 262.8 Q F1(\214le)2.5 E F0 +-.35(Tr)10.02 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is a symbolic link.).15 E F2108 274.8 Q F1(\214le)2.5 E +F0 -.35(Tr)10.02 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and its `).15 E(`stick)-.74 E(y')-.15 E 2.5('b)-.74 G(it is set.) +-2.5 E F2108 286.8 Q F1(\214le)2.5 E F0 -.35(Tr)10.02 G(ue if).35 +E F1(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a named pipe \(FIFO\).) +.15 E F2108 298.8 Q F1(\214le)2.5 E F0 -.35(Tr)11.14 G(ue if).35 E +F1(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is readable.).15 E F2108 +310.8 Q F1(\214le)2.5 E F0 -.35(Tr)11.69 G(ue if).35 E F1(\214le)2.5 E +F0 -.15(ex)2.5 G(ists and has a size greater than zero.).15 E F2 +108 322.8 Q F1(fd)2.5 E F0 -.35(Tr)16.69 G(ue if \214le descriptor).35 E +F1(fd)4.47 E F0(is open and refers to a terminal.)3.27 E F2108 +334.8 Q F1(\214le)2.5 E F0 -.35(Tr)10.02 G(ue if).35 E F1(\214le)2.5 E +F0 -.15(ex)2.5 G(ists and its set-user).15 E(-id bit is set.)-.2 E F2 +108 346.8 Q F1(\214le)2.5 E F0 -.35(Tr)8.36 G(ue if).35 E F1 +(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is writable.).15 E F2108 +358.8 Q F1(\214le)2.5 E F0 -.35(Tr)10.58 G(ue if).35 E F1(\214le)2.5 E +F0 -.15(ex)2.5 G(ists and is e).15 E -.15(xe)-.15 G(cutable.).15 E F2 +108 370.8 Q F1(\214le)2.5 E F0 -.35(Tr)7.8 G(ue if).35 E F1 +(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is o).15 E(wned by the ef)-.25 E +(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id.).15 E F2108 382.8 Q F1 +(\214le)2.5 E F0 -.35(Tr)7.8 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex) +2.5 G(ists and is o).15 E(wned by the ef)-.25 E(fecti)-.25 E .3 -.15 +(ve g)-.25 H(roup id.).15 E F2108 394.8 Q F1(\214le)2.5 E F0 -.35 +(Tr)8.91 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is a symbolic link.).15 E F2108 406.8 Q F1(\214le)2.5 E +F0 -.35(Tr)10.02 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is a sock).15 E(et.)-.1 E F2108 418.8 Q F1(\214le)2.5 E +F0 -.35(Tr)8.36 G(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and has been modi\214ed since it w).15 E(as last read.)-.1 E F1 +(\214le1)108 430.8 Q F02.5 E F2(nt)A F1(\214le2)2.5 E F0 -.35(Tr)144 +442.8 S .038(ue if).35 F F1(\214le1)2.538 E F0 .039(is ne)2.539 F .039 +(wer \(according to modi\214cation date\) than)-.25 F F1(\214le2)2.539 E +F0 2.539(,o)C 2.539(ri)-2.539 G(f)-2.539 E F1(\214le1)2.539 E F0 -.15 +(ex)2.539 G .039(ists and).15 F F1(\214le2)2.539 E F0 .039(does not.) +2.539 F F1(\214le1)108 454.8 Q F02.5 E F2(ot)A F1(\214le2)2.5 E F0 +-.35(Tr)144 466.8 S(ue if).35 E F1(\214le1)2.5 E F0(is older than)2.5 E +F1(\214le2)2.5 E F0 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F1(\214le2)2.5 E F0 +-.15(ex)2.5 G(ists and).15 E F1(\214le1)2.5 E F0(does not.)2.5 E F1 +(\214le1)108 478.8 Q F2(\255ef)2.5 E F1(\214le2)2.5 E F0 -.35(Tr)144 +490.8 S(ue if).35 E F1(\214le1)2.5 E F0(and)2.5 E F1(\214le2)2.5 E F0 +(refer to the same de)2.5 E(vice and inode numbers.)-.25 E F2108 +502.8 Q F1(optname)2.5 E F0 -.35(Tr)144 514.8 S 1.144 +(ue if shell option).35 F F1(optname)3.874 E F0 1.144(is enabled.)3.824 +F 1.143(See the list of options under the description of the)6.144 F F2 +3.643 E F0(option to the)144 526.8 Q F2(set)2.5 E F0 -.2(bu)2.5 G +(iltin belo).2 E -.65(w.)-.25 G F2108 538.8 Q F1(string)2.5 E F0 +-.35(Tr)144 550.8 S(ue if the length of).35 E F1(string)2.5 E F0 +(is zero.)2.5 E F1(string)108 562.8 Q F2108 574.8 Q F1(string)2.5 +E F0 -.35(Tr)144 586.8 S(ue if the length of).35 E F1(string)2.84 E F0 +(is non-zero.)2.72 E F1(string1)108 603.6 Q F2(==)2.5 E F1(string2)2.5 E +(string1)108 615.6 Q F2(=)2.5 E F1(string2)2.5 E F0 -.35(Tr)144 627.6 S +(ue if the strings are equal.).35 E F2(=)5 E F0(should be used with the) +2.5 E F2(test)2.5 E F0(command for POSIX conformance.)2.5 E F1(string1) +108 644.4 Q F2(!=)2.5 E F1(string2)2.5 E F0 -.35(Tr)144 656.4 S +(ue if the strings are not equal.).35 E F1(string1)108 673.2 Q F2(<)2.5 +E F1(string2)2.5 E F0 -.35(Tr)144 685.2 S(ue if).35 E F1(string1)2.5 E +F0(sorts before)2.5 E F1(string2)2.5 E F0(le)2.5 E(xicographically)-.15 +E(.)-.65 E F1(string1)108 702 Q F2(>)2.5 E F1(string2)2.5 E F0 -.35(Tr) +144 714 S(ue if).35 E F1(string1)2.5 E F0(sorts after)2.5 E F1(string2) +2.5 E F0(le)2.5 E(xicographically)-.15 E(.)-.65 E(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(28)185.955 E 0 Cg EP +%%Page: 29 29 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Italic@0 SF(ar)108.33 84 Q(g1)-.37 E/F2 10 +/Times-Bold@0 SF(OP)2.5 E F1(ar)2.5 E(g2)-.37 E/F3 9/Times-Bold@0 SF(OP) +144 96 Q F0 .385(is one of)2.634 F F2(\255eq)2.885 E F0(,)A F2(\255ne) +2.885 E F0(,)A F2(\255lt)2.885 E F0(,)A F2(\255le)2.885 E F0(,)A F2 +(\255gt)2.885 E F0 2.885(,o)C(r)-2.885 E F2(\255ge)2.885 E F0 5.385(.T)C +.385(hese arithmetic binary operators return true if)-5.385 F F1(ar) +2.885 E(g1)-.37 E F0 .845(is equal to, not equal to, less than, less th\ +an or equal to, greater than, or greater than or equal to)144 108 R F1 +(ar)144 120 Q(g2)-.37 E F0 2.5(,r)C(especti)-2.5 E -.15(ve)-.25 G(ly).15 +E(.)-.65 E F1(Ar)6.01 E(g1)-.37 E F0(and)2.5 E F1(ar)2.83 E(g2)-.37 E F0 +(may be positi)2.52 E .3 -.15(ve o)-.25 H 2.5(rn).15 G -2.25 -.15(eg a) +-2.5 H(ti).15 E .3 -.15(ve i)-.25 H(nte).15 E(gers.)-.15 E/F4 10.95 +/Times-Bold@0 SF(SIMPLE COMMAND EXP)72 136.8 Q(ANSION)-.81 E F0 .613 +(When a simple command is e)108 148.8 R -.15(xe)-.15 G .614 +(cuted, the shell performs the follo).15 F .614(wing e)-.25 F .614 +(xpansions, assignments, and redi-)-.15 F(rections, from left to right.) +108 160.8 Q 26(1. The)108 177.6 R -.1(wo)4.349 G 1.849 +(rds that the parser has mark).1 F 1.848(ed as v)-.1 F 1.848 +(ariable assignments \(those preceding the command)-.25 F +(name\) and redirections are sa)144 189.6 Q -.15(ve)-.2 G 2.5(df).15 G +(or later processing.)-2.5 E 26(2. The)108 206.4 R -.1(wo)3.663 G 1.163 +(rds that are not v).1 F 1.164 +(ariable assignments or redirections are e)-.25 F 3.664(xpanded. If)-.15 +F(an)3.664 E 3.664(yw)-.15 G 1.164(ords remain)-3.764 F .776(after e)144 +218.4 R .776(xpansion, the \214rst w)-.15 F .776(ord is tak)-.1 F .775 +(en to be the name of the command and the remaining w)-.1 F(ords)-.1 E +(are the ar)144 230.4 Q(guments.)-.18 E 26(3. Redirections)108 247.2 R +(are performed as described abo)2.5 E .3 -.15(ve u)-.15 H(nder).15 E F3 +(REDIRECTION)2.5 E/F5 9/Times-Roman@0 SF(.)A F0 26(4. The)108 264 R(te) +3.216 E .717(xt after the)-.15 F F2(=)3.217 E F0 .717(in each v)3.217 F +.717(ariable assignment under)-.25 F .717(goes tilde e)-.18 F .717 +(xpansion, parameter e)-.15 F(xpansion,)-.15 E .34 +(command substitution, arithmetic e)144 276 R .339 +(xpansion, and quote remo)-.15 F -.25(va)-.15 G 2.839(lb).25 G .339 +(efore being assigned to the v)-2.839 F(ari-)-.25 E(able.)144 288 Q .332 +(If no command name results, the v)108 304.8 R .332 +(ariable assignments af)-.25 F .332(fect the current shell en)-.25 F +2.833(vironment. Otherwise,)-.4 F(the)2.833 E -.25(va)108 316.8 S .757 +(riables are added to the en).25 F .757(vironment of the e)-.4 F -.15 +(xe)-.15 G .757(cuted command and do not af).15 F .757 +(fect the current shell en)-.25 F(vi-)-.4 E 3.176(ronment. If)108 328.8 +R(an)3.176 E 3.176(yo)-.15 G 3.176(ft)-3.176 G .677 +(he assignments attempts to assign a v)-3.176 F .677 +(alue to a readonly v)-.25 F .677(ariable, an error occurs, and)-.25 F +(the command e)108 340.8 Q(xits with a non-zero status.)-.15 E .15 +(If no command name results, redirections are performed, b)108 357.6 R +.149(ut do not af)-.2 F .149(fect the current shell en)-.25 F 2.649 +(vironment. A)-.4 F(redirection error causes the command to e)108 369.6 +Q(xit with a non-zero status.)-.15 E 1.064 +(If there is a command name left after e)108 386.4 R 1.064(xpansion, e) +-.15 F -.15(xe)-.15 G 1.064(cution proceeds as described belo).15 F +4.864 -.65(w. O)-.25 H 1.064(therwise, the).65 F .069(command e)108 +398.4 R 2.569(xits. If)-.15 F .069(one of the e)2.569 F .069 +(xpansions contained a command substitution, the e)-.15 F .068 +(xit status of the command)-.15 F .466(is the e)108 410.4 R .466 +(xit status of the last command substitution performed.)-.15 F .467 +(If there were no command substitutions, the)5.466 F(command e)108 422.4 +Q(xits with a status of zero.)-.15 E F4(COMMAND EXECUTION)72 439.2 Q F0 +.547(After a command has been split into w)108 451.2 R .546 +(ords, if it results in a simple command and an optional list of ar)-.1 +F(gu-)-.18 E(ments, the follo)108 463.2 Q(wing actions are tak)-.25 E +(en.)-.1 E .379(If the command name contains no slashes, the shell atte\ +mpts to locate it.)108 480 R .379(If there e)5.379 F .379 +(xists a shell function by)-.15 F .246(that name, that function is in) +108 492 R -.2(vo)-.4 G -.1(ke).2 G 2.746(da).1 G 2.746(sd)-2.746 G .246 +(escribed abo)-2.746 F .546 -.15(ve i)-.15 H(n).15 E F3(FUNCTIONS)2.746 +E F5(.)A F0 .246(If the name does not match a func-)4.746 F +(tion, the shell searches for it in the list of shell b)108 504 Q 2.5 +(uiltins. If)-.2 F 2.5(am)2.5 G(atch is found, that b)-2.5 E +(uiltin is in)-.2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E .309 +(If the name is neither a shell function nor a b)108 520.8 R .31 +(uiltin, and contains no slashes,)-.2 F F2(bash)2.81 E F0 .31 +(searches each element of)2.81 F(the)108 532.8 Q F3 -.666(PA)3.163 G(TH) +-.189 E F0 .662(for a directory containing an e)2.913 F -.15(xe)-.15 G +.662(cutable \214le by that name.).15 F F2(Bash)5.662 E F0 .662 +(uses a hash table to remember)3.162 F 1.914(the full pathnames of e)108 +544.8 R -.15(xe)-.15 G 1.915(cutable \214les \(see).15 F F2(hash)4.415 E +F0(under)4.415 E F3 1.915(SHELL B)4.415 F(UIL)-.09 E 1.915(TIN COMMANDS) +-.828 F F0(belo)4.165 E 4.415(w\). A)-.25 F(full)4.415 E .72 +(search of the directories in)108 556.8 R F3 -.666(PA)3.22 G(TH)-.189 E +F0 .719 +(is performed only if the command is not found in the hash table.)2.97 F +.719(If the)5.719 F .956(search is unsuccessful, the shell searches for\ + a de\214ned shell function named)108 568.8 R F2(command_not_f)3.456 E +(ound_han-)-.25 E(dle)108 580.8 Q F0 5.278(.I)C 2.778(ft)-5.278 G .278 +(hat function e)-2.778 F .278(xists, it is in)-.15 F -.2(vo)-.4 G -.1 +(ke).2 G 2.778(dw).1 G .277 +(ith the original command and the original command')-2.778 F 2.777(sa) +-.55 G -.18(rg)-2.777 G(uments).18 E .775(as its ar)108 592.8 R .775 +(guments, and the function')-.18 F 3.275(se)-.55 G .775 +(xit status becomes the e)-3.425 F .775(xit status of the shell.)-.15 F +.776(If that function is not)5.776 F +(de\214ned, the shell prints an error message and returns an e)108 604.8 +Q(xit status of 127.)-.15 E 1.089(If the search is successful, or if th\ +e command name contains one or more slashes, the shell e)108 621.6 R +-.15(xe)-.15 G 1.089(cutes the).15 F .197(named program in a separate e) +108 633.6 R -.15(xe)-.15 G .197(cution en).15 F 2.698(vironment. Ar)-.4 +F .198(gument 0 is set to the name gi)-.18 F -.15(ve)-.25 G .198 +(n, and the remain-).15 F(ing ar)108 645.6 Q +(guments to the command are set to the ar)-.18 E(guments gi)-.18 E -.15 +(ve)-.25 G(n, if an).15 E -.65(y.)-.15 G 1.809(If this e)108 662.4 R +-.15(xe)-.15 G 1.809(cution f).15 F 1.809 +(ails because the \214le is not in e)-.1 F -.15(xe)-.15 G 1.809 +(cutable format, and the \214le is not a directory).15 F 4.309(,i)-.65 G +4.309(ti)-4.309 G(s)-4.309 E .677(assumed to be a)108 674.4 R F1 .678 +(shell script)3.177 F F0 3.178(,a\214)C .678 +(le containing shell commands.)-3.178 F 3.178(As)5.678 G .678 +(ubshell is spa)-3.178 F .678(wned to e)-.15 F -.15(xe)-.15 G .678 +(cute it.).15 F(This)5.678 E .33 +(subshell reinitializes itself, so that the ef)108 686.4 R .33 +(fect is as if a ne)-.25 F 2.829(ws)-.25 G .329(hell had been in)-2.829 +F -.2(vo)-.4 G -.1(ke).2 G 2.829(dt).1 G 2.829(oh)-2.829 G .329 +(andle the script, with)-2.829 F 1.219(the e)108 698.4 R 1.219 +(xception that the locations of commands remembered by the parent \(see) +-.15 F F2(hash)3.719 E F0(belo)3.719 E 3.719(wu)-.25 G(nder)-3.719 E F3 +(SHELL)3.719 E -.09(BU)108 710.4 S(IL).09 E(TIN COMMANDS)-.828 E F5(\))A +F0(are retained by the child.)2.25 E 1.375 +(If the program is a \214le be)108 727.2 R 1.374(ginning with)-.15 F F2 +(#!)3.874 E F0 3.874(,t)C 1.374 +(he remainder of the \214rst line speci\214es an interpreter for the) +-3.874 F(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(29)185.955 E 0 +Cg EP +%%Page: 30 30 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E 5.485(program. The)108 84 R 2.985(shell e)5.485 F -.15(xe)-.15 G +2.986(cutes the speci\214ed interpreter on operating systems that do no\ +t handle this).15 F -.15(exe)108 96 S .762(cutable format themselv).15 F +3.262(es. The)-.15 F(ar)3.262 E .761 +(guments to the interpreter consist of a single optional ar)-.18 F .761 +(gument fol-)-.18 F(lo)108 108 Q .156 +(wing the interpreter name on the \214rst line of the program, follo) +-.25 F .157(wed by the name of the program, follo)-.25 F(wed)-.25 E +(by the command ar)108 120 Q(guments, if an)-.18 E -.65(y.)-.15 G/F1 +10.95/Times-Bold@0 SF(COMMAND EXECUTION ENVIR)72 136.8 Q(ONMENT)-.329 E +F0(The shell has an)108 148.8 Q/F2 10/Times-Italic@0 SF -.2(ex)2.5 G +(ecution en).2 E(vir)-.4 E(onment)-.45 E F0 2.5(,w)C +(hich consists of the follo)-2.5 E(wing:)-.25 E 32.5<836f>108 165.6 S +1.406(pen \214les inherited by the shell at in)-32.5 F -.2(vo)-.4 G +1.405(cation, as modi\214ed by redirections supplied to the).2 F/F3 10 +/Times-Bold@0 SF(exec)3.905 E F0 -.2(bu)144 177.6 S(iltin).2 E 32.5 +<8374>108 194.4 S(he current w)-32.5 E(orking directory as set by)-.1 E +F3(cd)2.5 E F0(,)A F3(pushd)2.5 E F0 2.5(,o)C(r)-2.5 E F3(popd)2.5 E F0 +2.5(,o)C 2.5(ri)-2.5 G(nherited by the shell at in)-2.5 E -.2(vo)-.4 G +(cation).2 E 32.5<8374>108 211.2 S +(he \214le creation mode mask as set by)-32.5 E F3(umask)2.5 E F0 +(or inherited from the shell')2.5 E 2.5(sp)-.55 G(arent)-2.5 E 32.5 +<8363>108 228 S(urrent traps set by)-32.5 E F3(trap)2.5 E F0 32.5<8373> +108 244.8 S .256(hell parameters that are set by v)-32.5 F .256 +(ariable assignment or with)-.25 F F3(set)2.756 E F0 .257 +(or inherited from the shell')2.756 F 2.757(sp)-.55 G(arent)-2.757 E +(in the en)144 256.8 Q(vironment)-.4 E 32.5<8373>108 273.6 S +(hell functions de\214ned during e)-32.5 E -.15(xe)-.15 G +(cution or inherited from the shell').15 E 2.5(sp)-.55 G +(arent in the en)-2.5 E(vironment)-.4 E 32.5<836f>108 290.4 S +(ptions enabled at in)-32.5 E -.2(vo)-.4 G(cation \(either by def).2 E +(ault or with command-line ar)-.1 E(guments\) or by)-.18 E F3(set)2.5 E +F0 32.5<836f>108 307.2 S(ptions enabled by)-32.5 E F3(shopt)2.5 E F0 +32.5<8373>108 324 S(hell aliases de\214ned with)-32.5 E F3(alias)2.5 E +F0 32.5<8376>108 340.8 S +(arious process IDs, including those of background jobs, the v)-32.75 E +(alue of)-.25 E F3($$)2.5 E F0 2.5(,a)C(nd the v)-2.5 E(alue of)-.25 E +/F4 9/Times-Bold@0 SF(PPID)2.5 E F0 .427 +(When a simple command other than a b)108 357.6 R .426 +(uiltin or shell function is to be e)-.2 F -.15(xe)-.15 G .426 +(cuted, it is in).15 F -.2(vo)-.4 G -.1(ke).2 G 2.926(di).1 G 2.926(nas) +-2.926 G(eparate)-2.926 E -.15(exe)108 369.6 S .133(cution en).15 F .133 +(vironment that consists of the follo)-.4 F 2.634(wing. Unless)-.25 F +.134(otherwise noted, the v)2.634 F .134(alues are inherited from)-.25 F +(the shell.)108 381.6 Q 32.5<8374>108 398.4 S 1.056(he shell')-32.5 F +3.556(so)-.55 G 1.056(pen \214les, plus an)-3.556 F 3.556(ym)-.15 G +1.056 +(odi\214cations and additions speci\214ed by redirections to the com-) +-3.556 F(mand)144 410.4 Q 32.5<8374>108 427.2 S(he current w)-32.5 E +(orking directory)-.1 E 32.5<8374>108 444 S +(he \214le creation mode mask)-32.5 E 32.5<8373>108 460.8 S .856(hell v) +-32.5 F .857(ariables and functions mark)-.25 F .857(ed for e)-.1 F .857 +(xport, along with v)-.15 F .857(ariables e)-.25 F .857 +(xported for the command,)-.15 F(passed in the en)144 472.8 Q(vironment) +-.4 E 32.5<8374>108 489.6 S .307 +(raps caught by the shell are reset to the v)-32.5 F .306 +(alues inherited from the shell')-.25 F 2.806(sp)-.55 G .306 +(arent, and traps ignored)-2.806 F(by the shell are ignored)144 501.6 Q +2.5(Ac)108 518.4 S(ommand in)-2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(di).1 G +2.5(nt)-2.5 G(his separate en)-2.5 E(vironment cannot af)-.4 E +(fect the shell')-.25 E 2.5(se)-.55 G -.15(xe)-2.65 G(cution en).15 E +(vironment.)-.4 E .577(Command substitution, commands grouped with pare\ +ntheses, and asynchronous commands are in)108 535.2 R -.2(vo)-.4 G -.1 +(ke).2 G 3.078(di).1 G(n)-3.078 E 2.745(as)108 547.2 S .245(ubshell en) +-2.745 F .245(vironment that is a duplicate of the shell en)-.4 F .244 +(vironment, e)-.4 F .244(xcept that traps caught by the shell are)-.15 F +.358(reset to the v)108 559.2 R .358 +(alues that the shell inherited from its parent at in)-.25 F -.2(vo)-.4 +G 2.858(cation. Builtin).2 F .359(commands that are in)2.859 F -.2(vo) +-.4 G -.1(ke).2 G(d).1 E .857(as part of a pipeline are also e)108 571.2 +R -.15(xe)-.15 G .856(cuted in a subshell en).15 F 3.356 +(vironment. Changes)-.4 F .856(made to the subshell en)3.356 F(viron-) +-.4 E(ment cannot af)108 583.2 Q(fect the shell')-.25 E 2.5(se)-.55 G +-.15(xe)-2.65 G(cution en).15 E(vironment.)-.4 E 1.376(Subshells spa)108 +600 R 1.376(wned to e)-.15 F -.15(xe)-.15 G 1.377 +(cute command substitutions inherit the v).15 F 1.377(alue of the)-.25 F +F33.877 E F0 1.377(option from the parent)3.877 F 2.5(shell. When) +108 612 R(not in posix mode, Bash clears the)2.5 E F32.5 E F0 +(option in such subshells.)2.5 E .405(If a command is follo)108 628.8 R +.405(wed by a)-.25 F F3(&)2.905 E F0 .404(and job control is not acti) +2.905 F -.15(ve)-.25 G 2.904(,t).15 G .404(he def)-2.904 F .404 +(ault standard input for the command)-.1 F .197(is the empty \214le)108 +640.8 R F2(/de)2.697 E(v/null)-.15 E F0 5.197(.O)C .197 +(therwise, the in)-5.197 F -.2(vo)-.4 G -.1(ke).2 G 2.697(dc).1 G .198 +(ommand inherits the \214le descriptors of the calling shell)-2.697 F +(as modi\214ed by redirections.)108 652.8 Q F1(ENVIR)72 669.6 Q(ONMENT) +-.329 E F0 2.354(When a program is in)108 681.6 R -.2(vo)-.4 G -.1(ke).2 +G 4.853(di).1 G 4.853(ti)-4.853 G 4.853(sg)-4.853 G -2.15 -.25(iv e) +-4.853 H 4.853(na).25 G 4.853(na)-4.853 G 2.353 +(rray of strings called the)-4.853 F F2(en)4.853 E(vir)-.4 E(onment)-.45 +E F0 7.353(.T).68 G 2.353(his is a list of)-7.353 F F2(name)108 693.6 Q +F0A F2(value)A F0(pairs, of the form)2.5 E F2(name)2.5 E F0(=)A F2 +(value)A F0(.).18 E 1.485(The shell pro)108 710.4 R 1.485(vides se)-.15 +F -.15(ve)-.25 G 1.485(ral w).15 F 1.485(ays to manipulate the en)-.1 F +3.985(vironment. On)-.4 F(in)3.985 E -.2(vo)-.4 G 1.486 +(cation, the shell scans its o).2 F(wn)-.25 E(en)108 722.4 Q 1.431(viro\ +nment and creates a parameter for each name found, automatically markin\ +g it for)-.4 F F2 -.2(ex)3.93 G(port).2 E F0 1.43(to child)4.61 F +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(30)185.955 E 0 Cg EP +%%Page: 31 31 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E 4.177(processes. Ex)108 84 R 1.677 +(ecuted commands inherit the en)-.15 F 4.177(vironment. The)-.4 F/F1 10 +/Times-Bold@0 SF(export)4.178 E F0(and)4.178 E F1(declar)4.178 E 4.178 +<65ad>-.18 G(x)-4.178 E F0 1.678(commands allo)4.178 F(w)-.25 E .647 +(parameters and functions to be added to and deleted from the en)108 96 +R 3.147(vironment. If)-.4 F .646(the v)3.146 F .646 +(alue of a parameter in)-.25 F .513(the en)108 108 R .513 +(vironment is modi\214ed, the ne)-.4 F 3.013(wv)-.25 G .513 +(alue becomes part of the en)-3.263 F .513 +(vironment, replacing the old.)-.4 F .514(The en)5.514 F(vi-)-.4 E .523 +(ronment inherited by an)108 120 R 3.022(ye)-.15 G -.15(xe)-3.172 G .522 +(cuted command consists of the shell').15 F 3.022(si)-.55 G .522 +(nitial en)-3.022 F .522(vironment, whose v)-.4 F .522(alues may)-.25 F +.578(be modi\214ed in the shell, less an)108 132 R 3.078(yp)-.15 G .578 +(airs remo)-3.078 F -.15(ve)-.15 G 3.078(db).15 G 3.078(yt)-3.078 G(he) +-3.078 E F1(unset)3.078 E F0 .579(command, plus an)3.078 F 3.079(ya)-.15 +G .579(dditions via the)-3.079 F F1(export)3.079 E F0(and)108 144 Q F1 +(declar)2.5 E 2.5<65ad>-.18 G(x)-2.5 E F0(commands.)2.5 E .563(The en) +108 160.8 R .563(vironment for an)-.4 F(y)-.15 E/F2 10/Times-Italic@0 SF +.563(simple command)3.403 F F0 .562 +(or function may be augmented temporarily by pre\214xing it with)3.833 F +.202(parameter assignments, as described abo)108 172.8 R .502 -.15(ve i) +-.15 H(n).15 E/F3 9/Times-Bold@0 SF -.666(PA)2.702 G(RAMETERS).666 E/F4 +9/Times-Roman@0 SF(.)A F0 .202(These assignment statements af)4.702 F +.203(fect only the)-.25 F(en)108 184.8 Q +(vironment seen by that command.)-.4 E .81(If the)108 201.6 R F1 +3.31 E F0 .81(option is set \(see the)3.31 F F1(set)3.31 E F0 -.2(bu) +3.31 G .81(iltin command belo).2 F .81(w\), then)-.25 F F2(all)3.64 E F0 +.81(parameter assignments are placed in)3.82 F(the en)108 213.6 Q +(vironment for a command, not just those that precede the command name.) +-.4 E(When)108 230.4 Q F1(bash)3.396 E F0(in)3.396 E -.2(vo)-.4 G -.1 +(ke).2 G 3.396(sa).1 G 3.397(ne)-3.396 G .897(xternal command, the v) +-3.547 F(ariable)-.25 E F1(_)3.397 E F0 .897 +(is set to the full \214le name of the command and)3.397 F +(passed to that command in its en)108 242.4 Q(vironment.)-.4 E/F5 10.95 +/Times-Bold@0 SF(EXIT ST)72 259.2 Q -1.04(AT)-.986 G(US)1.04 E F0 .151 +(The e)108 271.2 R .151(xit status of an e)-.15 F -.15(xe)-.15 G .151 +(cuted command is the v).15 F .15(alue returned by the)-.25 F F2 +(waitpid)2.65 E F0 .15(system call or equi)2.65 F -.25(va)-.25 G .15 +(lent func-).25 F 2.847(tion. Exit)108 283.2 R .347(statuses f)2.847 F +.347(all between 0 and 255, though, as e)-.1 F .347(xplained belo)-.15 F +1.647 -.65(w, t)-.25 H .347(he shell may use v).65 F .348(alues abo)-.25 +F .648 -.15(ve 1)-.15 H(25).15 E(specially)108 295.2 Q 5.674(.E)-.65 G +.674(xit statuses from shell b)-5.674 F .673 +(uiltins and compound commands are also limited to this range. Under)-.2 +F(certain circumstances, the shell will use special v)108 307.2 Q +(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15(Fo)108 +324 S 3.372(rt).15 G .872(he shell')-3.372 F 3.372(sp)-.55 G .873 +(urposes, a command which e)-3.372 F .873(xits with a zero e)-.15 F .873 +(xit status has succeeded.)-.15 F .873(An e)5.873 F .873(xit status of) +-.15 F .049(zero indicates success.)108 336 R 2.549(An)5.049 G .049 +(on-zero e)-2.549 F .049(xit status indicates f)-.15 F 2.549 +(ailure. When)-.1 F 2.549(ac)2.549 G .048(ommand terminates on a f) +-2.549 F .048(atal sig-)-.1 F(nal)108 348 Q F2(N)2.5 E F0(,)A F1(bash) +2.5 E F0(uses the v)2.5 E(alue of 128+)-.25 E F2(N)A F0(as the e)2.5 E +(xit status.)-.15 E .404 +(If a command is not found, the child process created to e)108 364.8 R +-.15(xe)-.15 G .404(cute it returns a status of 127.).15 F .405 +(If a command is)5.405 F(found b)108 376.8 Q(ut is not e)-.2 E -.15(xe) +-.15 G(cutable, the return status is 126.).15 E(If a command f)108 393.6 +Q(ails because of an error during e)-.1 E +(xpansion or redirection, the e)-.15 E(xit status is greater than zero.) +-.15 E .081(Shell b)108 410.4 R .081 +(uiltin commands return a status of 0 \()-.2 F F2(true)A F0 2.581(\)i)C +2.581(fs)-2.581 G .08(uccessful, and non-zero \()-2.581 F F2(false)A F0 +2.58(\)i)C 2.58(fa)-2.58 G 2.58(ne)-2.58 G .08(rror occurs while)-2.58 F +(the)108 422.4 Q 2.5(ye)-.15 G -.15(xe)-2.65 G 2.5(cute. All).15 F -.2 +(bu)2.5 G(iltins return an e).2 E +(xit status of 2 to indicate incorrect usage.)-.15 E F1(Bash)108 439.2 Q +F0 .201(itself returns the e)2.701 F .202 +(xit status of the last command e)-.15 F -.15(xe)-.15 G .202 +(cuted, unless a syntax error occurs, in which case).15 F(it e)108 451.2 +Q(xits with a non-zero v)-.15 E 2.5(alue. See)-.25 F(also the)2.5 E F1 +(exit)2.5 E F0 -.2(bu)2.5 G(iltin command belo).2 E -.65(w.)-.25 G F5 +(SIGN)72 468 Q(ALS)-.219 E F0(When)108 480 Q F1(bash)3.183 E F0 .683 +(is interacti)3.183 F -.15(ve)-.25 G 3.183(,i).15 G 3.183(nt)-3.183 G +.683(he absence of an)-3.183 F 3.183(yt)-.15 G .683(raps, it ignores) +-3.183 F F3(SIGTERM)3.183 E F0 .682(\(so that)2.933 F F1 .682(kill 0) +3.182 F F0 .682(does not kill an)3.182 F(interacti)108 492 Q .757 -.15 +(ve s)-.25 H .457(hell\), and).15 F F3(SIGINT)2.957 E F0 .458 +(is caught and handled \(so that the)2.707 F F1(wait)2.958 E F0 -.2(bu) +2.958 G .458(iltin is interruptible\).).2 F .458(In all cases,)5.458 F +F1(bash)108 504 Q F0(ignores)2.5 E F3(SIGQ)2.5 E(UIT)-.09 E F4(.)A F0 +(If job control is in ef)4.5 E(fect,)-.25 E F1(bash)2.5 E F0(ignores)2.5 +E F3(SIGTTIN)2.5 E F4(,)A F3(SIGTT)2.25 E(OU)-.162 E F4(,)A F0(and)2.25 +E F3(SIGTSTP)2.5 E F4(.)A F0(Non-b)108 520.8 Q 1.065 +(uiltin commands run by)-.2 F F1(bash)3.565 E F0(ha)3.565 E 1.365 -.15 +(ve s)-.2 H 1.065(ignal handlers set to the v).15 F 1.064 +(alues inherited by the shell from its)-.25 F 3.247(parent. When)108 +532.8 R .747(job control is not in ef)3.247 F .747 +(fect, asynchronous commands ignore)-.25 F F3(SIGINT)3.248 E F0(and) +2.998 E F3(SIGQ)3.248 E(UIT)-.09 E F0 .748(in addi-)2.998 F .653 +(tion to these inherited handlers.)108 544.8 R .653 +(Commands run as a result of command substitution ignore the k)5.653 F +-.15(ey)-.1 G(board-).15 E(generated job control signals)108 556.8 Q F3 +(SIGTTIN)2.5 E F4(,)A F3(SIGTT)2.25 E(OU)-.162 E F4(,)A F0(and)2.25 E F3 +(SIGTSTP)2.5 E F4(.)A F0 2.045(The shell e)108 573.6 R 2.045 +(xits by def)-.15 F 2.045(ault upon receipt of a)-.1 F F3(SIGHUP)4.545 E +F4(.)A F0 2.045(Before e)6.545 F 2.045(xiting, an interacti)-.15 F 2.346 +-.15(ve s)-.25 H 2.046(hell resends the).15 F F3(SIGHUP)108 585.6 Q F0 +1.005(to all jobs, running or stopped.)3.255 F 1.004 +(Stopped jobs are sent)6.005 F F3(SIGCONT)3.504 E F0 1.004 +(to ensure that the)3.254 F 3.504(yr)-.15 G(ecei)-3.504 E 1.304 -.15 +(ve t)-.25 H(he).15 E F3(SIGHUP)108 597.6 Q F4(.)A F0 2.529 -.8(To p) +5.429 H(re).8 E -.15(ve)-.25 G .93(nt the shell from sending the signal\ + to a particular job, it should be remo).15 F -.15(ve)-.15 G 3.43(df).15 +G .93(rom the)-3.43 F 1.357(jobs table with the)108 609.6 R F1(diso) +3.857 E(wn)-.1 E F0 -.2(bu)3.857 G 1.357(iltin \(see).2 F F3 1.356 +(SHELL B)3.856 F(UIL)-.09 E 1.356(TIN COMMANDS)-.828 F F0(belo)3.606 E +1.356(w\) or mark)-.25 F 1.356(ed to not recei)-.1 F -.15(ve)-.25 G F3 +(SIGHUP)108 621.6 Q F0(using)2.25 E F1(diso)2.5 E(wn \255h)-.1 E F0(.)A +.166(If the)108 638.4 R F1(huponexit)2.666 E F0 .166 +(shell option has been set with)2.666 F F1(shopt)2.666 E F0(,)A F1(bash) +2.666 E F0 .166(sends a)2.666 F F3(SIGHUP)2.666 E F0 .166 +(to all jobs when an interacti)2.416 F -.15(ve)-.25 G(login shell e)108 +650.4 Q(xits.)-.15 E(If)108 667.2 Q F1(bash)3.047 E F0 .547(is w)3.047 F +.546(aiting for a command to complete and recei)-.1 F -.15(ve)-.25 G +3.046(sas).15 G .546(ignal for which a trap has been set, the trap) +-3.046 F .662(will not be e)108 679.2 R -.15(xe)-.15 G .662 +(cuted until the command completes.).15 F(When)5.663 E F1(bash)3.163 E +F0 .663(is w)3.163 F .663(aiting for an asynchronous command)-.1 F .99 +(via the)108 691.2 R F1(wait)3.49 E F0 -.2(bu)3.49 G .99(iltin, the rec\ +eption of a signal for which a trap has been set will cause the).2 F F1 +(wait)3.49 E F0 -.2(bu)3.49 G .99(iltin to).2 F +(return immediately with an e)108 703.2 Q +(xit status greater than 128, immediately after which the trap is e)-.15 +E -.15(xe)-.15 G(cuted.).15 E(GNU Bash-4.1)72 768 Q(2009 December 29) +135.965 E(31)185.955 E 0 Cg EP +%%Page: 32 32 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10.95/Times-Bold@0 SF(JOB CONTR)72 84 Q(OL)-.329 E/F2 10 +/Times-Italic@0 SF -.25(Jo)108 96 S 4.567(bc).25 G(ontr)-4.567 E(ol)-.45 +E F0 2.067(refers to the ability to selecti)5.077 F -.15(ve)-.25 G 2.067 +(ly stop \().15 F F2(suspend)A F0 4.567(\)t)C 2.068(he e)-4.567 F -.15 +(xe)-.15 G 2.068(cution of processes and continue).15 F(\()108 108 Q F2 +-.37(re)C(sume).37 E F0 3.202(\)t)C .702(heir e)-3.202 F -.15(xe)-.15 G +.702(cution at a later point.).15 F 3.202(Au)5.702 G .702 +(ser typically emplo)-3.202 F .702(ys this f)-.1 F .702 +(acility via an interacti)-.1 F 1.001 -.15(ve i)-.25 H(nterf).15 E(ace) +-.1 E(supplied jointly by the operating system k)108 120 Q(ernel')-.1 E +2.5(st)-.55 G(erminal dri)-2.5 E -.15(ve)-.25 G 2.5(ra).15 G(nd)-2.5 E +/F3 10/Times-Bold@0 SF(bash)2.5 E F0(.)A .784(The shell associates a)108 +136.8 R F2(job)5.024 E F0 .784(with each pipeline.)3.514 F .784(It k) +5.784 F .785(eeps a table of currently e)-.1 F -.15(xe)-.15 G .785 +(cuting jobs, which may be).15 F .341(listed with the)108 148.8 R F3 +(jobs)2.841 E F0 2.841(command. When)2.841 F F3(bash)2.841 E F0 .341 +(starts a job asynchronously \(in the)2.841 F F2(bac)2.84 E(kgr)-.2 E +(ound)-.45 E F0 .34(\), it prints a line).77 F(that looks lik)108 160.8 +Q(e:)-.1 E([1] 25647)144 177.6 Q .241(indicating that this job is job n\ +umber 1 and that the process ID of the last process in the pipeline ass\ +ociated)108 194.4 R .733(with this job is 25647.)108 206.4 R .732 +(All of the processes in a single pipeline are members of the same job) +5.733 F(.)-.4 E F3(Bash)5.732 E F0(uses)3.232 E(the)108 218.4 Q F2(job) +4.24 E F0(abstraction as the basis for job control.)2.73 E 3.062 -.8 +(To f)108 235.2 T 1.462(acilitate the implementation of the user interf) +.7 F 1.463(ace to job control, the operating system maintains the)-.1 F +.871(notion of a)108 247.2 R F2(curr)3.371 E .871(ent terminal pr)-.37 F +.871(ocess gr)-.45 F .871(oup ID)-.45 F F0 5.871(.M)C .87 +(embers of this process group \(processes whose process)-5.871 F .023 +(group ID is equal to the current terminal process group ID\) recei)108 +259.2 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023 +(board-generated signals such as).15 F/F4 9/Times-Bold@0 SF(SIG-)2.523 E +(INT)108 271.2 Q/F5 9/Times-Roman@0 SF(.)A F0 1.347 +(These processes are said to be in the)5.847 F F2(for)3.846 E -.4(eg) +-.37 G -.45(ro).4 G(und).45 E F0(.).77 E F2(Bac)6.926 E(kgr)-.2 E(ound) +-.45 E F0 1.346(processes are those whose process)4.616 F .145 +(group ID dif)108 283.2 R .145(fers from the terminal')-.25 F .146 +(s; such processes are immune to k)-.55 F -.15(ey)-.1 G .146 +(board-generated signals.).15 F .146(Only fore-)5.146 F .16 +(ground processes are allo)108 295.2 R .16(wed to read from or)-.25 F +2.66(,i)-.4 G 2.66(ft)-2.66 G .16(he user so speci\214es with)-2.66 F/F6 +10/Courier@0 SF .16(stty tostop)2.66 F F0 2.66(,w)C .16(rite to the ter) +-2.66 F(-)-.2 E 3.051(minal. Background)108 307.2 R .551 +(processes which attempt to read from \(write to when)3.051 F F6 .551 +(stty tostop)3.051 F F0 .552(is in ef)3.052 F .552(fect\) the)-.25 F +.718(terminal are sent a)108 319.2 R F4 .718(SIGTTIN \(SIGTT)3.218 F +(OU\))-.162 E F0 .718(signal by the k)2.968 F(ernel')-.1 E 3.217(st)-.55 +G .717(erminal dri)-3.217 F -.15(ve)-.25 G 1.517 -.4(r, w).15 H .717 +(hich, unless caught, sus-).4 F(pends the process.)108 331.2 Q 1.087 +(If the operating system on which)108 348 R F3(bash)3.587 E F0 1.088 +(is running supports job control,)3.588 F F3(bash)3.588 E F0 1.088 +(contains f)3.588 F 1.088(acilities to use it.)-.1 F -.8(Ty)108 360 S +.302(ping the).8 F F2(suspend)3.142 E F0 .302(character \(typically) +3.572 F F3(^Z)2.801 E F0 2.801(,C)C .301 +(ontrol-Z\) while a process is running causes that process to be)-2.801 +F 2.142(stopped and returns control to)108 372 R F3(bash)4.642 E F0 +7.142(.T)C 2.142(yping the)-7.942 F F2 2.142(delayed suspend)4.992 F F0 +2.143(character \(typically)5.413 F F3(^Y)4.643 E F0 4.643(,C)C +(ontrol-Y\))-4.643 E .021(causes the process to be stopped when it atte\ +mpts to read input from the terminal, and control to be returned)108 384 +R(to)108 396 Q F3(bash)3.392 E F0 5.892(.T)C .892 +(he user may then manipulate the state of this job, using the)-5.892 F +F3(bg)3.392 E F0 .892(command to continue it in the)3.392 F .895 +(background, the)108 408 R F3(fg)3.395 E F0 .895 +(command to continue it in the fore)3.395 F .895(ground, or the)-.15 F +F3(kill)3.395 E F0 .894(command to kill it.)3.395 F(A)5.894 E F3(^Z) +3.394 E F0(tak)3.394 E(es)-.1 E(ef)108 420 Q .948(fect immediately)-.25 +F 3.448(,a)-.65 G .948(nd has the additional side ef)-3.448 F .948 +(fect of causing pending output and typeahead to be dis-)-.25 F(carded.) +108 432 Q .777(There are a number of w)108 448.8 R .777 +(ays to refer to a job in the shell.)-.1 F .777(The character)5.777 F F3 +(%)3.277 E F0 .777(introduces a job speci\214cation)3.277 F(\()108 460.8 +Q F2(jobspec)A F0 3.457(\). Job)B(number)3.457 E F2(n)3.817 E F0 .957 +(may be referred to as)3.697 F F3(%n)3.457 E F0 5.957(.A)C .957 +(job may also be referred to using a pre\214x of the)-2.5 F .59(name us\ +ed to start it, or using a substring that appears in its command line.) +108 472.8 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F3(%ce)3.09 E +F0 .59(refers to a)3.09 F(stopped)108 484.8 Q F3(ce)3.463 E F0(job)3.463 +E 5.963(.I)-.4 G 3.463(fap)-5.963 G .963 +(re\214x matches more than one job,)-3.463 F F3(bash)3.463 E F0 .963 +(reports an error)3.463 F 5.963(.U)-.55 G(sing)-5.963 E F3(%?ce)3.463 E +F0 3.464(,o)C 3.464(nt)-3.464 G .964(he other)-3.464 F .087 +(hand, refers to an)108 496.8 R 2.587(yj)-.15 G .087 +(ob containing the string)-2.587 F F3(ce)2.587 E F0 .087 +(in its command line.)2.587 F .087 +(If the substring matches more than one)5.087 F(job,)108 508.8 Q F3 +(bash)2.518 E F0 .018(reports an error)2.518 F 5.018(.T)-.55 G .018 +(he symbols)-5.018 F F3(%%)2.518 E F0(and)2.518 E F3(%+)2.518 E F0 .018 +(refer to the shell')2.518 F 2.518(sn)-.55 G .018(otion of the)-2.518 F +F2(curr)2.518 E .018(ent job)-.37 F F0 2.518(,w).23 G .018(hich is) +-2.518 F .495(the last job stopped while it w)108 520.8 R .495 +(as in the fore)-.1 F .495(ground or started in the background.)-.15 F +(The)5.494 E F2(pr)4.244 E -.15(ev)-.37 G .494(ious job).15 F F0 .494 +(may be)3.224 F .787(referenced using)108 532.8 R F3<25ad>3.287 E F0 +5.787(.I)C 3.287(ft)-5.787 G .787(here is only a single job,)-3.287 F F3 +(%+)3.287 E F0(and)3.287 E F3<25ad>3.287 E F0 .788 +(can both be used to refer to that job)3.287 F 5.788(.I)-.4 G(n)-5.788 E +.257(output pertaining to jobs \(e.g., the output of the)108 544.8 R F3 +(jobs)2.756 E F0 .256(command\), the current job is al)2.756 F -.1(wa) +-.1 G .256(ys \215agged with a).1 F F3(+)2.756 E F0(,)A .41(and the pre) +108 556.8 R .41(vious job with a)-.25 F F32.91 E F0 5.41(.A)C .411 +(single % \(with no accompan)-2.5 F .411 +(ying job speci\214cation\) also refers to the cur)-.15 F(-)-.2 E +(rent job)108 568.8 Q(.)-.4 E .444 +(Simply naming a job can be used to bring it into the fore)108 585.6 R +(ground:)-.15 E F3(%1)2.943 E F0 .443(is a synon)2.943 F .443(ym for) +-.15 F F3 -.63(``)2.943 G .443(fg %1').63 F(')-.63 E F0 2.943(,b)C +(ringing)-2.943 E 1.472(job 1 from the background into the fore)108 +597.6 R 3.972(ground. Similarly)-.15 F(,)-.65 E F3 -.63(``)3.973 G 1.473 +(%1 &').63 F(')-.63 E F0 1.473(resumes job 1 in the background,)3.973 F +(equi)108 609.6 Q -.25(va)-.25 G(lent to).25 E F3 -.63(``)2.5 G(bg %1') +.63 E(')-.63 E F0(.)A .131(The shell learns immediately whene)108 626.4 +R -.15(ve)-.25 G 2.631(raj).15 G .131(ob changes state.)-2.631 F +(Normally)5.131 E(,)-.65 E F3(bash)2.631 E F0 -.1(wa)2.63 G .13 +(its until it is about to print a).1 F .157 +(prompt before reporting changes in a job')108 638.4 R 2.657(ss)-.55 G +.157(tatus so as to not interrupt an)-2.657 F 2.658(yo)-.15 G .158 +(ther output.)-2.658 F .158(If the)5.158 F F32.658 E F0 .158 +(option to)2.658 F(the)108 650.4 Q F3(set)3.952 E F0 -.2(bu)3.952 G +1.452(iltin command is enabled,).2 F F3(bash)3.952 E F0 1.451 +(reports such changes immediately)3.952 F 6.451(.A)-.65 G 1.751 -.15 +(ny t)-6.451 H 1.451(rap on).15 F F4(SIGCHLD)3.951 E F0(is)3.701 E -.15 +(exe)108 662.4 S(cuted for each child that e).15 E(xits.)-.15 E .032 +(If an attempt to e)108 679.2 R(xit)-.15 E F3(bash)2.532 E F0 .032 +(is made while jobs are stopped \(or)2.532 F 2.533(,i)-.4 G 2.533(ft) +-2.533 G(he)-2.533 E F3(checkjobs)2.533 E F0 .033 +(shell option has been enabled)2.533 F 2.02(using the)108 691.2 R F3 +(shopt)4.52 E F0 -.2(bu)4.52 G 2.02 +(iltin, running\), the shell prints a w).2 F 2.019 +(arning message, and, if the)-.1 F F3(checkjobs)4.519 E F0 2.019 +(option is)4.519 F .458(enabled, lists the jobs and their statuses.)108 +703.2 R(The)5.458 E F3(jobs)2.958 E F0 .459 +(command may then be used to inspect their status.)2.958 F .459(If a) +5.459 F .604(second attempt to e)108 715.2 R .604 +(xit is made without an interv)-.15 F .604 +(ening command, the shell does not print another w)-.15 F(arning,)-.1 E +(and an)108 727.2 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(32)185.955 E 0 Cg EP +%%Page: 33 33 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10.95/Times-Bold@0 SF(PR)72 84 Q(OMPTING)-.329 E F0 .644 +(When e)108 96 R -.15(xe)-.15 G .644(cuting interacti).15 F -.15(ve)-.25 +G(ly).15 E(,)-.65 E/F2 10/Times-Bold@0 SF(bash)3.144 E F0 .645 +(displays the primary prompt)3.145 F/F3 9/Times-Bold@0 SF(PS1)3.145 E F0 +.645(when it is ready to read a command,)2.895 F 1.826 +(and the secondary prompt)108 108 R F3(PS2)4.326 E F0 1.825 +(when it needs more input to complete a command.)4.076 F F2(Bash)6.825 E +F0(allo)4.325 E 1.825(ws these)-.25 F 1.499(prompt strings to be custom\ +ized by inserting a number of backslash-escaped special characters that\ + are)108 120 R(decoded as follo)108 132 Q(ws:)-.25 E F2(\\a)144 144 Q F0 +(an ASCII bell character \(07\))28.22 E F2(\\d)144 156 Q F0 +(the date in "W)27.66 E(eekday Month Date" format \(e.g., "T)-.8 E +(ue May 26"\))-.45 E F2(\\D{)144 168 Q/F4 10/Times-Italic@0 SF(format)A +F2(})A F0(the)180 180 Q F4(format)3.927 E F0 1.427(is passed to)3.927 F +F4(strftime)3.927 E F0 1.427 +(\(3\) and the result is inserted into the prompt string; an)B(empty)180 +192 Q F4(format)2.5 E F0 +(results in a locale-speci\214c time representation.)2.5 E +(The braces are required)5 E F2(\\e)144 204 Q F0 +(an ASCII escape character \(033\))28.78 E F2(\\h)144 216 Q F0 +(the hostname up to the \214rst `.)27.66 E(')-.7 E F2(\\H)144 228 Q F0 +(the hostname)25.44 E F2(\\j)144 240 Q F0 +(the number of jobs currently managed by the shell)29.89 E F2(\\l)144 +252 Q F0(the basename of the shell')30.44 E 2.5(st)-.55 G(erminal de) +-2.5 E(vice name)-.25 E F2(\\n)144 264 Q F0(ne)27.66 E(wline)-.25 E F2 +(\\r)144 276 Q F0(carriage return)28.78 E F2(\\s)144 288 Q F0 +(the name of the shell, the basename of)29.33 E F2($0)2.5 E F0 +(\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F2(\\t)144 +300 Q F0(the current time in 24-hour HH:MM:SS format)29.89 E F2(\\T)144 +312 Q F0(the current time in 12-hour HH:MM:SS format)26.55 E F2(\\@)144 +324 Q F0(the current time in 12-hour am/pm format)23.92 E F2(\\A)144 336 +Q F0(the current time in 24-hour HH:MM format)26 E F2(\\u)144 348 Q F0 +(the username of the current user)27.66 E F2(\\v)144 360 Q F0(the v) +28.22 E(ersion of)-.15 E F2(bash)2.5 E F0(\(e.g., 2.00\))2.5 E F2(\\V) +144 372 Q F0(the release of)26 E F2(bash)2.5 E F0 2.5(,v)C +(ersion + patch le)-2.65 E -.15(ve)-.25 G 2.5(l\().15 G(e.g., 2.00.0\)) +-2.5 E F2(\\w)144 384 Q F0 .115(the current w)26 F .115 +(orking directory)-.1 F 2.615(,w)-.65 G(ith)-2.615 E F3($HOME)2.615 E F0 +(abbre)2.365 E .116(viated with a tilde \(uses the v)-.25 F .116 +(alue of the)-.25 F F3(PR)180 396 Q(OMPT_DIR)-.27 E(TRIM)-.36 E F0 -.25 +(va)2.25 G(riable\)).25 E F2(\\W)144 408 Q F0 +(the basename of the current w)23.22 E(orking directory)-.1 E 2.5(,w) +-.65 G(ith)-2.5 E F3($HOME)2.5 E F0(abbre)2.25 E(viated with a tilde) +-.25 E F2(\\!)144 420 Q F0(the history number of this command)29.89 E F2 +(\\#)144 432 Q F0(the command number of this command)28.22 E F2(\\$)144 +444 Q F0(if the ef)28.22 E(fecti)-.25 E .3 -.15(ve U)-.25 H(ID is 0, a) +.15 E F2(#)2.5 E F0 2.5(,o)C(therwise a)-2.5 E F2($)2.5 E(\\)144 456 Q +F4(nnn)A F0(the character corresponding to the octal number)18.22 E F4 +(nnn)2.5 E F2(\\\\)144 468 Q F0 2.5(ab)30.44 G(ackslash)-2.5 E F2(\\[) +144 480 Q F0(be)29.89 E 1.257(gin a sequence of non-printing characters\ +, which could be used to embed a terminal)-.15 F +(control sequence into the prompt)180 492 Q F2(\\])144 504 Q F0 +(end a sequence of non-printing characters)29.89 E .119 +(The command number and the history number are usually dif)108 520.8 R +.12(ferent: the history number of a command is its)-.25 F 1.585(positio\ +n in the history list, which may include commands restored from the his\ +tory \214le \(see)108 532.8 R F3(HIST)4.084 E(OR)-.162 E(Y)-.315 E F0 +(belo)108 544.8 Q .541(w\), while the command number is the position in\ + the sequence of commands e)-.25 F -.15(xe)-.15 G .541 +(cuted during the cur).15 F(-)-.2 E .546(rent shell session.)108 556.8 R +.546(After the string is decoded, it is e)5.546 F .546 +(xpanded via parameter e)-.15 F .546(xpansion, command substitu-)-.15 F +.351(tion, arithmetic e)108 568.8 R .352(xpansion, and quote remo)-.15 F +-.25(va)-.15 G .352(l, subject to the v).25 F .352(alue of the)-.25 F F2 +(pr)2.852 E(omptv)-.18 E(ars)-.1 E F0 .352(shell option \(see the)2.852 +F(description of the)108 580.8 Q F2(shopt)2.5 E F0(command under)2.5 E +F3(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).) +-.25 E F1(READLINE)72 597.6 Q F0 .151 +(This is the library that handles reading input when using an interacti) +108 609.6 R .45 -.15(ve s)-.25 H .15(hell, unless the).15 F F2 +(\255\255noediting)2.65 E F0(option)2.65 E 1.208(is gi)108 621.6 R -.15 +(ve)-.25 G 3.708(na).15 G 3.708(ts)-3.708 G 1.208(hell in)-3.708 F -.2 +(vo)-.4 G 3.708(cation. Line).2 F 1.208 +(editing is also used when using the)3.708 F F23.709 E F0 1.209 +(option to the)3.709 F F2 -.18(re)3.709 G(ad).18 E F0 -.2(bu)3.709 G +3.709(iltin. By).2 F(def)108 633.6 Q .95 +(ault, the line editing commands are similar to those of emacs.)-.1 F +3.449(Av)5.949 G .949(i-style line editing interf)-3.449 F .949 +(ace is also)-.1 F -.2(av)108 645.6 S 3.35(ailable. Line)-.05 F .85 +(editing can be enabled at an)3.35 F 3.35(yt)-.15 G .85(ime using the) +-3.35 F F2 .85(\255o emacs)3.35 F F0(or)3.35 E F2 .85(\255o vi)3.35 F F0 +.85(options to the)3.35 F F2(set)3.35 E F0 -.2(bu)3.35 G(iltin).2 E +(\(see)108 657.6 Q F3 .763(SHELL B)3.263 F(UIL)-.09 E .763(TIN COMMANDS) +-.828 F F0(belo)3.013 E 3.263(w\). T)-.25 F 3.263(ot)-.8 G .763(urn of) +-3.263 F 3.263(fl)-.25 G .763 +(ine editing after the shell is running, use the)-3.263 F F2(+o)3.262 E +(emacs)108 669.6 Q F0(or)2.5 E F2(+o vi)2.5 E F0(options to the)2.5 E F2 +(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F2(Readline Notation)87 686.4 Q +F0 .567(In this section, the emacs-style notation is used to denote k) +108 698.4 R -.15(ey)-.1 G(strok).15 E 3.068(es. Control)-.1 F -.1(ke) +3.068 G .568(ys are denoted by C\255)-.05 F F4 -.1(ke)C(y)-.2 E F0(,)A +1.153(e.g., C\255n means Control\255N.)108 710.4 R(Similarly)6.153 E(,) +-.65 E F4(meta)4.033 E F0 -.1(ke)3.913 G 1.153(ys are denoted by M\255) +-.05 F F4 -.1(ke)C(y)-.2 E F0 3.652(,s)C 3.652(oM)-3.652 G 1.152 +(\255x means Meta\255X.)-3.652 F(\(On)6.152 E -.1(ke)108 722.4 S .83 +(yboards without a)-.05 F F4(meta)3.71 E F0 -.1(ke)3.59 G 2.13 -.65 +(y, M)-.05 H.65 E F4(x)A F0 .83(means ESC)3.33 F F4(x)3.33 E F0 3.33 +(,i)C .831(.e., press the Escape k)-3.33 F 1.131 -.15(ey t)-.1 H .831 +(hen the).15 F F4(x)4.101 E F0 -.1(ke)3.861 G 4.631 -.65(y. T)-.05 H +.831(his mak).65 F(es)-.1 E(GNU Bash-4.1)72 768 Q(2009 December 29) +135.965 E(33)185.955 E 0 Cg EP +%%Page: 34 34 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E .6(ESC the)108 84 R/F1 10/Times-Italic@0 SF .6(meta pr)3.1 F +(e\214x)-.37 E F0 5.6(.T)C .6(he combination M\255C\255)-5.6 F F1(x)A F0 +.599(means ESC\255Control\255)3.099 F F1(x)A F0 3.099(,o)C 3.099(rp) +-3.099 G .599(ress the Escape k)-3.099 F .899 -.15(ey t)-.1 H .599 +(hen hold).15 F(the Control k)108 96 Q .3 -.15(ey w)-.1 H +(hile pressing the).15 E F1(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G(\)) +.65 E .619(Readline commands may be gi)108 112.8 R -.15(ve)-.25 G 3.119 +(nn).15 G(umeric)-3.119 E F1(ar)3.119 E(guments)-.37 E F0 3.119(,w).27 G +.619(hich normally act as a repeat count.)-3.119 F(Sometimes,)5.62 E(ho) +108 124.8 Q(we)-.25 E -.15(ve)-.25 G 1.419 -.4(r, i).15 H 3.119(ti).4 G +3.119(st)-3.119 G .619(he sign of the ar)-3.119 F .619 +(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) +.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 +(ument to a command that).18 F 1.018(acts in the forw)108 136.8 R 1.018 +(ard direction \(e.g.,)-.1 F/F2 10/Times-Bold@0 SF(kill\255line)3.518 E +F0 3.518(\)c)C 1.018(auses that command to act in a backw)-3.518 F 1.019 +(ard direction.)-.1 F(Com-)6.019 E(mands whose beha)108 148.8 Q +(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo) +-.25 E -.65(w.)-.25 G .812(When a command is described as)108 165.6 R F1 +(killing)3.311 E F0(te)3.311 E .811(xt, the te)-.15 F .811 +(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .811 +(or possible future retrie)-3.311 F -.25(va)-.25 G 3.311(l\().25 G F1 +(yank-)-3.311 E(ing)108 177.6 Q F0 2.529(\). The)B .029(killed te)2.529 +F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F1 +.029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H +.029(ills cause the te).15 F .029(xt to be accumulated into one unit,) +-.15 F .567(which can be yank)108 189.6 R .567(ed all at once.)-.1 F +.567(Commands which do not kill te)5.567 F .567 +(xt separate the chunks of te)-.15 F .567(xt on the kill)-.15 F(ring.) +108 201.6 Q F2(Readline Initialization)87 218.4 Q F0 .091(Readline is c\ +ustomized by putting commands in an initialization \214le \(the)108 +230.4 R F1(inputr)2.591 E(c)-.37 E F0 2.591(\214le\). The)2.591 F .092 +(name of this \214le)2.591 F .197(is tak)108 242.4 R .196(en from the v) +-.1 F .196(alue of the)-.25 F/F3 9/Times-Bold@0 SF(INPUTRC)2.696 E F0 +-.25(va)2.446 G 2.696(riable. If).25 F .196(that v)2.696 F .196 +(ariable is unset, the def)-.25 F .196(ault is)-.1 F F1(~/.inputr)2.696 +E(c)-.37 E F0 5.196(.W).31 G .196(hen a)-5.196 F 1.034(program which us\ +es the readline library starts up, the initialization \214le is read, a\ +nd the k)108 254.4 R 1.335 -.15(ey b)-.1 H 1.035(indings and).15 F -.25 +(va)108 266.4 S 1.15(riables are set.).25 F 1.15(There are only a fe) +6.15 F 3.649(wb)-.25 G 1.149(asic constructs allo)-3.649 F 1.149 +(wed in the readline initialization \214le.)-.25 F(Blank)6.149 E .736 +(lines are ignored.)108 278.4 R .737(Lines be)5.737 F .737 +(ginning with a)-.15 F F2(#)3.237 E F0 .737(are comments.)3.237 F .737 +(Lines be)5.737 F .737(ginning with a)-.15 F F2($)3.237 E F0 .737 +(indicate conditional)3.237 F 2.5(constructs. Other)108 290.4 R +(lines denote k)2.5 E .3 -.15(ey b)-.1 H(indings and v).15 E +(ariable settings.)-.25 E .987(The def)108 307.2 R .987(ault k)-.1 F +-.15(ey)-.1 G .987(-bindings may be changed with an).15 F F1(inputr) +3.497 E(c)-.37 E F0 3.487(\214le. Other)3.797 F .987 +(programs that use this library may)3.487 F(add their o)108 319.2 Q +(wn commands and bindings.)-.25 E -.15(Fo)108 336 S 2.5(re).15 G +(xample, placing)-2.65 E(M\255Control\255u: uni)144 352.8 Q -.15(ve)-.25 +G(rsal\255ar).15 E(gument)-.18 E(or)108 364.8 Q(C\255Meta\255u: uni)144 +376.8 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 388.8 +Q F1(inputr)2.51 E(c)-.37 E F0 -.1(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G +(\255C\255u e)-2.5 E -.15(xe)-.15 G(cute the readline command).15 E F1 +(univer)2.5 E(sal\255ar)-.1 E(gument)-.37 E F0(.).68 E 1.26(The follo) +108 405.6 R 1.261(wing symbolic character names are recognized:)-.25 F +F1 -.4(RU)3.761 G(BOUT).4 E F0(,)1.27 E F1(DEL)3.761 E F0(,).53 E F1 +(ESC)3.761 E F0(,).72 E F1(LFD)3.761 E F0(,).28 E F1(NEWLINE)3.761 E F0 +(,).73 E F1(RET)3.761 E F0(,)1.27 E F1(RETURN)108 417.6 Q F0(,)1.1 E F1 +(SPC)2.5 E F0(,).72 E F1(SP)2.5 E -.3(AC)-.9 G(E).3 E F0 2.5(,a).73 G +(nd)-2.5 E F1 -.5(TA)2.5 G(B).5 E F0(.).27 E .209 +(In addition to command names, readline allo)108 434.4 R .209(ws k)-.25 +F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 +(ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) +-.1 H(s).15 E(pressed \(a)108 446.4 Q F1(macr)2.5 E(o)-.45 E F0(\).)A F2 +(Readline K)87 463.2 Q(ey Bindings)-.25 E F0 .366 +(The syntax for controlling k)108 475.2 R .666 -.15(ey b)-.1 H .366 +(indings in the).15 F F1(inputr)2.876 E(c)-.37 E F0 .366 +(\214le is simple.)3.176 F .366(All that is required is the name of the) +5.366 F .383(command or the te)108 487.2 R .383(xt of a macro and a k) +-.15 F .683 -.15(ey s)-.1 H .383 +(equence to which it should be bound. The name may be speci-).15 F .853 +(\214ed in one of tw)108 499.2 R 3.353(ow)-.1 G .853 +(ays: as a symbolic k)-3.453 F 1.153 -.15(ey n)-.1 H .853 +(ame, possibly with).15 F F1(Meta\255)3.353 E F0(or)3.353 E F1(Contr) +3.353 E(ol\255)-.45 E F0(pre\214x)3.353 E .853(es, or as a k)-.15 F -.15 +(ey)-.1 G(sequence.)108 511.2 Q 1.542(When using the form)108 528 R F2 +-.1(ke)4.042 G(yname).1 E F0(:)A F1(function\255name).833 E F0(or)4.042 +E F1(macr)4.042 E(o)-.45 E F0(,)A F1 -.1(ke)4.042 G(yname)-.2 E F0 1.542 +(is the name of a k)4.222 F 1.841 -.15(ey s)-.1 H 1.541(pelled out in) +.15 F 2.5(English. F)108 540 R(or e)-.15 E(xample:)-.15 E +(Control-u: uni)144 564 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E +(Meta-Rubout: backw)144 576 Q(ard-kill-w)-.1 E(ord)-.1 E +(Control-o: "> output")144 588 Q .698(In the abo)108 604.8 R .998 -.15 +(ve ex)-.15 H(ample,).15 E F1(C\255u)3.038 E F0 .698 +(is bound to the function)3.448 F F2(uni)3.198 E -.1(ve)-.1 G +(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M\255DEL)3.878 E F0 .698 +(is bound to the func-)3.728 F(tion)108 616.8 Q F2 +(backward\255kill\255w)2.759 E(ord)-.1 E F0 2.759(,a)C(nd)-2.759 E F1 +(C\255o)2.599 E F0 .258(is bound to run the macro e)2.939 F .258 +(xpressed on the right hand side \(that is, to)-.15 F(insert the te)108 +628.8 Q(xt)-.15 E/F4 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 +(into the line\).)2.5 E .055(In the second form,)108 645.6 R F2("k)2.555 +E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.555 E F1(macr) +2.555 E(o)-.45 E F0(,)A F2 -.1(ke)2.555 G(yseq).1 E F0(dif)2.556 E .056 +(fers from)-.25 F F2 -.1(ke)2.556 G(yname).1 E F0(abo)2.556 E .356 -.15 +(ve i)-.15 H 2.556(nt).15 G .056(hat strings)-2.556 F 1.284 +(denoting an entire k)108 657.6 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ +ay be speci\214ed by placing the sequence within double quotes.).15 F +(Some)6.284 E .385(GNU Emacs style k)108 669.6 R .685 -.15(ey e)-.1 H +.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .386 +(xample, b)-.15 F .386(ut the symbolic character names)-.2 F +(are not recognized.)108 681.6 Q("\\C\255u": uni)144 705.6 Q -.15(ve) +-.25 G(rsal\255ar).15 E(gument)-.18 E +("\\C\255x\\C\255r": re\255read\255init\255\214le)144 717.6 Q +("\\e[11~": "Function K)144 729.6 Q .3 -.15(ey 1)-.25 H(").15 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(34)185.955 E 0 Cg EP +%%Page: 35 35 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E .315(In this e)108 84 R(xample,)-.15 E/F1 10/Times-Italic@0 SF +(C\255u)2.655 E F0 .315(is ag)3.065 F .315(ain bound to the function) +-.05 F/F2 10/Times-Bold@0 SF(uni)2.815 E -.1(ve)-.1 G(rsal\255ar).1 E +(gument)-.1 E F0(.)A F1 .315(C\255x C\255r)5.155 F F0 .314 +(is bound to the func-)3.544 F(tion)108 96 Q F2 -.18(re)2.5 G.18 E +(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1(ESC [ 1 1 ~)3.01 +E F0(is bound to insert the te)3.94 E(xt)-.15 E/F3 10/Courier@0 SF +(Function Key 1)2.5 E F0(.)A +(The full set of GNU Emacs style escape sequences is)108 112.8 Q F2 +<5c43ad>144 124.8 Q F0(control pre\214x)20.3 E F2<5c4dad>144 136.8 Q F0 +(meta pre\214x)18.08 E F2(\\e)144 148.8 Q F0(an escape character)28.78 E +F2(\\\\)144 160.8 Q F0(backslash)30.44 E F2(\\")144 172.8 Q F0 +(literal ")27.67 E F2<5c08>144 184.8 Q F0(literal \010)30.44 E(In addit\ +ion to the GNU Emacs style escape sequences, a second set of backslash \ +escapes is a)108 201.6 Q -.25(va)-.2 G(ilable:).25 E F2(\\a)144 213.6 Q +F0(alert \(bell\))28.22 E F2(\\b)144 225.6 Q F0(backspace)27.66 E F2 +(\\d)144 237.6 Q F0(delete)27.66 E F2(\\f)144 249.6 Q F0(form feed)29.89 +E F2(\\n)144 261.6 Q F0(ne)27.66 E(wline)-.25 E F2(\\r)144 273.6 Q F0 +(carriage return)28.78 E F2(\\t)144 285.6 Q F0(horizontal tab)29.89 E F2 +(\\v)144 297.6 Q F0 -.15(ve)28.22 G(rtical tab).15 E F2(\\)144 309.6 Q +F1(nnn)A F0(the eight-bit character whose v)18.22 E(alue is the octal v) +-.25 E(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x) +144 321.6 Q F1(HH)A F0(the eight-bit character whose v)13.78 E +(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0 +(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E 1.141 +(When entering the te)108 338.4 R 1.141(xt of a macro, single or double\ + quotes must be used to indicate a macro de\214nition.)-.15 F .09 +(Unquoted te)108 350.4 R .09(xt is assumed to be a function name.)-.15 F +.089(In the macro body)5.089 F 2.589(,t)-.65 G .089 +(he backslash escapes described abo)-2.589 F -.15(ve)-.15 G(are e)108 +362.4 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G +(ther character in the macro te)-2.5 E(xt, including " and \010.)-.15 E +F2(Bash)108 379.2 Q F0(allo)2.929 E .429(ws the current readline k)-.25 +F .729 -.15(ey b)-.1 H .429 +(indings to be displayed or modi\214ed with the).15 F F2(bind)2.93 E F0 +-.2(bu)2.93 G .43(iltin command.).2 F .046 +(The editing mode may be switched during interacti)108 391.2 R .346 -.15 +(ve u)-.25 H .046(se by using the).15 F F22.545 E F0 .045 +(option to the)2.545 F F2(set)2.545 E F0 -.2(bu)2.545 G .045 +(iltin command).2 F(\(see)108 403.2 Q/F4 9/Times-Bold@0 SF(SHELL B)2.5 E +(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F2 +(Readline V)87 420 Q(ariables)-.92 E F0 .043(Readline has v)108 432 R +.043(ariables that can be used to further customize its beha)-.25 F +(vior)-.2 E 5.043(.A)-.55 G -.25(va)-2.5 G .043 +(riable may be set in the).25 F F1(inpu-)2.554 E(tr)108 444 Q(c)-.37 E +F0(\214le with a statement of the form)2.81 E F2(set)144 460.8 Q F1 +(variable\255name value)2.5 E F0 .79(Except where noted, readline v)108 +477.6 R .79(ariables can tak)-.25 F 3.29(et)-.1 G .79(he v)-3.29 F +(alues)-.25 E F2(On)3.29 E F0(or)3.29 E F2(Off)3.29 E F0 .79 +(\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).).05 F(Unrecog-) +5.79 E .448(nized v)108 489.6 R .448(ariable names are ignored.)-.25 F +.448(When a v)5.448 F .448(ariable v)-.25 F .448 +(alue is read, empty or null v)-.25 F .449(alues, "on" \(case-insensi-) +-.25 F(ti)108 501.6 Q -.15(ve)-.25 G .468(\), and "1" are equi).15 F +-.25(va)-.25 G .468(lent to).25 F F2(On)2.968 E F0 5.468(.A)C .468 +(ll other v)-5.468 F .468(alues are equi)-.25 F -.25(va)-.25 G .468 +(lent to).25 F F2(Off)2.968 E F0 5.468(.T)C .467(he v)-5.468 F .467 +(ariables and their def)-.25 F(ault)-.1 E -.25(va)108 513.6 S(lues are:) +.25 E F2(bell\255style \(audible\))108 530.4 Q F0 .01 +(Controls what happens when readline w)144 542.4 R .011 +(ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F2(none) +2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E +.94(rings the bell.)144 554.4 R .94(If set to)5.94 F F2(visible)3.44 E +F0 3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25 +(va)-.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F2(audible)3.44 E F0 +(,)A(readline attempts to ring the terminal')144 566.4 Q 2.5(sb)-.55 G +(ell.)-2.5 E F2(bind\255tty\255special\255chars \(On\))108 578.4 Q F0 +.055(If set to)144 590.4 R F2(On)2.555 E F0 2.555(,r)C .056(eadline att\ +empts to bind the control characters treated specially by the k)-2.555 F +(ernel')-.1 E 2.556(st)-.55 G(ermi-)-2.556 E(nal dri)144 602.4 Q -.15 +(ve)-.25 G 2.5(rt).15 G 2.5(ot)-2.5 G(heir readline equi)-2.5 E -.25(va) +-.25 G(lents.).25 E F2(comment\255begin \(`)108 614.4 Q(`#')-.63 E('\)) +-.63 E F0 .885(The string that is inserted when the readline)144 626.4 R +F2(insert\255comment)3.385 E F0 .884(command is e)3.384 F -.15(xe)-.15 G +3.384(cuted. This).15 F(com-)3.384 E(mand is bound to)144 638.4 Q F2 +(M\255#)2.5 E F0(in emacs mode and to)2.5 E F2(#)2.5 E F0 +(in vi command mode.)2.5 E F2(completion\255ignor)108 650.4 Q +(e\255case \(Off\))-.18 E F0(If set to)144 662.4 Q F2(On)2.5 E F0 2.5 +(,r)C(eadline performs \214lename matching and completion in a case\255\ +insensiti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F2(completion\255pr) +108 674.4 Q(e\214x\255display\255length \(0\))-.18 E F0 .829(The length\ + in characters of the common pre\214x of a list of possible completions\ + that is displayed)144 686.4 R 1.275(without modi\214cation.)144 698.4 R +1.275(When set to a v)6.275 F 1.274 +(alue greater than zero, common pre\214x)-.25 F 1.274 +(es longer than this)-.15 F -.25(va)144 710.4 S(lue are replaced with a\ +n ellipsis when displaying possible completions.).25 E(GNU Bash-4.1)72 +768 Q(2009 December 29)135.965 E(35)185.955 E 0 Cg EP +%%Page: 36 36 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(completion\255query\255items \(100\))108 84 +Q F0 .529(This determines when the user is queried about vie)144 96 R +.53(wing the number of possible completions gen-)-.25 F .561 +(erated by the)144 108 R F1(possible\255completions)3.061 E F0 3.061 +(command. It)3.061 F .561(may be set to an)3.061 F 3.06(yi)-.15 G(nte) +-3.06 E .56(ger v)-.15 F .56(alue greater than or)-.25 F .782 +(equal to zero.)144 120 R .783(If the number of possible completions is\ + greater than or equal to the v)5.782 F .783(alue of this)-.25 F -.25 +(va)144 132 S .237(riable, the user is ask).25 F .237 +(ed whether or not he wishes to vie)-.1 F 2.737(wt)-.25 G .237 +(hem; otherwise the)-2.737 F 2.737(ya)-.15 G .237(re simply listed) +-2.737 F(on the terminal.)144 144 Q F1(con)108 156 Q -.1(ve)-.4 G +(rt\255meta \(On\)).1 E F0 .612(If set to)144 168 R F1(On)3.112 E F0 +3.112(,r)C .613(eadline will con)-3.112 F -.15(ve)-.4 G .613 +(rt characters with the eighth bit set to an ASCII k).15 F .913 -.15 +(ey s)-.1 H .613(equence by).15 F .541 +(stripping the eighth bit and pre\214xing an escape character \(in ef) +144 180 R .541(fect, using escape as the)-.25 F/F2 10/Times-Italic@0 SF +.541(meta pr)3.041 F(e-)-.37 E<8c78>144 192 Q F0(\).)A F1 +(disable\255completion \(Off\))108 204 Q F0 .038(If set to)144 216 R F1 +(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)-2.538 F .038 +(ord completion.)-.1 F .038 +(Completion characters will be inserted into the)5.038 F(line as if the) +144 228 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E F0 +(.)A F1(editing\255mode \(emacs\))108 240 Q F0 .253 +(Controls whether readline be)144 252 R .253(gins with a set of k)-.15 F +.553 -.15(ey b)-.1 H .253(indings similar to).15 F F2(emacs)2.752 E F0 +(or)2.752 E F2(vi)2.752 E F0(.)A F1(editing\255mode)5.252 E F0 +(can be set to either)144 264 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E +F0(.)A F1(echo\255contr)108 276 Q(ol\255characters \(On\))-.18 E F0 1.21 +(When set to)144 288 R F1(On)3.71 E F0 3.71(,o)C 3.71(no)-3.71 G 1.211 +(perating systems that indicate the)-3.71 F 3.711(ys)-.15 G 1.211 +(upport it, readline echoes a character)-3.711 F +(corresponding to a signal generated from the k)144 300 Q -.15(ey)-.1 G +(board.).15 E F1(enable\255k)108 312 Q(eypad \(Off\))-.1 E F0 .893 +(When set to)144 324 R F1(On)3.393 E F0 3.393(,r)C .893 +(eadline will try to enable the application k)-3.393 F -.15(ey)-.1 G +.893(pad when it is called.).15 F .892(Some sys-)5.893 F +(tems need this to enable the arro)144 336 Q 2.5(wk)-.25 G -.15(ey)-2.6 +G(s.).15 E F1(enable\255meta\255k)108 348 Q(ey \(On\))-.1 E F0 .64 +(When set to)144 360 R F1(On)3.14 E F0 3.14(,r)C .64 +(eadline will try to enable an)-3.14 F 3.14(ym)-.15 G .64 +(eta modi\214er k)-3.14 F .94 -.15(ey t)-.1 H .64 +(he terminal claims to support).15 F(when it is called.)144 372 Q +(On man)5 E 2.5(yt)-.15 G(erminals, the meta k)-2.5 E .3 -.15(ey i)-.1 H +2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F1 +(expand\255tilde \(Off\))108 384 Q F0(If set to)144 396 Q F1(on)2.5 E F0 +2.5(,t)C(ilde e)-2.5 E(xpansion is performed when readline attempts w) +-.15 E(ord completion.)-.1 E F1(history\255pr)108 408 Q(eser)-.18 E -.1 +(ve)-.1 G(\255point \(Off\)).1 E F0 1.493(If set to)144 420 R F1(on) +3.993 E F0 3.993(,t)C 1.493(he history code attempts to place point at \ +the same location on each history line)-3.993 F(retrie)144 432 Q -.15 +(ve)-.25 G 2.5(dw).15 G(ith)-2.5 E F1(pr)2.5 E -.15(ev)-.18 G +(ious-history).15 E F0(or)2.5 E F1(next-history)2.5 E F0(.)A F1 +(history\255size \(0\))108 444 Q F0 .462 +(Set the maximum number of history entries sa)144 456 R -.15(ve)-.2 G +2.963(di).15 G 2.963(nt)-2.963 G .463(he history list.)-2.963 F .463 +(If set to zero, the number of)5.463 F +(entries in the history list is not limited.)144 468 Q F1 +(horizontal\255scr)108 480 Q(oll\255mode \(Off\))-.18 E F0 .449 +(When set to)144 492 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E .448 +(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .448 +(crolling the input horizontally on a)-2.948 F 1.194(single screen line\ + when it becomes longer than the screen width rather than wrapping to a\ + ne)144 504 R(w)-.25 E(line.)144 516 Q F1(input\255meta \(Off\))108 528 +Q F0 .228(If set to)144 540 R F1(On)2.728 E F0 2.728(,r)C .227(eadline \ +will enable eight-bit input \(that is, it will not strip the high bit f\ +rom the char)-2.728 F(-)-.2 E .956(acters it reads\), re)144 552 R -.05 +(ga)-.15 G .956(rdless of what the terminal claims it can support.).05 F +.957(The name)5.956 F F1(meta\255\215ag)3.457 E F0 .957(is a)3.457 F +(synon)144 564 Q(ym for this v)-.15 E(ariable.)-.25 E F1(isear)108 576 Q +(ch\255terminators \(`)-.18 E(`C\255[C\255J')-.63 E('\))-.63 E F0 .439(\ +The string of characters that should terminate an incremental search wi\ +thout subsequently e)144 588 R -.15(xe)-.15 G(cut-).15 E .934 +(ing the character as a command.)144 600 R .935(If this v)5.935 F .935 +(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.435(nav).15 G .935 +(alue, the characters)-3.685 F F2(ESC)3.435 E F0(and)144 612 Q F2 +(C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F1 -.1(ke) +108 624 S(ymap \(emacs\)).1 E F0 2.021(Set the current readline k)144 +636 R -.15(ey)-.1 G 4.521(map. The).15 F 2.021(set of v)4.521 F 2.021 +(alid k)-.25 F -.15(ey)-.1 G 2.021(map names is).15 F F2 2.02 +(emacs, emacs\255standar)4.52 F(d,)-.37 E .068 +(emacs\255meta, emacs\255ctlx, vi, vi\255command)144 648 R F0 2.568(,a)C +(nd)-2.568 E F2(vi\255insert)2.568 E F0(.).68 E F2(vi)5.068 E F0 .068 +(is equi)2.568 F -.25(va)-.25 G .068(lent to).25 F F2(vi\255command) +2.569 E F0(;)A F2(emacs)2.569 E F0 1.544(is equi)144 660 R -.25(va)-.25 +G 1.544(lent to).25 F F2(emacs\255standar)4.044 E(d)-.37 E F0 6.544(.T)C +1.544(he def)-6.544 F 1.544(ault v)-.1 F 1.544(alue is)-.25 F F2(emacs) +4.044 E F0 4.044(;t).27 G 1.544(he v)-4.044 F 1.544(alue of)-.25 F F1 +(editing\255mode)4.043 E F0(also)4.043 E(af)144 672 Q(fects the def)-.25 +E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1(mark\255dir)108 684 Q +(ectories \(On\))-.18 E F0(If set to)144 696 Q F1(On)2.5 E F0 2.5(,c)C +(ompleted directory names ha)-2.5 E .3 -.15(ve a s)-.2 H(lash appended.) +.15 E(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(36)185.955 E 0 Cg +EP +%%Page: 37 37 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(mark\255modi\214ed\255lines \(Off\))108 84 +Q F0(If set to)144 96 Q F1(On)2.5 E F0 2.5(,h)C(istory lines that ha) +-2.5 E .3 -.15(ve b)-.2 H +(een modi\214ed are displayed with a preceding asterisk \().15 E F1(*)A +F0(\).)A F1(mark\255symlink)108 108 Q(ed\255dir)-.1 E(ectories \(Off\)) +-.18 E F0 .175(If set to)144 120 R F1(On)2.675 E F0 2.675(,c)C .175 +(ompleted names which are symbolic links to directories ha)-2.675 F .475 +-.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 132 +Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F1 +(match\255hidden\255\214les \(On\))108 144 Q F0 .193(This v)144 156 R +.193(ariable, when set to)-.25 F F1(On)2.693 E F0 2.693(,c)C .192 +(auses readline to match \214les whose names be)-2.693 F .192 +(gin with a `.)-.15 F 2.692('\()-.7 G(hidden)-2.692 E 1.023 +(\214les\) when performing \214lename completion, unless the leading `.) +144 168 R 3.523('i)-.7 G 3.523(ss)-3.523 G 1.024 +(upplied by the user in the)-3.523 F(\214lename to be completed.)144 180 +Q F1(output\255meta \(Off\))108 192 Q F0 .507(If set to)144 204 R F1(On) +3.007 E F0 3.007(,r)C .507(eadline will display characters with the eig\ +hth bit set directly rather than as a meta-)-3.007 F(pre\214x)144 216 Q +(ed escape sequence.)-.15 E F1(page\255completions \(On\))108 228 Q F0 +.808(If set to)144 240 R F1(On)3.308 E F0 3.308(,r)C .808 +(eadline uses an internal)-3.308 F/F2 10/Times-Italic@0 SF(mor)3.308 E +(e)-.37 E F0(-lik)A 3.308(ep)-.1 G .808 +(ager to display a screenful of possible comple-)-3.308 F +(tions at a time.)144 252 Q F1 +(print\255completions\255horizontally \(Off\))108 264 Q F0 1.319 +(If set to)144 276 R F1(On)3.819 E F0 3.819(,r)C 1.318(eadline will dis\ +play completions with matches sorted horizontally in alphabetical)-3.819 +F(order)144 288 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25 +E F1 -2.29 -.18(re v)108 300 T(ert\255all\255at\255newline \(Off\)).08 E +F0 .872(If set to)144 312 R F1(on)3.372 E F0 3.372(,r)C .873 +(eadline will undo all changes to history lines before returning when) +-3.372 F F1(accept\255line)3.373 E F0(is)3.373 E -.15(exe)144 324 S +2.686(cuted. By).15 F(def)2.686 E .186 +(ault, history lines may be modi\214ed and retain indi)-.1 F .186 +(vidual undo lists across calls to)-.25 F F1 -.18(re)144 336 S(adline) +.18 E F0(.)A F1(sho)108 348 Q(w\255all\255if\255ambiguous \(Off\))-.1 E +F0 .477(This alters the def)144 360 R .477(ault beha)-.1 F .477 +(vior of the completion functions.)-.2 F .478(If set to)5.478 F F1(on) +2.978 E F0 2.978(,w)C .478(ords which ha)-3.078 F .778 -.15(ve m)-.2 H +(ore).15 E 1.264(than one possible completion cause the matches to be l\ +isted immediately instead of ringing the)144 372 R(bell.)144 384 Q F1 +(sho)108 396 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.345 +(This alters the def)144 408 R 5.345(ault beha)-.1 F 5.345 +(vior of the completion functions in a f)-.2 F 5.346(ashion similar to) +-.1 F F1(sho)144 420 Q(w\255all\255if\255ambiguous)-.1 E F0 6.923(.I)C +4.423(fs)-6.923 G 1.923(et to)-4.423 F F1(on)4.423 E F0 4.423(,w)C 1.923 +(ords which ha)-4.523 F 2.222 -.15(ve m)-.2 H 1.922 +(ore than one possible completion).15 F 1.039(without an)144 432 R 3.539 +(yp)-.15 G 1.039 +(ossible partial completion \(the possible completions don')-3.539 F +3.539(ts)-.18 G 1.04(hare a common pre\214x\))-3.539 F(cause the matche\ +s to be listed immediately instead of ringing the bell.)144 444 Q F1 +(skip\255completed\255text \(Off\))108 456 Q F0 .095(If set to)144 468 R +F1(On)2.595 E F0 2.595(,t)C .095(his alters the def)-2.595 F .095 +(ault completion beha)-.1 F .094 +(vior when inserting a single match into the line.)-.2 F(It')144 480 Q +2.545(so)-.55 G .045(nly acti)-2.545 F .345 -.15(ve w)-.25 H .046 +(hen performing completion in the middle of a w).15 F 2.546(ord. If)-.1 +F .046(enabled, readline does not)2.546 F 1.394(insert characters from \ +the completion that match characters after point in the w)144 492 R +1.394(ord being com-)-.1 F(pleted, so portions of the w)144 504 Q +(ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F1 +(visible\255stats \(Off\))108 516 Q F0 .846(If set to)144 528 R F1(On) +3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346 +(st)-.55 G .846(ype as reported by)-3.346 F F2(stat)3.346 E F0 .846 +(\(2\) is appended to the \214lename)B +(when listing possible completions.)144 540 Q F1 +(Readline Conditional Constructs)87 556.8 Q F0 .05 +(Readline implements a f)108 568.8 R .05(acility similar in spirit to t\ +he conditional compilation features of the C preprocessor)-.1 F .096 +(which allo)108 580.8 R .096(ws k)-.25 F .396 -.15(ey b)-.1 H .096 +(indings and v).15 F .096 +(ariable settings to be performed as the result of tests.)-.25 F .097 +(There are four parser)5.096 F(directi)108 592.8 Q -.15(ve)-.25 G 2.5 +(su).15 G(sed.)-2.5 E F1($if)108 609.6 Q F0(The)24.89 E F1($if)2.963 E +F0 .463(construct allo)2.963 F .462(ws bindings to be made based on the\ + editing mode, the terminal being used,)-.25 F .477 +(or the application using readline.)144 621.6 R .477(The te)5.477 F .477 +(xt of the test e)-.15 F .477 +(xtends to the end of the line; no characters)-.15 F +(are required to isolate it.)144 633.6 Q F1(mode)144 650.4 Q F0(The) +12.67 E F1(mode=)3.712 E F0 1.212(form of the)3.712 F F1($if)3.711 E F0 +(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211 +(sed to test whether readline is in emacs or vi)-3.711 F 3.065 +(mode. This)180 662.4 R .565(may be used in conjunction with the)3.065 F +F1 .565(set k)3.065 F(eymap)-.1 E F0 .565(command, for instance, to) +3.065 F .735(set bindings in the)180 674.4 R F2(emacs\255standar)3.235 E +(d)-.37 E F0(and)3.235 E F2(emacs\255ctlx)3.235 E F0 -.1(ke)3.235 G .735 +(ymaps only if readline is starting)-.05 F(out in emacs mode.)180 686.4 +Q F1(term)144 703.2 Q F0(The)15.46 E F1(term=)3.196 E F0 .696 +(form may be used to include terminal-speci\214c k)3.196 F .996 -.15 +(ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 715.2 R +.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 +(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 +(wo)3.154 G .654(rd on the right side of).1 F(the)180 727.2 Q F1(=)3.231 +E F0 .731(is tested ag)3.231 F .732(ainst the both full name of the ter\ +minal and the portion of the terminal)-.05 F(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(37)185.955 E 0 Cg EP +%%Page: 38 38 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(name before the \214rst)180 84 Q/F1 10/Times-Bold@0 SF2.5 E +F0 5(.T)C(his allo)-5 E(ws)-.25 E/F2 10/Times-Italic@0 SF(sun)2.84 E F0 +(to match both)2.74 E F2(sun)2.84 E F0(and)2.74 E F2(sun\255cmd)2.5 E F0 +2.5(,f).77 G(or instance.)-2.5 E F1(application)144 100.8 Q F0(The)180 +112.8 Q F1(application)3.003 E F0 .503 +(construct is used to include application-speci\214c settings.)3.003 F +.503(Each program)5.503 F .114(using the readline library sets the)180 +124.8 R F2 .114(application name)2.614 F F0 2.614(,a)C .114 +(nd an initialization \214le can test for a)-2.614 F .501(particular v) +180 136.8 R 3.001(alue. This)-.25 F .501(could be used to bind k)3.001 F +.801 -.15(ey s)-.1 H .5(equences to functions useful for a spe-).15 F +.396(ci\214c program.)180 148.8 R -.15(Fo)5.396 G 2.896(ri).15 G .396 +(nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15 +(ey s)-.1 H .397(equence that quotes the).15 F(current or pre)180 160.8 +Q(vious w)-.25 E(ord in Bash:)-.1 E F1($if)180 184.8 Q F0(Bash)2.5 E 2.5 +(#Q)180 196.8 S(uote the current or pre)-2.5 E(vious w)-.25 E(ord)-.1 E +("\\C\255xq": "\\eb\\"\\ef\\"")180 208.8 Q F1($endif)180 220.8 Q($endif) +108 237.6 Q F0(This command, as seen in the pre)9.33 E(vious e)-.25 E +(xample, terminates an)-.15 E F1($if)2.5 E F0(command.)2.5 E F1($else) +108 254.4 Q F0(Commands in this branch of the)15.45 E F1($if)2.5 E F0 +(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G +(cuted if the test f).15 E(ails.)-.1 E F1($include)108 271.2 Q F0 .357 +(This directi)144 283.2 R .657 -.15(ve t)-.25 H(ak).15 E .357 +(es a single \214lename as an ar)-.1 F .356 +(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) +144 295.2 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 +-.15(ve w)-.25 H(ould read).05 E F2(/etc/inputr)2.5 E(c)-.37 E F0(:)A F1 +($include)144 319.2 Q F2(/etc/inputr)5.833 E(c)-.37 E F1(Sear)87 336 Q +(ching)-.18 E F0 .834(Readline pro)108 348 R .834 +(vides commands for searching through the command history \(see)-.15 F +/F3 9/Times-Bold@0 SF(HIST)3.335 E(OR)-.162 E(Y)-.315 E F0(belo)3.085 E +.835(w\) for lines)-.25 F(containing a speci\214ed string.)108 360 Q +(There are tw)5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.51 E +(emental)-.37 E F0(and)3.01 E F2(non-incr)2.5 E(emental)-.37 E F0(.).51 +E .698(Incremental searches be)108 376.8 R .698 +(gin before the user has \214nished typing the search string.)-.15 F +.697(As each character of the)5.697 F .112 +(search string is typed, readline displays the ne)108 388.8 R .112 +(xt entry from the history matching the string typed so f)-.15 F(ar)-.1 +E 5.113(.A)-.55 G(n)-5.113 E .542 +(incremental search requires only as man)108 400.8 R 3.042(yc)-.15 G +.542(haracters as needed to \214nd the desired history entry)-3.042 F +5.541(.T)-.65 G .541(he char)-5.541 F(-)-.2 E .224 +(acters present in the v)108 412.8 R .224(alue of the)-.25 F F1(isear) +2.724 E(ch-terminators)-.18 E F0 -.25(va)2.724 G .224 +(riable are used to terminate an incremental search.).25 F .66 +(If that v)108 424.8 R .66(ariable has not been assigned a v)-.25 F .66 +(alue the Escape and Control-J characters will terminate an incre-)-.25 +F .096(mental search.)108 436.8 R .096(Control-G will abort an incremen\ +tal search and restore the original line.)5.096 F .097 +(When the search is)5.097 F(terminated, the history entry containing th\ +e search string becomes the current line.)108 448.8 Q 2.939 -.8(To \214) +108 465.6 T 1.339(nd other matching entries in the history list, type C\ +ontrol-S or Control-R as appropriate.).8 F 1.338(This will)6.338 F .674 +(search backw)108 477.6 R .674(ard or forw)-.1 F .674 +(ard in the history for the ne)-.1 F .675 +(xt entry matching the search string typed so f)-.15 F(ar)-.1 E 5.675 +(.A)-.55 G -.15(ny)-5.675 G .175(other k)108 489.6 R .475 -.15(ey s)-.1 +H .174 +(equence bound to a readline command will terminate the search and e).15 +F -.15(xe)-.15 G .174(cute that command.).15 F -.15(Fo)5.174 G(r).15 E +.54(instance, a)108 501.6 R F2(ne)3.04 E(wline)-.15 E F0 .541 +(will terminate the search and accept the line, thereby e)3.04 F -.15 +(xe)-.15 G .541(cuting the command from the).15 F(history list.)108 +513.6 Q .653(Readline remembers the last incremental search string.)108 +530.4 R .653(If tw)5.653 F 3.153(oC)-.1 G .653 +(ontrol-Rs are typed without an)-3.153 F 3.152(yi)-.15 G(nterv)-3.152 E +(en-)-.15 E(ing characters de\214ning a ne)108 542.4 Q 2.5(ws)-.25 G +(earch string, an)-2.5 E 2.5(yr)-.15 G(emembered search string is used.) +-2.5 E .567(Non-incremental searches read the entire search string befo\ +re starting to search for matching history lines.)108 559.2 R(The searc\ +h string may be typed by the user or be part of the contents of the cur\ +rent line.)108 571.2 Q F1(Readline Command Names)87 588 Q F0 1.392 +(The follo)108 600 R 1.391 +(wing is a list of the names of the commands and the def)-.25 F 1.391 +(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F +3.891(ya)-.15 G(re)-3.891 E 2.621(bound. Command)108 612 R .121 +(names without an accompan)2.621 F .121(ying k)-.15 F .421 -.15(ey s)-.1 +H .122(equence are unbound by def).15 F 2.622(ault. In)-.1 F .122 +(the follo)2.622 F(wing)-.25 E(descriptions,)108 624 Q F2(point)3.411 E +F0 .911(refers to the current cursor position, and)3.411 F F2(mark)3.411 +E F0 .91(refers to a cursor position sa)3.411 F -.15(ve)-.2 G 3.41(db) +.15 G 3.41(yt)-3.41 G(he)-3.41 E F1(set\255mark)108 636 Q F0 2.5 +(command. The)2.5 F(te)2.5 E +(xt between the point and mark is referred to as the)-.15 E F2 -.37(re) +2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 652.8 Q(or Mo)-.25 E(ving)-.1 +E(beginning\255of\255line \(C\255a\))108 664.8 Q F0(Mo)144 676.8 Q .3 +-.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1 +(end\255of\255line \(C\255e\))108 688.8 Q F0(Mo)144 700.8 Q .3 -.15 +(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E(GNU Bash-4.1)72 768 +Q(2009 December 29)135.965 E(38)185.955 E 0 Cg EP +%%Page: 39 39 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF -.25(fo)108 84 S(rward\255char \(C\255f\)) +.25 E F0(Mo)144 96 Q .3 -.15(ve f)-.15 H(orw).15 E(ard a character)-.1 E +(.)-.55 E F1(backward\255char \(C\255b\))108 108 Q F0(Mo)144 120 Q .3 +-.15(ve b)-.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 132 S +(rward\255w).25 E(ord \(M\255f\))-.1 E F0(Mo)144 144 Q .822 -.15(ve f) +-.15 H(orw).15 E .522(ard to the end of the ne)-.1 F .523(xt w)-.15 F +3.023(ord. W)-.1 F .523 +(ords are composed of alphanumeric characters \(let-)-.8 F +(ters and digits\).)144 156 Q F1(backward\255w)108 168 Q(ord \(M\255b\)) +-.1 E F0(Mo)144 180 Q 1.71 -.15(ve b)-.15 H 1.41 +(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 +(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F +(characters \(letters and digits\).)144 192 Q F1(shell\255f)108 204 Q +(orward\255w)-.25 E(ord)-.1 E F0(Mo)144 216 Q .784 -.15(ve f)-.15 H(orw) +.15 E .484(ard to the end of the ne)-.1 F .484(xt w)-.15 F 2.984(ord. W) +-.1 F .484(ords are delimited by non-quoted shell metacharac-)-.8 F +(ters.)144 228 Q F1(shell\255backward\255w)108 240 Q(ord)-.1 E F0(Mo)144 +252 Q .909 -.15(ve b)-.15 H .609(ack to the start of the current or pre) +.15 F .609(vious w)-.25 F 3.109(ord. W)-.1 F .608 +(ords are delimited by non-quoted shell)-.8 F(metacharacters.)144 264 Q +F1(clear\255scr)108 276 Q(een \(C\255l\))-.18 E F0 .993 +(Clear the screen lea)144 288 R .993 +(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 G +.993(th an ar).4 F .993(gument, refresh the)-.18 F +(current line without clearing the screen.)144 300 Q F1 -.18(re)108 312 +S(draw\255curr).18 E(ent\255line)-.18 E F0(Refresh the current line.)144 +324 Q F1(Commands f)87 340.8 Q(or Manipulating the History)-.25 E +(accept\255line \(Newline, Retur)108 352.8 Q(n\))-.15 E F0 .159 +(Accept the line re)144 364.8 R -.05(ga)-.15 G .159 +(rdless of where the cursor is.).05 F .158(If this line is non-empty) +5.158 F 2.658(,a)-.65 G .158(dd it to the history list)-2.658 F .699 +(according to the state of the)144 376.8 R/F2 9/Times-Bold@0 SF +(HISTCONTR)3.199 E(OL)-.27 E F0 -.25(va)2.949 G 3.199(riable. If).25 F +.699(the line is a modi\214ed history line, then)3.199 F +(restore the history line to its original state.)144 388.8 Q F1(pr)108 +400.8 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0 +(Fetch the pre)144 412.8 Q(vious command from the history list, mo)-.25 +E(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 424.8 +Q F0(Fetch the ne)144 436.8 Q(xt command from the history list, mo)-.15 +E(ving forw)-.15 E(ard in the list.)-.1 E F1 +(beginning\255of\255history \(M\255<\))108 448.8 Q F0(Mo)144 460.8 Q .3 +-.15(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.) +-.65 E F1(end\255of\255history \(M\255>\))108 472.8 Q F0(Mo)144 484.8 Q +.3 -.15(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5 +(,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18 +(re v)108 496.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 +1.471(Search backw)144 508.8 R 1.471 +(ard starting at the current line and mo)-.1 F 1.47 +(ving `up' through the history as necessary)-.15 F(.)-.65 E +(This is an incremental search.)144 520.8 Q F1 -.25(fo)108 532.8 S +(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131 +(Search forw)144 544.8 R 1.131(ard starting at the current line and mo) +-.1 F 1.132(ving `do)-.15 F 1.132(wn' through the history as necessary) +-.25 F(.)-.65 E(This is an incremental search.)144 556.8 Q F1 +(non\255incr)108 568.8 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H +(rse\255sear).15 E(ch\255history \(M\255p\))-.18 E F0 .165(Search backw) +144 580.8 R .164(ard through the history starting at the current line u\ +sing a non-incremental search for)-.1 F 2.5(as)144 592.8 S +(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 604.8 Q +(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18 +E F0 1.353(Search forw)144 616.8 R 1.354(ard through the history using \ +a non-incremental search for a string supplied by the)-.1 F(user)144 +628.8 Q(.)-.55 E F1(history\255sear)108 640.8 Q(ch\255f)-.18 E(orward) +-.25 E F0 .249(Search forw)144 652.8 R .249(ard through the history for\ + the string of characters between the start of the current line)-.1 F +(and the point.)144 664.8 Q(This is a non-incremental search.)5 E F1 +(history\255sear)108 676.8 Q(ch\255backward)-.18 E F0 .95(Search backw) +144 688.8 R .951(ard through the history for the string of characters b\ +etween the start of the current)-.1 F(line and the point.)144 700.8 Q +(This is a non-incremental search.)5 E(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(39)185.955 E 0 Cg EP +%%Page: 40 40 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(yank\255nth\255ar)108 84 Q 2.5(g\()-.1 G +<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 96 R .622 +(gument to the pre)-.18 F .622(vious command \(usually the second w)-.25 +F .622(ord on the pre)-.1 F .622(vious line\))-.25 F .794(at point.)144 +108 R -.4(Wi)5.794 G .794(th an ar).4 F(gument)-.18 E/F2 10 +/Times-Italic@0 SF(n)3.294 E F0 3.294(,i).24 G .794(nsert the)-3.294 F +F2(n)3.294 E F0 .794(th w)B .794(ord from the pre)-.1 F .794 +(vious command \(the w)-.25 F .795(ords in the)-.1 F(pre)144 120 Q .292 +(vious command be)-.25 F .292(gin with w)-.15 F .291(ord 0\).)-.1 F +2.791(An)5.291 G -2.25 -.15(eg a)-2.791 H(ti).15 E .591 -.15(ve a)-.25 H +-.18(rg).15 G .291(ument inserts the).18 F F2(n)2.791 E F0 .291(th w)B +.291(ord from the end of)-.1 F .281(the pre)144 132 R .281 +(vious command.)-.25 F .281(Once the ar)5.281 F(gument)-.18 E F2(n)2.781 +E F0 .281(is computed, the ar)2.781 F .281(gument is e)-.18 F .282 +(xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 144 Q +(xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 156 Q +2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.308 +(Insert the last ar)144 168 R 1.308(gument to the pre)-.18 F 1.307 +(vious command \(the last w)-.25 F 1.307(ord of the pre)-.1 F 1.307 +(vious history entry\).)-.25 F -.4(Wi)144 180 S .735(th an ar).4 F .735 +(gument, beha)-.18 F 1.035 -.15(ve ex)-.2 H .735(actly lik).15 F(e)-.1 E +F1(yank\255nth\255ar)3.235 E(g)-.1 E F0 5.736(.S)C(uccessi)-5.736 E +1.036 -.15(ve c)-.25 H .736(alls to).15 F F1(yank\255last\255ar)3.236 E +(g)-.1 E F0(mo)3.236 E -.15(ve)-.15 G .728 +(back through the history list, inserting the last ar)144 192 R .728 +(gument of each line in turn.)-.18 F .728(The history e)5.728 F(xpan-) +-.15 E .14(sion f)144 204 R .14(acilities are used to e)-.1 F .14 +(xtract the last ar)-.15 F .14(gument, as if the "!$" history e)-.18 F +.14(xpansion had been speci-)-.15 F(\214ed.)144 216 Q F1 +(shell\255expand\255line \(M\255C\255e\))108 228 Q F0 .623 +(Expand the line as the shell does.)144 240 R .622 +(This performs alias and history e)5.622 F .622 +(xpansion as well as all of the)-.15 F(shell w)144 252 Q(ord e)-.1 E 2.5 +(xpansions. See)-.15 F/F3 9/Times-Bold@0 SF(HIST)2.5 E(OR)-.162 E 2.25 +(YE)-.315 G(XP)-2.25 E(ANSION)-.666 E F0(belo)2.25 E 2.5(wf)-.25 G +(or a description of history e)-2.5 E(xpansion.)-.15 E F1 +(history\255expand\255line \(M\255^\))108 264 Q F0 .938 +(Perform history e)144 276 R .939(xpansion on the current line.)-.15 F +(See)5.939 E F3(HIST)3.439 E(OR)-.162 E 3.189(YE)-.315 G(XP)-3.189 E +(ANSION)-.666 E F0(belo)3.189 E 3.439(wf)-.25 G .939(or a descrip-) +-3.439 F(tion of history e)144 288 Q(xpansion.)-.15 E F1(magic\255space) +108 300 Q F0 1.627(Perform history e)144 312 R 1.627 +(xpansion on the current line and insert a space.)-.15 F(See)6.626 E F3 +(HIST)4.126 E(OR)-.162 E 3.876(YE)-.315 G(XP)-3.876 E(ANSION)-.666 E F0 +(belo)144 324 Q 2.5(wf)-.25 G(or a description of history e)-2.5 E +(xpansion.)-.15 E F1(alias\255expand\255line)108 336 Q F0 .394 +(Perform alias e)144 348 R .394(xpansion on the current line.)-.15 F +(See)5.395 E F3(ALIASES)2.895 E F0(abo)2.645 E .695 -.15(ve f)-.15 H +.395(or a description of alias e).15 F(xpan-)-.15 E(sion.)144 360 Q F1 +(history\255and\255alias\255expand\255line)108 372 Q F0 +(Perform history and alias e)144 384 Q(xpansion on the current line.) +-.15 E F1(insert\255last\255ar)108 396 Q(gument \(M\255.)-.1 E 2.5(,M) +.833 G -1.667(\255_ \))-2.5 F F0 2.5(As)144 408 S(ynon)-2.5 E(ym for) +-.15 E F1(yank\255last\255ar)2.5 E(g)-.1 E F0(.)A F1 +(operate\255and\255get\255next \(C\255o\))108 420 Q F0 .948 +(Accept the current line for e)144 432 R -.15(xe)-.15 G .948 +(cution and fetch the ne).15 F .948(xt line relati)-.15 F 1.247 -.15 +(ve t)-.25 H 3.447(ot).15 G .947(he current line from the)-3.447 F +(history for editing.)144 444 Q(An)5 E 2.5(ya)-.15 G -.18(rg)-2.5 G +(ument is ignored.).18 E F1 +(edit\255and\255execute\255command \(C\255xC\255e\))108 456 Q F0(In)144 +468 Q -.2(vo)-.4 G 1.226 -.1(ke a).2 H 3.526(ne).1 G 1.026 +(ditor on the current command line, and e)-3.526 F -.15(xe)-.15 G 1.026 +(cute the result as shell commands.).15 F F1(Bash)6.026 E F0 +(attempts to in)144 480 Q -.2(vo)-.4 G -.1(ke).2 G F3($VISU)2.6 E(AL) +-.54 E/F4 9/Times-Roman@0 SF(,)A F3($EDIT)2.25 E(OR)-.162 E F4(,)A F0 +(and)2.25 E F2(emacs)2.5 E F0(as the editor)2.5 E 2.5(,i)-.4 G 2.5(nt) +-2.5 G(hat order)-2.5 E(.)-.55 E F1(Commands f)87 496.8 Q(or Changing T) +-.25 E(ext)-.92 E(delete\255char \(C\255d\))108 508.8 Q F0 .358 +(Delete the character at point.)144 520.8 R .358(If point is at the be) +5.358 F .358(ginning of the line, there are no characters in the)-.15 F +(line, and the last character typed w)144 532.8 Q(as not bound to)-.1 E +F1(delete\255char)2.5 E F0 2.5(,t)C(hen return)-2.5 E F3(EOF)2.5 E F4(.) +A F1(backward\255delete\255char \(Rubout\))108 544.8 Q F0 .552 +(Delete the character behind the cursor)144 556.8 R 5.553(.W)-.55 G .553 +(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553(umeric ar)-3.053 F +.553(gument, sa)-.18 F .853 -.15(ve t)-.2 H .553(he deleted te).15 F +.553(xt on)-.15 F(the kill ring.)144 568.8 Q F1 -.25(fo)108 580.8 S +(rward\255backward\255delete\255char).25 E F0 .474 +(Delete the character under the cursor)144 592.8 R 2.974(,u)-.4 G .474 +(nless the cursor is at the end of the line, in which case the)-2.974 F +(character behind the cursor is deleted.)144 604.8 Q F1 +(quoted\255insert \(C\255q, C\255v\))108 616.8 Q F0 .778(Add the ne)144 +628.8 R .779(xt character typed to the line v)-.15 F 3.279 +(erbatim. This)-.15 F .779(is ho)3.279 F 3.279(wt)-.25 G 3.279(oi)-3.279 +G .779(nsert characters lik)-3.279 F(e)-.1 E F1(C\255q)3.279 E F0 3.279 +(,f)C(or)-3.279 E -.15(ex)144 640.8 S(ample.).15 E F1 +(tab\255insert \(C\255v T)108 652.8 Q(AB\))-.9 E F0 +(Insert a tab character)144 664.8 Q(.)-.55 E F1 +(self\255insert \(a, b, A, 1, !, ...\))108 676.8 Q F0 +(Insert the character typed.)144 688.8 Q F1 +(transpose\255chars \(C\255t\))108 700.8 Q F0 .322 +(Drag the character before point forw)144 712.8 R .321(ard o)-.1 F -.15 +(ve)-.15 G 2.821(rt).15 G .321(he character at point, mo)-2.821 F .321 +(ving point forw)-.15 F .321(ard as well.)-.1 F 1.182 +(If point is at the end of the line, then this transposes the tw)144 +724.8 R 3.683(oc)-.1 G 1.183(haracters before point.)-3.683 F(Ne)6.183 E +-.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(40)185.955 E 0 Cg EP +%%Page: 41 41 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(ar)144 84 Q(guments ha)-.18 E .3 -.15(ve n)-.2 H 2.5(oe).15 G +-.25(ff)-2.5 G(ect.).25 E/F1 10/Times-Bold@0 SF(transpose\255w)108 96 Q +(ords \(M\255t\))-.1 E F0 .024(Drag the w)144 108 R .024 +(ord before point past the w)-.1 F .023(ord after point, mo)-.1 F .023 +(ving point o)-.15 F -.15(ve)-.15 G 2.523(rt).15 G .023(hat w)-2.523 F +.023(ord as well.)-.1 F .023(If point)5.023 F +(is at the end of the line, this transposes the last tw)144 120 Q 2.5 +(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 132 Q +(ord \(M\255u\))-.1 E F0 1.698(Uppercase the current \(or follo)144 144 +R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga) +-.15 G(ti).05 E 1.999 -.15(ve a)-.25 H -.18(rg).15 G 1.699 +(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 156 S(rd, b).1 E +(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 168 Q +(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 180 Q 1.648 +(wercase the current \(or follo)-.25 F 1.648(wing\) w)-.25 F 4.148 +(ord. W)-.1 F 1.647(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.947 -.15 +(ve a)-.25 H -.18(rg).15 G 1.647(ument, lo).18 F 1.647(wercase the pre) +-.25 F(vious)-.25 E -.1(wo)144 192 S(rd, b).1 E(ut do not mo)-.2 E .3 +-.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 204 Q +(ord \(M\255c\))-.1 E F0 1.974(Capitalize the current \(or follo)144 216 +R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga) +-.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.975 +(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 228 S(rd, b).1 +E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 240 +S(rwrite\255mode).1 E F0 -.8(To)144 252 S .438(ggle o).8 F -.15(ve)-.15 +G .438(rwrite mode.).15 F -.4(Wi)5.438 G .438(th an e).4 F .438 +(xplicit positi)-.15 F .737 -.15(ve n)-.25 H .437(umeric ar).15 F .437 +(gument, switches to o)-.18 F -.15(ve)-.15 G .437(rwrite mode.).15 F -.4 +(Wi)144 264 S .78(th an e).4 F .781(xplicit non-positi)-.15 F 1.081 -.15 +(ve n)-.25 H .781(umeric ar).15 F .781(gument, switches to insert mode.) +-.18 F .781(This command af)5.781 F(fects)-.25 E(only)144 276 Q F1 +(emacs)4.395 E F0(mode;)4.395 E F1(vi)4.395 E F0 1.894(mode does o)4.395 +F -.15(ve)-.15 G 1.894(rwrite dif).15 F(ferently)-.25 E 6.894(.E)-.65 G +1.894(ach call to)-6.894 F/F2 10/Times-Italic@0 SF -.37(re)4.394 G +(adline\(\)).37 E F0 1.894(starts in insert)4.394 F 3.968(mode. In)144 +288 R -.15(ove)3.968 G 1.468(rwrite mode, characters bound to).15 F F1 +(self\255insert)3.969 E F0 1.469(replace the te)3.969 F 1.469 +(xt at point rather than)-.15 F .958(pushing the te)144 300 R .958 +(xt to the right.)-.15 F .957(Characters bound to)5.958 F F1 +(backward\255delete\255char)3.457 E F0 .957(replace the character)3.457 +F(before point with a space.)144 312 Q(By def)5 E +(ault, this command is unbound.)-.1 E F1(Killing and Y)87 328.8 Q +(anking)-.85 E(kill\255line \(C\255k\))108 340.8 Q F0(Kill the te)144 +352.8 Q(xt from point to the end of the line.)-.15 E F1 +(backward\255kill\255line \(C\255x Rubout\))108 364.8 Q F0(Kill backw) +144 376.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 +(unix\255line\255discard \(C\255u\))108 388.8 Q F0(Kill backw)144 400.8 +Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E +(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) +-2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 412.8 Q F0 +(Kill all characters on the current line, no matter where point is.)144 +424.8 Q F1(kill\255w)108 436.8 Q(ord \(M\255d\))-.1 E F0 .728 +(Kill from point to the end of the current w)144 448.8 R .729 +(ord, or if between w)-.1 F .729(ords, to the end of the ne)-.1 F .729 +(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 460.8 S +(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G +(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 472.8 Q +(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 484.8 Q(ord behind point.) +-.1 E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F1 +(backward\255w)2.5 E(ord)-.1 E F0(.)A F1(shell\255kill\255w)108 496.8 Q +(ord \(M\255d\))-.1 E F0 .729 +(Kill from point to the end of the current w)144 508.8 R .728 +(ord, or if between w)-.1 F .728(ords, to the end of the ne)-.1 F .728 +(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 520.8 S +(rd boundaries are the same as those used by).8 E F1(shell\255f)2.5 E +(orward\255w)-.25 E(ord)-.1 E F0(.)A F1(shell\255backward\255kill\255w) +108 532.8 Q(ord \(M\255Rubout\))-.1 E F0 3.025(Kill the w)144 544.8 R +3.025(ord behind point.)-.1 F -.8(Wo)8.025 G 3.025 +(rd boundaries are the same as those used by).8 F F1(shell\255back-) +5.525 E(ward\255w)144 556.8 Q(ord)-.1 E F0(.)A F1(unix\255w)108 568.8 Q +(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 580.8 R .365 +(ord behind point, using white space as a w)-.1 F .364(ord boundary)-.1 +F 5.364(.T)-.65 G .364(he killed te)-5.364 F .364(xt is sa)-.15 F -.15 +(ve)-.2 G 2.864(do).15 G 2.864(nt)-2.864 G(he)-2.864 E(kill-ring.)144 +592.8 Q F1(unix\255\214lename\255rubout)108 604.8 Q F0 .166(Kill the w) +144 616.8 R .166 +(ord behind point, using white space and the slash character as the w) +-.1 F .167(ord boundaries.)-.1 F(The)5.167 E(killed te)144 628.8 Q +(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)-2.5 G(he kill-ring.) +-2.5 E F1(delete\255horizontal\255space \(M\255\\\))108 640.8 Q F0 +(Delete all spaces and tabs around point.)144 652.8 Q F1(kill\255r)108 +664.8 Q(egion)-.18 E F0(Kill the te)144 676.8 Q(xt in the current re) +-.15 E(gion.)-.15 E F1(copy\255r)108 688.8 Q(egion\255as\255kill)-.18 E +F0(Cop)144 700.8 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E +(gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E(GNU Bash-4.1)72 +768 Q(2009 December 29)135.965 E(41)185.955 E 0 Cg EP +%%Page: 42 42 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(copy\255backward\255w)108 84 Q(ord)-.1 E F0 +(Cop)144 96 Q 4.801(yt)-.1 G 2.301(he w)-4.801 F 2.301 +(ord before point to the kill b)-.1 F(uf)-.2 E(fer)-.25 E 7.301(.T)-.55 +G 2.301(he w)-7.301 F 2.3(ord boundaries are the same as)-.1 F F1(back-) +4.8 E(ward\255w)144 108 Q(ord)-.1 E F0(.)A F1(copy\255f)108 120 Q +(orward\255w)-.25 E(ord)-.1 E F0(Cop)144 132 Q 4.507(yt)-.1 G 2.007 +(he w)-4.507 F 2.007(ord follo)-.1 F 2.007(wing point to the kill b)-.25 +F(uf)-.2 E(fer)-.25 E 7.008(.T)-.55 G 2.008(he w)-7.008 F 2.008 +(ord boundaries are the same as)-.1 F F1 -.25(fo)4.508 G -.37(r-).25 G +(ward\255w)144 144 Q(ord)-.1 E F0(.)A F1(yank \(C\255y\))108 156 Q F0 -1 +(Ya)144 168 S(nk the top of the kill ring into the b)1 E(uf)-.2 E +(fer at point.)-.25 E F1(yank\255pop \(M\255y\))108 180 Q F0 +(Rotate the kill ring, and yank the ne)144 192 Q 2.5(wt)-.25 G 2.5 +(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E +F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 208.8 Q +(guments)-.1 E(digit\255ar)108 220.8 Q +(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .642 +(Add this digit to the ar)144 232.8 R .641 +(gument already accumulating, or start a ne)-.18 F 3.141(wa)-.25 G -.18 +(rg)-3.141 G 3.141(ument. M\255\255).18 F .641(starts a ne)3.141 F(g-) +-.15 E(ati)144 244.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G(ument.).18 E F1 +(uni)108 256.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .778 +(This is another w)144 268.8 R .779(ay to specify an ar)-.1 F 3.279 +(gument. If)-.18 F .779(this command is follo)3.279 F .779 +(wed by one or more digits,)-.25 F 1.376 +(optionally with a leading minus sign, those digits de\214ne the ar)144 +280.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 +292.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni) +3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17 +(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other) +-.2 F(-)-.2 E .899(wise ignored.)144 304.8 R .898 +(As a special case, if this command is immediately follo)5.899 F .898 +(wed by a character that is)-.25 F .243 +(neither a digit or minus sign, the ar)144 316.8 R .243 +(gument count for the ne)-.18 F .243(xt command is multiplied by four) +-.15 F 5.243(.T)-.55 G(he)-5.243 E(ar)144 328.8 Q .378 +(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .378 +(cuting this function the \214rst time mak).15 F .378(es the ar)-.1 F +.378(gument count)-.18 F(four)144 340.8 Q 2.5(,as)-.4 G(econd time mak) +-2.5 E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1 +(Completing)87 357.6 Q(complete \(T)108 369.6 Q(AB\))-.9 E F0 1.137 +(Attempt to perform completion on the te)144 381.6 R 1.137 +(xt before point.)-.15 F F1(Bash)6.137 E F0 1.137 +(attempts completion treating the)3.637 F(te)144 393.6 Q .533(xt as a v) +-.15 F .533(ariable \(if the te)-.25 F .533(xt be)-.15 F .533(gins with) +-.15 F F1($)3.033 E F0 .533(\), username \(if the te)B .532(xt be)-.15 F +.532(gins with)-.15 F F1(~)3.032 E F0 .532(\), hostname \(if the)B(te) +144 405.6 Q .701(xt be)-.15 F .701(gins with)-.15 F F1(@)3.201 E F0 .701 +(\), or command \(including aliases and functions\) in turn.)B .702 +(If none of these pro-)5.701 F +(duces a match, \214lename completion is attempted.)144 417.6 Q F1 +(possible\255completions \(M\255?\))108 429.6 Q F0 +(List the possible completions of the te)144 441.6 Q(xt before point.) +-.15 E F1(insert\255completions \(M\255*\))108 453.6 Q F0 .783 +(Insert all completions of the te)144 465.6 R .783 +(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H +.783(een generated by).15 F F1(possible\255com-)3.282 E(pletions)144 +477.6 Q F0(.)A F1(menu\255complete)108 489.6 Q F0 .928(Similar to)144 +501.6 R F1(complete)3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628 +F .929(ord to be completed with a single match from the list of)-.1 F +1.194(possible completions.)144 513.6 R 1.194(Repeated e)6.194 F -.15 +(xe)-.15 G 1.194(cution of).15 F F1(menu\255complete)3.694 E F0 1.193 +(steps through the list of possible)3.694 F .828 +(completions, inserting each match in turn.)144 525.6 R .828 +(At the end of the list of completions, the bell is rung)5.828 F .727 +(\(subject to the setting of)144 537.6 R F1(bell\255style)3.227 E F0 +3.227(\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F +.727(An ar)5.727 F .727(gument of)-.18 F/F2 10/Times-Italic@0 SF(n)3.227 +E F0(mo)3.227 E -.15(ve)-.15 G(s).15 E F2(n)3.227 E F0 1.73 +(positions forw)144 549.6 R 1.73(ard in the list of matches; a ne)-.1 F +-.05(ga)-.15 G(ti).05 E 2.03 -.15(ve a)-.25 H -.18(rg).15 G 1.73 +(ument may be used to mo).18 F 2.03 -.15(ve b)-.15 H(ackw).15 E(ard)-.1 +E(through the list.)144 561.6 Q(This command is intended to be bound to) +5 E F1 -.9(TA)2.5 G(B).9 E F0 2.5(,b)C(ut is unbound by def)-2.7 E +(ault.)-.1 E F1(menu\255complete-)108 573.6 Q(w)10 I(k)-7.22 -10 M(c) +-5.56 -10 M(rd)2.78 10 M F0 .82(Identical to)144 585.6 R F1 +(menu\255complete)3.32 E F0 3.32(,b)C .82(ut mo)-3.52 F -.15(ve)-.15 G +3.32(sb).15 G(ackw)-3.32 E .82 +(ard through the list of possible completions, as if)-.1 F F1 +(menu\255complete)144 597.6 Q F0(had been gi)2.5 E -.15(ve)-.25 G 2.5 +(nan).15 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve a)-.25 H -.18(rg) +.15 G 2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E +F1(delete\255char\255or\255list)108 609.6 Q F0 .234 +(Deletes the character under the cursor if not at the be)144 621.6 R +.234(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete\255char) +2.735 E F0(\).)A .425(If at the end of the line, beha)144 633.6 R -.15 +(ve)-.2 G 2.925(si).15 G .425(dentically to)-2.925 F F1 +(possible\255completions)2.925 E F0 5.425(.T)C .425 +(his command is unbound)-5.425 F(by def)144 645.6 Q(ault.)-.1 E F1 +(complete\255\214lename \(M\255/\))108 657.6 Q F0 +(Attempt \214lename completion on the te)144 669.6 Q(xt before point.) +-.15 E F1(possible\255\214lename\255completions \(C\255x /\))108 681.6 Q +F0(List the possible completions of the te)144 693.6 Q +(xt before point, treating it as a \214lename.)-.15 E F1 +(complete\255user)108 705.6 Q(name \(M\255~\))-.15 E F0 +(Attempt completion on the te)144 717.6 Q +(xt before point, treating it as a username.)-.15 E(GNU Bash-4.1)72 768 +Q(2009 December 29)135.965 E(42)185.955 E 0 Cg EP +%%Page: 43 43 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(possible\255user)108 84 Q +(name\255completions \(C\255x ~\))-.15 E F0 +(List the possible completions of the te)144 96 Q +(xt before point, treating it as a username.)-.15 E F1(complete\255v)108 +108 Q(ariable \(M\255$\))-.1 E F0(Attempt completion on the te)144 120 Q +(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1 +(possible\255v)108 132 Q(ariable\255completions \(C\255x $\))-.1 E F0 +(List the possible completions of the te)144 144 Q +(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1 +(complete\255hostname \(M\255@\))108 156 Q F0 +(Attempt completion on the te)144 168 Q +(xt before point, treating it as a hostname.)-.15 E F1 +(possible\255hostname\255completions \(C\255x @\))108 180 Q F0 +(List the possible completions of the te)144 192 Q +(xt before point, treating it as a hostname.)-.15 E F1 +(complete\255command \(M\255!\))108 204 Q F0 .58 +(Attempt completion on the te)144 216 R .581 +(xt before point, treating it as a command name.)-.15 F .581 +(Command comple-)5.581 F .715(tion attempts to match the te)144 228 R +.715(xt ag)-.15 F .715(ainst aliases, reserv)-.05 F .715(ed w)-.15 F +.715(ords, shell functions, shell b)-.1 F .715(uiltins, and)-.2 F +(\214nally e)144 240 Q -.15(xe)-.15 G +(cutable \214lenames, in that order).15 E(.)-.55 E F1 +(possible\255command\255completions \(C\255x !\))108 252 Q F0 +(List the possible completions of the te)144 264 Q +(xt before point, treating it as a command name.)-.15 E F1 +(dynamic\255complete\255history \(M\255T)108 276 Q(AB\))-.9 E F0 .424 +(Attempt completion on the te)144 288 R .425 +(xt before point, comparing the te)-.15 F .425(xt ag)-.15 F .425 +(ainst lines from the history list)-.05 F +(for possible completion matches.)144 300 Q F1(dab)108 312 Q(br)-.1 E +-.15(ev)-.18 G(\255expand).15 E F0 .611 +(Attempt menu completion on the te)144 324 R .611 +(xt before point, comparing the te)-.15 F .61(xt ag)-.15 F .61 +(ainst lines from the his-)-.05 F +(tory list for possible completion matches.)144 336 Q F1 +(complete\255into\255braces \(M\255{\))108 348 Q F0 .4(Perform \214lena\ +me completion and insert the list of possible completions enclosed with\ +in braces so)144 360 R(the list is a)144 372 Q -.25(va)-.2 G +(ilable to the shell \(see).25 E F1(Brace Expansion)2.5 E F0(abo)2.5 E +-.15(ve)-.15 G(\).).15 E F1 -.25(Ke)87 388.8 S(yboard Macr).25 E(os)-.18 +E(start\255kbd\255macr)108 400.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)) +.833 E F0(Be)144 412.8 Q(gin sa)-.15 E +(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G +(board macro.).15 E F1(end\255kbd\255macr)108 424.8 Q 2.5(o\()-.18 G +(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 436.8 Q +(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G +(board macro and store the de\214nition.).15 E F1 +(call\255last\255kbd\255macr)108 448.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5 +E F0(Re-e)144 460.8 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1 +G .999(board macro de\214ned, by making the characters in the macro app\ +ear as if).15 F(typed at the k)144 472.8 Q -.15(ey)-.1 G(board.).15 E F1 +(Miscellaneous)87 489.6 Q -.18(re)108 501.6 S.18 E +(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776 +(Read in the contents of the)144 513.6 R/F2 10/Times-Italic@0 SF(inputr) +4.276 E(c)-.37 E F0 1.777(\214le, and incorporate an)4.276 F 4.277(yb) +-.15 G 1.777(indings or v)-4.277 F 1.777(ariable assignments)-.25 F +(found there.)144 525.6 Q F1(abort \(C\255g\))108 537.6 Q F0 3.249 +(Abort the current editing command and ring the terminal')144 549.6 R +5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1 +(bell\255style)144 561.6 Q F0(\).)A F1(do\255upper)108 573.6 Q +(case\255v)-.18 E(ersion \(M\255a, M\255b, M\255)-.1 E F2(x)A F1 2.5(,.) +C(..\))-2.5 E F0 1.755(If the meta\214ed character)144 585.6 R F2(x) +4.255 E F0 1.755(is lo)4.255 F 1.756 +(wercase, run the command that is bound to the corresponding)-.25 F +(uppercase character)144 597.6 Q(.)-.55 E F1(pr)108 609.6 Q +(e\214x\255meta \(ESC\))-.18 E F0(Metafy the ne)144 621.6 Q +(xt character typed.)-.15 E/F3 9/Times-Bold@0 SF(ESC)5 E F1(f)2.25 E F0 +(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1(Meta\255f)2.5 E F0(.)A F1 +(undo \(C\255_, C\255x C\255u\))108 633.6 Q F0 +(Incremental undo, separately remembered for each line.)144 645.6 Q F1 +-2.29 -.18(re v)108 657.6 T(ert\255line \(M\255r\)).08 E F0 1.095 +(Undo all changes made to this line.)144 669.6 R 1.095(This is lik)6.095 +F 3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E +F0 1.095(command enough times to)3.595 F +(return the line to its initial state.)144 681.6 Q F1 +(tilde\255expand \(M\255&\))108 693.6 Q F0(Perform tilde e)144 705.6 Q +(xpansion on the current w)-.15 E(ord.)-.1 E(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(43)185.955 E 0 Cg EP +%%Page: 44 44 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(set\255mark \(C\255@, M\255\))108 84 +Q F0(Set the mark to the point.)144 96 Q(If a numeric ar)5 E +(gument is supplied, the mark is set to that position.)-.18 E F1 +(exchange\255point\255and\255mark \(C\255x C\255x\))108 108 Q F0(Sw)144 +120 Q .282(ap the point with the mark.)-.1 F .283 +(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G +2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa) +144 132 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 +(character\255sear)108 144 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 156 S +.536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G 3.035(dt) +.15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535 +(xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05 +(ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre) +144 168 Q(vious occurrences.)-.25 E F1(character\255sear)108 180 Q +(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 192 S 1.043 +(haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G +3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044 +(vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E +-.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G +(count searches for subsequent occurrences.)144 204 Q F1 +(skip\255csi\255sequence \(\))108 216 Q F0 1.827 +(Read enough characters to consume a multi-k)144 228 R 2.126 -.15(ey s) +-.1 H 1.826(equence such as those de\214ned for k).15 F -.15(ey)-.1 G +4.326(sl).15 G(ik)-4.326 E(e)-.1 E .79(Home and End.)144 240 R .791 +(Such sequences be)5.79 F .791 +(gin with a Control Sequence Indicator \(CSI\), usually ESC\255[.)-.15 F +.332(If this sequence is bound to "\\[", k)144 252 R -.15(ey)-.1 G 2.831 +(sp).15 G .331(roducing such sequences will ha)-2.831 F .631 -.15(ve n) +-.2 H 2.831(oe).15 G -.25(ff)-2.831 G .331(ect unless e).25 F(xplic-) +-.15 E .026(itly bound to a readline command, instead of inserting stra\ +y characters into the editing b)144 264 R(uf)-.2 E(fer)-.25 E 5.026(.T) +-.55 G(his)-5.026 E(is unbound by def)144 276 Q(ault, b)-.1 E +(ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108 +288 Q F0 -.4(Wi)144 300 S .481(thout a numeric ar).4 F .481 +(gument, the v)-.18 F .481(alue of the readline)-.25 F F1 +(comment\255begin)2.981 E F0 -.25(va)2.981 G .48 +(riable is inserted at the).25 F(be)144 312 Q .097 +(ginning of the current line.)-.15 F .098(If a numeric ar)5.097 F .098 +(gument is supplied, this command acts as a toggle:)-.18 F(if)5.098 E +.322(the characters at the be)144 324 R .321 +(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1 +(comment\255begin)2.821 E F0 2.821(,t)C .321(he v)-2.821 F .321(alue is) +-.25 F .831(inserted, otherwise the characters in)144 336 R F1 +(comment\255begin)3.331 E F0 .832(are deleted from the be)3.331 F .832 +(ginning of the line.)-.15 F 1.469 +(In either case, the line is accepted as if a ne)144 348 R 1.468 +(wline had been typed.)-.25 F 1.468(The def)6.468 F 1.468(ault v)-.1 F +1.468(alue of)-.25 F F1(com-)3.968 E(ment\255begin)144 360 Q F0 .839 +(causes this command to mak)3.339 F 3.339(et)-.1 G .839 +(he current line a shell comment.)-3.339 F .84(If a numeric ar)5.84 F +(gu-)-.18 E(ment causes the comment character to be remo)144 372 Q -.15 +(ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G +(cuted by the shell.).15 E F1(glob\255complete\255w)108 384 Q +(ord \(M\255g\))-.1 E F0 .792(The w)144 396 R .791 +(ord before point is treated as a pattern for pathname e)-.1 F .791 +(xpansion, with an asterisk implicitly)-.15 F 2.5(appended. This)144 408 +R(pattern is used to generate a list of matching \214le names for possi\ +ble completions.)2.5 E F1(glob\255expand\255w)108 420 Q +(ord \(C\255x *\))-.1 E F0 .371(The w)144 432 R .372 +(ord before point is treated as a pattern for pathname e)-.1 F .372 +(xpansion, and the list of matching \214le)-.15 F .516 +(names is inserted, replacing the w)144 444 R 3.016(ord. If)-.1 F 3.016 +(an)3.016 G .516(umeric ar)-3.016 F .516 +(gument is supplied, an asterisk is appended)-.18 F(before pathname e) +144 456 Q(xpansion.)-.15 E F1(glob\255list\255expansions \(C\255x g\)) +108 468 Q F0 .923(The list of e)144 480 R .923(xpansions that w)-.15 F +.923(ould ha)-.1 F 1.223 -.15(ve b)-.2 H .923(een generated by).15 F F1 +(glob\255expand\255w)3.423 E(ord)-.1 E F0 .923(is displayed, and)3.423 F +.872(the line is redra)144 492 R 3.372(wn. If)-.15 F 3.372(an)3.372 G +.872(umeric ar)-3.372 F .872 +(gument is supplied, an asterisk is appended before pathname)-.18 F -.15 +(ex)144 504 S(pansion.).15 E F1(dump\255functions)108 516 Q F0 .626 +(Print all of the functions and their k)144 528 R .926 -.15(ey b)-.1 H +.627(indings to the readline output stream.).15 F .627(If a numeric ar) +5.627 F(gu-)-.18 E +(ment is supplied, the output is formatted in such a w)144 540 Q +(ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr) +2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 552 Q(ariables)-.1 E F0 +1.8(Print all of the settable readline v)144 564 R 1.799 +(ariables and their v)-.25 F 1.799(alues to the readline output stream.) +-.25 F 1.799(If a)6.799 F .304(numeric ar)144 576 R .304 +(gument is supplied, the output is formatted in such a w)-.18 F .304 +(ay that it can be made part of an)-.1 F F2(inputr)144 588 Q(c)-.37 E F0 +(\214le.)2.5 E F1(dump\255macr)108 600 Q(os)-.18 E F0 .593 +(Print all of the readline k)144 612 R .893 -.15(ey s)-.1 H .592 +(equences bound to macros and the strings the).15 F 3.092(yo)-.15 G +3.092(utput. If)-3.092 F 3.092(an)3.092 G(umeric)-3.092 E(ar)144 624 Q +.528(gument is supplied, the output is formatted in such a w)-.18 F .528 +(ay that it can be made part of an)-.1 F F2(inputr)3.028 E(c)-.37 E F0 +(\214le.)144 636 Q F1(display\255shell\255v)108 648 Q +(ersion \(C\255x C\255v\))-.1 E F0(Display v)144 660 Q +(ersion information about the current instance of)-.15 E F1(bash)2.5 E +F0(.)A F1(Pr)87 676.8 Q(ogrammable Completion)-.18 E F0 .147(When w)108 +688.8 R .147(ord completion is attempted for an ar)-.1 F .147 +(gument to a command for which a completion speci\214cation \(a)-.18 F +F2(compspec)108 700.8 Q F0 3.828(\)h)C 1.329 +(as been de\214ned using the)-3.828 F F1(complete)3.829 E F0 -.2(bu) +3.829 G 1.329(iltin \(see).2 F/F3 9/Times-Bold@0 SF 1.329(SHELL B)3.829 +F(UIL)-.09 E 1.329(TIN COMMANDS)-.828 F F0(belo)3.579 E 1.329(w\), the) +-.25 F(programmable completion f)108 712.8 Q(acilities are in)-.1 E -.2 +(vo)-.4 G -.1(ke).2 G(d.).1 E .498 +(First, the command name is identi\214ed.)108 729.6 R .498 +(If the command w)5.498 F .497 +(ord is the empty string \(completion attempted at)-.1 F(GNU Bash-4.1)72 +768 Q(2009 December 29)135.965 E(44)185.955 E 0 Cg EP +%%Page: 45 45 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E .233(the be)108 84 R .233(ginning of an empty line\), an)-.15 F +2.733(yc)-.15 G .233(ompspec de\214ned with the)-2.733 F/F1 10 +/Times-Bold@0 SF2.733 E F0 .233(option to)2.733 F F1(complete) +2.733 E F0 .233(is used.)2.733 F .234(If a comp-)5.234 F .481(spec has \ +been de\214ned for that command, the compspec is used to generate the l\ +ist of possible completions)108 96 R .822(for the w)108 108 R 3.322 +(ord. If)-.1 F .822(the command w)3.322 F .823(ord is a full pathname, \ +a compspec for the full pathname is searched for)-.1 F 2.867 +(\214rst. If)108 120 R .366(no compspec is found for the full pathname,\ + an attempt is made to \214nd a compspec for the portion)2.867 F(follo) +108 132 Q .421(wing the \214nal slash.)-.25 F .422 +(If those searches to not result in a compspec, an)5.421 F 2.922(yc)-.15 +G .422(ompspec de\214ned with the)-2.922 F F12.922 E F0(option to) +108 144 Q F1(complete)2.5 E F0(is used as the def)2.5 E(ault.)-.1 E .817 +(Once a compspec has been found, it is used to generate the list of mat\ +ching w)108 160.8 R 3.317(ords. If)-.1 F 3.317(ac)3.317 G .817 +(ompspec is not)-3.317 F(found, the def)108 172.8 Q(ault)-.1 E F1(bash) +2.5 E F0(completion as described abo)2.5 E .3 -.15(ve u)-.15 H(nder).15 +E F1(Completing)2.5 E F0(is performed.)2.5 E .463 +(First, the actions speci\214ed by the compspec are used.)108 189.6 R +.464(Only matches which are pre\214x)5.464 F .464(ed by the w)-.15 F +.464(ord being)-.1 F .596(completed are returned.)108 201.6 R .596 +(When the)5.596 F F13.096 E F0(or)3.095 E F13.095 E F0 .595 +(option is used for \214lename or directory name completion, the)3.095 F +(shell v)108 213.6 Q(ariable)-.25 E/F2 9/Times-Bold@0 SF(FIGNORE)2.5 E +F0(is used to \214lter the matches.)2.25 E(An)108 230.4 Q 4.084(yc)-.15 +G 1.584(ompletions speci\214ed by a pathname e)-4.084 F 1.584 +(xpansion pattern to the)-.15 F F14.084 E F0 1.584 +(option are generated ne)4.084 F 4.084(xt. The)-.15 F -.1(wo)108 242.4 S +.555(rds generated by the pattern need not match the w).1 F .554 +(ord being completed.)-.1 F(The)5.554 E F2(GLOBIGNORE)3.054 E F0 .554 +(shell v)2.804 F(ari-)-.25 E +(able is not used to \214lter the matches, b)108 254.4 Q(ut the)-.2 E F2 +(FIGNORE)2.5 E F0 -.25(va)2.25 G(riable is used.).25 E(Ne)108 271.2 Q +.32(xt, the string speci\214ed as the ar)-.15 F .32(gument to the)-.18 F +F12.82 E F0 .321(option is considered.)2.821 F .321 +(The string is \214rst split using the)5.321 F .413(characters in the) +108 283.2 R F2(IFS)2.913 E F0 .412(special v)2.663 F .412 +(ariable as delimiters.)-.25 F .412(Shell quoting is honored.)5.412 F +.412(Each w)5.412 F .412(ord is then e)-.1 F(xpanded)-.15 E .091 +(using brace e)108 295.2 R .091(xpansion, tilde e)-.15 F .092 +(xpansion, parameter and v)-.15 F .092(ariable e)-.25 F .092 +(xpansion, command substitution, and arith-)-.15 F 1.397(metic e)108 +307.2 R 1.396(xpansion, as described abo)-.15 F 1.696 -.15(ve u)-.15 H +(nder).15 E F2(EXP)3.896 E(ANSION)-.666 E/F3 9/Times-Roman@0 SF(.)A F0 +1.396(The results are split using the rules described)5.896 F(abo)108 +319.2 Q .509 -.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)2.709 G .209 +(rd Splitting).75 F F0 5.209(.T)C .209(he results of the e)-5.209 F .209 +(xpansion are pre\214x-matched ag)-.15 F .21(ainst the w)-.05 F .21 +(ord being com-)-.1 F(pleted, and the matching w)108 331.2 Q +(ords become the possible completions.)-.1 E 1.238 +(After these matches ha)108 348 R 1.538 -.15(ve b)-.2 H 1.238 +(een generated, an).15 F 3.738(ys)-.15 G 1.237 +(hell function or command speci\214ed with the)-3.738 F F13.737 E +F0(and)3.737 E F13.737 E F0 3.375(options is in)108 360 R -.2(vo) +-.4 G -.1(ke).2 G 5.875(d. When).1 F 3.375 +(the command or function is in)5.875 F -.2(vo)-.4 G -.1(ke).2 G 3.375 +(d, the).1 F F2(COMP_LINE)5.876 E F3(,)A F2(COMP_POINT)5.626 E F3(,)A F2 +(COMP_KEY)108 372 Q F3(,)A F0(and)2.408 E F2(COMP_TYPE)2.658 E F0 -.25 +(va)2.408 G .157(riables are assigned v).25 F .157 +(alues as described abo)-.25 F .457 -.15(ve u)-.15 H(nder).15 E F1 .157 +(Shell V)2.657 F(ariables)-.92 E F0 5.157(.I)C(f)-5.157 E 3.485(as)108 +384 S .986(hell function is being in)-3.485 F -.2(vo)-.4 G -.1(ke).2 G +.986(d, the).1 F F2(COMP_W)3.486 E(ORDS)-.09 E F0(and)3.236 E F2 +(COMP_CW)3.486 E(ORD)-.09 E F0 -.25(va)3.236 G .986 +(riables are also set.).25 F(When)5.986 E .609 +(the function or command is in)108 396 R -.2(vo)-.4 G -.1(ke).2 G .608 +(d, the \214rst ar).1 F .608(gument is the name of the command whose ar) +-.18 F .608(guments are)-.18 F .073(being completed, the second ar)108 +408 R .073(gument is the w)-.18 F .073 +(ord being completed, and the third ar)-.1 F .073(gument is the w)-.18 F +.073(ord pre-)-.1 F .608(ceding the w)108 420 R .607 +(ord being completed on the current command line.)-.1 F .607 +(No \214ltering of the generated completions)5.607 F(ag)108 432 Q .093 +(ainst the w)-.05 F .093(ord being completed is performed; the function\ + or command has complete freedom in generat-)-.1 F(ing the matches.)108 +444 Q(An)108 460.8 Q 2.938(yf)-.15 G .437(unction speci\214ed with) +-2.938 F F12.937 E F0 .437(is in)2.937 F -.2(vo)-.4 G -.1(ke).2 G +2.937<648c>.1 G 2.937(rst. The)-2.937 F .437(function may use an)2.937 F +2.937(yo)-.15 G 2.937(ft)-2.937 G .437(he shell f)-2.937 F .437 +(acilities, including)-.1 F(the)108 472.8 Q F1(compgen)2.956 E F0 -.2 +(bu)2.956 G .456(iltin described belo).2 F 1.756 -.65(w, t)-.25 H 2.956 +(og).65 G .456(enerate the matches.)-2.956 F .457 +(It must put the possible completions in the)5.456 F F2(COMPREPL)108 +484.8 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E(Ne)108 501.6 Q .081 +(xt, an)-.15 F 2.581(yc)-.15 G .081(ommand speci\214ed with the)-2.581 F +F12.581 E F0 .081(option is in)2.581 F -.2(vo)-.4 G -.1(ke).2 G +2.581(di).1 G 2.58(na)-2.581 G 2.58(ne)-2.58 G -.4(nv)-2.58 G .08 +(ironment equi).4 F -.25(va)-.25 G .08(lent to command sub-).25 F 2.858 +(stitution. It)108 513.6 R .359(should print a list of completions, one\ + per line, to the standard output.)2.858 F .359(Backslash may be used) +5.359 F(to escape a ne)108 525.6 Q(wline, if necessary)-.25 E(.)-.65 E +.377(After all of the possible completions are generated, an)108 542.4 R +2.877<798c>-.15 G .377(lter speci\214ed with the)-2.877 F F12.876 +E F0 .376(option is applied to the)2.876 F 3.181(list. The)108 554.4 R +.681(\214lter is a pattern as used for pathname e)3.181 F .681 +(xpansion; a)-.15 F F1(&)3.181 E F0 .682 +(in the pattern is replaced with the te)3.182 F .682(xt of)-.15 F .523 +(the w)108 566.4 R .523(ord being completed.)-.1 F 3.023(Al)5.523 G +(iteral)-3.023 E F1(&)3.023 E F0 .522 +(may be escaped with a backslash; the backslash is remo)3.022 F -.15(ve) +-.15 G 3.022(db).15 G(efore)-3.022 E .849(attempting a match.)108 578.4 +R(An)5.849 E 3.349(yc)-.15 G .849 +(ompletion that matches the pattern will be remo)-3.349 F -.15(ve)-.15 G +3.35(df).15 G .85(rom the list.)-3.35 F 3.35(Al)5.85 G(eading)-3.35 E F1 +(!)3.35 E F0(ne)108 590.4 Q -.05(ga)-.15 G +(tes the pattern; in this case an).05 E 2.5(yc)-.15 G +(ompletion not matching the pattern will be remo)-2.5 E -.15(ve)-.15 G +(d.).15 E(Finally)108 607.2 Q 3.087(,a)-.65 G .887 -.15(ny p)-3.087 H +.587(re\214x and suf).15 F .587(\214x speci\214ed with the)-.25 F F1 +3.087 E F0(and)3.087 E F13.087 E F0 .587 +(options are added to each member of the com-)3.087 F(pletion list, and\ + the result is returned to the readline completion code as the list of \ +possible completions.)108 619.2 Q .246(If the pre)108 636 R .247 +(viously-applied actions do not generate an)-.25 F 2.747(ym)-.15 G .247 +(atches, and the)-2.747 F F1 .247(\255o dir)2.747 F(names)-.15 E F0 .247 +(option w)2.747 F .247(as supplied to)-.1 F F1(complete)108 648 Q F0 +(when the compspec w)2.5 E +(as de\214ned, directory name completion is attempted.)-.1 E .462 +(If the)108 664.8 R F1 .462(\255o plusdirs)2.962 F F0 .462(option w) +2.962 F .462(as supplied to)-.1 F F1(complete)2.962 E F0 .462 +(when the compspec w)2.962 F .462(as de\214ned, directory name com-)-.1 +F(pletion is attempted and an)108 676.8 Q 2.5(ym)-.15 G +(atches are added to the results of the other actions.)-2.5 E .559 +(By def)108 693.6 R .559(ault, if a compspec is found, whate)-.1 F -.15 +(ve)-.25 G 3.059(ri).15 G 3.059(tg)-3.059 G .56 +(enerates is returned to the completion code as the full set)-3.059 F +.632(of possible completions.)108 705.6 R .632(The def)5.632 F(ault)-.1 +E F1(bash)3.132 E F0 .631 +(completions are not attempted, and the readline def)3.131 F .631 +(ault of \214le-)-.1 F .558(name completion is disabled.)108 717.6 R +.558(If the)5.558 F F1 .559(\255o bashdefault)3.059 F F0 .559(option w) +3.059 F .559(as supplied to)-.1 F F1(complete)3.059 E F0 .559 +(when the compspec)3.059 F -.1(wa)108 729.6 S 3.172(sd).1 G .672 +(e\214ned, the)-3.172 F F1(bash)3.172 E F0(def)3.172 E .671 +(ault completions are attempted if the compspec generates no matches.) +-.1 F .671(If the)5.671 F F13.171 E F0(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(45)185.955 E 0 Cg EP +%%Page: 46 46 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(default)108 84 Q F0 1.207(option w)3.706 F +1.207(as supplied to)-.1 F F1(complete)3.707 E F0 1.207 +(when the compspec w)3.707 F 1.207(as de\214ned, readline')-.1 F 3.707 +(sd)-.55 G(ef)-3.707 E 1.207(ault completion)-.1 F +(will be performed if the compspec \(and, if attempted, the def)108 96 Q +(ault)-.1 E F1(bash)2.5 E F0(completions\) generate no matches.)2.5 E +.245(When a compspec indicates that directory name completion is desire\ +d, the programmable completion func-)108 112.8 R .632(tions force readl\ +ine to append a slash to completed names which are symbolic links to di\ +rectories, subject)108 124.8 R 2.762(to the v)108 136.8 R 2.762 +(alue of the)-.25 F F1(mark\255dir)5.262 E(ectories)-.18 E F0 2.761 +(readline v)5.262 F 2.761(ariable, re)-.25 F -.05(ga)-.15 G 2.761 +(rdless of the setting of the).05 F F1(mark-sym-)5.261 E(link)108 148.8 +Q(ed\255dir)-.1 E(ectories)-.18 E F0(readline v)2.5 E(ariable.)-.25 E +.19(There is some support for dynamically modifying completions.)108 +165.6 R .191(This is most useful when used in combina-)5.191 F 1.33 +(tion with a def)108 177.6 R 1.33(ault completion speci\214ed with)-.1 F +F1 1.33(complete -D)3.83 F F0 6.33(.I)C(t')-6.33 E 3.83(sp)-.55 G 1.33 +(ossible for shell functions e)-3.83 F -.15(xe)-.15 G 1.33(cuted as).15 +F .93(completion handlers to indicate that completion should be retried\ + by returning an e)108 189.6 R .93(xit status of 124.)-.15 F .93(If a) +5.93 F .1(shell function returns 124, and changes the compspec associat\ +ed with the command on which completion is)108 201.6 R .665 +(being attempted \(supplied as the \214rst ar)108 213.6 R .666 +(gument when the function is e)-.18 F -.15(xe)-.15 G .666 +(cuted\), programmable completion).15 F 1.139(restarts from the be)108 +225.6 R 1.139 +(ginning, with an attempt to \214nd a compspec for that command.)-.15 F +1.139(This allo)6.139 F 1.138(ws a set of)-.25 F(completions to be b)108 +237.6 Q(uilt dynamically as completion is attempted, rather than being \ +loaded all at once.)-.2 E -.15(Fo)108 254.4 S 2.636(ri).15 G .137 +(nstance, assuming that there is a library of compspecs, each k)-2.636 F +.137(ept in a \214le corresponding to the name of)-.1 F +(the command, the follo)108 266.4 Q(wing def)-.25 E +(ault completion function w)-.1 E(ould load completions dynamically:)-.1 +E/F2 10/Courier@0 SF(_completion_loader\(\))108 283.2 Q({)108 295.2 Q 6 +(.")144 307.2 S +(/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124)-6 E(})108 +319.2 Q(complete -D -F _completion_loader)108 331.2 Q/F3 10.95 +/Times-Bold@0 SF(HIST)72 360 Q(OR)-.197 E(Y)-.383 E F0 .372(When the)108 +372 R F1 .372(\255o history)2.872 F F0 .372(option to the)2.872 F F1 +(set)2.872 E F0 -.2(bu)2.872 G .372(iltin is enabled, the shell pro).2 F +.371(vides access to the)-.15 F/F4 10/Times-Italic@0 SF .371 +(command history)2.871 F F0(,)A .304(the list of commands pre)108 384 R +.304(viously typed.)-.25 F .304(The v)5.304 F .304(alue of the)-.25 F/F5 +9/Times-Bold@0 SF(HISTSIZE)2.804 E F0 -.25(va)2.554 G .305 +(riable is used as the number of com-).25 F .43(mands to sa)108 396 R +.73 -.15(ve i)-.2 H 2.93(nah).15 G .43(istory list.)-2.93 F .43(The te) +5.43 F .429(xt of the last)-.15 F F5(HISTSIZE)2.929 E F0 .429 +(commands \(def)2.679 F .429(ault 500\) is sa)-.1 F -.15(ve)-.2 G 2.929 +(d. The).15 F(shell)2.929 E .287 +(stores each command in the history list prior to parameter and v)108 +408 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F5(EXP)2.787 E +(ANSION)-.666 E F0(abo)2.537 E -.15(ve)-.15 G(\)).15 E -.2(bu)108 420 S +4.066(ta).2 G 1.565(fter history e)-4.066 F 1.565 +(xpansion is performed, subject to the v)-.15 F 1.565 +(alues of the shell v)-.25 F(ariables)-.25 E F5(HISTIGNORE)4.065 E F0 +(and)3.815 E F5(HISTCONTR)108 432 Q(OL)-.27 E/F6 9/Times-Roman@0 SF(.)A +F0 .082 +(On startup, the history is initialized from the \214le named by the v) +108 448.8 R(ariable)-.25 E F5(HISTFILE)2.583 E F0(\(def)2.333 E(ault)-.1 +E F4(~/.bash_history)2.583 E F0(\).)A .315(The \214le named by the v)108 +460.8 R .315(alue of)-.25 F F5(HISTFILE)2.815 E F0 .315 +(is truncated, if necessary)2.565 F 2.815(,t)-.65 G 2.815(oc)-2.815 G +.315(ontain no more than the number of)-2.815 F .532 +(lines speci\214ed by the v)108 472.8 R .532(alue of)-.25 F F5 +(HISTFILESIZE)3.032 E F6(.)A F0 .532 +(When the history \214le is read, lines be)5.032 F .532 +(ginning with the his-)-.15 F 1.159(tory comment character follo)108 +484.8 R 1.158(wed immediately by a digit are interpreted as timestamps \ +for the preceding)-.25 F .052(history line.)108 496.8 R .053 +(These timestamps are optionally displayed depending on the v)5.052 F +.053(alue of the)-.25 F F5(HISTTIMEFORMA)2.553 E(T)-.855 E F0 -.25(va) +108 508.8 S 4.387(riable. When).25 F 1.887(an interacti)4.387 F 2.187 +-.15(ve s)-.25 H 1.887(hell e).15 F 1.887(xits, the last)-.15 F F5 +($HISTSIZE)4.387 E F0 1.887(lines are copied from the history list to) +4.137 F F5($HISTFILE)108 520.8 Q F6(.)A F0 .056(If the)4.556 F F1 +(histappend)2.556 E F0 .056 +(shell option is enabled \(see the description of)2.556 F F1(shopt)2.556 +E F0(under)2.556 E F5 .056(SHELL B)2.556 F(UIL)-.09 E(TIN)-.828 E +(COMMANDS)108 532.8 Q F0(belo)2.672 E .422(w\), the lines are appended \ +to the history \214le, otherwise the history \214le is o)-.25 F -.15(ve) +-.15 G 2.921(rwritten. If).15 F F5(HISTFILE)108 544.8 Q F0 .435(is unse\ +t, or if the history \214le is unwritable, the history is not sa)2.684 F +-.15(ve)-.2 G 2.935(d. If).15 F(the)2.935 E F5(HISTTIMEFORMA)2.935 E(T) +-.855 E F0 -.25(va)108 556.8 S .917 +(riable is set, time stamps are written to the history \214le, mark).25 +F .916(ed with the history comment character)-.1 F 3.416(,s)-.4 G(o) +-3.416 E(the)108 568.8 Q 3.082(ym)-.15 G .582(ay be preserv)-3.082 F +.582(ed across shell sessions.)-.15 F .583 +(This uses the history comment character to distinguish time-)5.583 F +.987(stamps from other history lines.)108 580.8 R .987(After sa)5.987 F +.987(ving the history)-.2 F 3.486(,t)-.65 G .986 +(he history \214le is truncated to contain no more)-3.486 F(than)108 +592.8 Q F5(HISTFILESIZE)2.5 E F0 2.5(lines. If)2.25 F F5(HISTFILESIZE) +2.5 E F0(is not set, no truncation is performed.)2.25 E 1.293(The b)108 +609.6 R 1.293(uiltin command)-.2 F F1(fc)3.793 E F0(\(see)3.793 E F5 +1.293(SHELL B)3.793 F(UIL)-.09 E 1.293(TIN COMMANDS)-.828 F F0(belo) +3.543 E 1.294(w\) may be used to list or edit and re-)-.25 F -.15(exe) +108 621.6 S .674(cute a portion of the history list.).15 F(The)5.673 E +F1(history)3.173 E F0 -.2(bu)3.173 G .673 +(iltin may be used to display or modify the history list).2 F .279 +(and manipulate the history \214le.)108 633.6 R .279 +(When using command-line editing, search commands are a)5.279 F -.25(va) +-.2 G .28(ilable in each).25 F(editing mode that pro)108 645.6 Q +(vide access to the history list.)-.15 E 1.486(The shell allo)108 662.4 +R 1.486(ws control o)-.25 F -.15(ve)-.15 G 3.986(rw).15 G 1.486 +(hich commands are sa)-3.986 F -.15(ve)-.2 G 3.986(do).15 G 3.986(nt) +-3.986 G 1.486(he history list.)-3.986 F(The)6.485 E F5(HISTCONTR)3.985 +E(OL)-.27 E F0(and)3.735 E F5(HISTIGNORE)108 674.4 Q F0 -.25(va)2.707 G +.457(riables may be set to cause the shell to sa).25 F .758 -.15(ve o) +-.2 H .458(nly a subset of the commands entered.).15 F(The)5.458 E F1 +(cmdhist)108 686.4 Q F0 .75 +(shell option, if enabled, causes the shell to attempt to sa)3.25 F 1.05 +-.15(ve e)-.2 H .75(ach line of a multi-line command in).15 F 1.077 +(the same history entry)108 698.4 R 3.577(,a)-.65 G 1.077 +(dding semicolons where necessary to preserv)-3.577 F 3.577(es)-.15 G +1.077(yntactic correctness.)-3.577 F(The)6.077 E F1(lithist)3.577 E F0 +.374(shell option causes the shell to sa)108 710.4 R .674 -.15(ve t)-.2 +H .374(he command with embedded ne).15 F .373 +(wlines instead of semicolons.)-.25 F .373(See the)5.373 F .318 +(description of the)108 722.4 R F1(shopt)2.818 E F0 -.2(bu)2.818 G .318 +(iltin belo).2 F 2.818(wu)-.25 G(nder)-2.818 E F5 .318(SHELL B)2.818 F +(UIL)-.09 E .318(TIN COMMANDS)-.828 F F0 .319 +(for information on setting and)2.568 F(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(46)185.955 E 0 Cg EP +%%Page: 47 47 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(unsetting shell options.)108 84 Q/F1 10.95/Times-Bold@0 SF(HIST) +72 100.8 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E(ANSION)-.81 E F0 .611 +(The shell supports a history e)108 112.8 R .611 +(xpansion feature that is similar to the history e)-.15 F .61 +(xpansion in)-.15 F/F2 10/Times-Bold@0 SF(csh.)3.11 E F0 .61 +(This section)5.61 F .87(describes what syntax features are a)108 124.8 +R -.25(va)-.2 G 3.371(ilable. This).25 F .871(feature is enabled by def) +3.371 F .871(ault for interacti)-.1 F 1.171 -.15(ve s)-.25 H .871 +(hells, and).15 F 2.014(can be disabled using the)108 136.8 R F2(+H) +4.514 E F0 2.014(option to the)4.514 F F2(set)4.514 E F0 -.2(bu)4.514 G +2.014(iltin command \(see).2 F/F3 9/Times-Bold@0 SF 2.013(SHELL B)4.513 +F(UIL)-.09 E 2.013(TIN COMMANDS)-.828 F F0(belo)108 148.8 Q 2.5 +(w\). Non-interacti)-.25 F .3 -.15(ve s)-.25 H +(hells do not perform history e).15 E(xpansion by def)-.15 E(ault.)-.1 E +1.305(History e)108 165.6 R 1.305(xpansions introduce w)-.15 F 1.306(or\ +ds from the history list into the input stream, making it easy to repea\ +t)-.1 F .21(commands, insert the ar)108 177.6 R .21(guments to a pre) +-.18 F .209 +(vious command into the current input line, or \214x errors in pre)-.25 +F(vious)-.25 E(commands quickly)108 189.6 Q(.)-.65 E 1.163(History e)108 +206.4 R 1.163(xpansion is performed immediately after a complete line i\ +s read, before the shell breaks it into)-.15 F -.1(wo)108 218.4 S 3.2 +(rds. It).1 F(tak)3.2 E .7(es place in tw)-.1 F 3.2(op)-.1 G 3.2 +(arts. The)-3.2 F .7 +(\214rst is to determine which line from the history list to use during) +3.2 F 4.367(substitution. The)108 230.4 R 1.868(second is to select por\ +tions of that line for inclusion into the current one.)4.367 F 1.868 +(The line)6.868 F .663(selected from the history is the)108 242.4 R/F4 +10/Times-Italic@0 SF -.15(ev)3.163 G(ent).15 E F0 3.163(,a)C .663 +(nd the portions of that line that are acted upon are)-3.163 F F4(wor) +3.162 E(ds)-.37 E F0 5.662(.V)C(arious)-6.772 E F4(modi\214er)108 254.4 +Q(s)-.1 E F0 .226(are a)2.726 F -.25(va)-.2 G .226 +(ilable to manipulate the selected w).25 F 2.726(ords. The)-.1 F .227 +(line is brok)2.726 F .227(en into w)-.1 F .227(ords in the same f)-.1 F +(ashion)-.1 E .352(as when reading input, so that se)108 266.4 R -.15 +(ve)-.25 G(ral).15 E F4(metac)2.852 E(har)-.15 E(acter)-.15 E F0 .351 +(-separated w)B .351(ords surrounded by quotes are considered)-.1 F .624 +(one w)108 278.4 R 3.124(ord. History)-.1 F -.15(ex)3.124 G .624 +(pansions are introduced by the appearance of the history e).15 F .625 +(xpansion character)-.15 F 3.125(,w)-.4 G(hich)-3.125 E(is)108 290.4 Q +F2(!)3.333 E F0(by def)3.333 E 2.5(ault. Only)-.1 F(backslash \()2.5 E +F2(\\).833 E F0 2.5(\)a).833 G(nd single quotes can quote the history e) +-2.5 E(xpansion character)-.15 E(.)-.55 E(Se)108 307.2 Q -.15(ve)-.25 G +.03(ral characters inhibit history e).15 F .03 +(xpansion if found immediately follo)-.15 F .03(wing the history e)-.25 +F .03(xpansion character)-.15 F(,)-.4 E -2.15 -.25(ev e)108 319.2 T +3.162(ni).25 G 3.162(fi)-3.162 G 3.162(ti)-3.162 G 3.162(su)-3.162 G +.662(nquoted: space, tab, ne)-3.162 F .662(wline, carriage return, and) +-.25 F F2(=)3.162 E F0 5.662(.I)C 3.162(ft)-5.662 G(he)-3.162 E F2 +(extglob)3.162 E F0 .662(shell option is enabled,)3.162 F F2(\()3.163 E +F0(will also inhibit e)108 331.2 Q(xpansion.)-.15 E(Se)108 348 Q -.15 +(ve)-.25 G .11(ral shell options settable with the).15 F F2(shopt)2.61 E +F0 -.2(bu)2.61 G .109(iltin may be used to tailor the beha).2 F .109 +(vior of history e)-.2 F(xpansion.)-.15 E 1.142(If the)108 360 R F2 +(histv)3.643 E(erify)-.1 E F0 1.143 +(shell option is enabled \(see the description of the)3.643 F F2(shopt) +3.643 E F0 -.2(bu)3.643 G 1.143(iltin belo).2 F 1.143(w\), and)-.25 F F2 +-.18(re)3.643 G(adline).18 E F0(is)3.643 E .461(being used, history sub\ +stitutions are not immediately passed to the shell parser)108 372 R 5.46 +(.I)-.55 G .46(nstead, the e)-5.46 F .46(xpanded line)-.15 F 1.515 +(is reloaded into the)108 384 R F2 -.18(re)4.015 G(adline).18 E F0 1.515 +(editing b)4.015 F(uf)-.2 E 1.516(fer for further modi\214cation.)-.25 F +(If)6.516 E F2 -.18(re)4.016 G(adline).18 E F0 1.516 +(is being used, and the)4.016 F F2(histr)108 396 Q(eedit)-.18 E F0 1.202 +(shell option is enabled, a f)3.702 F 1.202 +(ailed history substitution will be reloaded into the)-.1 F F2 -.18(re) +3.702 G(adline).18 E F0(editing)3.702 E -.2(bu)108 408 S -.25(ff).2 G +1.16(er for correction.).25 F(The)6.16 E F23.66 E F0 1.16 +(option to the)3.66 F F2(history)3.66 E F0 -.2(bu)3.661 G 1.161 +(iltin command may be used to see what a history).2 F -.15(ex)108 420 S +.056(pansion will do before using it.).15 F(The)5.056 E F22.556 E +F0 .056(option to the)2.556 F F2(history)2.555 E F0 -.2(bu)2.555 G .055 +(iltin may be used to add commands to the).2 F +(end of the history list without actually e)108 432 Q -.15(xe)-.15 G +(cuting them, so that the).15 E 2.5(ya)-.15 G(re a)-2.5 E -.25(va)-.2 G +(ilable for subsequent recall.).25 E 2.2(The shell allo)108 448.8 R 2.2 +(ws control of the v)-.25 F 2.2(arious characters used by the history e) +-.25 F 2.2(xpansion mechanism \(see the)-.15 F 1.147(description of)108 +460.8 R F2(histchars)3.647 E F0(abo)3.647 E 1.447 -.15(ve u)-.15 H(nder) +.15 E F2 1.147(Shell V)3.647 F(ariables)-.92 E F0 3.646(\). The)B 1.146 +(shell uses the history comment character to)3.646 F +(mark history timestamps when writing the history \214le.)108 472.8 Q F2 +(Ev)87 489.6 Q(ent Designators)-.1 E F0(An e)108 501.6 Q -.15(ve)-.25 G +(nt designator is a reference to a command line entry in the history li\ +st.).15 E F2(!)108 518.4 Q F0 1.607(Start a history substitution, e) +32.67 F 1.607(xcept when follo)-.15 F 1.607(wed by a)-.25 F F2(blank) +4.107 E F0 4.107(,n)C -.25(ew)-4.107 G 1.608 +(line, carriage return, = or \().25 F(\(when the)144 530.4 Q F2(extglob) +2.5 E F0(shell option is enabled using the)2.5 E F2(shopt)2.5 E F0 -.2 +(bu)2.5 G(iltin\).).2 E F2(!)108 542.4 Q F4(n)A F0 +(Refer to command line)27.67 E F4(n)2.5 E F0(.).24 E F2<21ad>108 554.4 Q +F4(n)A F0(Refer to the current command line minus)21.97 E F4(n)2.5 E F0 +(.).24 E F2(!!)108 566.4 Q F0(Refer to the pre)29.34 E(vious command.) +-.25 E(This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 578.4 Q F4 +(string)A F0(Refer to the most recent command starting with)9.33 E F4 +(string)2.5 E F0(.).22 E F2(!?)108 590.4 Q F4(string)A F2([?])A F0 1.022 +(Refer to the most recent command containing)144 602.4 R F4(string)3.522 +E F0 6.022(.T).22 G 1.022(he trailing)-6.022 F F2(?)3.522 E F0 1.022 +(may be omitted if)3.522 F F4(string)3.861 E F0(is)3.741 E(follo)144 +614.4 Q(wed immediately by a ne)-.25 E(wline.)-.25 E/F5 12/Times-Bold@0 +SF(^)108 631.4 Q F4(string1)-5 I F5(^)5 I F4(string2)-5 I F5(^)5 I F0 +2.629(Quick substitution.)144 638.4 R 2.629 +(Repeat the last command, replacing)7.629 F F4(string1)5.469 E F0(with) +5.129 E F4(string2)5.129 E F0 7.629(.E).02 G(qui)-7.629 E -.25(va)-.25 G +2.63(lent to).25 F -.74(``)144 650.4 S(!!:s/).74 E F4(string1)A F0(/)A +F4(string2)A F0(/')A 2.5('\()-.74 G(see)-2.5 E F2(Modi\214ers)2.5 E F0 +(belo)2.5 E(w\).)-.25 E F2(!#)108 662.4 Q F0 +(The entire command line typed so f)27.67 E(ar)-.1 E(.)-.55 E F2 -.75 +(Wo)87 679.2 S(rd Designators).75 E F0 -.8(Wo)108 691.2 S 1.314 +(rd designators are used to select desired w).8 F 1.314(ords from the e) +-.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F2(:)3.814 E F0 1.313 +(separates the e)3.813 F -.15(ve)-.25 G 1.313(nt speci\214cation).15 F +.529(from the w)108 703.2 R .529(ord designator)-.1 F 5.529(.I)-.55 G +3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529 +(ord designator be)-.1 F .529(gins with a)-.15 F F2(^)3.029 E F0(,)A F2 +($)3.029 E F0(,)A F2(*)3.029 E F0(,)A F23.029 E F0 3.029(,o)C(r) +-3.029 E F2(%)3.029 E F0 5.53(.W)C(ords)-6.33 E 1.301 +(are numbered from the be)108 715.2 R 1.301 +(ginning of the line, with the \214rst w)-.15 F 1.3 +(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)6.3 G 1.3(rds are).8 F +(inserted into the current line separated by single spaces.)108 727.2 Q +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(47)185.955 E 0 Cg EP +%%Page: 48 48 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF 2.5(0\()108 84 S(zer)-2.5 E(o\))-.18 E F0 +(The zeroth w)144 96 Q 2.5(ord. F)-.1 F +(or the shell, this is the command w)-.15 E(ord.)-.1 E/F2 10 +/Times-Italic@0 SF(n)108.36 108 Q F0(The)30.64 E F2(n)2.5 E F0(th w)A +(ord.)-.1 E F1(^)108 120 Q F0(The \214rst ar)32.67 E 2.5(gument. That) +-.18 F(is, w)2.5 E(ord 1.)-.1 E F1($)108 132 Q F0(The last ar)31 E +(gument.)-.18 E F1(%)108 144 Q F0(The w)26 E +(ord matched by the most recent `?)-.1 E F2(string)A F0(?' search.)A F2 +(x)108.77 156 Q F1A F2(y)A F0 2.5(Ar)20.65 G(ange of w)-2.5 E +(ords; `\255)-.1 E F2(y)A F0 2.5('a)C(bbre)-2.5 E(viates `0\255)-.25 E +F2(y)A F0('.)A F1(*)108 168 Q F0 .315(All of the w)31 F .315(ords b)-.1 +F .315(ut the zeroth.)-.2 F .315(This is a synon)5.315 F .315(ym for `) +-.15 F F2(1\255$)A F0 2.815('. It)B .315(is not an error to use)2.815 F +F1(*)2.816 E F0 .316(if there is)2.816 F(just one w)144 180 Q +(ord in the e)-.1 E -.15(ve)-.25 G +(nt; the empty string is returned in that case.).15 E F1(x*)108 192 Q F0 +(Abbre)26 E(viates)-.25 E F2(x\255$)2.5 E F0(.)A F1<78ad>108 204 Q F0 +(Abbre)25.3 E(viates)-.25 E F2(x\255$)2.5 E F0(lik)2.5 E(e)-.1 E F1(x*) +2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E(ord.)-.1 E(If a w)108 220.8 +Q(ord designator is supplied without an e)-.1 E -.15(ve)-.25 G +(nt speci\214cation, the pre).15 E(vious command is used as the e)-.25 E +-.15(ve)-.25 G(nt.).15 E F1(Modi\214ers)87 237.6 Q F0 .184 +(After the optional w)108 249.6 R .184(ord designator)-.1 F 2.684(,t)-.4 +G .183(here may appear a sequence of one or more of the follo)-2.684 F +.183(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 261.6 Q F1(h) +108 278.4 Q F0(Remo)30.44 E .3 -.15(ve a t)-.15 H +(railing \214le name component, lea).15 E(ving only the head.)-.2 E F1 +(t)108 290.4 Q F0(Remo)32.67 E .3 -.15(ve a)-.15 H +(ll leading \214le name components, lea).15 E(ving the tail.)-.2 E F1(r) +108 302.4 Q F0(Remo)31.56 E .3 -.15(ve a t)-.15 H(railing suf).15 E +(\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E +(ving the basename.)-.2 E F1(e)108 314.4 Q F0(Remo)31.56 E .3 -.15(ve a) +-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 326.4 +Q F0(Print the ne)30.44 E 2.5(wc)-.25 G(ommand b)-2.5 E(ut do not e)-.2 +E -.15(xe)-.15 G(cute it.).15 E F1(q)108 338.4 Q F0 +(Quote the substituted w)30.44 E(ords, escaping further substitutions.) +-.1 E F1(x)108 350.4 Q F0(Quote the substituted w)31 E(ords as with)-.1 +E F1(q)2.5 E F0 2.5(,b)C(ut break into w)-2.7 E(ords at)-.1 E F1(blanks) +2.5 E F0(and ne)2.5 E(wlines.)-.25 E F1(s/)108 362.4 Q F2(old)A F1(/)A +F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 374.4 Q F2(ne)3.081 E(w)-.15 E +F0 .221(for the \214rst occurrence of)3.031 F F2(old)2.951 E F0 .221 +(in the e)3.491 F -.15(ve)-.25 G .221(nt line.).15 F(An)5.221 E 2.721 +(yd)-.15 G .221(elimiter can be used in place)-2.721 F .617(of /.)144 +386.4 R .617 +(The \214nal delimiter is optional if it is the last character of the e) +5.617 F -.15(ve)-.25 G .617(nt line.).15 F .616(The delimiter may)5.616 +F .666(be quoted in)144 398.4 R F2(old)3.396 E F0(and)3.936 E F2(ne) +3.526 E(w)-.15 E F0 .666(with a single backslash.)3.476 F .666 +(If & appears in)5.666 F F2(ne)3.166 E(w)-.15 E F0 3.166(,i).31 G 3.166 +(ti)-3.166 G 3.166(sr)-3.166 G .666(eplaced by)-3.166 F F2(old)3.166 E +F0 5.666(.A).77 G .275(single backslash will quote the &.)144 410.4 R +(If)5.275 E F2(old)3.004 E F0 .274(is null, it is set to the last)3.544 +F F2(old)3.004 E F0 .274(substituted, or)3.544 F 2.774(,i)-.4 G 2.774 +(fn)-2.774 G 2.774(op)-2.774 G(re)-2.774 E(vi-)-.25 E +(ous history substitutions took place, the last)144 422.4 Q F2(string) +2.84 E F0(in a)2.72 E F1(!?)2.5 E F2(string)A F1([?])A F0(search.)5 E F1 +(&)108 434.4 Q F0(Repeat the pre)27.67 E(vious substitution.)-.25 E F1 +(g)108 446.4 Q F0 .397(Cause changes to be applied o)31 F -.15(ve)-.15 G +2.897(rt).15 G .398(he entire e)-2.897 F -.15(ve)-.25 G .398(nt line.) +.15 F .398(This is used in conjunction with `)5.398 F F1(:s)A F0 2.898 +('\()C(e.g.,)-2.898 E(`)144 458.4 Q F1(:gs/)A F2(old)A F1(/)A F2(ne)A(w) +-.15 E F1(/)A F0 1.219('\) or `)B F1(:&)A F0 3.719('. If)B 1.219 +(used with `)3.719 F F1(:s)A F0 1.218(', an)B 3.718(yd)-.15 G 1.218 +(elimiter can be used in place of /, and the \214nal)-3.718 F .089 +(delimiter is optional if it is the last character of the e)144 470.4 R +-.15(ve)-.25 G .09(nt line.).15 F(An)5.09 E F1(a)2.59 E F0 .09 +(may be used as a synon)2.59 F .09(ym for)-.15 F F1(g)144 482.4 Q F0(.)A +F1(G)108 494.4 Q F0(Apply the follo)28.22 E(wing `)-.25 E F1(s)A F0 2.5 +('m)C(odi\214er once to each w)-2.5 E(ord in the e)-.1 E -.15(ve)-.25 G +(nt line.).15 E/F3 10.95/Times-Bold@0 SF(SHELL B)72 511.2 Q(UIL)-.11 E +(TIN COMMANDS)-1.007 E F0 .063(Unless otherwise noted, each b)108 523.2 +R .062(uiltin command documented in this section as accepting options p\ +receded by)-.2 F F1108 535.2 Q F0(accepts)2.533 E F12.533 E F0 +.034(to signify the end of the options.)2.533 F(The)5.034 E F1(:)2.534 E +F0(,)A F1(true)2.534 E F0(,)A F1(false)2.534 E F0 2.534(,a)C(nd)-2.534 E +F1(test)2.534 E F0 -.2(bu)2.534 G .034(iltins do not accept options and) +.2 F .078(do not treat)108 547.2 R F12.577 E F0(specially)2.577 E +5.077(.T)-.65 G(he)-5.077 E F1(exit)2.577 E F0(,)A F1(logout)2.577 E F0 +(,)A F1(br)2.577 E(eak)-.18 E F0(,)A F1(continue)2.577 E F0(,)A F1(let) +2.577 E F0 2.577(,a)C(nd)-2.577 E F1(shift)2.577 E F0 -.2(bu)2.577 G +.077(iltins accept and process ar).2 F(gu-)-.18 E .319(ments be)108 +559.2 R .319(ginning with)-.15 F F12.819 E F0 .319 +(without requiring)2.819 F F12.819 E F0 5.319(.O)C .319(ther b) +-5.319 F .319(uiltins that accept ar)-.2 F .32(guments b)-.18 F .32 +(ut are not speci\214ed as)-.2 F 1.144(accepting options interpret ar) +108 571.2 R 1.144(guments be)-.18 F 1.144(ginning with)-.15 F F1 +3.643 E F0 1.143(as in)3.643 F -.25(va)-.4 G 1.143 +(lid options and require).25 F F13.643 E F0 1.143(to pre)3.643 F +-.15(ve)-.25 G 1.143(nt this).15 F(interpretation.)108 583.2 Q F1(:)108 +601.2 Q F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A .451(No ef)144 613.2 R +.451(fect; the command does nothing be)-.25 F .452(yond e)-.15 F +(xpanding)-.15 E F2(ar)3.282 E(guments)-.37 E F0 .452(and performing an) +3.222 F 2.952(ys)-.15 G(peci\214ed)-2.952 E 2.5(redirections. A)144 +625.2 R(zero e)2.5 E(xit code is returned.)-.15 E F1(.)110.5 642 Q F2 +(\214lename)6.666 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A F1(sour)108 +654 Q(ce)-.18 E F2(\214lename)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0 +(])A 1.02(Read and e)144 666 R -.15(xe)-.15 G 1.02(cute commands from) +.15 F F2(\214lename)5.43 E F0 1.02(in the current shell en)3.7 F 1.02 +(vironment and return the e)-.4 F(xit)-.15 E 1.68 +(status of the last command e)144 678 R -.15(xe)-.15 G 1.68(cuted from) +.15 F F2(\214lename)4.18 E F0 6.68(.I).18 G(f)-6.68 E F2(\214lename)6.09 +E F0 1.68(does not contain a slash, \214le)4.36 F .608(names in)144 690 +R/F4 9/Times-Bold@0 SF -.666(PA)3.108 G(TH)-.189 E F0 .608 +(are used to \214nd the directory containing)2.858 F F2(\214lename)3.108 +E F0 5.608(.T).18 G .608(he \214le searched for in)-5.608 F F4 -.666(PA) +3.108 G(TH)-.189 E F0 .832(need not be e)144 702 R -.15(xe)-.15 G 3.332 +(cutable. When).15 F F1(bash)3.332 E F0 .832(is not in)3.332 F F2 .832 +(posix mode)3.332 F F0 3.332(,t)C .833 +(he current directory is searched if no)-3.332 F .982 +(\214le is found in)144 714 R F4 -.666(PA)3.481 G(TH)-.189 E/F5 9 +/Times-Roman@0 SF(.)A F0 .981(If the)5.481 F F1(sour)3.481 E(cepath)-.18 +E F0 .981(option to the)3.481 F F1(shopt)3.481 E F0 -.2(bu)3.481 G .981 +(iltin command is turned of).2 F .981(f, the)-.25 F F4 -.666(PA)144 726 +S(TH)-.189 E F0 .112(is not searched.)2.362 F .112(If an)5.112 F(y)-.15 +E F2(ar)2.612 E(guments)-.37 E F0 .112(are supplied, the)2.612 F 2.612 +(yb)-.15 G .112(ecome the positional parameters when)-2.612 F +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(48)185.955 E 0 Cg EP +%%Page: 49 49 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Italic@0 SF(\214lename)144 84 Q F0 .342(is e)2.842 F +-.15(xe)-.15 G 2.842(cuted. Otherwise).15 F .342 +(the positional parameters are unchanged.)2.842 F .341 +(The return status is the)5.341 F .716(status of the last command e)144 +96 R .716(xited within the script \(0 if no commands are e)-.15 F -.15 +(xe)-.15 G .716(cuted\), and f).15 F .716(alse if)-.1 F F1(\214lename) +145.91 108 Q F0(is not found or cannot be read.)2.68 E/F2 10 +/Times-Bold@0 SF(alias)108 124.8 Q F0([)2.5 E F2A F0 2.5(][)C F1 +(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C(..])-2.5 E F2(Alias)144 +136.8 Q F0 2.725(with no ar)5.225 F 2.724(guments or with the)-.18 F F2 +5.224 E F0 2.724(option prints the list of aliases in the form) +5.224 F F2(alias)5.224 E F1(name)144 148.8 Q F0(=)A F1(value)A F0 .58 +(on standard output.)3.08 F .58(When ar)5.58 F .58 +(guments are supplied, an alias is de\214ned for each)-.18 F F1(name) +3.08 E F0(whose)144 160.8 Q F1(value)2.895 E F0 .395(is gi)2.895 F -.15 +(ve)-.25 G 2.895(n. A).15 F .395(trailing space in)2.895 F F1(value) +5.395 E F0 .395(causes the ne)2.895 F .395(xt w)-.15 F .395 +(ord to be check)-.1 F .395(ed for alias sub-)-.1 F .054 +(stitution when the alias is e)144 172.8 R 2.554(xpanded. F)-.15 F .054 +(or each)-.15 F F1(name)2.554 E F0 .054(in the ar)2.554 F .054 +(gument list for which no)-.18 F F1(value)2.554 E F0 .054(is sup-)2.554 +F 1.314(plied, the name and v)144 184.8 R 1.314 +(alue of the alias is printed.)-.25 F F2(Alias)6.314 E F0 1.314 +(returns true unless a)3.814 F F1(name)3.814 E F0 1.313(is gi)3.814 F +-.15(ve)-.25 G 3.813(nf).15 G(or)-3.813 E +(which no alias has been de\214ned.)144 196.8 Q F2(bg)108 213.6 Q F0([) +2.5 E F1(jobspec)A F0(...])2.5 E .744(Resume each suspended job)144 +225.6 R F1(jobspec)3.244 E F0 .745 +(in the background, as if it had been started with)3.244 F F2(&)3.245 E +F0 5.745(.I)C(f)-5.745 E F1(job-)4.985 E(spec)144 237.6 Q F0 .672 +(is not present, the shell')3.482 F 3.172(sn)-.55 G .672(otion of the) +-3.172 F F1(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F2 +(bg)5.671 E F1(jobspec)4.911 E F0 .671(returns 0 unless run)3.481 F .418 +(when job control is disabled or)144 249.6 R 2.919(,w)-.4 G .419 +(hen run with job control enabled, an)-2.919 F 2.919(ys)-.15 G +(peci\214ed)-2.919 E F1(jobspec)2.919 E F0 -.1(wa)2.919 G 2.919(sn).1 G +(ot)-2.919 E(found or w)144 261.6 Q(as started without job control.)-.1 +E F2(bind)108 278.4 Q F0([)2.5 E F2A F1 -.1(ke)2.5 G(ymap)-.2 E F0 +2.5(][)C F2(\255lpsvPSV)-2.5 E F0(])A F2(bind)108 290.4 Q F0([)2.5 E F2 +A F1 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F2-2.5 E F1 +(function)2.5 E F0 2.5(][)C F2-2.5 E F1(function)2.5 E F0 2.5(][)C +F2-2.5 E F1 -.1(ke)2.5 G(yseq)-.2 E F0(])A F2(bind)108 302.4 Q F0 +([)2.5 E F2A F1 -.1(ke)2.5 G(ymap)-.2 E F0(])A F22.5 E F1 +(\214lename)2.5 E F2(bind)108 314.4 Q F0([)2.5 E F2A F1 -.1(ke)2.5 +G(ymap)-.2 E F0(])A F22.5 E F1 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F1 +(shell\255command)A F2(bind)108 326.4 Q F0([)2.5 E F2A F1 -.1(ke) +2.5 G(ymap)-.2 E F0(])A F1 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F1 +(function\255name)A F2(bind)108 338.4 Q F1 -.37(re)2.5 G +(adline\255command).37 E F0 .239(Display current)144 350.4 R F2 -.18(re) +2.739 G(adline).18 E F0 -.1(ke)2.739 G 2.739(ya)-.05 G .239 +(nd function bindings, bind a k)-2.739 F .539 -.15(ey s)-.1 H .238 +(equence to a).15 F F2 -.18(re)2.738 G(adline).18 E F0 .238(function or) +2.738 F .475(macro, or set a)144 362.4 R F2 -.18(re)2.975 G(adline).18 E +F0 -.25(va)2.975 G 2.975(riable. Each).25 F .476(non-option ar)2.976 F +.476(gument is a command as it w)-.18 F .476(ould appear in)-.1 F F1 +(.inputr)144 374.4 Q(c)-.37 E F0 2.984(,b).31 G .484 +(ut each binding or command must be passed as a separate ar)-3.184 F +.483(gument; e.g., '"\\C\255x\\C\255r":)-.18 F 2.5 +(re\255read\255init\255\214le'. Options,)144 386.4 R(if supplied, ha)2.5 +E .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F2144 +398.4 Q F1 -.1(ke)2.5 G(ymap)-.2 E F0(Use)180 410.4 Q F1 -.1(ke)5.158 G +(ymap)-.2 E F0 2.658(as the k)5.348 F -.15(ey)-.1 G 2.658(map to be af) +.15 F 2.659(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E +F1 -.1(ke)180 422.4 S(ymap)-.2 E F0 3.193(names are)5.883 F F1 3.193 +(emacs, emacs\255standar)5.693 F 3.192 +(d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E +(vi\255command)180 434.4 Q F0 4.429(,a)C(nd)-4.429 E F1(vi\255insert) +4.429 E F0(.).68 E F1(vi)6.929 E F0 1.929(is equi)4.429 F -.25(va)-.25 G +1.929(lent to).25 F F1(vi\255command)4.429 E F0(;)A F1(emacs)4.429 E F0 +1.929(is equi)4.429 F -.25(va)-.25 G 1.93(lent to).25 F F1 +(emacs\255standar)180 446.4 Q(d)-.37 E F0(.)A F2144 458.4 Q F0 +(List the names of all)27.52 E F2 -.18(re)2.5 G(adline).18 E F0 +(functions.)2.5 E F2144 470.4 Q F0(Display)24.74 E F2 -.18(re)2.5 +G(adline).18 E F0(function names and bindings in such a w)2.5 E +(ay that the)-.1 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2144 482.4 +Q F0(List current)24.19 E F2 -.18(re)2.5 G(adline).18 E F0 +(function names and bindings.)2.5 E F2144 494.4 Q F0(Display)26.41 +E F2 -.18(re)3.655 G(adline).18 E F0 -.1(ke)3.655 G 3.655(ys)-.05 G +1.155(equences bound to macros and the strings the)-3.655 F 3.655(yo) +-.15 G 1.155(utput in such a)-3.655 F -.1(wa)180 506.4 S 2.5(yt).1 G +(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2144 518.4 Q +F0(Display)24.74 E F2 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5(ys) +-.05 G(equences bound to macros and the strings the)-2.5 E 2.5(yo)-.15 G +(utput.)-2.5 E F2144 530.4 Q F0(Display)25.3 E F2 -.18(re)2.5 G +(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E +(alues in such a w)-.25 E(ay that the)-.1 E 2.5(yc)-.15 G +(an be re-read.)-2.5 E F2144 542.4 Q F0(List current)23.08 E F2 +-.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E +(alues.)-.25 E F2144 554.4 Q F1(\214lename)2.5 E F0(Read k)180 +566.4 Q .3 -.15(ey b)-.1 H(indings from).15 E F1(\214lename)2.5 E F0(.)A +F2144 578.4 Q F1(function)2.5 E F0(Query about which k)180 590.4 Q +-.15(ey)-.1 G 2.5(si).15 G -1.9 -.4(nv o)-2.5 H .2 -.1(ke t).4 H +(he named).1 E F1(function)2.5 E F0(.)A F2144 602.4 Q F1(function) +2.5 E F0(Unbind all k)180 614.4 Q -.15(ey)-.1 G 2.5(sb).15 G +(ound to the named)-2.5 E F1(function)2.5 E F0(.)A F2144 626.4 Q +F1 -.1(ke)2.5 G(yseq)-.2 E F0(Remo)180 638.4 Q .3 -.15(ve a)-.15 H .3 +-.15(ny c).15 H(urrent binding for).15 E F1 -.1(ke)2.5 G(yseq)-.2 E F0 +(.)A F2144 650.4 Q F1 -.1(ke)2.5 G(yseq)-.2 E F2(:)A F1 +(shell\255command)A F0(Cause)180 662.4 Q F1(shell\255command)4.325 E F0 +1.825(to be e)4.325 F -.15(xe)-.15 G 1.825(cuted whene).15 F -.15(ve) +-.25 G(r).15 E F1 -.1(ke)4.325 G(yseq)-.2 E F0 1.825(is entered.)4.325 F +(When)6.825 E F1(shell\255com-)4.325 E(mand)180 674.4 Q F0 1.765(is e) +4.265 F -.15(xe)-.15 G 1.765(cuted, the shell sets the).15 F/F3 9 +/Times-Bold@0 SF(READLINE_LINE)4.265 E F0 -.25(va)4.015 G 1.765 +(riable to the contents of the).25 F F2 -.18(re)180 686.4 S(adline).18 E +F0 1.353(line b)3.852 F(uf)-.2 E 1.353(fer and the)-.25 F F3 +(READLINE_POINT)3.853 E F0 -.25(va)3.603 G 1.353 +(riable to the current location of the).25 F 2.012(insertion point.)180 +698.4 R 2.011(If the e)7.012 F -.15(xe)-.15 G 2.011 +(cuted command changes the v).15 F 2.011(alue of)-.25 F F3 +(READLINE_LINE)4.511 E F0(or)4.261 E F3(READLINE_POINT)180 710.4 Q/F4 9 +/Times-Roman@0 SF(,)A F0(those ne)2.25 E 2.5(wv)-.25 G +(alues will be re\215ected in the editing state.)-2.75 E(The return v) +144 727.2 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15 +(ve)-.25 G 2.5(no).15 G 2.5(ra)-2.5 G 2.5(ne)-2.5 G(rror occurred.)-2.5 +E(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(49)185.955 E 0 Cg EP +%%Page: 50 50 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(br)108 84 Q(eak)-.18 E F0([)2.5 E/F2 10 +/Times-Italic@0 SF(n)A F0(])A .054(Exit from within a)144 96 R F1 -.25 +(fo)2.554 G(r).25 E F0(,)A F1(while)2.554 E F0(,)A F1(until)2.555 E F0 +2.555(,o)C(r)-2.555 E F1(select)2.555 E F0 2.555(loop. If)2.555 F F2(n) +2.555 E F0 .055(is speci\214ed, break)2.555 F F2(n)2.555 E F0(le)2.555 E +-.15(ve)-.25 G(ls.).15 E F2(n)5.415 E F0 .055(must be)2.795 F/F3 10 +/Symbol SF2.555 E F0(1.)2.555 E(If)144 108 Q F2(n)3.075 E F0 .215(i\ +s greater than the number of enclosing loops, all enclosing loops are e) +2.955 F 2.714(xited. The)-.15 F .214(return v)2.714 F(alue)-.25 E +(is 0 unless)144 120 Q F2(n)2.5 E F0(is not greater than or equal to 1.) +2.5 E F1 -.2(bu)108 136.8 S(iltin).2 E F2(shell\255b)2.5 E(uiltin)-.2 E +F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A(Ex)144 148.8 Q .792 +(ecute the speci\214ed shell b)-.15 F .792(uiltin, passing it)-.2 F F2 +(ar)3.293 E(guments)-.37 E F0 3.293(,a).27 G .793(nd return its e)-3.293 +F .793(xit status.)-.15 F .793(This is useful)5.793 F .616 +(when de\214ning a function whose name is the same as a shell b)144 +160.8 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144 +172.8 R .57(uiltin within the function.)-.2 F(The)5.57 E F1(cd)3.07 E F0 +-.2(bu)3.07 G .57(iltin is commonly rede\214ned this w).2 F(ay)-.1 E +5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 184.8 Q(alse if)-.1 +E F2(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E +(uiltin command.)-.2 E F1(caller)108 201.6 Q F0([)2.5 E F2 -.2(ex)C(pr) +.2 E F0(])A .254(Returns the conte)144 213.6 R .254(xt of an)-.15 F +2.754(ya)-.15 G(cti)-2.754 E .554 -.15(ve s)-.25 H .254 +(ubroutine call \(a shell function or a script e).15 F -.15(xe)-.15 G +.254(cuted with the).15 F F1(.)2.753 E F0(or)2.753 E F1(sour)144 225.6 Q +(ce)-.18 E F0 -.2(bu)3.062 G 3.062(iltins. W).2 F(ithout)-.4 E F2 -.2 +(ex)3.062 G(pr).2 E F0(,)A F1(caller)3.062 E F0 .562 +(displays the line number and source \214lename of the current)3.062 F +.254(subroutine call.)144 237.6 R .254(If a non-ne)5.254 F -.05(ga)-.15 +G(ti).05 E .554 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15 +F F2 -.2(ex)2.753 G(pr).2 E F0(,)A F1(caller)2.753 E F0 .253 +(displays the line number)2.753 F 2.753(,s)-.4 G(ub-)-2.753 E 1.327(rou\ +tine name, and source \214le corresponding to that position in the curr\ +ent e)144 249.6 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001 +(This e)144 261.6 R .001(xtra information may be used, for e)-.15 F .001 +(xample, to print a stack trace.)-.15 F(The current frame is frame)5 E +3.019(0. The)144 273.6 R .519(return v)3.019 F .519 +(alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .52 +(cuting a subroutine call or).15 F F2 -.2(ex)3.02 G(pr).2 E F0 .52 +(does not corre-)3.02 F(spond to a v)144 285.6 Q +(alid position in the call stack.)-.25 E F1(cd)108 302.4 Q F0([)2.5 E F1 +(\255L|-P)A F0 2.5(][)C F2(dir)-2.5 E F0(])A .21 +(Change the current directory to)144 314.4 R F2(dir)2.71 E F0 5.21(.T)C +.21(he v)-5.21 F(ariable)-.25 E/F4 9/Times-Bold@0 SF(HOME)2.71 E F0 .21 +(is the def)2.46 F(ault)-.1 E F2(dir)2.71 E F0 5.21(.T).73 G .21(he v) +-5.21 F(ariable)-.25 E F4(CDP)2.71 E -.855(AT)-.666 G(H).855 E F0 .776 +(de\214nes the search path for the directory containing)144 326.4 R F2 +(dir)3.276 E F0 5.777(.A).73 G(lternati)-5.777 E 1.077 -.15(ve d)-.25 H +.777(irectory names in).15 F F4(CDP)3.277 E -.855(AT)-.666 G(H).855 E F0 +.764(are separated by a colon \(:\).)144 338.4 R 3.264(An)5.764 G .764 +(ull directory name in)-3.264 F F4(CDP)3.264 E -.855(AT)-.666 G(H).855 E +F0 .764(is the same as the current direc-)3.014 F(tory)144 350.4 Q 2.973 +(,i)-.65 G .473(.e., `)-2.973 F(`)-.74 E F1(.)A F0 -.74('')C 5.473(.I) +.74 G(f)-5.473 E F2(dir)3.323 E F0(be)3.703 E .474 +(gins with a slash \(/\), then)-.15 F F4(CDP)2.974 E -.855(AT)-.666 G(H) +.855 E F0 .474(is not used. The)2.724 F F12.974 E F0 .474 +(option says to use)2.974 F .58(the ph)144 362.4 R .58 +(ysical directory structure instead of follo)-.05 F .579 +(wing symbolic links \(see also the)-.25 F F13.079 E F0 .579 +(option to the)3.079 F F1(set)144 374.4 Q F0 -.2(bu)3.383 G .883 +(iltin command\); the).2 F F13.383 E F0 .884 +(option forces symbolic links to be follo)3.384 F 3.384(wed. An)-.25 F +(ar)3.384 E .884(gument of)-.18 F F13.384 E F0(is)3.384 E(equi)144 +386.4 Q -.25(va)-.25 G .316(lent to).25 F F4($OLDPWD)2.816 E/F5 9 +/Times-Roman@0 SF(.)A F0 .316(If a non-empty directory name from)4.816 F +F4(CDP)2.815 E -.855(AT)-.666 G(H).855 E F0 .315(is used, or if)2.565 F +F12.815 E F0 .315(is the \214rst)2.815 F(ar)144 398.4 Q .116(gument\ +, and the directory change is successful, the absolute pathname of the \ +ne)-.18 F 2.616(ww)-.25 G .116(orking direc-)-2.716 F 1.165 +(tory is written to the standard output.)144 410.4 R 1.164(The return v) +6.164 F 1.164(alue is true if the directory w)-.25 F 1.164 +(as successfully)-.1 F(changed; f)144 422.4 Q(alse otherwise.)-.1 E F1 +(command)108 439.2 Q F0([)2.5 E F1(\255pVv)A F0(])A F2(command)2.5 E F0 +([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(Run)144 451.2 Q F2(command)2.956 +E F0(with)3.527 E F2(ar)3.087 E(gs)-.37 E F0 .257 +(suppressing the normal shell function lookup. Only b)3.027 F .257 +(uiltin commands or)-.2 F .502(commands found in the)144 463.2 R F4 +-.666(PA)3.002 G(TH)-.189 E F0 .502(are e)2.752 F -.15(xe)-.15 G 3.002 +(cuted. If).15 F(the)3.002 E F13.002 E F0 .502(option is gi)3.002 +F -.15(ve)-.25 G .501(n, the search for).15 F F2(command)3.201 E F0(is) +3.771 E .399(performed using a def)144 475.2 R .399(ault v)-.1 F .399 +(alue for)-.25 F F4 -.666(PA)2.899 G(TH)-.189 E F0 .4 +(that is guaranteed to \214nd all of the standard utilities.)2.649 F(If) +5.4 E .175(either the)144 487.2 R F12.675 E F0(or)2.675 E F1 +2.675 E F0 .175(option is supplied, a description of)2.675 F F2(command) +2.875 E F0 .174(is printed.)3.445 F(The)5.174 E F12.674 E F0 .174 +(option causes)2.674 F 3.11(as)144 499.2 S .61(ingle w)-3.11 F .61 +(ord indicating the command or \214le name used to in)-.1 F -.2(vo)-.4 G +-.1(ke).2 G F2(command)3.41 E F0 .61(to be displayed; the)3.88 F F1 +144 511.2 Q F0 .25(option produces a more v)2.75 F .25 +(erbose description.)-.15 F .249(If the)5.25 F F12.749 E F0(or) +2.749 E F12.749 E F0 .249(option is supplied, the e)2.749 F .249 +(xit status)-.15 F 1.004(is 0 if)144 523.2 R F2(command)3.704 E F0 -.1 +(wa)4.274 G 3.504(sf).1 G 1.005(ound, and 1 if not.)-3.504 F 1.005 +(If neither option is supplied and an error occurred or)6.005 F F2 +(command)144.2 535.2 Q F0 1.599(cannot be found, the e)4.869 F 1.599 +(xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.598 +(xit status of the)-.15 F F1(command)4.098 E F0 -.2(bu)144 547.2 S +(iltin is the e).2 E(xit status of)-.15 E F2(command)2.5 E F0(.).77 E F1 +(compgen)108 564 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(wor)-2.5 E(d) +-.37 E F0(])A .012(Generate possible completion matches for)144 576 R F2 +(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F2(option)2.513 E +F0 .013(s, which may be an)B 2.513(yo)-.15 G(ption)-2.513 E .982 +(accepted by the)144 588 R F1(complete)3.482 E F0 -.2(bu)3.481 G .981 +(iltin with the e).2 F .981(xception of)-.15 F F13.481 E F0(and) +3.481 E F13.481 E F0 3.481(,a)C .981(nd write the matches to the) +-3.481 F 1.415(standard output.)144 600 R 1.415(When using the)6.415 F +F13.915 E F0(or)3.915 E F13.915 E F0 1.415(options, the v) +3.915 F 1.415(arious shell v)-.25 F 1.415(ariables set by the pro-)-.25 +F(grammable completion f)144 612 Q(acilities, while a)-.1 E -.25(va)-.2 +G(ilable, will not ha).25 E .3 -.15(ve u)-.2 H(seful v).15 E(alues.)-.25 +E .352(The matches will be generated in the same w)144 636 R .352 +(ay as if the programmable completion code had gen-)-.1 F .02(erated th\ +em directly from a completion speci\214cation with the same \215ags.)144 +648 R(If)5.02 E F2(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only)2.52 +F(those completions matching)144 660 Q F2(wor)2.5 E(d)-.37 E F0 +(will be displayed.)2.5 E(The return v)144 684 Q +(alue is true unless an in)-.25 E -.25(va)-.4 G +(lid option is supplied, or no matches were generated.).25 E F1 +(complete)108 700.8 Q F0([)3.729 E F1(\255abcdefgjksuv)A F0 3.729(][)C +F1-3.729 E F2(comp-option)3.729 E F0 3.729(][)C F1(\255DE)-3.729 E +F0 3.728(][)C F1-3.728 E F2(action)3.728 E F0 3.728(][)C F1 +-3.728 E F2(globpat)3.728 E F0 3.728(][)C F1-3.728 E F2(wor)3.728 +E(dlist)-.37 E F0 3.728(][)C F1-3.728 E F2(func-)3.728 E(tion)108 +712.8 Q F0 2.5(][)C F1-2.5 E F2(command)2.5 E F0(])A([)144 724.8 Q +F1A F2(\214lterpat)2.5 E F0 2.5(][)C F1-2.5 E F2(pr)2.5 E +(e\214x)-.37 E F0 2.5(][)C F1-2.5 E F2(suf)2.5 E<8c78>-.18 E F0(]) +A F2(name)2.5 E F0([)2.5 E F2(name ...)A F0(])A(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(50)185.955 E 0 Cg EP +%%Page: 51 51 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(complete \255pr)108 84 Q F0([)2.5 E F1 +(\255DE)A F0 2.5(][)C/F2 10/Times-Italic@0 SF(name)-2.5 E F0(...])2.5 E +.634(Specify ho)144 96 R 3.134(wa)-.25 G -.18(rg)-3.134 G .634 +(uments to each).18 F F2(name)3.134 E F0 .634(should be completed.)3.134 +F .633(If the)5.634 F F13.133 E F0 .633 +(option is supplied, or if no)3.133 F .139(options are supplied, e)144 +108 R .139(xisting completion speci\214cations are printed in a w)-.15 F +.14(ay that allo)-.1 F .14(ws them to be)-.25 F .31(reused as input.)144 +120 R(The)5.31 E F12.81 E F0 .31(option remo)2.81 F -.15(ve)-.15 G +2.81(sac).15 G .31(ompletion speci\214cation for each)-2.81 F F2(name) +2.81 E F0 2.81(,o)C 1.11 -.4(r, i)-2.81 H 2.81(fn).4 G(o)-2.81 E F2 +(name)2.81 E F0(s)A 1.346 +(are supplied, all completion speci\214cations.)144 132 R(The)6.347 E F1 +3.847 E F0 1.347(option indicates that the remaining options)3.847 +F .5(and actions should apply to the `)144 144 R(`def)-.74 E(ault')-.1 E +3('c)-.74 G .5(ommand completion; that is, completion attempted on)-3 F +3.455(ac)144 156 S .955(ommand for which no completion has pre)-3.455 F +.955(viously been de\214ned.)-.25 F(The)5.955 E F13.455 E F0 .955 +(option indicates that)3.455 F .065 +(the remaining options and actions should apply to `)144 168 R(`empty') +-.74 E 2.564('c)-.74 G .064(ommand completion; that is, comple-)-2.564 F +(tion attempted on a blank line.)144 180 Q 1.437 +(The process of applying these completion speci\214cations when w)144 +204 R 1.438(ord completion is attempted is)-.1 F(described abo)144 216 Q +.3 -.15(ve u)-.15 H(nder).15 E F1(Pr)2.5 E(ogrammable Completion)-.18 E +F0(.)A .556(Other options, if speci\214ed, ha)144 240 R .856 -.15(ve t) +-.2 H .555(he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F +.555(guments to the)-.18 F F13.055 E F0(,)A F13.055 E F0 +3.055(,a)C(nd)-3.055 E F13.055 E F0 .722 +(options \(and, if necessary)144 252 R 3.222(,t)-.65 G(he)-3.222 E F1 +3.222 E F0(and)3.222 E F13.222 E F0 .723 +(options\) should be quoted to protect them from e)3.222 F(xpan-)-.15 E +(sion before the)144 264 Q F1(complete)2.5 E F0 -.2(bu)2.5 G +(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F1144 276 Q F2 +(comp-option)2.5 E F0(The)184 288 Q F2(comp-option)2.791 E F0 .291 +(controls se)2.791 F -.15(ve)-.25 G .291(ral aspects of the compspec') +.15 F 2.791(sb)-.55 G(eha)-2.791 E .291(vior be)-.2 F .291 +(yond the simple)-.15 F(generation of completions.)184 300 Q F2 +(comp-option)5 E F0(may be one of:)2.5 E F1(bashdefault)184 312 Q F0 +.281(Perform the rest of the def)224 324 R(ault)-.1 E F1(bash)2.781 E F0 +.281(completions if the compspec generates no)2.781 F(matches.)224 336 Q +F1(default)184 348 Q F0 2.876(Use readline')10 F 5.376(sd)-.55 G(ef) +-5.376 E 2.875(ault \214lename completion if the compspec generates no) +-.1 F(matches.)224 360 Q F1(dir)184 372 Q(names)-.15 E F0(Perform direc\ +tory name completion if the compspec generates no matches.)224 384 Q F1 +(\214lenames)184 396 Q F0 -.7(Te)224 408 S .137(ll readline that the co\ +mpspec generates \214lenames, so it can perform an).7 F 2.637<798c>-.15 +G(le-)-2.637 E .134(name\255speci\214c processing \(lik)224 420 R 2.634 +(ea)-.1 G .134(dding a slash to directory names, quoting spe-)-2.634 F +.45(cial characters, or suppressing trailing spaces\).)224 432 R .45 +(Intended to be used with shell)5.45 F(functions.)224 444 Q F1(nospace) +184 456 Q F0 -.7(Te)6.11 G .22 +(ll readline not to append a space \(the def).7 F .22(ault\) to w)-.1 F +.22(ords completed at the end)-.1 F(of the line.)224 468 Q F1(plusdirs) +184 480 Q F0 1.985(After an)5.54 F 4.485(ym)-.15 G 1.985 +(atches de\214ned by the compspec are generated, directory name)-4.485 F +.584(completion is attempted and an)224 492 R 3.084(ym)-.15 G .584 +(atches are added to the results of the other)-3.084 F(actions.)224 504 +Q F1144 516 Q F2(action)2.5 E F0(The)184 528 Q F2(action)2.5 E F0 +(may be one of the follo)2.5 E +(wing to generate a list of possible completions:)-.25 E F1(alias)184 +540 Q F0(Alias names.)20.55 E(May also be speci\214ed as)5 E F12.5 +E F0(.)A F1(arrayv)184 552 Q(ar)-.1 E F0(Array v)224 564 Q +(ariable names.)-.25 E F1 4.7(binding Readline)184 576 R F0 -.1(ke)2.5 G +2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 588 S(iltin).2 E F0 +(Names of shell b)11.85 E(uiltin commands.)-.2 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(command)184 600 +Q F0(Command names.)224 612 Q(May also be speci\214ed as)5 E F12.5 +E F0(.)A F1(dir)184 624 Q(ectory)-.18 E F0(Directory names.)224 636 Q +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(disabled)184 648 +Q F0(Names of disabled shell b)224 660 Q(uiltins.)-.2 E F1(enabled)184 +672 Q F0(Names of enabled shell b)6.66 E(uiltins.)-.2 E F1(export)184 +684 Q F0(Names of e)12.23 E(xported shell v)-.15 E 2.5(ariables. May) +-.25 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(\214le)184 +696 Q F0(File names.)27.22 E(May also be speci\214ed as)5 E F12.5 +E F0(.)A(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(51)185.955 E 0 +Cg EP +%%Page: 52 52 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(function)184 84 Q F0 +(Names of shell functions.)224 96 Q F1(gr)184 108 Q(oup)-.18 E F0 +(Group names.)14.62 E(May also be speci\214ed as)5 E F12.5 E F0(.) +A F1(helptopic)184 120 Q F0(Help topics as accepted by the)224 132 Q F1 +(help)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(hostname)184 144 Q F0 +(Hostnames, as tak)224 156 Q(en from the \214le speci\214ed by the)-.1 E +/F2 9/Times-Bold@0 SF(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E +F1(job)184 168 Q F0(Job names, if job control is acti)26.11 E -.15(ve) +-.25 G 5(.M).15 G(ay also be speci\214ed as)-5 E F12.5 E F0(.)A F1 +-.1(ke)184 180 S(yw).1 E(ord)-.1 E F0(Shell reserv)224 192 Q(ed w)-.15 E +2.5(ords. May)-.1 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1 +(running)184 204 Q F0(Names of running jobs, if job control is acti)5.54 +E -.15(ve)-.25 G(.).15 E F1(ser)184 216 Q(vice)-.1 E F0(Service names.) +10.67 E(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(setopt) +184 228 Q F0 -1.11(Va)14.45 G(lid ar)1.11 E(guments for the)-.18 E F1 +2.5 E F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.) +.2 E F1(shopt)184 240 Q F0(Shell option names as accepted by the)16.66 E +F1(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 252 Q F0 +(Signal names.)14.99 E F1(stopped)184 264 Q F0 +(Names of stopped jobs, if job control is acti)6.66 E -.15(ve)-.25 G(.) +.15 E F1(user)184 276 Q F0(User names.)21.67 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1 -.1(va)184 288 S +(riable).1 E F0(Names of all shell v)5.1 E 2.5(ariables. May)-.25 F +(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1144 300 Q/F3 +10/Times-Italic@0 SF(globpat)2.5 E F0 1.007(The pathname e)184 312 R +1.007(xpansion pattern)-.15 F F3(globpat)3.507 E F0 1.007(is e)3.507 F +1.008(xpanded to generate the possible comple-)-.15 F(tions.)184 324 Q +F1144 336 Q F3(wor)2.5 E(dlist)-.37 E F0(The)184 348 Q F3(wor)3.64 +E(dlist)-.37 E F0 1.14(is split using the characters in the)3.64 F F2 +(IFS)3.64 E F0 1.139(special v)3.39 F 1.139(ariable as delimiters, and) +-.25 F 2.007(each resultant w)184 360 R 2.007(ord is e)-.1 F 4.507 +(xpanded. The)-.15 F 2.008(possible completions are the members of the) +4.507 F(resultant list which match the w)184 372 Q(ord being completed.) +-.1 E F1144 384 Q F3(command)2.5 E(command)184 396 Q F0 1.056 +(is e)3.556 F -.15(xe)-.15 G 1.056(cuted in a subshell en).15 F 1.056 +(vironment, and its output is used as the possible)-.4 F(completions.) +184 408 Q F1144 420 Q F3(function)2.5 E F0 1.18 +(The shell function)184 432 R F3(function)3.68 E F0 1.181(is e)3.681 F +-.15(xe)-.15 G 1.181(cuted in the current shell en).15 F 3.681 +(vironment. When)-.4 F 1.181(it \214n-)3.681 F .932 +(ishes, the possible completions are retrie)184 444 R -.15(ve)-.25 G +3.432(df).15 G .932(rom the v)-3.432 F .932(alue of the)-.25 F F2 +(COMPREPL)3.431 E(Y)-.828 E F0(array)3.181 E -.25(va)184 456 S(riable.) +.25 E F1144 468 Q F3(\214lterpat)2.5 E(\214lterpat)184 480 Q F0 +.455(is a pattern as used for pathname e)2.955 F 2.956(xpansion. It)-.15 +F .456(is applied to the list of possible)2.956 F 1.596 +(completions generated by the preceding options and ar)184 492 R 1.596 +(guments, and each completion)-.18 F(matching)184 504 Q F3(\214lterpat) +3.204 E F0 .704(is remo)3.204 F -.15(ve)-.15 G 3.204(df).15 G .704 +(rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)3.204 E F0 +(in)3.204 E F3(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 G .705 +(tes the pattern;).05 F(in this case, an)184 516 Q 2.5(yc)-.15 G +(ompletion not matching)-2.5 E F3(\214lterpat)2.5 E F0(is remo)2.5 E +-.15(ve)-.15 G(d.).15 E F1144 528 Q F3(pr)2.5 E(e\214x)-.37 E(pr) +184 540 Q(e\214x)-.37 E F0 .535(is added at the be)3.035 F .534 +(ginning of each possible completion after all other options ha)-.15 F +-.15(ve)-.2 G(been applied.)184 552 Q F1144 564 Q F3(suf)2.5 E +2.81(\214x suf)-.18 F<8c78>-.18 E F0 +(is appended to each possible completion after all other options ha)2.5 +E .3 -.15(ve b)-.2 H(een applied.).15 E .466(The return v)144 580.8 R +.466(alue is true unless an in)-.25 F -.25(va)-.4 G .466 +(lid option is supplied, an option other than).25 F F12.967 E F0 +(or)2.967 E F12.967 E F0 .467(is sup-)2.967 F 1.362 +(plied without a)144 592.8 R F3(name)3.862 E F0(ar)3.862 E 1.361 +(gument, an attempt is made to remo)-.18 F 1.661 -.15(ve a c)-.15 H +1.361(ompletion speci\214cation for a).15 F F3(name)144 604.8 Q F0 +(for which no speci\214cation e)2.5 E +(xists, or an error occurs adding a completion speci\214cation.)-.15 E +F1(compopt)108 621.6 Q F0([)2.5 E F1A F3(option)2.5 E F0 2.5(][)C +F1(\255DE)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F3(option)2.5 E F0 2.5(][)C F3 +(name)-2.5 E F0(])A .447(Modify completion options for each)144 633.6 R +F3(name)2.947 E F0 .447(according to the)2.947 F F3(option)2.947 E F0 +.447(s, or for the currently-e)B -.15(xe)-.15 G(cution).15 E .726 +(completion if no)144 645.6 R F3(name)3.226 E F0 3.226(sa)C .726 +(re supplied.)-3.226 F .725(If no)5.725 F F3(option)3.225 E F0 3.225(sa) +C .725(re gi)-3.225 F -.15(ve)-.25 G .725 +(n, display the completion options for).15 F(each)144 657.6 Q F3(name) +3.223 E F0 .723(or the current completion.)3.223 F .724(The possible v) +5.724 F .724(alues of)-.25 F F3(option)3.224 E F0 .724(are those v)3.224 +F .724(alid for the)-.25 F F1(com-)3.224 E(plete)144 669.6 Q F0 -.2(bu) +2.798 G .298(iltin described abo).2 F -.15(ve)-.15 G 5.297(.T).15 G(he) +-5.297 E F12.797 E F0 .297 +(option indicates that the remaining options should apply to)2.797 F +1.227(the `)144 681.6 R(`def)-.74 E(ault')-.1 E 3.727('c)-.74 G 1.228(o\ +mmand completion; that is, completion attempted on a command for which \ +no)-3.727 F 2.178(completion has pre)144 693.6 R 2.178 +(viously been de\214ned.)-.25 F(The)7.178 E F14.678 E F0 2.177 +(option indicates that the remaining options)4.677 F(should apply to `) +144 705.6 Q(`empty')-.74 E 2.5('c)-.74 G +(ommand completion; that is, completion attempted on a blank line.)-2.5 +E .327(The return v)108 722.4 R .327(alue is true unless an in)-.25 F +-.25(va)-.4 G .327 +(lid option is supplied, an attempt is made to modify the options for a) +.25 F(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(52)185.955 E 0 Cg +EP +%%Page: 53 53 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Italic@0 SF(name)108 84 Q F0 +(for which no completion speci\214cation e)2.5 E +(xists, or an output error occurs.)-.15 E/F2 10/Times-Bold@0 SF +(continue)108 100.8 Q F0([)2.5 E F1(n)A F0(])A 1.754(Resume the ne)144 +112.8 R 1.754(xt iteration of the enclosing)-.15 F F2 -.25(fo)4.254 G(r) +.25 E F0(,)A F2(while)4.254 E F0(,)A F2(until)4.254 E F0 4.254(,o)C(r) +-4.254 E F2(select)4.254 E F0 4.253(loop. If)4.254 F F1(n)4.613 E F0 +1.753(is speci\214ed,)4.493 F 1.208(resume at the)144 124.8 R F1(n)3.709 +E F0 1.209(th enclosing loop.)B F1(n)6.569 E F0 1.209(must be)3.949 F/F3 +10/Symbol SF3.709 E F0 3.709(1. If)3.709 F F1(n)4.069 E F0 1.209 +(is greater than the number of enclosing)3.949 F .514 +(loops, the last enclosing loop \(the `)144 136.8 R(`top-le)-.74 E -.15 +(ve)-.25 G(l').15 E 3.014('l)-.74 G .514(oop\) is resumed.)-3.014 F .513 +(The return v)5.513 F .513(alue is 0 unless)-.25 F F1(n)3.013 E F0(is) +3.013 E(not greater than or equal to 1.)144 148.8 Q F2(declar)108 165.6 +Q(e)-.18 E F0([)2.5 E F2(\255aAfFilrtux)A F0 2.5(][)C F2-2.5 E F0 +2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C(..])-2.5 E F2 +(typeset)108 177.6 Q F0([)2.5 E F2(\255aAfFilrtux)A F0 2.5(][)C F2 +-2.5 E F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C(..]) +-2.5 E 1.264(Declare v)144 189.6 R 1.264(ariables and/or gi)-.25 F 1.564 +-.15(ve t)-.25 H 1.264(hem attrib).15 F 3.765(utes. If)-.2 F(no)3.765 E +F1(name)3.765 E F0 3.765(sa)C 1.265(re gi)-3.765 F -.15(ve)-.25 G 3.765 +(nt).15 G 1.265(hen display the v)-3.765 F 1.265(alues of)-.25 F -.25 +(va)144 201.6 S 3.483(riables. The).25 F F23.483 E F0 .983 +(option will display the attrib)3.483 F .983(utes and v)-.2 F .982 +(alues of each)-.25 F F1(name)3.482 E F0 5.982(.W).18 G(hen)-5.982 E F2 +3.482 E F0 .982(is used)3.482 F(with)144 213.6 Q F1(name)3.579 E +F0(ar)3.579 E 1.079(guments, additional options are ignored.)-.18 F +(When)6.079 E F23.579 E F0 1.079(is supplied without)3.579 F F1 +(name)3.58 E F0(ar)3.58 E(gu-)-.18 E .151 +(ments, it will display the attrib)144 225.6 R .151(utes and v)-.2 F +.151(alues of all v)-.25 F .15(ariables ha)-.25 F .15(ving the attrib) +-.2 F .15(utes speci\214ed by the)-.2 F .046(additional options.)144 +237.6 R .046(If no other options are supplied with)5.046 F F22.547 +E F0(,)A F2(declar)2.547 E(e)-.18 E F0 .047(will display the attrib) +2.547 F .047(utes and)-.2 F -.25(va)144 249.6 S 1.363 +(lues of all shell v).25 F 3.863(ariables. The)-.25 F F23.863 E F0 +1.362(option will restrict the display to shell functions.)3.863 F(The) +6.362 E F23.862 E F0 2.422(option inhibits the display of functio\ +n de\214nitions; only the function name and attrib)144 261.6 R 2.423 +(utes are)-.2 F 2.664(printed. If)144 273.6 R(the)2.664 E F2(extdeb) +2.664 E(ug)-.2 E F0 .164(shell option is enabled using)2.664 F F2(shopt) +2.664 E F0 2.664(,t)C .163(he source \214le name and line number)-2.664 +F 1.382(where the function is de\214ned are displayed as well.)144 285.6 +R(The)6.382 E F23.882 E F0 1.382(option implies)3.882 F F2 +3.882 E F0 6.382(.T)C 1.382(he follo)-6.382 F(wing)-.25 E .794 +(options can be used to restrict output to v)144 297.6 R .794 +(ariables with the speci\214ed attrib)-.25 F .793(ute or to gi)-.2 F +1.093 -.15(ve v)-.25 H(ariables)-.1 E(attrib)144 309.6 Q(utes:)-.2 E F2 +144 321.6 Q F0(Each)25.3 E F1(name)2.5 E F0(is an inde)2.5 E -.15 +(xe)-.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F2(Arrays)2.5 +E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F2144 333.6 Q F0(Each) +23.08 E F1(name)2.5 E F0(is an associati)2.5 E .3 -.15(ve a)-.25 H +(rray v).15 E(ariable \(see)-.25 E F2(Arrays)2.5 E F0(abo)2.5 E -.15(ve) +-.15 G(\).).15 E F2144 345.6 Q F0(Use function names only)26.97 E +(.)-.65 E F2144 357.6 Q F0 .557(The v)27.52 F .558 +(ariable is treated as an inte)-.25 F .558(ger; arithmetic e)-.15 F -.25 +(va)-.25 G .558(luation \(see).25 F/F4 9/Times-Bold@0 SF .558 +(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION)180 369.6 Q F0(abo) +2.25 E -.15(ve)-.15 G 2.5(\)i).15 G 2.5(sp)-2.5 G(erformed when the v) +-2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E F2144 381.6 Q +F0 .91(When the v)27.52 F .909(ariable is assigned a v)-.25 F .909 +(alue, all upper)-.25 F .909(-case characters are con)-.2 F -.15(ve)-.4 +G .909(rted to lo).15 F(wer)-.25 E(-)-.2 E 2.5(case. The)180 393.6 R +(upper)2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2144 405.6 +Q F0(Mak)25.86 E(e)-.1 E F1(name)5.046 E F0 5.046(sr)C(eadonly)-5.046 E +7.546(.T)-.65 G 2.546(hese names cannot then be assigned v)-7.546 F +2.547(alues by subsequent)-.25 F(assignment statements or unset.)180 +417.6 Q F2144 429.6 Q F0(Gi)26.97 E .73 -.15(ve e)-.25 H(ach).15 E +F1(name)2.93 E F0(the)2.929 E F1(tr)2.929 E(ace)-.15 E F0(attrib)2.929 E +2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F2(DEB)2.929 +E(UG)-.1 E F0(and)2.929 E F2(RETURN)2.929 E F0 +(traps from the calling shell.)180 441.6 Q(The trace attrib)5 E +(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2144 +453.6 Q F0 .909(When the v)24.74 F .909(ariable is assigned a v)-.25 F +.909(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2 F +-.15(ve)-.4 G .91(rted to upper).15 F(-)-.2 E 2.5(case. The)180 465.6 R +(lo)2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2 +144 477.6 Q F0(Mark)25.3 E F1(name)2.5 E F0 2.5(sf)C(or e)-2.5 E +(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .121 +(Using `+' instead of `\255' turns of)144 494.4 R 2.621(ft)-.25 G .121 +(he attrib)-2.621 F .121(ute instead, with the e)-.2 F .12 +(xceptions that)-.15 F F2(+a)2.62 E F0 .12(may not be used)2.62 F .644 +(to destro)144 506.4 R 3.144(ya)-.1 G 3.144(na)-3.144 G .644(rray v) +-3.144 F .644(ariable and)-.25 F F2(+r)3.145 E F0 .645(will not remo) +3.145 F .945 -.15(ve t)-.15 H .645(he readonly attrib).15 F 3.145 +(ute. When)-.2 F .645(used in a func-)3.145 F 1.945(tion, mak)144 518.4 +R 1.945(es each)-.1 F F1(name)4.445 E F0 1.945(local, as with the)4.445 +F F2(local)4.444 E F0 4.444(command. If)4.444 F 4.444(av)4.444 G 1.944 +(ariable name is follo)-4.694 F 1.944(wed by)-.25 F(=)144 530.4 Q F1 +(value)A F0 3.238(,t)C .738(he v)-3.238 F .738(alue of the v)-.25 F .738 +(ariable is set to)-.25 F F1(value)3.238 E F0 5.738(.T)C .738 +(he return v)-5.738 F .739(alue is 0 unless an in)-.25 F -.25(va)-.4 G +.739(lid option is).25 F .603 +(encountered, an attempt is made to de\214ne a function using)144 542.4 +R/F5 10/Courier@0 SF .603(\255f foo=bar)3.103 F F0 3.103(,a)C 3.103(na) +-3.103 G .603(ttempt is made to)-3.103 F 1.242(assign a v)144 554.4 R +1.242(alue to a readonly v)-.25 F 1.242 +(ariable, an attempt is made to assign a v)-.25 F 1.243 +(alue to an array v)-.25 F(ariable)-.25 E 1.386 +(without using the compound assignment syntax \(see)144 566.4 R F2 +(Arrays)3.886 E F0(abo)3.886 E -.15(ve)-.15 G 1.386(\), one of the).15 F +F1(names)3.886 E F0 1.386(is not a)3.886 F -.25(va)144 578.4 S .171 +(lid shell v).25 F .171(ariable name, an attempt is made to turn of)-.25 +F 2.671(fr)-.25 G .171(eadonly status for a readonly v)-2.671 F .172 +(ariable, an)-.25 F .96(attempt is made to turn of)144 590.4 R 3.46(fa) +-.25 G .96(rray status for an array v)-3.46 F .96 +(ariable, or an attempt is made to display a)-.25 F(non-e)144 602.4 Q +(xistent function with)-.15 E F22.5 E F0(.)A F2(dirs [+)108 619.2 +Q F1(n)A F2 2.5(][)C-2.5 E F1(n)A F2 2.5(][)C(\255cplv])-2.5 E F0 +-.4(Wi)144 631.2 S .328 +(thout options, displays the list of currently remembered directories.) +.4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238 +(single line with directory names separated by spaces.)144 643.2 R 1.238 +(Directories are added to the list with the)6.238 F F2(pushd)144 655.2 Q +F0(command; the)2.5 E F2(popd)2.5 E F0(command remo)2.5 E -.15(ve)-.15 G +2.5(se).15 G(ntries from the list.)-2.5 E F2(+)144 667.2 Q F1(n)A F0 +1.564(Displays the)25.3 F F1(n)4.064 E F0 1.565 +(th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F2 +(dirs)4.065 E F0 1.565(when in)4.065 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 679.2 Q F2144 691.2 Q F1 +(n)A F0 1.194(Displays the)25.3 F F1(n)3.694 E F0 1.194 +(th entry counting from the right of the list sho)B 1.194(wn by)-.25 F +F2(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 703.2 Q F2144 715.2 Q F0 +(Clears the directory stack by deleting all of the entries.)25.86 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(53)185.955 E 0 Cg EP +%%Page: 54 54 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF144 84 Q F0 .324 +(Produces a longer listing; the def)27.52 F .324 +(ault listing format uses a tilde to denote the home direc-)-.1 F(tory) +180 96 Q(.)-.65 E F1144 108 Q F0 +(Print the directory stack with one entry per line.)24.74 E F1144 +120 Q F0 .273(Print the directory stack with one entry per line, pre\ +\214xing each entry with its inde)25.3 F 2.772(xi)-.15 G 2.772(nt)-2.772 +G(he)-2.772 E(stack.)180 132 Q .257(The return v)144 148.8 R .258 +(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 +(lid option is supplied or).25 F/F2 10/Times-Italic@0 SF(n)2.758 E F0 +(inde)2.758 E -.15(xe)-.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258 +(ond the end of the direc-).15 F(tory stack.)144 160.8 Q F1(diso)108 +177.6 Q(wn)-.1 E F0([)2.5 E F1(\255ar)A F0 2.5(][)C F1-2.5 E F0 +2.5(][)C F2(jobspec)-2.5 E F0(...])2.5 E -.4(Wi)144 189.6 S .295 +(thout options, each).4 F F2(jobspec)4.535 E F0 .295(is remo)3.105 F +-.15(ve)-.15 G 2.795(df).15 G .295(rom the table of acti)-2.795 F .595 +-.15(ve j)-.25 H 2.795(obs. If).15 F F2(jobspec)4.535 E F0 .295 +(is not present,)3.105 F .422(and neither)144 201.6 R F12.922 E F0 +(nor)2.922 E F12.922 E F0 .422(is supplied, the shell')2.922 F +2.922(sn)-.55 G .422(otion of the)-2.922 F F2(curr)2.923 E .423(ent job) +-.37 F F0 .423(is used.)2.923 F .423(If the)5.423 F F12.923 E F0 +.423(option is)2.923 F(gi)144 213.6 Q -.15(ve)-.25 G .141(n, each).15 F +F2(jobspec)4.381 E F0 .141(is not remo)2.951 F -.15(ve)-.15 G 2.641(df) +.15 G .141(rom the table, b)-2.641 F .141(ut is mark)-.2 F .141 +(ed so that)-.1 F/F3 9/Times-Bold@0 SF(SIGHUP)2.641 E F0 .14 +(is not sent to the)2.39 F .004(job if the shell recei)144 225.6 R -.15 +(ve)-.25 G 2.504(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F0 .004 +(If no)4.504 F F2(jobspec)4.244 E F0 .004(is present, and neither the) +2.814 F F12.504 E F0 .005(nor the)2.504 F F12.505 E F0 .005 +(option is)2.505 F 1.229(supplied, the)144 237.6 R F2(curr)3.729 E 1.229 +(ent job)-.37 F F0 1.229(is used.)3.729 F 1.229(If no)6.229 F F2 +(jobspec)5.469 E F0 1.229(is supplied, the)4.039 F F13.729 E F0 +1.228(option means to remo)3.729 F 1.528 -.15(ve o)-.15 H(r).15 E .656 +(mark all jobs; the)144 249.6 R F13.156 E F0 .657 +(option without a)3.156 F F2(jobspec)4.897 E F0(ar)3.467 E .657 +(gument restricts operation to running jobs.)-.18 F(The)5.657 E +(return v)144 261.6 Q(alue is 0 unless a)-.25 E F2(jobspec)4.24 E F0 +(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E F1(echo)108 278.4 Q +F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E +.395(Output the)144 290.4 R F2(ar)2.895 E(g)-.37 E F0 .395 +(s, separated by spaces, follo)B .395(wed by a ne)-.25 F 2.895 +(wline. The)-.25 F .394(return status is al)2.895 F -.1(wa)-.1 G .394 +(ys 0.).1 F(If)5.394 E F12.894 E F0 .548 +(is speci\214ed, the trailing ne)144 302.4 R .548(wline is suppressed.) +-.25 F .548(If the)5.548 F F13.048 E F0 .548(option is gi)3.048 F +-.15(ve)-.25 G .548(n, interpretation of the fol-).15 F(lo)144 314.4 Q +.053(wing backslash-escaped characters is enabled.)-.25 F(The)5.053 E F1 +2.553 E F0 .052(option disables the interpretation of these)2.552 +F 1.502(escape characters, e)144 326.4 R -.15(ve)-.25 G 4.002(no).15 G +4.002(ns)-4.002 G 1.502(ystems where the)-4.002 F 4.002(ya)-.15 G 1.502 +(re interpreted by def)-4.002 F 4.003(ault. The)-.1 F F1(xpg_echo)4.003 +E F0(shell)4.003 E .009 +(option may be used to dynamically determine whether or not)144 338.4 R +F1(echo)2.509 E F0 -.15(ex)2.509 G .009(pands these escape characters) +.15 F .659(by def)144 350.4 R(ault.)-.1 E F1(echo)5.659 E F0 .659 +(does not interpret)3.159 F F13.159 E F0 .659 +(to mean the end of options.)3.159 F F1(echo)5.66 E F0 .66 +(interprets the follo)3.16 F(wing)-.25 E(escape sequences:)144 362.4 Q +F1(\\a)144 374.4 Q F0(alert \(bell\))28.22 E F1(\\b)144 386.4 Q F0 +(backspace)27.66 E F1(\\c)144 398.4 Q F0(suppress further output)28.78 E +F1(\\e)144 410.4 Q F0(an escape character)28.78 E F1(\\f)144 422.4 Q F0 +(form feed)29.89 E F1(\\n)144 434.4 Q F0(ne)27.66 E 2.5(wl)-.25 G(ine) +-2.5 E F1(\\r)144 446.4 Q F0(carriage return)28.78 E F1(\\t)144 458.4 Q +F0(horizontal tab)29.89 E F1(\\v)144 470.4 Q F0 -.15(ve)28.22 G +(rtical tab).15 E F1(\\\\)144 482.4 Q F0(backslash)30.44 E F1(\\0)144 +494.4 Q F2(nnn)A F0(the eight-bit character whose v)13.22 E +(alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0 +(\(zero to three octal digits\))2.5 E F1(\\x)144 506.4 Q F2(HH)A F0 +(the eight-bit character whose v)13.78 E(alue is the he)-.25 E +(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh) +-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1(enable)108 523.2 Q F0([)2.5 E +F1A F0 2.5(][)C F1(\255dnps)-2.5 E F0 2.5(][)C F1-2.5 E F2 +(\214lename)2.5 E F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E .278 +(Enable and disable b)144 535.2 R .278(uiltin shell commands.)-.2 F .278 +(Disabling a b)5.278 F .278(uiltin allo)-.2 F .278 +(ws a disk command which has)-.25 F .833(the same name as a shell b)144 +547.2 R .834(uiltin to be e)-.2 F -.15(xe)-.15 G .834 +(cuted without specifying a full pathname, e).15 F -.15(ve)-.25 G 3.334 +(nt).15 G(hough)-3.334 E .99(the shell normally searches for b)144 559.2 +R .989(uiltins before disk commands.)-.2 F(If)5.989 E F13.489 E F0 +.989(is used, each)3.489 F F2(name)3.489 E F0 .989(is dis-)3.489 F 1.581 +(abled; otherwise,)144 571.2 R F2(names)4.082 E F0 1.582(are enabled.) +4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582(xample, to use the)-4.232 F +F1(test)4.082 E F0 1.582(binary found via the)4.082 F F3 -.666(PA)4.082 +G(TH)-.189 E F0 .081(instead of the shell b)144 583.2 R .081(uiltin v) +-.2 F .081(ersion, run)-.15 F/F5 10/Courier@0 SF .081(enable -n test) +2.581 F F0 5.081(.T)C(he)-5.081 E F12.58 E F0 .08 +(option means to load the ne)2.58 F(w)-.25 E -.2(bu)144 595.2 S 1.524 +(iltin command).2 F F2(name)4.384 E F0 1.524(from shared object)4.204 F +F2(\214lename)4.024 E F0 4.024(,o).18 G 4.024(ns)-4.024 G 1.524 +(ystems that support dynamic loading.)-4.024 F(The)144 607.2 Q F1 +2.867 E F0 .367(option will delete a b)2.867 F .367(uiltin pre)-.2 F +.367(viously loaded with)-.25 F F12.866 E F0 5.366(.I)C 2.866(fn) +-5.366 G(o)-2.866 E F2(name)2.866 E F0(ar)2.866 E .366(guments are gi) +-.18 F -.15(ve)-.25 G .366(n, or).15 F .398(if the)144 619.2 R F1 +2.898 E F0 .399(option is supplied, a list of shell b)2.899 F .399 +(uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4 +F .399(guments, the)-.18 F .099(list consists of all enabled shell b)144 +631.2 R 2.598(uiltins. If)-.2 F F12.598 E F0 .098 +(is supplied, only disabled b)2.598 F .098(uiltins are printed.)-.2 F +(If)5.098 E F12.598 E F0 1.916 +(is supplied, the list printed includes all b)144 643.2 R 1.916 +(uiltins, with an indication of whether or not each is)-.2 F 2.879 +(enabled. If)144 655.2 R F12.879 E F0 .379 +(is supplied, the output is restricted to the POSIX)2.879 F F2(special) +2.879 E F0 -.2(bu)2.878 G 2.878(iltins. The).2 F .378(return v)2.878 F +(alue)-.25 E .994(is 0 unless a)144 667.2 R F2(name)3.854 E F0 .994 +(is not a shell b)3.674 F .994(uiltin or there is an error loading a ne) +-.2 F 3.495(wb)-.25 G .995(uiltin from a shared)-3.695 F(object.)144 +679.2 Q F1 -2.3 -.15(ev a)108 696 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37 E +F0(...])2.5 E(The)144 708 Q F2(ar)3.171 E(g)-.37 E F0 3.171(sa)C .671 +(re read and concatenated together into a single command.)-3.171 F .67 +(This command is then read)5.67 F .495(and e)144 720 R -.15(xe)-.15 G +.495(cuted by the shell, and its e).15 F .495 +(xit status is returned as the v)-.15 F .495(alue of)-.25 F F1 -2.3 -.15 +(ev a)2.995 H(l).15 E F0 5.495(.I)C 2.995(ft)-5.495 G .495(here are no) +-2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(54)185.955 E 0 Cg EP +%%Page: 55 55 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E(or only null ar)144 84 Q(guments,)-.18 E/F1 10/Times-Bold@0 SF +-2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F1(exec)108 100.8 Q F0 +([)2.5 E F1(\255cl)A F0 2.5(][)C F1-2.5 E/F2 10/Times-Italic@0 SF +(name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E F2(ar)A(guments) +-.37 E F0(]])A(If)144 112.8 Q F2(command)3.006 E F0 .306 +(is speci\214ed, it replaces the shell.)3.576 F .305(No ne)5.305 F 2.805 +(wp)-.25 G .305(rocess is created.)-2.805 F(The)5.305 E F2(ar)3.135 E +(guments)-.37 E F0(become)3.075 E .176(the ar)144 124.8 R .176 +(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G +(he)-2.676 E F12.676 E F0 .176 +(option is supplied, the shell places a dash at the be)2.676 F .177 +(ginning of)-.15 F .5(the zeroth ar)144 136.8 R .5(gument passed to)-.18 +F F2(command)3 E F0 5.499(.T).77 G .499(his is what)-5.499 F F2(lo)2.999 +E(gin)-.1 E F0 .499(\(1\) does.).24 F(The)5.499 E F12.999 E F0 +.499(option causes)2.999 F F2(com-)3.199 E(mand)144 148.8 Q F0 .638 +(to be e)3.908 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138 +(vironment. If)-.4 F F13.138 E F0 .638 +(is supplied, the shell passes)3.138 F F2(name)3.499 E F0 .639(as the) +3.319 F 1.078(zeroth ar)144 160.8 R 1.077(gument to the e)-.18 F -.15 +(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F2(command)3.777 E F0 +1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077(cuted for some reason, a) +.15 F(non-interacti)144 172.8 Q .617 -.15(ve s)-.25 H .317(hell e).15 F +.317(xits, unless the shell option)-.15 F F1(execfail)2.817 E F0 .318 +(is enabled, in which case it returns f)2.817 F(ail-)-.1 E 2.505 +(ure. An)144 184.8 R(interacti)2.505 E .305 -.15(ve s)-.25 H .005 +(hell returns f).15 F .005(ailure if the \214le cannot be e)-.1 F -.15 +(xe)-.15 G 2.505(cuted. If).15 F F2(command)2.705 E F0 .005 +(is not speci\214ed,)3.275 F(an)144 196.8 Q 3.036(yr)-.15 G .536 +(edirections tak)-3.036 F 3.036(ee)-.1 G -.25(ff)-3.036 G .536 +(ect in the current shell, and the return status is 0.).25 F .536 +(If there is a redirection)5.536 F(error)144 208.8 Q 2.5(,t)-.4 G +(he return status is 1.)-2.5 E F1(exit)108 225.6 Q F0([)2.5 E F2(n)A F0 +6.29(]C)C .096(ause the shell to e)-6.29 F .096(xit with a status of) +-.15 F F2(n)2.596 E F0 5.096(.I)C(f)-5.096 E F2(n)2.955 E F0 .095 +(is omitted, the e)2.835 F .095(xit status is that of the last command) +-.15 F -.15(exe)144 237.6 S 2.5(cuted. A).15 F(trap on)2.5 E/F3 9 +/Times-Bold@0 SF(EXIT)2.5 E F0(is e)2.25 E -.15(xe)-.15 G +(cuted before the shell terminates.).15 E F1(export)108 254.4 Q F0([)2.5 +E F1(\255fn)A F0 2.5(][).833 G F2(name)-2.5 E F0([=)A F2(wor)A(d)-.37 E +F0(]] ...)A F1(export \255p)108 266.4 Q F0 .256(The supplied)144 278.4 R +F2(names)3.117 E F0 .257(are mark)3.027 F .257(ed for automatic e)-.1 F +.257(xport to the en)-.15 F .257(vironment of subsequently e)-.4 F -.15 +(xe)-.15 G(cuted).15 E 2.627(commands. If)144 290.4 R(the)2.627 E F1 +2.627 E F0 .127(option is gi)2.627 F -.15(ve)-.25 G .127(n, the) +.15 F F2(names)2.987 E F0 .127(refer to functions.)2.897 F .127(If no) +5.127 F F2(names)2.987 E F0 .127(are gi)2.897 F -.15(ve)-.25 G .126 +(n, or if the).15 F F1144 302.4 Q F0 .659 +(option is supplied, a list of all names that are e)3.159 F .66 +(xported in this shell is printed.)-.15 F(The)5.66 E F13.16 E F0 +(option)3.16 E 1.587(causes the e)144 314.4 R 1.587 +(xport property to be remo)-.15 F -.15(ve)-.15 G 4.086(df).15 G 1.586 +(rom each)-4.086 F F2(name)4.086 E F0 6.586(.I)C 4.086(fav)-6.586 G +1.586(ariable name is follo)-4.336 F 1.586(wed by)-.25 F(=)144 326.4 Q +F2(wor)A(d)-.37 E F0 2.803(,t)C .303(he v)-2.803 F .303(alue of the v) +-.25 F .304(ariable is set to)-.25 F F2(wor)2.804 E(d)-.37 E F0(.)A F1 +(export)5.304 E F0 .304(returns an e)2.804 F .304 +(xit status of 0 unless an in)-.15 F -.25(va)-.4 G(lid).25 E .294 +(option is encountered, one of the)144 338.4 R F2(names)2.793 E F0 .293 +(is not a v)2.793 F .293(alid shell v)-.25 F .293(ariable name, or)-.25 +F F12.793 E F0 .293(is supplied with a)2.793 F F2(name)144.36 +350.4 Q F0(that is not a function.)2.68 E F1(fc)108 367.2 Q F0([)2.5 E +F1A F2(ename)2.5 E F0 2.5(][)C F1(\255lnr)-2.5 E F0 2.5(][)C F2 +<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F2(last)-2.5 E F0(])A F1(fc \255s)108 +379.2 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2 +(cmd)-2.5 E F0(])A .477(Fix Command.)144 391.2 R .478 +(In the \214rst form, a range of commands from)5.477 F F2<8c72>4.888 E +(st)-.1 E F0(to)3.658 E F2(last)3.068 E F0 .478 +(is selected from the his-)3.658 F .882(tory list.)144 403.2 R F2 -.45 +(Fi)5.882 G -.1(rs).45 G(t).1 E F0(and)4.062 E F2(last)3.472 E F0 .882 +(may be speci\214ed as a string \(to locate the last command be)4.062 F +.881(ginning with)-.15 F .797(that string\) or as a number \(an inde)144 +415.2 R 3.297(xi)-.15 G .797(nto the history list, where a ne)-3.297 F +-.05(ga)-.15 G(ti).05 E 1.097 -.15(ve n)-.25 H .797(umber is used as an) +.15 F(of)144 427.2 Q .277(fset from the current command number\).)-.25 F +(If)5.277 E F2(last)2.867 E F0 .276 +(is not speci\214ed it is set to the current command)3.457 F .092 +(for listing \(so that)144 439.2 R/F4 10/Courier@0 SF .092 +(fc \255l \25510)2.592 F F0 .092(prints the last 10 commands\) and to) +2.592 F F2<8c72>4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F2<8c72> +4.502 E(st)-.1 E F0 .093(is not)3.273 F +(speci\214ed it is set to the pre)144 451.2 Q +(vious command for editing and \25516 for listing.)-.25 E(The)144 475.2 +Q F12.522 E F0 .022 +(option suppresses the command numbers when listing.)2.522 F(The)5.022 E +F12.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022 +(rses the order of).15 F .438(the commands.)144 487.2 R .438(If the) +5.438 F F12.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438 +(n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E +.335(the editor gi)144 499.2 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E +F2(ename)3.025 E F0 .335(is in)3.015 F -.2(vo)-.4 G -.1(ke).2 G 2.835 +(do).1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835 +F(If)5.334 E F2(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G +(n,).15 E .63(the v)144 511.2 R .63(alue of the)-.25 F F3(FCEDIT)3.13 E +F0 -.25(va)2.88 G .631(riable is used, and the v).25 F .631(alue of)-.25 +F F3(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F3(FCEDIT)3.131 E F0 .631 +(is not set.)2.881 F .631(If nei-)5.631 F .951(ther v)144 523.2 R .951 +(ariable is set,)-.25 F F2(vi)5.117 E F0 .951(is used.)5.117 F .95 +(When editing is complete, the edited commands are echoed and)5.951 F +-.15(exe)144 535.2 S(cuted.).15 E .039(In the second form,)144 559.2 R +F2(command)2.539 E F0 .039(is re-e)2.539 F -.15(xe)-.15 G .039 +(cuted after each instance of).15 F F2(pat)2.54 E F0 .04(is replaced by) +2.54 F F2 -.37(re)2.54 G(p).37 E F0 5.04(.A)C(useful)-2.5 E .406 +(alias to use with this is)144 571.2 R F4 .406(r='fc \255s')2.906 F F0 +2.906(,s)C 2.906(ot)-2.906 G .406(hat typing)-2.906 F F4 6.406(rc)2.906 +G(c)-6.406 E F0 .406(runs the last command be)2.906 F .406(ginning with) +-.15 F F4(cc)144 583.2 Q F0(and typing)2.5 E F4(r)2.5 E F0(re-e)2.5 E +-.15(xe)-.15 G(cutes the last command.).15 E .142 +(If the \214rst form is used, the return v)144 607.2 R .142 +(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142 +(lid option is encountered or).25 F F2<8c72>4.552 E(st)-.1 E F0(or)3.322 +E F2(last)2.732 E F0 .455(specify history lines out of range.)144 619.2 +R .454(If the)5.454 F F12.954 E F0 .454 +(option is supplied, the return v)2.954 F .454(alue is the v)-.25 F .454 +(alue of the)-.25 F .787(last command e)144 631.2 R -.15(xe)-.15 G .787 +(cuted or f).15 F .788 +(ailure if an error occurs with the temporary \214le of commands.)-.1 F +.788(If the)5.788 F 1.136 +(second form is used, the return status is that of the command re-e)144 +643.2 R -.15(xe)-.15 G 1.135(cuted, unless).15 F F2(cmd)3.835 E F0 1.135 +(does not)4.405 F(specify a v)144 655.2 Q +(alid history line, in which case)-.25 E F1(fc)2.5 E F0(returns f)2.5 E +(ailure.)-.1 E F1(fg)108 672 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume)144 +684 Q F2(jobspec)5.653 E F0 1.413(in the fore)4.223 F 1.413 +(ground, and mak)-.15 F 3.913(ei)-.1 G 3.913(tt)-3.913 G 1.413 +(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F2(jobspec)5.653 E F0 +1.414(is not present, the)4.223 F(shell')144 696 Q 3.117(sn)-.55 G .617 +(otion of the)-3.117 F F2(curr)3.117 E .617(ent job)-.37 F F0 .617 +(is used.)3.117 F .617(The return v)5.617 F .616 +(alue is that of the command placed into the)-.25 F(fore)144 708 Q .362 +(ground, or f)-.15 F .362(ailure if run when job control is disabled or) +-.1 F 2.862(,w)-.4 G .363(hen run with job control enabled, if)-2.862 F +F2(jobspec)145.74 720 Q F0 .004(does not specify a v)2.815 F .004 +(alid job or)-.25 F F2(jobspec)4.244 E F0 .004(speci\214es a job that w) +2.814 F .004(as started without job control.)-.1 F(GNU Bash-4.1)72 768 Q +(2009 December 29)135.965 E(55)185.955 E 0 Cg EP +%%Page: 56 56 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(getopts)108 84 Q/F2 10/Times-Italic@0 SF +(optstring name)2.5 E F0([)2.5 E F2(ar)A(gs)-.37 E F0(])A F1(getopts)144 +96 Q F0 .793 +(is used by shell procedures to parse positional parameters.)3.293 F F2 +(optstring)6.023 E F0 .793(contains the option)3.513 F .15 +(characters to be recognized; if a character is follo)144 108 R .149 +(wed by a colon, the option is e)-.25 F .149(xpected to ha)-.15 F .449 +-.15(ve a)-.2 H(n).15 E(ar)144 120 Q .578 +(gument, which should be separated from it by white space.)-.18 F .579 +(The colon and question mark char)5.579 F(-)-.2 E 1.665 +(acters may not be used as option characters.)144 132 R 1.665 +(Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F1(getopts) +4.165 E F0 1.665(places the ne)4.165 F(xt)-.15 E .796 +(option in the shell v)144 144 R(ariable)-.25 E F2(name)3.296 E F0 3.296 +(,i).18 G(nitializing)-3.296 E F2(name)3.657 E F0 .797(if it does not e) +3.477 F .797(xist, and the inde)-.15 F 3.297(xo)-.15 G 3.297(ft)-3.297 G +.797(he ne)-3.297 F(xt)-.15 E(ar)144 156 Q .085 +(gument to be processed into the v)-.18 F(ariable)-.25 E/F3 9 +/Times-Bold@0 SF(OPTIND)2.585 E/F4 9/Times-Roman@0 SF(.)A F3(OPTIND) +4.585 E F0 .085(is initialized to 1 each time the shell)2.335 F .845 +(or a shell script is in)144 168 R -.2(vo)-.4 G -.1(ke).2 G 3.345 +(d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E F1 +(getopts)3.346 E F0 .846(places that ar)3.346 F(gument)-.18 E .804 +(into the v)144 180 R(ariable)-.25 E F3(OPT)3.304 E(ARG)-.81 E F4(.)A F0 +.803(The shell does not reset)5.304 F F3(OPTIND)3.303 E F0 .803 +(automatically; it must be manually)3.053 F .293 +(reset between multiple calls to)144 192 R F1(getopts)2.793 E F0 .293 +(within the same shell in)2.793 F -.2(vo)-.4 G .293(cation if a ne).2 F +2.793(ws)-.25 G .294(et of parameters)-2.793 F(is to be used.)144 204 Q +2.044(When the end of options is encountered,)144 228 R F1(getopts)4.543 +E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.043 +(alue greater than zero.)-.25 F F3(OPTIND)144 240 Q F0 +(is set to the inde)2.25 E 2.5(xo)-.15 G 2.5(ft)-2.5 G +(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0 +(is set to ?.)2.5 E F1(getopts)144 264 Q F0 2.392 +(normally parses the positional parameters, b)4.892 F 2.392 +(ut if more ar)-.2 F 2.393(guments are gi)-.18 F -.15(ve)-.25 G 4.893 +(ni).15 G(n)-4.893 E F2(ar)4.893 E(gs)-.37 E F0(,).27 E F1(getopts)144 +276 Q F0(parses those instead.)2.5 E F1(getopts)144 300 Q F0 1.166 +(can report errors in tw)3.666 F 3.665(ow)-.1 G 3.665(ays. If)-3.765 F +1.165(the \214rst character of)3.665 F F2(optstring)3.895 E F0 1.165 +(is a colon,)3.885 F F2(silent)4.005 E F0(error)4.345 E 1.263 +(reporting is used.)144 312 R 1.263 +(In normal operation diagnostic messages are printed when in)6.263 F +-.25(va)-.4 G 1.263(lid options or).25 F .394(missing option ar)144 324 +R .394(guments are encountered.)-.18 F .394(If the v)5.394 F(ariable) +-.25 E F3(OPTERR)2.894 E F0 .394(is set to 0, no error messages)2.644 F +(will be displayed, e)144 336 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 +G(he \214rst character of)-2.5 E F2(optstring)2.73 E F0(is not a colon.) +2.72 E .666(If an in)144 360 R -.25(va)-.4 G .666(lid option is seen,) +.25 F F1(getopts)3.166 E F0 .667(places ? into)3.167 F F2(name)3.527 E +F0 .667(and, if not silent, prints an error message)3.347 F .4 +(and unsets)144 372 R F3(OPT)2.9 E(ARG)-.81 E F4(.)A F0(If)4.899 E F1 +(getopts)2.899 E F0 .399 +(is silent, the option character found is placed in)2.899 F F3(OPT)2.899 +E(ARG)-.81 E F0 .399(and no)2.649 F(diagnostic message is printed.)144 +384 Q 1.241(If a required ar)144 408 R 1.241(gument is not found, and) +-.18 F F1(getopts)3.741 E F0 1.241(is not silent, a question mark \() +3.741 F F1(?).833 E F0 3.742(\)i).833 G 3.742(sp)-3.742 G 1.242 +(laced in)-3.742 F F2(name)144 420 Q F0(,).18 E F3(OPT)2.735 E(ARG)-.81 +E F0 .234(is unset, and a diagnostic message is printed.)2.485 F(If) +5.234 E F1(getopts)2.734 E F0 .234(is silent, then a colon \()2.734 F F1 +(:).833 E F0(\)).833 E(is placed in)144 432 Q F2(name)2.86 E F0(and)2.68 +E F3(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 +E F1(getopts)144 456 Q F0 .902 +(returns true if an option, speci\214ed or unspeci\214ed, is found.) +3.401 F .902(It returns f)5.902 F .902(alse if the end of)-.1 F +(options is encountered or an error occurs.)144 468 Q F1(hash)108 484.8 +Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1-2.5 E F2(\214lename)2.5 E +F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F2(name)-2.5 E F0(])A -.15(Fo) +144 496.8 S 3.555(re).15 G(ach)-3.555 E F2(name)3.555 E F0 3.555(,t).18 +G 1.054(he full \214le name of the command is determined by searching t\ +he directories in)-3.555 F F1($P)144 508.8 Q -.95(AT)-.74 G(H).95 E F0 +.349(and remembered.)2.849 F .349(If the)5.349 F F12.849 E F0 .349 +(option is supplied, no path search is performed, and)2.849 F F2 +(\214lename)4.76 E F0 .452 +(is used as the full \214le name of the command.)144 520.8 R(The)5.452 E +F12.952 E F0 .452(option causes the shell to for)2.952 F .452 +(get all remem-)-.18 F .592(bered locations.)144 532.8 R(The)5.592 E F1 +3.092 E F0 .593(option causes the shell to for)3.092 F .593 +(get the remembered location of each)-.18 F F2(name)3.093 E F0(.)A .021 +(If the)144 544.8 R F12.521 E F0 .021 +(option is supplied, the full pathname to which each)2.521 F F2(name) +2.52 E F0 .02(corresponds is printed.)2.52 F .02(If multi-)5.02 F(ple) +144 556.8 Q F2(name)3.703 E F0(ar)3.703 E 1.203 +(guments are supplied with)-.18 F F13.703 E F0 3.703(,t)C(he) +-3.703 E F2(name)3.703 E F0 1.204 +(is printed before the hashed full pathname.)3.703 F(The)144 568.8 Q F1 +3.216 E F0 .715(option causes output to be displayed in a format \ +that may be reused as input.)3.216 F .715(If no ar)5.715 F(gu-)-.18 E +1.183(ments are gi)144 580.8 R -.15(ve)-.25 G 1.183(n, or if only).15 F +F13.683 E F0 1.184 +(is supplied, information about remembered commands is printed.)3.684 F +(The return status is true unless a)144 592.8 Q F2(name)2.86 E F0 +(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.).25 +E F1(help)108 609.6 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F2(pattern) +-2.5 E F0(])A .867(Display helpful information about b)144 621.6 R .867 +(uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0 .866 +(is speci\214ed,)3.607 F F1(help)3.366 E F0(gi)3.366 E -.15(ve)-.25 G +3.366(sd).15 G(etailed)-3.366 E .306(help on all commands matching)144 +633.6 R F2(pattern)2.806 E F0 2.807(;o).24 G .307 +(therwise help for all the b)-2.807 F .307 +(uiltins and shell control struc-)-.2 F(tures is printed.)144 645.6 Q F1 +144 657.6 Q F0(Display a short description of each)24.74 E F2 +(pattern)2.5 E F1144 669.6 Q F0(Display the description of each) +21.97 E F2(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G(ormat) +-2.5 E F1144 681.6 Q F0 +(Display only a short usage synopsis for each)26.41 E F2(pattern)2.5 E +F0(The return status is 0 unless no command matches)108 693.6 Q F2 +(pattern)2.5 E F0(.).24 E(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 +E(56)185.955 E 0 Cg EP +%%Page: 57 57 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(history [)108 84 Q/F2 10/Times-Italic@0 SF +(n)A F1(])A(history \255c)108 96 Q(history \255d)108 108 Q F2(of)2.5 E +(fset)-.18 E F1(history \255anrw)108 120 Q F0([)2.5 E F2(\214lename)A F0 +(])A F1(history \255p)108 132 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A +2.5(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 144 Q F2(ar)2.5 E(g) +-.37 E F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)144 156 +S .752 +(th no options, display the command history list with line numbers.).4 F +.752(Lines listed with a)5.752 F F1(*)3.251 E F0(ha)3.251 E -.15(ve)-.2 +G .38(been modi\214ed.)144 168 R .38(An ar)5.38 F .38(gument of)-.18 F +F2(n)3.24 E F0 .38(lists only the last)3.12 F F2(n)3.24 E F0 2.88 +(lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E/F3 9 +/Times-Bold@0 SF(HISTTIMEFOR-)2.881 E(MA)144 180 Q(T)-.855 E F0 .265 +(is set and not null, it is used as a format string for)2.515 F F2 +(strftime)2.764 E F0 .264(\(3\) to display the time stamp asso-)B 1.019 +(ciated with each displayed history entry)144 192 R 6.019(.N)-.65 G +3.519(oi)-6.019 G(nterv)-3.519 E 1.019 +(ening blank is printed between the formatted)-.15 F .176 +(time stamp and the history line.)144 204 R(If)5.176 E F2(\214lename) +2.676 E F0 .176 +(is supplied, it is used as the name of the history \214le; if)2.676 F +(not, the v)144 216 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0(is used.)2.25 +E(Options, if supplied, ha)5 E .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 228 Q F0 +(Clear the history list by deleting all the entries.)25.86 E F1144 +240 Q F2(of)2.5 E(fset)-.18 E F0(Delete the history entry at position) +180 252 Q F2(of)2.5 E(fset)-.18 E F0(.)A F1144 264 Q F0 .598 +(Append the `)25.3 F(`ne)-.74 E(w')-.25 E 3.098('h)-.74 G .598 +(istory lines \(history lines entered since the be)-3.098 F .599 +(ginning of the current)-.15 F F1(bash)180 276 Q F0 +(session\) to the history \214le.)2.5 E F1144 288 Q F0 .854(Read \ +the history lines not already read from the history \214le into the cur\ +rent history list.)24.74 F .772 +(These are lines appended to the history \214le since the be)180 300 R +.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E +(sion.)180 312 Q F1144 324 Q F0(Read the contents of the history \ +\214le and use them as the current history)25.86 E(.)-.65 E F1144 +336 Q F0(Write the current history to the history \214le, o)23.08 E -.15 +(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G(ontents.) +-2.5 E F1144 348 Q F0 .626 +(Perform history substitution on the follo)24.74 F(wing)-.25 E F2(ar) +3.125 E(gs)-.37 E F0 .625(and display the result on the standard)3.125 F +2.975(output. Does)180 360 R .475 +(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar) +2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F +(normal history e)180 372 Q(xpansion.)-.15 E F1144 384 Q F0 .363 +(Store the)26.41 F F2(ar)3.193 E(gs)-.37 E F0 .363 +(in the history list as a single entry)3.133 F 5.363(.T)-.65 G .362 +(he last command in the history list is)-5.363 F(remo)180 396 Q -.15(ve) +-.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0 +(are added.)2.77 E .145(If the)144 412.8 R F3(HISTTIMEFORMA)2.645 E(T) +-.855 E F0 -.25(va)2.395 G .145 +(riable is set, the time stamp information associated with each history) +.25 F .669(entry is written to the history \214le, mark)144 424.8 R .669 +(ed with the history comment character)-.1 F 5.668(.W)-.55 G .668 +(hen the history)-5.668 F .955(\214le is read, lines be)144 436.8 R .956 +(ginning with the history comment character follo)-.15 F .956 +(wed immediately by a digit)-.25 F .416 +(are interpreted as timestamps for the pre)144 448.8 R .416 +(vious history line.)-.25 F .416(The return v)5.416 F .415 +(alue is 0 unless an in)-.25 F -.25(va)-.4 G(lid).25 E .499(option is e\ +ncountered, an error occurs while reading or writing the history \214le\ +, an in)144 460.8 R -.25(va)-.4 G(lid).25 E F2(of)3 E(fset)-.18 E F0(is) +3 E(supplied as an ar)144 472.8 Q(gument to)-.18 E F12.5 E F0 2.5 +(,o)C 2.5(rt)-2.5 G(he history e)-2.5 E(xpansion supplied as an ar)-.15 +E(gument to)-.18 E F12.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(jobs)108 +489.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5(][)C F2(jobspec)A F0(... ])2.5 +E F1(jobs \255x)108 501.6 Q F2(command)2.5 E F0([)2.5 E F2(ar)2.5 E(gs) +-.37 E F0(... ])2.5 E(The \214rst form lists the acti)144 513.6 Q .3 +-.15(ve j)-.25 H 2.5(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H +(he follo).15 E(wing meanings:)-.25 E F1144 525.6 Q F0 +(List process IDs in addition to the normal information.)27.52 E F1 +144 537.6 Q F0(List only the process ID of the job')24.74 E 2.5 +(sp)-.55 G(rocess group leader)-2.5 E(.)-.55 E F1144 549.6 Q F0 +.194(Display information only about jobs that ha)24.74 F .494 -.15(ve c) +-.2 H .193(hanged status since the user w).15 F .193(as last noti-)-.1 F +(\214ed of their status.)180 561.6 Q F1144 573.6 Q F0 +(Restrict output to running jobs.)25.86 E F1144 585.6 Q F0 +(Restrict output to stopped jobs.)26.41 E(If)144 602.4 Q F2(jobspec) +4.553 E F0 .313(is gi)3.123 F -.15(ve)-.25 G .313 +(n, output is restricted to information about that job).15 F 5.314(.T) +-.4 G .314(he return status is 0 unless)-5.314 F(an in)144 614.4 Q -.25 +(va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G(lid).25 +E F2(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 631.2 R F1 +2.895 E F0 .394(option is supplied,)2.894 F F1(jobs)2.894 E F0 +.394(replaces an)2.894 F(y)-.15 E F2(jobspec)4.634 E F0 .394(found in) +3.204 F F2(command)3.094 E F0(or)3.664 E F2(ar)3.224 E(gs)-.37 E F0 .394 +(with the corre-)3.164 F(sponding process group ID, and e)144 643.2 Q +-.15(xe)-.15 G(cutes).15 E F2(command)2.7 E F0(passing it)3.27 E F2(ar) +2.5 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 E +F1(kill)108 660 Q F0([)2.5 E F1A F2(sigspec)2.5 E F0(|)2.5 E F1 +2.5 E F2(signum)2.5 E F0(|)2.5 E F12.5 E F2(sigspec)A F0 2.5 +(][)C F2(pid)-2.5 E F0(|)2.5 E F2(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F1 +(kill \255l)108 672 Q F0([)2.5 E F2(sigspec)A F0(|)2.5 E F2 -.2(ex)2.5 G +(it_status).2 E F0(])A .119(Send the signal named by)144 684 R F2 +(sigspec)2.959 E F0(or)2.929 E F2(signum)2.959 E F0 .119 +(to the processes named by)2.939 F F2(pid)3.87 E F0(or)3.39 E F2 +(jobspec)2.62 E F0(.).31 E F2(sigspec)5.46 E F0(is)2.93 E .319 +(either a case-insensiti)144 696 R .619 -.15(ve s)-.25 H .319 +(ignal name such as).15 F F3(SIGKILL)2.819 E F0 .318 +(\(with or without the)2.569 F F3(SIG)2.818 E F0 .318 +(pre\214x\) or a signal)2.568 F(number;)144 708 Q F2(signum)4.188 E F0 +1.349(is a signal number)4.168 F 6.349(.I)-.55 G(f)-6.349 E F2(sigspec) +4.189 E F0 1.349(is not present, then)4.159 F F3(SIGTERM)3.849 E F0 +1.349(is assumed.)3.599 F(An)6.349 E(ar)144 720 Q .523(gument of)-.18 F +F13.023 E F0 .523(lists the signal names.)3.023 F .523(If an)5.523 +F 3.023(ya)-.15 G -.18(rg)-3.023 G .523(uments are supplied when).18 F +F13.023 E F0 .523(is gi)3.023 F -.15(ve)-.25 G .523(n, the names) +.15 F(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(57)185.955 E 0 Cg +EP +%%Page: 58 58 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E .28(of the signals corresponding to the ar)144 84 R .28 +(guments are listed, and the return status is 0.)-.18 F(The)5.28 E/F1 10 +/Times-Italic@0 SF -.2(ex)2.78 G(it_status).2 E F0(ar)144 96 Q .378 +(gument to)-.18 F/F2 10/Times-Bold@0 SF2.878 E F0 .378 +(is a number specifying either a signal number or the e)2.878 F .377 +(xit status of a process termi-)-.15 F .593(nated by a signal.)144 108 R +F2(kill)5.593 E F0 .593(returns true if at least one signal w)3.093 F +.593(as successfully sent, or f)-.1 F .594(alse if an error)-.1 F +(occurs or an in)144 120 Q -.25(va)-.4 G(lid option is encountered.).25 +E F2(let)108 136.8 Q F1(ar)2.5 E(g)-.37 E F0([)2.5 E F1(ar)A(g)-.37 E F0 +(...])2.5 E(Each)144 148.8 Q F1(ar)3.027 E(g)-.37 E F0 .197 +(is an arithmetic e)2.917 F .197(xpression to be e)-.15 F -.25(va)-.25 G +.196(luated \(see).25 F/F3 9/Times-Bold@0 SF .196(ARITHMETIC EV)2.696 F +(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(abo)2.446 E -.15(ve)-.15 G +2.696(\). If).15 F(the last)144 160.8 Q F1(ar)2.83 E(g)-.37 E F0 -.25 +(eva)2.72 G(luates to 0,).25 E F2(let)2.5 E F0 +(returns 1; 0 is returned otherwise.)2.5 E F2(local)108 177.6 Q F0([)2.5 +E F1(option)A F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C +(..])-2.5 E -.15(Fo)144 189.6 S 2.56(re).15 G .06(ach ar)-2.56 F .06 +(gument, a local v)-.18 F .06(ariable named)-.25 F F1(name)2.92 E F0 .06 +(is created, and assigned)2.74 F F1(value)2.56 E F0 5.06(.T).18 G(he) +-5.06 E F1(option)2.56 E F0 .06(can be)2.56 F(an)144 201.6 Q 3.153(yo) +-.15 G 3.153(ft)-3.153 G .653(he options accepted by)-3.153 F F2(declar) +3.153 E(e)-.18 E F0 5.652(.W)C(hen)-5.652 E F2(local)3.152 E F0 .652 +(is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144 +213.6 Q F1(name)3.72 E F0 .86(to ha)3.54 F 1.16 -.15(ve a v)-.2 H .861 +(isible scope restricted to that function and its children.).15 F -.4 +(Wi)5.861 G .861(th no operands,).4 F F2(local)144 225.6 Q F0 1.165 +(writes a list of local v)3.665 F 1.165 +(ariables to the standard output.)-.25 F 1.165(It is an error to use) +6.165 F F2(local)3.664 E F0 1.164(when not)3.664 F .232 +(within a function.)144 237.6 R .233(The return status is 0 unless)5.232 +F F2(local)2.733 E F0 .233(is used outside a function, an in)2.733 F +-.25(va)-.4 G(lid).25 E F1(name)3.093 E F0(is)2.913 E(supplied, or)144 +249.6 Q F1(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F2 +(logout)108 266.4 Q F0(Exit a login shell.)9.33 E F2(map\214le)108 283.2 +Q F0([)2.5 E F2A F1(count)2.5 E F0 2.5(][)C F2-2.5 E F1 +(origin)2.5 E F0 2.5(][)C F2-2.5 E F1(count)2.5 E F0 2.5(][)C F2 +-2.5 E F0 2.5(][)C F2-2.5 E F1(fd)2.5 E F0 2.5(][)C F2 +-2.5 E F1(callbac)2.5 E(k)-.2 E F0 2.5(][)C F2-2.5 E F1(quantum) +2.5 E F0 2.5(][)C F1(arr)-2.5 E(ay)-.15 E F0(])A F2 -.18(re)108 295.2 S +(adarray).18 E F0([)2.5 E F2A F1(count)2.5 E F0 2.5(][)C F2 +-2.5 E F1(origin)2.5 E F0 2.5(][)C F2-2.5 E F1(count)2.5 E F0 2.5 +(][)C F2-2.5 E F0 2.5(][)C F2-2.5 E F1(fd)2.5 E F0 2.5(][)C +F2-2.5 E F1(callbac)2.5 E(k)-.2 E F0 2.5(][)C F2-2.5 E F1 +(quantum)2.5 E F0 2.5(][)C F1(arr)-2.5 E(ay)-.15 E F0(])A .351 +(Read lines from the standard input into the inde)144 307.2 R -.15(xe) +-.15 G 2.851(da).15 G .351(rray v)-2.851 F(ariable)-.25 E F1(arr)2.85 E +(ay)-.15 E F0 2.85(,o).32 G 2.85(rf)-2.85 G .35(rom \214le descriptor) +-2.85 F F1(fd)2.85 E F0 1.248(if the)144 319.2 R F23.748 E F0 +1.248(option is supplied.)3.748 F 1.249(The v)6.249 F(ariable)-.25 E F3 +(MAPFILE)3.749 E F0 1.249(is the def)3.499 F(ault)-.1 E F1(arr)3.749 E +(ay)-.15 E F0 6.249(.O)C 1.249(ptions, if supplied,)-6.249 F(ha)144 +331.2 Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F2 +144 343.2 Q F0(Cop)24.74 E 2.5(ya)-.1 G 2.5(tm)-2.5 G(ost)-2.5 E F1 +(count)2.7 E F0 2.5(lines. If)3.18 F F1(count)2.5 E F0 +(is 0, all lines are copied.)2.5 E F2144 355.2 Q F0(Be)22.52 E +(gin assigning to)-.15 E F1(arr)2.83 E(ay)-.15 E F0(at inde)2.82 E(x) +-.15 E F1(origin)2.5 E F0 5(.T).24 G(he def)-5 E(ault inde)-.1 E 2.5(xi) +-.15 G 2.5(s0)-2.5 G(.)-2.5 E F2144 367.2 Q F0 +(Discard the \214rst)26.41 E F1(count)2.5 E F0(lines read.)2.5 E F2 +144 379.2 Q F0(Remo)26.97 E .3 -.15(ve a t)-.15 H(railing ne).15 E +(wline from each line read.)-.25 E F2144 391.2 Q F0 +(Read lines from \214le descriptor)24.74 E F1(fd)2.5 E F0 +(instead of the standard input.)2.5 E F2144 403.2 Q F0(Ev)23.08 E +(aluate)-.25 E F1(callbac)2.7 E(k)-.2 E F0(each time)3.17 E F1(quantum) +2.5 E F0(lines are read.)2.5 E(The)5 E F22.5 E F0 +(option speci\214es)2.5 E F1(quantum)2.5 E F0(.).32 E F2144 415.2 +Q F0(Specify the number of lines read between each call to)25.86 E F1 +(callbac)2.5 E(k)-.2 E F0(.).67 E(If)144 432 Q F22.968 E F0 .467 +(is speci\214ed without)2.967 F F22.967 E F0 2.967(,t)C .467 +(he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F1 +(callbac)2.967 E(k)-.2 E F0 .467(is e)2.967 F -.25(va)-.25 G .467 +(luated, it is sup-).25 F 1.22(plied the inde)144 444 R 3.72(xo)-.15 G +3.72(ft)-3.72 G 1.22(he ne)-3.72 F 1.22 +(xt array element to be assigned as an additional ar)-.15 F(gument.)-.18 +E F1(callbac)6.22 E(k)-.2 E F0(is)3.72 E -.25(eva)144 456 S +(luated after the line is read b).25 E +(ut before the array element is assigned.)-.2 E +(If not supplied with an e)144 472.8 Q(xplicit origin,)-.15 E F2 +(map\214le)2.5 E F0(will clear)2.5 E F1(arr)2.5 E(ay)-.15 E F0 +(before assigning to it.)2.5 E F2(map\214le)144 489.6 Q F0 1.906 +(returns successfully unless an in)4.406 F -.25(va)-.4 G 1.905 +(lid option or option ar).25 F 1.905(gument is supplied,)-.18 F F1(arr) +4.405 E(ay)-.15 E F0(is)4.405 E(in)144 501.6 Q -.25(va)-.4 G +(lid or unassignable, or if).25 E F1(arr)2.5 E(ay)-.15 E F0 +(is not an inde)2.5 E -.15(xe)-.15 G 2.5(da).15 G(rray)-2.5 E(.)-.65 E +F2(popd)108 518.4 Q F0<5bad>2.5 E F2(n)A F0 2.5(][)C(+)-2.5 E F1(n)A F0 +2.5(][)C-2.5 E F1(n)A F0(])A(Remo)144 530.4 Q -.15(ve)-.15 G 2.799 +(se).15 G .299(ntries from the directory stack.)-2.799 F -.4(Wi)5.299 G +.299(th no ar).4 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15 +G .3(he top directory from the)-2.799 F 1.479(stack, and performs a)144 +542.4 R F2(cd)3.979 E F0 1.479(to the ne)3.979 F 3.979(wt)-.25 G 1.479 +(op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.478 +(uments, if supplied, ha).18 F 1.778 -.15(ve t)-.2 H 1.478(he follo).15 +F(wing)-.25 E(meanings:)144 554.4 Q F2144 566.4 Q F0 .551 +(Suppresses the normal change of directory when remo)24.74 F .551 +(ving directories from the stack, so)-.15 F +(that only the stack is manipulated.)180 578.4 Q F2(+)144 590.4 Q F1(n)A +F0(Remo)25.3 E -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F1(n)2.64 E F0 +.14(th entry counting from the left of the list sho)B .14(wn by)-.25 F +F2(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180 +602.4 S 2.5(re).15 G(xample:)-2.65 E/F4 10/Courier@0 SF(popd +0)2.5 E F0 +(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,) +-.65 E F4(popd +1)2.5 E F0(the second.)2.5 E F2144 614.4 Q F1(n)A F0 +(Remo)25.3 E -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F1(n)3.759 E F0 +1.259(th entry counting from the right of the list sho)B 1.26(wn by)-.25 +F F2(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5(zero. F)180 +626.4 R(or e)-.15 E(xample:)-.15 E F4(popd -0)2.5 E F0(remo)2.5 E -.15 +(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 E F4(popd -1)2.5 +E F0(the ne)2.5 E(xt to last.)-.15 E .644(If the)144 643.2 R F2(popd) +3.144 E F0 .644(command is successful, a)3.144 F F2(dirs)3.143 E F0 .643 +(is performed as well, and the return status is 0.)3.143 F F2(popd)5.643 +E F0 .415(returns f)144 655.2 R .415(alse if an in)-.1 F -.25(va)-.4 G +.415(lid option is encountered, the directory stack is empty).25 F 2.916 +(,an)-.65 G(on-e)-2.916 E .416(xistent direc-)-.15 F +(tory stack entry is speci\214ed, or the directory change f)144 667.2 Q +(ails.)-.1 E F2(printf)108 684 Q F0([)2.5 E F2A F1(var)2.5 E F0(]) +A F1(format)2.5 E F0([)2.5 E F1(ar)A(guments)-.37 E F0(])A .372 +(Write the formatted)144 696 R F1(ar)2.872 E(guments)-.37 E F0 .372 +(to the standard output under the control of the)2.872 F F1(format)2.872 +E F0 5.372(.T)C(he)-5.372 E F1(format)2.872 E F0 1.804(is a character s\ +tring which contains three types of objects: plain characters, which ar\ +e simply)144 708 R 1.859 +(copied to standard output, character escape sequences, which are con) +144 720 R -.15(ve)-.4 G 1.858(rted and copied to the).15 F(GNU Bash-4.1) +72 768 Q(2009 December 29)135.965 E(58)185.955 E 0 Cg EP +%%Page: 59 59 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E 1.171(standard output, and format speci\214cations, each of whic\ +h causes printing of the ne)144 84 R 1.172(xt successi)-.15 F -.15(ve) +-.25 G/F1 10/Times-Italic@0 SF(ar)144 96 Q(gument)-.37 E F0 6.274(.I)C +3.774(na)-6.274 G 1.274(ddition to the standard)-3.774 F F1(printf)3.774 +E F0 1.274(\(1\) formats,)B/F2 10/Times-Bold@0 SF(%b)3.774 E F0(causes) +3.774 E F2(printf)3.774 E F0 1.273(to e)3.774 F 1.273(xpand backslash) +-.15 F .619(escape sequences in the corresponding)144 108 R F1(ar)3.119 +E(gument)-.37 E F0(\(e)3.119 E .619(xcept that)-.15 F F2(\\c)3.119 E F0 +.62(terminates output, backslashes in)3.119 F F2<5c08>144 120 Q F0(,)A +F2(\\")2.985 E F0 2.985(,a)C(nd)-2.985 E F2(\\?)2.985 E F0 .485 +(are not remo)2.985 F -.15(ve)-.15 G .485(d, and octal escapes be).15 F +.484(ginning with)-.15 F F2(\\0)2.984 E F0 .484 +(may contain up to four digits\),)2.984 F(and)144 132 Q F2(%q)2.567 E F0 +(causes)2.567 E F2(printf)2.567 E F0 .067(to output the corresponding) +2.567 F F1(ar)2.568 E(gument)-.37 E F0 .068 +(in a format that can be reused as shell)2.568 F(input.)144 144 Q(The) +144 168 Q F22.904 E F0 .404 +(option causes the output to be assigned to the v)2.904 F(ariable)-.25 E +F1(var)2.904 E F0 .404(rather than being printed to the)2.904 F +(standard output.)144 180 Q(The)144 204 Q F1(format)3.423 E F0 .923 +(is reused as necessary to consume all of the)3.423 F F1(ar)3.423 E +(guments)-.37 E F0 5.923(.I)C 3.423(ft)-5.923 G(he)-3.423 E F1(format) +3.423 E F0 .924(requires more)3.424 F F1(ar)144 216 Q(guments)-.37 E F0 +.033(than are supplied, the e)2.534 F .033 +(xtra format speci\214cations beha)-.15 F .333 -.15(ve a)-.2 H 2.533(si) +.15 G 2.533(faz)-2.533 G .033(ero v)-2.533 F .033(alue or null string,) +-.25 F(as appropriate, had been supplied.)144 228 Q(The return v)5 E +(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F2(pushd) +108 244.8 Q F0([)2.5 E F2A F0 2.5(][)C(+)-2.5 E F1(n)A F0 2.5(][)C +-2.5 E F1(n)A F0(])A F2(pushd)108 256.8 Q F0([)2.5 E F2A F0 +2.5(][)C F1(dir)-2.5 E F0(])A .639(Adds a directory to the top of the d\ +irectory stack, or rotates the stack, making the ne)144 268.8 R 3.14(wt) +-.25 G .64(op of the)-3.14 F 1.316(stack the current w)144 280.8 R 1.316 +(orking directory)-.1 F 6.316(.W)-.65 G 1.315(ith no ar)-6.716 F 1.315 +(guments, e)-.18 F 1.315(xchanges the top tw)-.15 F 3.815(od)-.1 G 1.315 +(irectories and)-3.815 F .871 +(returns 0, unless the directory stack is empty)144 292.8 R 5.871(.A) +-.65 G -.18(rg)-5.871 G .872(uments, if supplied, ha).18 F 1.172 -.15 +(ve t)-.2 H .872(he follo).15 F .872(wing mean-)-.25 F(ings:)144 304.8 Q +F2144 316.8 Q F0 .902(Suppresses the normal change of directory w\ +hen adding directories to the stack, so that)24.74 F +(only the stack is manipulated.)180 328.8 Q F2(+)144 340.8 Q F1(n)A F0 +1.267(Rotates the stack so that the)25.3 F F1(n)3.767 E F0 1.268 +(th directory \(counting from the left of the list sho)B 1.268(wn by) +-.25 F F2(dirs)180 352.8 Q F0 2.5(,s)C +(tarting with zero\) is at the top.)-2.5 E F2144 364.8 Q F1(n)A F0 +.92(Rotates the stack so that the)25.3 F F1(n)3.42 E F0 .92 +(th directory \(counting from the right of the list sho)B .92(wn by)-.25 +F F2(dirs)180 376.8 Q F0 2.5(,s)C(tarting with zero\) is at the top.) +-2.5 E F1(dir)144.35 388.8 Q F0(Adds)23.98 E F1(dir)2.85 E F0 +(to the directory stack at the top, making it the ne)3.23 E 2.5(wc)-.25 +G(urrent w)-2.5 E(orking directory)-.1 E(.)-.65 E .488(If the)144 405.6 +R F2(pushd)2.988 E F0 .488(command is successful, a)2.988 F F2(dirs) +2.988 E F0 .488(is performed as well.)2.988 F .489 +(If the \214rst form is used,)5.488 F F2(pushd)2.989 E F0 1.04 +(returns 0 unless the cd to)144 417.6 R F1(dir)3.89 E F0 -.1(fa)4.27 G +3.539(ils. W).1 F 1.039(ith the second form,)-.4 F F2(pushd)3.539 E F0 +1.039(returns 0 unless the directory)3.539 F .846(stack is empty)144 +429.6 R 3.346(,an)-.65 G(on-e)-3.346 E .847(xistent directory stack ele\ +ment is speci\214ed, or the directory change to the)-.15 F +(speci\214ed ne)144 441.6 Q 2.5(wc)-.25 G(urrent directory f)-2.5 E +(ails.)-.1 E F2(pwd)108 458.4 Q F0([)2.5 E F2(\255LP)A F0(])A .845 +(Print the absolute pathname of the current w)144 470.4 R .845 +(orking directory)-.1 F 5.844(.T)-.65 G .844 +(he pathname printed contains no)-5.844 F .181(symbolic links if the)144 +482.4 R F22.681 E F0 .181(option is supplied or the)2.681 F F2 +.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F2 +(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264 +(enabled. If)144 494.4 R(the)3.264 E F23.264 E F0 .763 +(option is used, the pathname printed may contain symbolic links.)3.264 +F .763(The return)5.763 F 1.36(status is 0 unless an error occurs while\ + reading the name of the current directory or an in)144 506.4 R -.25(va) +-.4 G(lid).25 E(option is supplied.)144 518.4 Q F2 -.18(re)108 535.2 S +(ad).18 E F0([)3.817 E F2(\255ers)A F0 3.817(][)C F2-3.817 E F1 +(aname)3.817 E F0 3.817(][)C F2-3.817 E F1(delim)3.817 E F0 3.817 +(][)C F2-3.817 E F1(te)3.817 E(xt)-.2 E F0 3.817(][)C F2 +-3.817 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F2-3.816 E +F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F2-3.816 E F1(pr) +3.816 E(ompt)-.45 E F0 3.816(][)C F2-3.816 E F1(timeout)3.816 E F0 +3.816(][)C F2-3.816 E F1(fd)3.816 E F0(])A([)108 547.2 Q F1(name)A +F0(...])2.5 E .516(One line is read from the standard input, or from th\ +e \214le descriptor)144 559.2 R F1(fd)3.016 E F0 .516(supplied as an ar) +3.016 F .516(gument to)-.18 F(the)144 571.2 Q F22.538 E F0 .038 +(option, and the \214rst w)2.538 F .038(ord is assigned to the \214rst) +-.1 F F1(name)2.539 E F0 2.539(,t).18 G .039(he second w)-2.539 F .039 +(ord to the second)-.1 F F1(name)2.539 E F0(,).18 E .42 +(and so on, with lefto)144 583.2 R -.15(ve)-.15 G 2.92(rw).15 G .42 +(ords and their interv)-3.02 F .42 +(ening separators assigned to the last)-.15 F F1(name)2.92 E F0 5.42(.I) +.18 G 2.92(ft)-5.42 G(here)-2.92 E .54(are fe)144 595.2 R .54(wer w)-.25 +F .541(ords read from the input stream than names, the remaining names \ +are assigned empty)-.1 F -.25(va)144 607.2 S 2.511(lues. The).25 F .011 +(characters in)2.511 F/F3 9/Times-Bold@0 SF(IFS)2.511 E F0 .011 +(are used to split the line into w)2.261 F 2.511(ords. The)-.1 F .011 +(backslash character \()2.511 F F2(\\)A F0 2.51(\)m)C(ay)-2.51 E 1.89 +(be used to remo)144 619.2 R 2.19 -.15(ve a)-.15 H 2.19 -.15(ny s).15 H +1.891(pecial meaning for the ne).15 F 1.891 +(xt character read and for line continuation.)-.15 F +(Options, if supplied, ha)144 631.2 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2144 643.2 Q F1(aname)2.5 E F0 1.05(The w) +180 655.2 R 1.049 +(ords are assigned to sequential indices of the array v)-.1 F(ariable) +-.25 E F1(aname)3.549 E F0 3.549(,s).18 G 1.049(tarting at 0.)-3.549 F +F1(aname)180.33 667.2 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5 +-.25(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F1(name)2.5 E F0 +(ar)2.5 E(guments are ignored.)-.18 E F2144 679.2 Q F1(delim)2.5 E +F0(The \214rst character of)180 691.2 Q F1(delim)2.5 E F0 +(is used to terminate the input line, rather than ne)2.5 E(wline.)-.25 E +F2144 703.2 Q F0 .372 +(If the standard input is coming from a terminal,)25.86 F F2 -.18(re) +2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.873 E F0(abo)2.623 E +-.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E .218 +(to obtain the line.)180 715.2 R .218 +(Readline uses the current \(or def)5.218 F .218 +(ault, if line editing w)-.1 F .218(as not pre)-.1 F(viously)-.25 E +(acti)180 727.2 Q -.15(ve)-.25 G 2.5(\)e).15 G(diting settings.)-2.5 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(59)185.955 E 0 Cg EP +%%Page: 60 60 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF144 84 Q/F2 10/Times-Italic@0 SF(te) +2.5 E(xt)-.2 E F0(If)10.78 E F1 -.18(re)2.715 G(adline).18 E F0 .216 +(is being used to read the line,)2.715 F F2(te)2.716 E(xt)-.2 E F0 .216 +(is placed into the editing b)2.716 F(uf)-.2 E .216(fer before edit-) +-.25 F(ing be)180 96 Q(gins.)-.15 E F1144 108 Q F2(nc)2.5 E(har) +-.15 E(s)-.1 E F1 -.18(re)180 120 S(ad).18 E F0 1.395 +(returns after reading)3.895 F F2(nc)3.895 E(har)-.15 E(s)-.1 E F0 1.395 +(characters rather than w)3.895 F 1.394(aiting for a complete line of) +-.1 F(input, b)180 132 Q(ut honor a delimiter if fe)-.2 E(wer than)-.25 +E F2(nc)2.5 E(har)-.15 E(s)-.1 E F0 +(characters are read before the delimiter)2.5 E(.)-.55 E F1144 144 +Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 156 S(ad).18 E F0 1.269 +(returns after reading e)3.769 F(xactly)-.15 E F2(nc)3.769 E(har)-.15 E +(s)-.1 E F0 1.269(characters rather than w)3.769 F 1.27 +(aiting for a complete)-.1 F .275 +(line of input, unless EOF is encountered or)180 168 R F1 -.18(re)2.775 +G(ad).18 E F0 .274(times out.)2.774 F .274(Delimiter characters encoun-) +5.274 F 1.002 +(tered in the input are not treated specially and do not cause)180 180 R +F1 -.18(re)3.503 G(ad).18 E F0 1.003(to return until)3.503 F F2(nc)3.503 +E(har)-.15 E(s)-.1 E F0(characters are read.)180 192 Q F1144 204 Q +F2(pr)2.5 E(ompt)-.45 E F0(Display)180 216 Q F2(pr)3.661 E(ompt)-.45 E +F0 1.161(on standard error)3.661 F 3.661(,w)-.4 G 1.161 +(ithout a trailing ne)-3.661 F 1.161(wline, before attempting to read) +-.25 F(an)180 228 Q 2.5(yi)-.15 G 2.5(nput. The)-2.5 F +(prompt is displayed only if input is coming from a terminal.)2.5 E F1 +144 240 Q F0 .543(Backslash does not act as an escape character) +25.86 F 5.543(.T)-.55 G .544(he backslash is considered to be part of) +-5.543 F(the line.)180 252 Q(In particular)5 E 2.5(,ab)-.4 G +(ackslash-ne)-2.5 E(wline pair may not be used as a line continuation.) +-.25 E F1144 264 Q F0(Silent mode.)26.41 E +(If input is coming from a terminal, characters are not echoed.)5 E F1 +144 276 Q F2(timeout)2.5 E F0(Cause)180 288 Q F1 -.18(re)3.549 G +(ad).18 E F0 1.048(to time out and return f)3.549 F 1.048 +(ailure if a complete line of input is not read within)-.1 F F2(timeout) +180 300 Q F0(seconds.)3.496 E F2(timeout)5.996 E F0 .997 +(may be a decimal number with a fractional portion follo)3.496 F(wing) +-.25 E .576(the decimal point.)180 312 R .576(This option is only ef) +5.576 F(fecti)-.25 E .876 -.15(ve i)-.25 H(f).15 E F1 -.18(re)3.076 G +(ad).18 E F0 .576(is reading input from a terminal,)3.076 F .141 +(pipe, or other special \214le; it has no ef)180 324 R .142 +(fect when reading from re)-.25 F .142(gular \214les.)-.15 F(If)5.142 E +F2(timeout)2.642 E F0 .142(is 0,)2.642 F F1 -.18(re)180 336 S(ad).18 E +F0 .113(returns success if input is a)2.614 F -.25(va)-.2 G .113 +(ilable on the speci\214ed \214le descriptor).25 F 2.613(,f)-.4 G .113 +(ailure otherwise.)-2.713 F(The e)180 348 Q +(xit status is greater than 128 if the timeout is e)-.15 E(xceeded.)-.15 +E F1144 360 Q F2(fd)2.5 E F0(Read input from \214le descriptor) +14.46 E F2(fd)2.5 E F0(.)A .191(If no)144 376.8 R F2(names)3.051 E F0 +.191(are supplied, the line read is assigned to the v)2.961 F(ariable) +-.25 E/F3 9/Times-Bold@0 SF(REPL)2.692 E(Y)-.828 E/F4 9/Times-Roman@0 SF +(.)A F0 .192(The return code is zero,)4.692 F 1.344 +(unless end-of-\214le is encountered,)144 388.8 R F1 -.18(re)3.844 G(ad) +.18 E F0 1.343 +(times out \(in which case the return code is greater than)3.844 F +(128\), or an in)144 400.8 Q -.25(va)-.4 G +(lid \214le descriptor is supplied as the ar).25 E(gument to)-.18 E F1 +2.5 E F0(.)A F1 -.18(re)108 417.6 S(adonly).18 E F0([)2.5 E F1 +(\255aA)A(pf)-.25 E F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(wor)A(d)-.37 E +F0 2.5(].)C(..])-2.5 E .77(The gi)144 429.6 R -.15(ve)-.25 G(n).15 E F2 +(names)3.27 E F0 .77(are mark)3.27 F .77(ed readonly; the v)-.1 F .77 +(alues of these)-.25 F F2(names)3.63 E F0 .77 +(may not be changed by subse-)3.54 F 1.097(quent assignment.)144 441.6 R +1.097(If the)6.097 F F13.597 E F0 1.097 +(option is supplied, the functions corresponding to the)3.597 F F2 +(names)3.596 E F0 1.096(are so)3.596 F(mark)144 453.6 Q 3.334(ed. The) +-.1 F F13.334 E F0 .834(option restricts the v)3.334 F .834 +(ariables to inde)-.25 F -.15(xe)-.15 G 3.334(da).15 G .834(rrays; the) +-3.334 F F13.334 E F0 .834(option restricts the v)3.334 F(ari-) +-.25 E .538(ables to associati)144 465.6 R .838 -.15(ve a)-.25 H 3.038 +(rrays. If).15 F(no)3.038 E F2(name)3.398 E F0(ar)3.218 E .538 +(guments are gi)-.18 F -.15(ve)-.25 G .538(n, or if the).15 F F1 +3.038 E F0 .537(option is supplied, a list)3.038 F .08 +(of all readonly names is printed.)144 477.6 R(The)5.08 E F12.58 E +F0 .081(option causes output to be displayed in a format that may)2.58 F +1.177(be reused as input.)144 489.6 R 1.177(If a v)6.177 F 1.176 +(ariable name is follo)-.25 F 1.176(wed by =)-.25 F F2(wor)A(d)-.37 E F0 +3.676(,t)C 1.176(he v)-3.676 F 1.176(alue of the v)-.25 F 1.176 +(ariable is set to)-.25 F F2(wor)144 501.6 Q(d)-.37 E F0 6.205(.T)C +1.205(he return status is 0 unless an in)-6.205 F -.25(va)-.4 G 1.206 +(lid option is encountered, one of the).25 F F2(names)4.066 E F0 1.206 +(is not a)3.976 F -.25(va)144 513.6 S(lid shell v).25 E +(ariable name, or)-.25 E F12.5 E F0(is supplied with a)2.5 E F2 +(name)2.86 E F0(that is not a function.)2.68 E F1 -.18(re)108 530.4 S +(tur).18 E(n)-.15 E F0([)2.5 E F2(n)A F0(])A .587 +(Causes a function to e)144 542.4 R .587(xit with the return v)-.15 F +.587(alue speci\214ed by)-.25 F F2(n)3.087 E F0 5.587(.I).24 G(f)-5.587 +E F2(n)3.447 E F0 .586(is omitted, the return status is)3.327 F 1.335 +(that of the last command e)144 554.4 R -.15(xe)-.15 G 1.335 +(cuted in the function body).15 F 6.335(.I)-.65 G 3.835(fu)-6.335 G +1.335(sed outside a function, b)-3.835 F 1.335(ut during)-.2 F -.15(exe) +144 566.4 S .794(cution of a script by the).15 F F1(.)3.294 E F0(\() +5.794 E F1(sour)A(ce)-.18 E F0 3.294(\)c)C .794 +(ommand, it causes the shell to stop e)-3.294 F -.15(xe)-.15 G .794 +(cuting that script).15 F .245(and return either)144 578.4 R F2(n)3.105 +E F0 .246(or the e)2.985 F .246(xit status of the last command e)-.15 F +-.15(xe)-.15 G .246(cuted within the script as the e).15 F .246 +(xit sta-)-.15 F .082(tus of the script.)144 590.4 R .082 +(If used outside a function and not during e)5.082 F -.15(xe)-.15 G .082 +(cution of a script by).15 F F1(.)2.582 E F0 2.581(,t).833 G .081 +(he return sta-)-2.581 F 2.305(tus is f)144 602.4 R 4.805(alse. An)-.1 F +4.805(yc)-.15 G 2.305(ommand associated with the)-4.805 F F1(RETURN) +4.805 E F0 2.306(trap is e)4.806 F -.15(xe)-.15 G 2.306(cuted before e) +.15 F -.15(xe)-.15 G(cution).15 E(resumes after the function or script.) +144 614.4 Q F1(set)108 631.2 Q F0([)2.5 E F1 +(\255\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1-2.5 E F2(option)2.5 +E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1(set)108 643.2 Q F0 +([)2.5 E F1(+abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1(+o)-2.5 E F2(option) +2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144 655.2 S +.836(thout options, the name and v).4 F .835(alue of each shell v)-.25 F +.835(ariable are displayed in a format that can be)-.25 F .784 +(reused as input for setting or resetting the currently-set v)144 667.2 +R 3.284(ariables. Read-only)-.25 F -.25(va)3.284 G .784 +(riables cannot be).25 F 2.947(reset. In)144 679.2 R F2 .447(posix mode) +2.947 F F0 2.947(,o)C .447(nly shell v)-2.947 F .447 +(ariables are listed.)-.25 F .447 +(The output is sorted according to the current)5.447 F 3.53 +(locale. When)144 691.2 R 1.031(options are speci\214ed, the)3.53 F +3.531(ys)-.15 G 1.031(et or unset shell attrib)-3.531 F 3.531(utes. An) +-.2 F 3.531(ya)-.15 G -.18(rg)-3.531 G 1.031(uments remaining).18 F +1.624(after option processing are treated as v)144 703.2 R 1.623 +(alues for the positional parameters and are assigned, in)-.25 F(order) +144 715.2 Q 2.5(,t)-.4 G(o)-2.5 E F1($1)2.5 E F0(,)A F1($2)2.5 E F0(,)A +F1 2.5(... $)2.5 F F2(n)A F0 5(.O)C(ptions, if speci\214ed, ha)-5 E .3 +-.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E(GNU Bash-4.1)72 768 +Q(2009 December 29)135.965 E(60)185.955 E 0 Cg EP +%%Page: 61 61 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF144 84 Q F0 .539(Automatically mark v) +29.3 F .539 +(ariables and functions which are modi\214ed or created for e)-.25 F .54 +(xport to)-.15 F(the en)184 96 Q(vironment of subsequent commands.)-.4 E +F1144 108 Q F0 .132 +(Report the status of terminated background jobs immediately)28.74 F +2.632(,r)-.65 G .131(ather than before the ne)-2.632 F(xt)-.15 E +(primary prompt.)184 120 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)-.25 +H(nly when job control is enabled.).15 E F1144 132 Q F0 .51 +(Exit immediately if a)29.86 F/F2 10/Times-Italic@0 SF(pipeline)3.01 E +F0 .511(\(which may consist of a single)3.011 F F2 .511(simple command) +3.011 F F0 3.011(\), a)B F2(sub-)3.011 E(shell)184 144 Q F0 .872 +(command enclosed in parentheses, or one of the commands e)3.373 F -.15 +(xe)-.15 G .872(cuted as part of a).15 F .399 +(command list enclosed by braces \(see)184 156 R/F3 9/Times-Bold@0 SF +.399(SHELL GRAMMAR)2.899 F F0(abo)2.649 E -.15(ve)-.15 G 2.899(\)e).15 G +.399(xits with a non-zero)-3.049 F 3.969(status. The)184 168 R 1.468 +(shell does not e)3.969 F 1.468(xit if the command that f)-.15 F 1.468 +(ails is part of the command list)-.1 F .569(immediately follo)184 180 R +.569(wing a)-.25 F F1(while)3.069 E F0(or)3.069 E F1(until)3.069 E F0 +-.1(ke)3.069 G(yw)-.05 E .569(ord, part of the test follo)-.1 F .57 +(wing the)-.25 F F1(if)3.07 E F0(or)3.07 E F1(elif)3.07 E F0(reserv)184 +192 Q .544(ed w)-.15 F .544(ords, part of an)-.1 F 3.044(yc)-.15 G .544 +(ommand e)-3.044 F -.15(xe)-.15 G .544(cuted in a).15 F F1(&&)3.044 E F0 +(or)3.044 E/F4 10/Symbol SF3.044 E F0 .544(list e)3.044 F .544 +(xcept the command)-.15 F(follo)184 204 Q 1.23(wing the \214nal)-.25 F +F1(&&)3.73 E F0(or)3.73 E F43.73 E F0 3.73(,a)C 1.53 -.15(ny c) +-3.73 H 1.231(ommand in a pipeline b).15 F 1.231 +(ut the last, or if the com-)-.2 F(mand')184 216 Q 3.191(sr)-.55 G .691 +(eturn v)-3.191 F .691(alue is being in)-.25 F -.15(ve)-.4 G .691 +(rted with).15 F F1(!)3.191 E F0 5.691(.A)C .691(trap on)-2.5 F F1(ERR) +3.19 E F0 3.19(,i)C 3.19(fs)-3.19 G .69(et, is e)-3.19 F -.15(xe)-.15 G +.69(cuted before).15 F .686(the shell e)184 228 R 3.186(xits. This)-.15 +F .686(option applies to the shell en)3.186 F .686 +(vironment and each subshell en)-.4 F(viron-)-.4 E .068 +(ment separately \(see)184 240 R F3 .068(COMMAND EXECUTION ENVIR)2.568 F +(ONMENT)-.27 E F0(abo)2.318 E -.15(ve)-.15 G .068(\), and may cause).15 +F(subshells to e)184 252 Q(xit before e)-.15 E -.15(xe)-.15 G +(cuting all the commands in the subshell.).15 E F1144 264 Q F0 +(Disable pathname e)30.97 E(xpansion.)-.15 E F1144 276 Q F0 2.238 +(Remember the location of commands as the)28.74 F 4.738(ya)-.15 G 2.239 +(re look)-4.738 F 2.239(ed up for e)-.1 F -.15(xe)-.15 G 4.739 +(cution. This).15 F(is)4.739 E(enabled by def)184 288 Q(ault.)-.1 E F1 +144 300 Q F0 .514(All ar)28.74 F .514 +(guments in the form of assignment statements are placed in the en)-.18 +F .513(vironment for a)-.4 F +(command, not just those that precede the command name.)184 312 Q F1 +144 324 Q F0 .148(Monitor mode.)25.97 F .148 +(Job control is enabled.)5.148 F .149(This option is on by def)5.148 F +.149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .637 +(on systems that support it \(see)184 336 R F3 .636(JOB CONTR)3.136 F +(OL)-.27 E F0(abo)2.886 E -.15(ve)-.15 G 3.136(\). Background).15 F .636 +(processes run in a)3.136 F .641 +(separate process group and a line containing their e)184 348 R .642 +(xit status is printed upon their com-)-.15 F(pletion.)184 360 Q F1 +144 372 Q F0 .653(Read commands b)28.74 F .653(ut do not e)-.2 F +-.15(xe)-.15 G .653(cute them.).15 F .652 +(This may be used to check a shell script for)5.653 F(syntax errors.)184 +384 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 E +F1144 396 Q F2(option\255name)2.5 E F0(The)184 408 Q F2 +(option\255name)2.5 E F0(can be one of the follo)2.5 E(wing:)-.25 E F1 +(allexport)184 420 Q F0(Same as)224 432 Q F12.5 E F0(.)A F1 +(braceexpand)184 444 Q F0(Same as)224 456 Q F12.5 E F0(.)A F1 +(emacs)184 468 Q F0 .089(Use an emacs-style command line editing interf) +13.9 F 2.589(ace. This)-.1 F .089(is enabled by def)2.589 F(ault)-.1 E +.95(when the shell is interacti)224 480 R -.15(ve)-.25 G 3.45(,u).15 G +.95(nless the shell is started with the)-3.45 F F1(\255\255noediting) +3.45 E F0 2.5(option. This)224 492 R(also af)2.5 E +(fects the editing interf)-.25 E(ace used for)-.1 E F1 -.18(re)2.5 G +(ad \255e).18 E F0(.)A F1(err)184 504 Q(exit)-.18 E F0(Same as)11.31 E +F12.5 E F0(.)A F1(errtrace)184 516 Q F0(Same as)5.03 E F12.5 +E F0(.)A F1(functrace)184 528 Q F0(Same as)224 540 Q F12.5 E F0(.) +A F1(hashall)184 552 Q F0(Same as)9.43 E F12.5 E F0(.)A F1 +(histexpand)184 564 Q F0(Same as)224 576 Q F12.5 E F0(.)A F1 +(history)184 588 Q F0 .586(Enable command history)10 F 3.087(,a)-.65 G +3.087(sd)-3.087 G .587(escribed abo)-3.087 F .887 -.15(ve u)-.15 H(nder) +.15 E F3(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F5 9/Times-Roman@0 SF(.)A F0 +.587(This option is)5.087 F(on by def)224 600 Q(ault in interacti)-.1 E +.3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 612 Q(eeof)-.18 E F0 1.657 +(The ef)224 624 R 1.657(fect is as if the shell command)-.25 F/F6 10 +/Courier@0 SF(IGNOREEOF=10)4.156 E F0 1.656(had been e)4.156 F -.15(xe) +-.15 G(cuted).15 E(\(see)224 636 Q F1(Shell V)2.5 E(ariables)-.92 E F0 +(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1 -.1(ke)184 648 S(yw).1 E(ord)-.1 +E F0(Same as)224 660 Q F12.5 E F0(.)A F1(monitor)184 672 Q F0 +(Same as)5.56 E F12.5 E F0(.)A F1(noclob)184 684 Q(ber)-.1 E F0 +(Same as)224 696 Q F12.5 E F0(.)A F1(noexec)184 708 Q F0(Same as) +11.12 E F12.5 E F0(.)A(GNU Bash-4.1)72 768 Q(2009 December 29) +135.965 E(61)185.955 E 0 Cg EP +%%Page: 62 62 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(noglob)184 84 Q F0(Same as)11.1 E F1 +2.5 E F0(.)A F1(nolog)184 96 Q F0(Currently ignored.)16.66 E F1(notify) +184 108 Q F0(Same as)15 E F12.5 E F0(.)A F1(nounset)184 120 Q F0 +(Same as)6.66 E F12.5 E F0(.)A F1(onecmd)184 132 Q F0(Same as)6.67 +E F12.5 E F0(.)A F1(ph)184 144 Q(ysical)-.15 E F0(Same as)5.14 E +F12.5 E F0(.)A F1(pipefail)184 156 Q F0 1.029 +(If set, the return v)7.77 F 1.029(alue of a pipeline is the v)-.25 F +1.03(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 168 +R 1.136 +(xit with a non-zero status, or zero if all commands in the pipeline) +-.15 F -.15(ex)224 180 S(it successfully).15 E 5(.T)-.65 G +(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 192 Q F0 +2.09(Change the beha)17.77 F 2.091(vior of)-.2 F F1(bash)4.591 E F0 +2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091 +(fers from the)-.25 F(POSIX standard to match the standard \()224 204 Q +/F2 10/Times-Italic@0 SF(posix mode)A F0(\).)A F1(pri)184 216 Q(vileged) +-.1 E F0(Same as)224 228 Q F12.5 E F0(.)A F1 -.1(ve)184 240 S +(rbose).1 E F0(Same as)7.33 E F12.5 E F0(.)A F1(vi)184 252 Q F0 +1.466(Use a vi-style command line editing interf)32.22 F 3.965 +(ace. This)-.1 F 1.465(also af)3.965 F 1.465(fects the editing)-.25 F +(interf)224 264 Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0 +(.)A F1(xtrace)184 276 Q F0(Same as)13.35 E F12.5 E F0(.)A(If)184 +294 Q F13.052 E F0 .552(is supplied with no)3.052 F F2 +(option\255name)3.053 E F0 3.053(,t)C .553(he v)-3.053 F .553 +(alues of the current options are printed.)-.25 F(If)5.553 E F1(+o)184 +306 Q F0 1.072(is supplied with no)3.572 F F2(option\255name)3.572 E F0 +3.572(,a)C 1.071(series of)-.001 F F1(set)3.571 E F0 1.071 +(commands to recreate the current)3.571 F +(option settings is displayed on the standard output.)184 318 Q F1 +144 330 Q F0 -.45(Tu)28.74 G 1.071(rn on).45 F F2(privile)4.821 E -.1 +(ge)-.4 G(d).1 E F0 3.572(mode. In)4.341 F 1.072(this mode, the)3.572 F +/F3 9/Times-Bold@0 SF($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV) +-.27 E F0 1.072(\214les are not pro-)3.322 F 1.501 +(cessed, shell functions are not inherited from the en)184 342 R 1.5 +(vironment, and the)-.4 F F3(SHELLOPTS)4 E/F4 9/Times-Roman@0 SF(,)A F3 +-.27(BA)184 354 S(SHOPTS).27 E F4(,)A F3(CDP)2.774 E -.855(AT)-.666 G(H) +.855 E F4(,)A F0(and)2.774 E F3(GLOBIGNORE)3.024 E F0 -.25(va)2.774 G +.524(riables, if the).25 F 3.025(ya)-.15 G .525(ppear in the en)-3.025 F +(vironment,)-.4 E .38(are ignored.)184 366 R .38 +(If the shell is started with the ef)5.38 F(fecti)-.25 E .679 -.15(ve u) +-.25 H .379(ser \(group\) id not equal to the real).15 F .461 +(user \(group\) id, and the)184 378 R F12.961 E F0 .461 +(option is not supplied, these actions are tak)2.961 F .462 +(en and the ef)-.1 F(fec-)-.25 E(ti)184 390 Q .695 -.15(ve u)-.25 H .395 +(ser id is set to the real user id.).15 F .395(If the)5.395 F F1 +2.895 E F0 .394(option is supplied at startup, the ef)2.895 F(fecti)-.25 +E -.15(ve)-.25 G .386(user id is not reset.)184 402 R -.45(Tu)5.386 G +.386(rning this option of).45 F 2.886(fc)-.25 G .387(auses the ef)-2.886 +F(fecti)-.25 E .687 -.15(ve u)-.25 H .387(ser and group ids to be).15 F +(set to the real user and group ids.)184 414 Q F1144 426 Q F0 +(Exit after reading and e)30.97 E -.15(xe)-.15 G(cuting one command.).15 +E F1144 438 Q F0 -.35(Tr)28.74 G .044(eat unset v).35 F .044(aria\ +bles and parameters other than the special parameters "@" and "*" as an) +-.25 F .182(error when performing parameter e)184 450 R 2.682 +(xpansion. If)-.15 F -.15(ex)2.682 G .183 +(pansion is attempted on an unset v).15 F(ari-)-.25 E .746 +(able or parameter)184 462 R 3.246(,t)-.4 G .746 +(he shell prints an error message, and, if not interacti)-3.246 F -.15 +(ve)-.25 G 3.246(,e).15 G .746(xits with a)-3.396 F(non-zero status.)184 +474 Q F1144 486 Q F0(Print shell input lines as the)29.3 E 2.5(ya) +-.15 G(re read.)-2.5 E F1144 498 Q F0 .315(After e)29.3 F .315 +(xpanding each)-.15 F F2 .315(simple command)2.815 F F0(,)A F1 -.25(fo) +2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E F0(command,)2.815 E +F1(select)2.815 E F0(command,)2.815 E 1.236(or arithmetic)184 510 R F1 +-.25(fo)3.736 G(r).25 E F0 1.236(command, display the e)3.736 F 1.236 +(xpanded v)-.15 F 1.236(alue of)-.25 F F3(PS4)3.736 E F4(,)A F0(follo) +3.486 E 1.236(wed by the com-)-.25 F(mand and its e)184 522 Q +(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E F1 +144 534 Q F0 2.578(The shell performs brace e)27.63 F 2.578 +(xpansion \(see)-.15 F F1 2.578(Brace Expansion)5.078 F F0(abo)5.078 E +-.15(ve)-.15 G 5.079(\). This).15 F 2.579(is on by)5.079 F(def)184 546 Q +(ault.)-.1 E F1144 558 Q F0 .214(If set,)27.08 F F1(bash)2.714 E +F0 .214(does not o)2.714 F -.15(ve)-.15 G .214(rwrite an e).15 F .214 +(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0 +2.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F +3.053(tors. This)184 570 R .553(may be o)3.053 F -.15(ve)-.15 G .553 +(rridden when creating output \214les by using the redirection opera-) +.15 F(tor)184 582 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1 +144 594 Q F0 .104(If set, an)27.63 F 2.604(yt)-.15 G .104(rap on) +-2.604 F F1(ERR)2.604 E F0 .103 +(is inherited by shell functions, command substitutions, and com-)2.604 +F .838(mands e)184 606 R -.15(xe)-.15 G .838(cuted in a subshell en).15 +F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839 +(trap is normally not inherited in)3.339 F(such cases.)184 618 Q F1 +144 630 Q F0(Enable)26.52 E F1(!)3.032 E F0 .532 +(style history substitution.)5.532 F .531(This option is on by def)5.532 +F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 642 Q -.15 +(ve)-.25 G(.).15 E F1144 654 Q F0 1.164 +(If set, the shell does not follo)28.19 F 3.664(ws)-.25 G 1.164 +(ymbolic links when e)-3.664 F -.15(xe)-.15 G 1.165 +(cuting commands such as).15 F F1(cd)3.665 E F0 2.822 +(that change the current w)184 666 R 2.822(orking directory)-.1 F 7.822 +(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.821 +(ysical directory structure)-.05 F 2.685(instead. By)184 678 R(def)2.685 +E(ault,)-.1 E F1(bash)2.686 E F0(follo)2.686 E .186 +(ws the logical chain of directories when performing com-)-.25 F +(mands which change the current directory)184 690 Q(.)-.65 E F1144 +702 Q F0 .89(If set, an)27.63 F 3.39(yt)-.15 G .89(raps on)-3.39 F F1 +(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89 +(are inherited by shell functions, command)3.39 F 1.932 +(substitutions, and commands e)184 714 R -.15(xe)-.15 G 1.932 +(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E +(UG)-.1 E F0(and)4.432 E F1(RETURN)184 726 Q F0 +(traps are normally not inherited in such cases.)2.5 E(GNU Bash-4.1)72 +768 Q(2009 December 29)135.965 E(62)185.955 E 0 Cg EP +%%Page: 63 63 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF144 84 Q F0 .401(If no ar)28.6 F .401 +(guments follo)-.18 F 2.901(wt)-.25 G .401 +(his option, then the positional parameters are unset.)-2.901 F +(Otherwise,)5.4 E(the positional parameters are set to the)184 96 Q/F2 +10/Times-Italic@0 SF(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni) +.15 G 2.5(fs)-2.5 G(ome of them be)-2.5 E(gin with a)-.15 E F12.5 E +F0(.)A F1144 108 Q F0 1.944 +(Signal the end of options, cause all remaining)34.3 F F2(ar)4.444 E(g) +-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.445(ea)-4.444 G 1.945 +(ssigned to the positional)-4.445 F 3.446(parameters. The)184 120 R F1 +3.446 E F0(and)3.446 E F13.446 E F0 .945 +(options are turned of)3.446 F 3.445(f. If)-.25 F .945(there are no) +3.445 F F2(ar)3.445 E(g)-.37 E F0 .945(s, the positional)B +(parameters remain unchanged.)184 132 Q .425(The options are of)144 +148.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425 +(ault unless otherwise noted.)-.1 F .425 +(Using + rather than \255 causes these options)5.425 F .178 +(to be turned of)144 160.8 R 2.678(f. The)-.25 F .178 +(options can also be speci\214ed as ar)2.678 F .178(guments to an in) +-.18 F -.2(vo)-.4 G .177(cation of the shell.).2 F(The)5.177 E .066 +(current set of options may be found in)144 172.8 R F1<24ad>2.566 E F0 +5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066 +(ys true unless an in).1 F -.25(va)-.4 G .067(lid option).25 F +(is encountered.)144 184.8 Q F1(shift)108 201.6 Q F0([)2.5 E F2(n)A F0 +(])A .429(The positional parameters from)144 213.6 R F2(n)2.929 E F0 +.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G +.428(rameters represented by the num-).15 F(bers)144 225.6 Q F1($#)2.582 +E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0A F2(n)A F0 .082 +(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga) +-.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to) +.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06 +(is 0, no parameters are changed.)144 237.6 R(If)5.06 E F2(n)2.92 E F0 +.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F +(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56 +(,t)C(he)-2.56 E .143(positional parameters are not changed.)144 249.6 R +.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0 +.144(is greater than)2.884 F F1($#)2.644 E F0 +(or less than zero; otherwise 0.)144 261.6 Q F1(shopt)108 278.4 Q F0([) +2.5 E F1(\255pqsu)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(optname) +-2.5 E F0(...])2.5 E -.8(To)144 290.4 S .222(ggle the v).8 F .222 +(alues of v)-.25 F .222(ariables controlling optional shell beha)-.25 F +(vior)-.2 E 5.222(.W)-.55 G .222(ith no options, or with the)-5.622 F F1 +2.722 E F0 .721(option, a list of all settable options is display\ +ed, with an indication of whether or not each is set.)144 302.4 R(The) +144 314.4 Q F12.828 E F0 .327(option causes output to be displaye\ +d in a form that may be reused as input.)2.828 F .327(Other options) +5.327 F(ha)144 326.4 Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:) +-.25 E F1144 338.4 Q F0(Enable \(set\) each)26.41 E F2(optname)2.5 +E F0(.)A F1144 350.4 Q F0(Disable \(unset\) each)24.74 E F2 +(optname)2.5 E F0(.)A F1144 362.4 Q F0 .003(Suppresses normal out\ +put \(quiet mode\); the return status indicates whether the)24.74 F F2 +(optname)2.504 E F0(is)2.504 E .256(set or unset.)180 374.4 R .256 +(If multiple)5.256 F F2(optname)2.756 E F0(ar)2.756 E .256 +(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G(ith)-2.756 E F1 +2.756 E F0 2.755(,t)C .255(he return status is zero if)-2.755 F +(all)180 386.4 Q F2(optnames)2.5 E F0(are enabled; non-zero otherwise.) +2.5 E F1144 398.4 Q F0(Restricts the v)25.3 E(alues of)-.25 E F2 +(optname)2.5 E F0(to be those de\214ned for the)2.5 E F12.5 E F0 +(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .127 +(If either)144 415.2 R F12.627 E F0(or)2.627 E F12.627 E F0 +.127(is used with no)2.627 F F2(optname)2.627 E F0(ar)2.627 E .127 +(guments, the display is limited to those options which)-.18 F 1.024 +(are set or unset, respecti)144 427.2 R -.15(ve)-.25 G(ly).15 E 6.024 +(.U)-.65 G 1.024(nless otherwise noted, the)-6.024 F F1(shopt)3.523 E F0 +1.023(options are disabled \(unset\) by)3.523 F(def)144 439.2 Q(ault.) +-.1 E 1.544(The return status when listing options is zero if all)144 +456 R F2(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.) +4.045 F .696 +(When setting or unsetting options, the return status is zero unless an) +144 468 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695(alid shell) +-.25 F(option.)144 480 Q(The list of)144 496.8 Q F1(shopt)2.5 E F0 +(options is:)2.5 E F1(autocd)144 514.8 Q F0 .199 +(If set, a command name that is the name of a directory is e)11.11 F +-.15(xe)-.15 G .2(cuted as if it were the ar).15 F(gu-)-.18 E +(ment to the)184 526.8 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F +(option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E +F1(cdable_v)144 538.8 Q(ars)-.1 E F0 .156(If set, an ar)184 550.8 R .156 +(gument to the)-.18 F F1(cd)2.656 E F0 -.2(bu)2.656 G .155 +(iltin command that is not a directory is assumed to be the).2 F +(name of a v)184 562.8 Q(ariable whose v)-.25 E +(alue is the directory to change to.)-.25 E F1(cdspell)144 574.8 Q F0 +1.055 +(If set, minor errors in the spelling of a directory component in a) +10.55 F F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988 +(corrected. The)184 586.8 R 1.488(errors check)3.988 F 1.487 +(ed for are transposed characters, a missing character)-.1 F 3.987(,a) +-.4 G(nd)-3.987 E .552(one character too man)184 598.8 R 4.352 -.65 +(y. I)-.15 H 3.052(fac).65 G .552 +(orrection is found, the corrected \214le name is printed, and)-3.052 F +(the command proceeds.)184 610.8 Q +(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.) +.15 E F1(checkhash)144 622.8 Q F0 2.08(If set,)184 634.8 R F1(bash)4.58 +E F0 2.079(checks that a command found in the hash table e)4.58 F 2.079 +(xists before trying to)-.15 F -.15(exe)184 646.8 S(cute it.).15 E +(If a hashed command no longer e)5 E +(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 658.8 +Q F0 .448(If set,)184 670.8 R F1(bash)2.948 E F0 .448 +(lists the status of an)2.948 F 2.949(ys)-.15 G .449 +(topped and running jobs before e)-2.949 F .449(xiting an interacti)-.15 +F -.15(ve)-.25 G 3.439(shell. If)184 682.8 R(an)3.439 E 3.439(yj)-.15 G +.938(obs are running, this causes the e)-3.439 F .938 +(xit to be deferred until a second e)-.15 F .938(xit is)-.15 F 2.203 +(attempted without an interv)184 694.8 R 2.203(ening command \(see)-.15 +F/F3 9/Times-Bold@0 SF 2.203(JOB CONTR)4.703 F(OL)-.27 E F0(abo)4.453 E +-.15(ve)-.15 G 4.703(\). The).15 F(shell)4.704 E(al)184 706.8 Q -.1(wa) +-.1 G(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G +(obs are stopped.)-2.5 E(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 +E(63)185.955 E 0 Cg EP +%%Page: 64 64 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(checkwinsize)144 84 Q F0 .797(If set,)184 +96 R F1(bash)3.297 E F0 .797(checks the windo)3.297 F 3.297(ws)-.25 G +.796(ize after each command and, if necessary)-3.297 F 3.296(,u)-.65 G +.796(pdates the)-3.296 F -.25(va)184 108 S(lues of).25 E/F2 9 +/Times-Bold@0 SF(LINES)2.5 E F0(and)2.25 E F2(COLUMNS)2.5 E/F3 9 +/Times-Roman@0 SF(.)A F1(cmdhist)144 120 Q F0 1.202(If set,)6.11 F F1 +(bash)3.702 E F0 1.202(attempts to sa)3.702 F 1.502 -.15(ve a)-.2 H +1.202(ll lines of a multiple-line command in the same history).15 F +(entry)184 132 Q 5(.T)-.65 G(his allo)-5 E +(ws easy re-editing of multi-line commands.)-.25 E F1(compat31)144 144 Q +F0 .42(If set,)184 156 R F1(bash)2.92 E F0 .42(changes its beha)2.92 F +.419(vior to that of v)-.2 F .419(ersion 3.1 with respect to quoted ar) +-.15 F(guments)-.18 E(to the conditional command')184 168 Q 2.5(s=)-.55 +G 2.5(~o)-2.5 G(perator)-2.5 E(.)-.55 E F1(compat32)144 180 Q F0 1.409 +(If set,)184 192 R F1(bash)3.909 E F0 1.409(changes its beha)3.909 F +1.409(vior to that of v)-.2 F 1.41 +(ersion 3.2 with respect to locale-speci\214c)-.15 F +(string comparison when using the conditional command')184 204 Q 2.5 +(s operators.)-2.5 E F1(compat40)144 216 Q F0 1.41 +(If set,)184 228 R F1(bash)3.91 E F0 1.41(changes its beha)3.91 F 1.409 +(vior to that of v)-.2 F 1.409 +(ersion 4.0 with respect to locale-speci\214c)-.15 F 1.692 +(string comparison when using the conditional command')184 240 R 4.193 +(s operators and the)-4.193 F(ef)184 252 Q +(fect of interrupting a command list.)-.25 E F1(dirspell)144 264 Q F0 +.859(If set,)7.77 F F1(bash)3.359 E F0 .858 +(attempts spelling correction on directory names during w)3.359 F .858 +(ord completion if)-.1 F +(the directory name initially supplied does not e)184 276 Q(xist.)-.15 E +F1(dotglob)144 288 Q F0 .165(If set,)7.77 F F1(bash)2.665 E F0 .165 +(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665('i) +-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F +(xpansion.)-.15 E F1(execfail)144 300 Q F0 1.387 +(If set, a non-interacti)7.79 F 1.687 -.15(ve s)-.25 H 1.386 +(hell will not e).15 F 1.386(xit if it cannot e)-.15 F -.15(xe)-.15 G +1.386(cute the \214le speci\214ed as an).15 F(ar)184 312 Q +(gument to the)-.18 E F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E +(An interacti)5 E .3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 +E F1(exec)2.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 324 Q F0 +.716(If set, aliases are e)184 336 R .717(xpanded as described abo)-.15 +F 1.017 -.15(ve u)-.15 H(nder).15 E F2(ALIASES)3.217 E F3(.)A F0 .717 +(This option is enabled)5.217 F(by def)184 348 Q(ault for interacti)-.1 +E .3 -.15(ve s)-.25 H(hells.).15 E F1(extdeb)144 360 Q(ug)-.2 E F0 +(If set, beha)184 372 Q(vior intended for use by deb)-.2 E +(uggers is enabled:)-.2 E F1(1.)184 384 Q F0(The)28.5 E F14.251 E +F0 1.751(option to the)4.251 F F1(declar)4.251 E(e)-.18 E F0 -.2(bu) +4.251 G 1.751(iltin displays the source \214le name and line).2 F +(number corresponding to each function name supplied as an ar)220 396 Q +(gument.)-.18 E F1(2.)184 408 Q F0 1.667(If the command run by the)28.5 +F F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167 F +1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 420 +Q -.15(xe)-.15 G(cuted.).15 E F1(3.)184 432 Q F0 .841 +(If the command run by the)28.5 F F1(DEB)3.341 E(UG)-.1 E F0 .841 +(trap returns a v)3.341 F .84(alue of 2, and the shell is)-.25 F -.15 +(exe)220 444 S .488 +(cuting in a subroutine \(a shell function or a shell script e).15 F +-.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1 +(sour)220 456 Q(ce)-.18 E F0 -.2(bu)2.5 G(iltins\), a call to).2 E F1 +-.18(re)2.5 G(tur).18 E(n)-.15 E F0(is simulated.)2.5 E F1(4.)184 468 Q +F2 -.27(BA)28.5 G(SH_ARGC).27 E F0(and)3.154 E F2 -.27(BA)3.404 G +(SH_ARGV).27 E F0 .904(are updated as described in their descriptions) +3.154 F(abo)220 480 Q -.15(ve)-.15 G(.).15 E F1(5.)184 492 Q F0 1.359 +(Function tracing is enabled:)28.5 F 1.359 +(command substitution, shell functions, and sub-)6.359 F(shells in)220 +504 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E/F4 10 +/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1 +(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0(traps.)2.5 E F1(6.) +184 516 Q F0 .805(Error tracing is enabled:)28.5 F .804 +(command substitution, shell functions, and subshells)5.805 F(in)220 528 +Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F4 +(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E(OR)-.3 E F0 +(trap.)2.5 E F1(extglob)144 540 Q F0 .4(If set, the e)8.89 F .4 +(xtended pattern matching features described abo)-.15 F .7 -.15(ve u) +-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 552 Q +F0(are enabled.)2.5 E F1(extquote)144 564 Q F0 2.473(If set,)184 576 R +F1($)4.973 E F0<08>A F4(string)A F0 4.973<0861>C(nd)-4.973 E F1($)4.973 +E F0(")A F4(string)A F0 4.973("q)C 2.473(uoting is performed within) +-4.973 F F1(${)4.973 E F4(par)A(ameter)-.15 E F1(})A F0 -.15(ex)4.973 G +(pansions).15 E(enclosed in double quotes.)184 588 Q +(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 600 Q F0 +1.424(If set, patterns which f)7.77 F 1.425 +(ail to match \214lenames during pathname e)-.1 F 1.425 +(xpansion result in an)-.15 F -.15(ex)184 612 S(pansion error).15 E(.) +-.55 E F1 -.25(fo)144 624 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0 +.937(If set, the suf)184 636 R<8c78>-.25 E .936(es speci\214ed by the) +-.15 F F2(FIGNORE)3.436 E F0 .936(shell v)3.186 F .936(ariable cause w) +-.25 F .936(ords to be ignored)-.1 F .32(when performing w)184 648 R .32 +(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G .32 +(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 2.948 +(pletions. See)184 660 R F2 .448(SHELL V)2.948 F(ARIABLES)-1.215 E F0 +(abo)2.698 E .748 -.15(ve f)-.15 H .448(or a description of).15 F F2 +(FIGNORE)2.947 E F3(.)A F0 .447(This option is)4.947 F(enabled by def) +184 672 Q(ault.)-.1 E F1(globstar)144 684 Q F0 .178(If set, the pattern) +5 F F1(**)2.678 E F0 .178(used in a pathname e)2.678 F .178 +(xpansion conte)-.15 F .179(xt will match a \214les and zero or)-.15 F +1.298(more directories and subdirectories.)184 696 R 1.298 +(If the pattern is follo)6.298 F 1.298(wed by a)-.25 F F1(/)3.797 E F0 +3.797(,o)C 1.297(nly directories)-3.797 F(and subdirectories match.)184 +708 Q(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(64)185.955 E 0 Cg +EP +%%Page: 65 65 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(gnu_errfmt)144 84 Q F0(If set, shell error\ + messages are written in the standard GNU error message format.)184 96 Q +F1(histappend)144 108 Q F0 .676 +(If set, the history list is appended to the \214le named by the v)184 +120 R .676(alue of the)-.25 F/F2 9/Times-Bold@0 SF(HISTFILE)3.177 E F0 +-.25(va)2.927 G(ri-).25 E(able when the shell e)184 132 Q +(xits, rather than o)-.15 E -.15(ve)-.15 G(rwriting the \214le.).15 E F1 +(histr)144 144 Q(eedit)-.18 E F0 .576(If set, and)184 156 R F1 -.18(re) +3.076 G(adline).18 E F0 .575(is being used, a user is gi)3.076 F -.15 +(ve)-.25 G 3.075(nt).15 G .575(he opportunity to re-edit a f)-3.075 F +.575(ailed his-)-.1 F(tory substitution.)184 168 Q F1(histv)144 180 Q +(erify)-.1 E F0 .402(If set, and)184 192 R F1 -.18(re)2.903 G(adline).18 +E F0 .403 +(is being used, the results of history substitution are not immediately) +2.903 F .662(passed to the shell parser)184 204 R 5.662(.I)-.55 G .661 +(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161 +G(adline).18 E F0(editing)3.161 E -.2(bu)184 216 S -.25(ff).2 G(er).25 E +2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1 +(hostcomplete)144 228 Q F0 1.181(If set, and)184 240 R F1 -.18(re)3.681 +G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 1.182 +(will attempt to perform hostname completion)3.682 F 1.381(when a w)184 +252 R 1.381(ord containing a)-.1 F F1(@)3.881 E F0 1.381 +(is being completed \(see)3.881 F F1(Completing)3.88 E F0(under)3.88 E +F2(READLINE)3.88 E F0(abo)184 264 Q -.15(ve)-.15 G 2.5(\). This).15 F +(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 276 Q F0(If set,) +184 288 Q F1(bash)2.5 E F0(will send)2.5 E F2(SIGHUP)2.5 E F0 +(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e) +.15 E(xits.)-.15 E F1(interacti)144 300 Q -.1(ve)-.1 G(_comments).1 E F0 +.33(If set, allo)184 312 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33 +(ginning with)-.15 F F1(#)2.83 E F0 .33(to cause that w)2.83 F .33 +(ord and all remaining characters on)-.1 F .967 +(that line to be ignored in an interacti)184 324 R 1.267 -.15(ve s)-.25 +H .967(hell \(see).15 F F2(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve)-.15 +G 3.467(\). This).15 F .967(option is)3.467 F(enabled by def)184 336 Q +(ault.)-.1 E F1(lithist)144 348 Q F0 .654(If set, and the)15.55 F F1 +(cmdhist)3.154 E F0 .654(option is enabled, multi-line commands are sa) +3.154 F -.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history) +-3.155 F(with embedded ne)184 360 Q +(wlines rather than using semicolon separators where possible.)-.25 E F1 +(login_shell)144 372 Q F0 .486 +(The shell sets this option if it is started as a login shell \(see)184 +384 R F2(INV)2.986 E(OCA)-.405 E(TION)-.855 E F0(abo)2.736 E -.15(ve) +-.15 G 2.986(\). The).15 F -.25(va)184 396 S(lue may not be changed.).25 +E F1(mailwar)144 408 Q(n)-.15 E F0 .814(If set, and a \214le that)184 +420 R F1(bash)3.314 E F0 .815 +(is checking for mail has been accessed since the last time it)3.314 F +-.1(wa)184 432 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E +(`The mail in)-.74 E/F3 10/Times-Italic@0 SF(mail\214le)2.5 E F0 +(has been read')2.5 E 2.5('i)-.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1 +(no_empty_cmd_completion)144 444 Q F0 .325(If set, and)184 456 R F1 -.18 +(re)2.825 G(adline).18 E F0 .325(is being used,)2.825 F F1(bash)2.824 E +F0 .324(will not attempt to search the)2.824 F F2 -.666(PA)2.824 G(TH) +-.189 E F0 .324(for possible)2.574 F +(completions when completion is attempted on an empty line.)184 468 Q F1 +(nocaseglob)144 480 Q F0 .436(If set,)184 492 R F1(bash)2.936 E F0 .436 +(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f)-.25 +H .437(ashion when performing pathname).05 F -.15(ex)184 504 S +(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E +-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 516 Q F0 1.194(If set,)184 +528 R F1(bash)3.694 E F0 1.194(matches patterns in a case\255insensiti) +3.694 F 1.493 -.15(ve f)-.25 H 1.193(ashion when performing matching).05 +F(while e)184 540 Q -.15(xe)-.15 G(cuting).15 E F1(case)2.5 E F0(or)2.5 +E F1([[)2.5 E F0(conditional commands.)2.5 E F1(nullglob)144 552 Q F0 +.854(If set,)184 564 R F1(bash)3.354 E F0(allo)3.354 E .855 +(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)3.355 G .855 +(thname Expansion).1 F F0(abo)3.355 E -.15(ve)-.15 G 3.355(\)t).15 G(o) +-3.355 E -.15(ex)184 576 S(pand to a null string, rather than themselv) +.15 E(es.)-.15 E F1(pr)144 588 Q(ogcomp)-.18 E F0 .677 +(If set, the programmable completion f)184 600 R .677(acilities \(see) +-.1 F F1(Pr)3.176 E .676(ogrammable Completion)-.18 F F0(abo)3.176 E +-.15(ve)-.15 G(\)).15 E(are enabled.)184 612 Q +(This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 624 Q(omptv) +-.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)184 636 R 1.448 +(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic) +-.15 F -.15(ex)184 648 S .171(pansion, and quote remo).15 F -.25(va)-.15 +G 2.67(la).25 G .17(fter being e)-2.67 F .17(xpanded as described in) +-.15 F F2(PR)2.67 E(OMPTING)-.27 E F0(abo)2.42 E -.15(ve)-.15 G(.).15 E +(This option is enabled by def)184 660 Q(ault.)-.1 E F1 -.18(re)144 672 +S(stricted_shell).18 E F0 1.069 +(The shell sets this option if it is started in restricted mode \(see) +184 684 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 696 Q 4.178 +(w\). The)-.25 F -.25(va)4.178 G 1.678(lue may not be changed.).25 F +1.678(This is not reset when the startup \214les are)6.678 F -.15(exe) +184 708 S(cuted, allo).15 E(wing the startup \214les to disco)-.25 E +-.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(65)185.955 E 0 Cg EP +%%Page: 66 66 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(shift_v)144 84 Q(erbose)-.1 E F0 .501 +(If set, the)184 96 R F1(shift)3.001 E F0 -.2(bu)3.001 G .501 +(iltin prints an error message when the shift count e).2 F .502 +(xceeds the number)-.15 F(of positional parameters.)184 108 Q F1(sour) +144 120 Q(cepath)-.18 E F0 .771(If set, the)184 132 R F1(sour)3.271 E +(ce)-.18 E F0(\()3.271 E F1(.)A F0 3.271(\)b)C .771(uiltin uses the v) +-3.471 F .771(alue of)-.25 F/F2 9/Times-Bold@0 SF -.666(PA)3.27 G(TH) +-.189 E F0 .77(to \214nd the directory containing the)3.02 F +(\214le supplied as an ar)184 144 Q 2.5(gument. This)-.18 F +(option is enabled by def)2.5 E(ault.)-.1 E F1(xpg_echo)144 156 Q F0 +(If set, the)184 168 Q F1(echo)2.5 E F0 -.2(bu)2.5 G(iltin e).2 E +(xpands backslash-escape sequences by def)-.15 E(ault.)-.1 E F1(suspend) +108 180 Q F0([)2.5 E F1A F0(])A 1.001(Suspend the e)144 192 R -.15 +(xe)-.15 G 1.001(cution of this shell until it recei).15 F -.15(ve)-.25 +G 3.501(sa).15 G F2(SIGCONT)A F0 3.502(signal. A)3.252 F 1.002 +(login shell cannot be)3.502 F .023(suspended; the)144 204 R F1 +2.523 E F0 .023(option can be used to o)2.523 F -.15(ve)-.15 G .022 +(rride this and force the suspension.).15 F .022(The return status is) +5.022 F 2.5(0u)144 216 S(nless the shell is a login shell and)-2.5 E F1 +2.5 E F0(is not supplied, or if job control is not enabled.)2.5 E +F1(test)108 228 Q/F3 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([)108 +240 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 1.15 +(Return a status of 0 or 1 depending on the e)6.77 F -.25(va)-.25 G 1.15 +(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)3.65 G +(pr).2 E F0 6.15(.E).73 G(ach)-6.15 E 1.188 +(operator and operand must be a separate ar)144 252 R 3.688 +(gument. Expressions)-.18 F 1.187(are composed of the primaries)3.688 F +1.889(described abo)144 264 R 2.189 -.15(ve u)-.15 H(nder).15 E F2 +(CONDITION)4.389 E 1.889(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A +F1(test)6.389 E F0 1.89(does not accept an)4.389 F 4.39(yo)-.15 G 1.89 +(ptions, nor)-4.39 F(does it accept and ignore an ar)144 276 Q +(gument of)-.18 E F12.5 E F0(as signifying the end of options.)2.5 +E .786(Expressions may be combined using the follo)144 294 R .785 +(wing operators, listed in decreasing order of prece-)-.25 F 2.5 +(dence. The)144 306 R -.25(eva)2.5 G +(luation depends on the number of ar).25 E(guments; see belo)-.18 E -.65 +(w.)-.25 G F1(!)144 318 Q F3 -.2(ex)2.5 G(pr).2 E F0 -.35(Tr)12.6 G +(ue if).35 E F3 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.)-.1 E F1(\() +144 330 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26(Returns the v)6.77 +F .26(alue of)-.25 F F3 -.2(ex)2.76 G(pr).2 E F0 5.26(.T)C .26 +(his may be used to o)-5.26 F -.15(ve)-.15 G .26 +(rride the normal precedence of opera-).15 F(tors.)180 342 Q F3 -.2(ex) +144 354 S(pr1).2 E F02.5 E F1(a)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35 +(Tr)180 366 S(ue if both).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F3 +-.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F3 -.2(ex)144 378 S(pr1).2 E +F02.5 E F1(o)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 390 S +(ue if either).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F3 -.2(ex)2.5 G +(pr2).2 E F0(is true.)2.52 E F1(test)144 406.8 Q F0(and)2.5 E F1([)2.5 E +F0 -.25(eva)2.5 G(luate conditional e).25 E +(xpressions using a set of rules based on the number of ar)-.15 E +(guments.)-.18 E 2.5(0a)144 424.8 S -.18(rg)-2.5 G(uments).18 E(The e) +180 436.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 448.8 S -.18 +(rg)-2.5 G(ument).18 E(The e)180 460.8 Q +(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18 +E 2.5(2a)144 472.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar) +180 484.8 R .37(gument is)-.18 F F1(!)2.87 E F0 2.87(,t)C .37(he e)-2.87 +F .37(xpression is true if and only if the second ar)-.15 F .37 +(gument is null.)-.18 F .379(If the \214rst ar)180 496.8 R .38 +(gument is one of the unary conditional operators listed abo)-.18 F .68 +-.15(ve u)-.15 H(nder).15 E F2(CONDI-)2.88 E(TION)180 508.8 Q .553 +(AL EXPRESSIONS)-.18 F F4(,)A F0 .552(the e)2.802 F .552 +(xpression is true if the unary test is true.)-.15 F .552 +(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 520.8 Q +(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E +(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 532.8 S -.18(rg)-2.5 G +(uments).18 E .023(If the second ar)180 544.8 R .023 +(gument is one of the binary conditional operators listed abo)-.18 F +.324 -.15(ve u)-.15 H(nder).15 E F2(CON-)2.524 E(DITION)180 556.8 Q +1.478(AL EXPRESSIONS)-.18 F F4(,)A F0 1.477(the result of the e)3.727 F +1.477(xpression is the result of the binary test)-.15 F .513 +(using the \214rst and third ar)180 568.8 R .513(guments as operands.) +-.18 F(The)5.513 E F13.013 E F0(and)3.013 E F13.013 E F0 +.513(operators are considered)3.013 F .972 +(binary operators when there are three ar)180 580.8 R 3.472(guments. If) +-.18 F .972(the \214rst ar)3.472 F .972(gument is)-.18 F F1(!)3.472 E F0 +3.472(,t)C .972(he v)-3.472 F .972(alue is)-.25 F .883(the ne)180 592.8 +R -.05(ga)-.15 G .883(tion of the tw).05 F(o-ar)-.1 E .884 +(gument test using the second and third ar)-.18 F 3.384(guments. If)-.18 +F .884(the \214rst)3.384 F(ar)180 604.8 Q .875(gument is e)-.18 F +(xactly)-.15 E F1(\()3.375 E F0 .875(and the third ar)3.375 F .875 +(gument is e)-.18 F(xactly)-.15 E F1(\))3.375 E F0 3.374(,t)C .874 +(he result is the one-ar)-3.374 F(gument)-.18 E(test of the second ar) +180 616.8 Q 2.5(gument. Otherwise,)-.18 F(the e)2.5 E(xpression is f) +-.15 E(alse.)-.1 E 2.5(4a)144 628.8 S -.18(rg)-2.5 G(uments).18 E .384 +(If the \214rst ar)180 640.8 R .384(gument is)-.18 F F1(!)2.884 E F0 +2.885(,t)C .385(he result is the ne)-2.885 F -.05(ga)-.15 G .385 +(tion of the three-ar).05 F .385(gument e)-.18 F .385(xpression com-) +-.15 F 1.648(posed of the remaining ar)180 652.8 R 4.147 +(guments. Otherwise,)-.18 F 1.647(the e)4.147 F 1.647 +(xpression is parsed and e)-.15 F -.25(va)-.25 G(luated).25 E +(according to precedence using the rules listed abo)180 664.8 Q -.15(ve) +-.15 G(.).15 E 2.5(5o)144 676.8 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments) +-.18 E 1.635(The e)180 688.8 R 1.635(xpression is parsed and e)-.15 F +-.25(va)-.25 G 1.635 +(luated according to precedence using the rules listed).25 F(abo)180 +700.8 Q -.15(ve)-.15 G(.).15 E F1(times)108 717.6 Q F0 1.229(Print the \ +accumulated user and system times for the shell and for processes run f\ +rom the shell.)13.23 F(The return status is 0.)144 729.6 Q(GNU Bash-4.1) +72 768 Q(2009 December 29)135.965 E(66)185.955 E 0 Cg EP +%%Page: 67 67 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF(trap)108 84 Q F0([)2.5 E F1(\255lp)A F0 2.5 +(][)C([)-2.5 E/F2 10/Times-Italic@0 SF(ar)A(g)-.37 E F0(])A F2(sigspec) +2.5 E F0(...])2.5 E .702(The command)144 96 R F2(ar)3.532 E(g)-.37 E F0 +.702(is to be read and e)3.422 F -.15(xe)-.15 G .702 +(cuted when the shell recei).15 F -.15(ve)-.25 G 3.203(ss).15 G +(ignal\(s\))-3.203 E F2(sigspec)3.203 E F0 5.703(.I).31 G(f)-5.703 E F2 +(ar)3.533 E(g)-.37 E F0(is)3.423 E .609(absent \(and there is a single) +144 108 R F2(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F13.108 E F0 +3.108(,e)C .608 +(ach speci\214ed signal is reset to its original disposition)-3.108 F +.658(\(the v)144 120 R .658(alue it had upon entrance to the shell\).) +-.25 F(If)5.658 E F2(ar)3.488 E(g)-.37 E F0 .659 +(is the null string the signal speci\214ed by each)3.378 F F2(sigspec) +144.34 132 Q F0 .581(is ignored by the shell and by the commands it in) +3.391 F -.2(vo)-.4 G -.1(ke).2 G 3.08(s. If).1 F F2(ar)3.41 E(g)-.37 E +F0 .58(is not present and)3.3 F F13.08 E F0(has)3.08 E 1.214 +(been supplied, then the trap commands associated with each)144 144 R F2 +(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215 F +(gu-)-.18 E .86(ments are supplied or if only)144 156 R F13.36 E +F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86 +(prints the list of commands associated with each)3.36 F 2.83 +(signal. The)144 168 R F12.83 E F0 .33(option causes the shell to\ + print a list of signal names and their corresponding num-)2.83 F 4.311 +(bers. Each)144 180 R F2(sigspec)4.651 E F0 1.811 +(is either a signal name de\214ned in <)4.621 F F2(signal.h)A F0 1.81 +(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E +(names are case insensiti)144 192 Q .3 -.15(ve a)-.25 H +(nd the SIG pre\214x is optional.).15 E 1.648(If a)144 210 R F2(sigspec) +4.488 E F0(is)4.458 E/F3 9/Times-Bold@0 SF(EXIT)4.148 E F0 1.648 +(\(0\) the command)3.898 F F2(ar)4.479 E(g)-.37 E F0 1.649(is e)4.369 F +-.15(xe)-.15 G 1.649(cuted on e).15 F 1.649(xit from the shell.)-.15 F +1.649(If a)6.649 F F2(sigspec)4.489 E F0(is)4.459 E F3(DEB)144 222 Q(UG) +-.09 E/F4 9/Times-Roman@0 SF(,)A F0 1.168(the command)3.418 F F2(ar) +3.998 E(g)-.37 E F0 1.168(is e)3.888 F -.15(xe)-.15 G 1.167 +(cuted before e).15 F -.15(ve)-.25 G(ry).15 E F2 1.167(simple command) +3.667 F F0(,)A F2(for)3.667 E F0(command,)3.667 E F2(case)3.667 E F0 +(com-)3.667 E(mand,)144 234 Q F2(select)2.646 E F0 .146(command, e)2.646 +F -.15(ve)-.25 G .146(ry arithmetic).15 F F2(for)2.646 E F0 .147 +(command, and before the \214rst command e)2.646 F -.15(xe)-.15 G .147 +(cutes in a).15 F .146(shell function \(see)144 246 R F3 .146 +(SHELL GRAMMAR)2.646 F F0(abo)2.396 E -.15(ve)-.15 G 2.646(\). Refer).15 +F .146(to the description of the)2.646 F F1(extdeb)2.645 E(ug)-.2 E F0 +.145(option to)2.645 F(the)144 258 Q F1(shopt)3.2 E F0 -.2(bu)3.2 G .7 +(iltin for details of its ef).2 F .7(fect on the)-.25 F F1(DEB)3.2 E(UG) +-.1 E F0 3.2(trap. If)3.2 F(a)3.2 E F2(sigspec)3.54 E F0(is)3.51 E F3 +(RETURN)3.2 E F4(,)A F0 .701(the com-)2.951 F(mand)144 270 Q F2(ar)3.474 +E(g)-.37 E F0 .644(is e)3.364 F -.15(xe)-.15 G .643 +(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G +.643(cuted with the).15 F F1(.)3.143 E F0(or)3.143 E F1(sour)3.143 E(ce) +-.18 E F0 -.2(bu)3.143 G(iltins).2 E(\214nishes e)144 282 Q -.15(xe)-.15 +G(cuting.).15 E .928(If a)144 300 R F2(sigspec)3.768 E F0(is)3.738 E F3 +(ERR)3.429 E F4(,)A F0 .929(the command)3.179 F F2(ar)3.759 E(g)-.37 E +F0 .929(is e)3.649 F -.15(xe)-.15 G .929(cuted whene).15 F -.15(ve)-.25 +G 3.429(ras).15 G .929(imple command has a non\255zero)-3.429 F -.15(ex) +144 312 S 1.009(it status, subject to the follo).15 F 1.009 +(wing conditions.)-.25 F(The)6.009 E F3(ERR)3.509 E F0 1.009 +(trap is not e)3.259 F -.15(xe)-.15 G 1.008(cuted if the f).15 F 1.008 +(ailed com-)-.1 F .324 +(mand is part of the command list immediately follo)144 324 R .324 +(wing a)-.25 F F1(while)2.824 E F0(or)2.824 E F1(until)2.824 E F0 -.1 +(ke)2.824 G(yw)-.05 E .324(ord, part of the test)-.1 F 1.129(in an)144 +336 R F2(if)3.639 E F0 1.129(statement, part of a command e)5.589 F -.15 +(xe)-.15 G 1.129(cuted in a).15 F F1(&&)3.629 E F0(or)3.629 E/F5 10 +/Symbol SF3.629 E F0 1.129(list, or if the command')3.629 F 3.628 +(sr)-.55 G(eturn)-3.628 E -.25(va)144 348 S(lue is being in).25 E -.15 +(ve)-.4 G(rted via).15 E F1(!)2.5 E F0 5(.T)C +(hese are the same conditions obe)-5 E(yed by the)-.15 E F1(err)2.5 E +(exit)-.18 E F0(option.)2.5 E 1.095 +(Signals ignored upon entry to the shell cannot be trapped or reset.)144 +366 R -.35(Tr)6.095 G 1.095(apped signals that are not).35 F .662 +(being ignored are reset to their original v)144 378 R .662 +(alues in a subshell or subshell en)-.25 F .661(vironment when one is) +-.4 F 2.5(created. The)144 390 R(return status is f)2.5 E(alse if an)-.1 +E(y)-.15 E F2(sigspec)2.84 E F0(is in)2.81 E -.25(va)-.4 G +(lid; otherwise).25 E F1(trap)2.5 E F0(returns true.)2.5 E F1(type)108 +406.8 Q F0([)2.5 E F1(\255aftpP)A F0(])A F2(name)2.5 E F0([)2.5 E F2 +(name)A F0(...])2.5 E -.4(Wi)144 418.8 S .173 +(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 E F2(name) +3.033 E F0 -.1(wo)2.853 G .174 +(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F +F1144 430.8 Q F0 .843(option is used,)3.343 F F1(type)3.343 E F0 +.843(prints a string which is one of)3.343 F F2(alias)3.343 E F0(,).27 E +F2 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)3.343 E F0 +(,).24 E F2 -.2(bu)3.342 G(iltin).2 E F0 3.342(,o).24 G(r)-3.342 E F2 +(\214le)5.252 E F0(if)3.522 E F2(name)144.36 442.8 Q F0 .086 +(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086 +(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15 +(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F2 +(name)2.947 E F0 .087(is not)2.767 F .119 +(found, then nothing is printed, and an e)144 454.8 R .118 +(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F +F12.618 E F0 .118(option is used,)2.618 F F1(type)2.618 E F0 .855 +(either returns the name of the disk \214le that w)144 466.8 R .855 +(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F2(name)3.715 E F0 +.855(were speci\214ed as a com-)3.535 F .641(mand name, or nothing if) +144 478.8 R/F6 10/Courier@0 SF .641(type -t name)3.141 F F0 -.1(wo)3.141 +G .641(uld not return).1 F F2(\214le)3.14 E F0 5.64(.T).18 G(he)-5.64 E +F13.14 E F0 .64(option forces a)3.14 F F3 -.666(PA)3.14 G(TH)-.189 +E F0 .112(search for each)144 490.8 R F2(name)2.612 E F0 2.612(,e)C -.15 +(ve)-2.862 G 2.613(ni).15 G(f)-2.613 E F6 .113(type -t name)2.613 F F0 +-.1(wo)2.613 G .113(uld not return).1 F F2(\214le)2.613 E F0 5.113(.I) +.18 G 2.613(fac)-5.113 G .113(ommand is hashed,)-2.613 F F12.613 E +F0(and)144 502.8 Q F12.945 E F0 .445(print the hashed v)2.945 F +.444(alue, not necessarily the \214le that appears \214rst in)-.25 F F3 +-.666(PA)2.944 G(TH)-.189 E F4(.)A F0 .444(If the)4.944 F F12.944 +E F0(option)2.944 E .265(is used,)144 514.8 R F1(type)2.765 E F0 .265 +(prints all of the places that contain an e)2.765 F -.15(xe)-.15 G .265 +(cutable named).15 F F2(name)2.765 E F0 5.265(.T).18 G .265 +(his includes aliases)-5.265 F .427(and functions, if and only if the) +144 526.8 R F12.926 E F0 .426(option is not also used.)2.926 F +.426(The table of hashed commands is not)5.426 F .548 +(consulted when using)144 538.8 R F13.048 E F0 5.548(.T)C(he) +-5.548 E F13.048 E F0 .549 +(option suppresses shell function lookup, as with the)3.048 F F1 +(command)3.049 E F0 -.2(bu)144 550.8 S(iltin.).2 E F1(type)5 E F0 +(returns true if all of the ar)2.5 E(guments are found, f)-.18 E +(alse if an)-.1 E 2.5(ya)-.15 G(re not found.)-2.5 E F1(ulimit)108 567.6 +Q F0([)2.5 E F1(\255HST)A(abcde\214lmnpqrstuvx)-.92 E F0([)2.5 E F2 +(limit)A F0(]])A(Pro)144 579.6 Q .244(vides control o)-.15 F -.15(ve) +-.15 G 2.744(rt).15 G .244(he resources a)-2.744 F -.25(va)-.2 G .244 +(ilable to the shell and to processes started by it, on systems).25 F +.943(that allo)144 591.6 R 3.443(ws)-.25 G .943(uch control.)-3.443 F +(The)5.943 E F13.443 E F0(and)3.443 E F13.444 E F0 .944 +(options specify that the hard or soft limit is set for the)3.444 F(gi) +144 603.6 Q -.15(ve)-.25 G 2.709(nr).15 G 2.709(esource. A)-2.709 F .208 +(hard limit cannot be increased by a non-root user once it is set; a so\ +ft limit may)2.709 F .425(be increased up to the v)144 615.6 R .425 +(alue of the hard limit.)-.25 F .426(If neither)5.425 F F12.926 E +F0(nor)2.926 E F12.926 E F0 .426 +(is speci\214ed, both the soft and)2.926 F .139(hard limits are set.)144 +627.6 R .139(The v)5.139 F .139(alue of)-.25 F F2(limit)2.729 E F0 .139 +(can be a number in the unit speci\214ed for the resource or one)3.319 F +.741(of the special v)144 639.6 R(alues)-.25 E F1(hard)3.241 E F0(,)A F1 +(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F1(unlimited)3.241 E F0 3.241(,w) +C .741(hich stand for the current hard limit, the current)-3.241 F .78 +(soft limit, and no limit, respecti)144 651.6 R -.15(ve)-.25 G(ly).15 E +5.78(.I)-.65 G(f)-5.78 E F2(limit)3.37 E F0 .78 +(is omitted, the current v)3.96 F .78(alue of the soft limit of the)-.25 +F .498(resource is printed, unless the)144 663.6 R F12.999 E F0 +.499(option is gi)2.999 F -.15(ve)-.25 G 2.999(n. When).15 F .499 +(more than one resource is speci\214ed, the)2.999 F +(limit name and unit are printed before the v)144 675.6 Q 2.5 +(alue. Other)-.25 F(options are interpreted as follo)2.5 E(ws:)-.25 E F1 +144 687.6 Q F0(All current limits are reported)25.3 E F1144 +699.6 Q F0(The maximum sock)24.74 E(et b)-.1 E(uf)-.2 E(fer size)-.25 E +F1144 711.6 Q F0(The maximum size of core \214les created)25.86 E +(GNU Bash-4.1)72 768 Q(2009 December 29)135.965 E(67)185.955 E 0 Cg EP +%%Page: 68 68 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Times-Bold@0 SF144 84 Q F0 +(The maximum size of a process')24.74 E 2.5(sd)-.55 G(ata se)-2.5 E +(gment)-.15 E F1144 96 Q F0 +(The maximum scheduling priority \("nice"\))25.86 E F1144 108 Q F0 +(The maximum size of \214les written by the shell and its children)26.97 +E F1144 120 Q F0(The maximum number of pending signals)27.52 E F1 +144 132 Q F0(The maximum size that may be lock)27.52 E +(ed into memory)-.1 E F1144 144 Q F0 +(The maximum resident set size \(man)21.97 E 2.5(ys)-.15 G +(ystems do not honor this limit\))-2.5 E F1144 156 Q F0 .791(The \ +maximum number of open \214le descriptors \(most systems do not allo) +24.74 F 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F(be set\))180 +168 Q F1144 180 Q F0 +(The pipe size in 512-byte blocks \(this may not be set\))24.74 E F1 +144 192 Q F0(The maximum number of bytes in POSIX message queues) +24.74 E F1144 204 Q F0(The maximum real-time scheduling priority) +25.86 E F1144 216 Q F0(The maximum stack size)26.41 E F1144 +228 Q F0(The maximum amount of cpu time in seconds)26.97 E F1144 +240 Q F0(The maximum number of processes a)24.74 E -.25(va)-.2 G +(ilable to a single user).25 E F1144 252 Q F0 +(The maximum amount of virtual memory a)25.3 E -.25(va)-.2 G +(ilable to the shell).25 E F1144 264 Q F0 +(The maximum number of \214le locks)25.3 E F1144 276 Q F0 +(The maximum number of threads)23.63 E(If)144 292.8 Q/F2 10 +/Times-Italic@0 SF(limit)2.933 E F0 .343(is gi)3.523 F -.15(ve)-.25 G +.343(n, it is the ne).15 F 2.843(wv)-.25 G .343 +(alue of the speci\214ed resource \(the)-3.093 F F12.843 E F0 .343 +(option is display only\).)2.843 F .343(If no)5.343 F .176(option is gi) +144 304.8 R -.15(ve)-.25 G .176(n, then).15 F F12.676 E F0 .175 +(is assumed.)2.676 F -1.11(Va)5.175 G .175 +(lues are in 1024-byte increments, e)1.11 F .175(xcept for)-.15 F F1 +2.675 E F0 2.675(,w)C .175(hich is in)-2.675 F(seconds,)144 316.8 +Q F12.515 E F0 2.515(,w)C .015 +(hich is in units of 512-byte blocks, and)-2.515 F F12.516 E F0(,) +A F12.516 E F0(,)A F12.516 E F0 2.516(,a)C(nd)-2.516 E F1 +2.516 E F0 2.516(,w)C .016(hich are unscaled v)-2.516 F(al-)-.25 E +3.788(ues. The)144 328.8 R 1.287(return status is 0 unless an in)3.787 F +-.25(va)-.4 G 1.287(lid option or ar).25 F 1.287 +(gument is supplied, or an error occurs)-.18 F(while setting a ne)144 +340.8 Q 2.5(wl)-.25 G(imit.)-2.5 E F1(umask)108 357.6 Q F0([)2.5 E F1 +A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(mode)-2.5 E F0(])A .2 +(The user \214le-creation mask is set to)144 369.6 R F2(mode)2.7 E F0 +5.2(.I).18 G(f)-5.2 E F2(mode)3.08 E F0(be)2.88 E .2 +(gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\ +therwise it is interpreted as a symbolic mode mask similar to that acce\ +pted by)144 381.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144 +393.6 Q F2(mode)3.262 E F0 .382(is omitted, the current v)3.062 F .382 +(alue of the mask is printed.)-.25 F(The)5.382 E F12.882 E F0 .382 +(option causes the mask to be)2.882 F .547 +(printed in symbolic form; the def)144 405.6 R .547 +(ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G +(he)-3.047 E F13.047 E F0 .547(option is supplied, and)3.047 F F2 +(mode)144.38 417.6 Q F0 .551 +(is omitted, the output is in a form that may be reused as input.)3.231 +F .552(The return status is 0 if the)5.552 F(mode w)144 429.6 Q +(as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E +(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F1 +(unalias)108 446.4 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C F2(name)-2.5 E F0 +(...])2.5 E(Remo)144 458.4 Q 1.955 -.15(ve e)-.15 H(ach).15 E F2(name) +4.155 E F0 1.655(from the list of de\214ned aliases.)4.155 F(If)6.655 E +F14.155 E F0 1.655(is supplied, all alias de\214nitions are)4.155 +F(remo)144 470.4 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E +(alue is true unless a supplied)-.25 E F2(name)2.86 E F0 +(is not a de\214ned alias.)2.68 E F1(unset)108 487.2 Q F0<5bad>2.5 E F1 +(fv)A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E -.15(Fo)144 499.2 S 3.106 +(re).15 G(ach)-3.106 E F2(name)3.106 E F0 3.106(,r).18 G(emo)-3.106 E +.906 -.15(ve t)-.15 H .606(he corresponding v).15 F .607 +(ariable or function.)-.25 F .607(If no options are supplied, or the) +5.607 F F1144 511.2 Q F0 .305(option is gi)2.805 F -.15(ve)-.25 G +.305(n, each).15 F F2(name)3.165 E F0 .305(refers to a shell v)2.985 F +2.805(ariable. Read-only)-.25 F -.25(va)2.805 G .304 +(riables may not be unset.).25 F(If)5.304 E F1144 523.2 Q F0 .459 +(is speci\214ed, each)2.959 F F2(name)3.319 E F0 .459 +(refers to a shell function, and the function de\214nition is remo)3.139 +F -.15(ve)-.15 G 2.96(d. Each).15 F .903(unset v)144 535.2 R .903 +(ariable or function is remo)-.25 F -.15(ve)-.15 G 3.402(df).15 G .902 +(rom the en)-3.402 F .902(vironment passed to subsequent commands.)-.4 F +(If)5.902 E(an)144 547.2 Q 6.915(yo)-.15 G(f)-6.915 E/F3 9/Times-Bold@0 +SF(COMP_W)6.915 E(ORDBREAKS)-.09 E/F4 9/Times-Roman@0 SF(,)A F3(RANDOM) +6.665 E F4(,)A F3(SECONDS)6.665 E F4(,)A F3(LINENO)6.665 E F4(,)A F3 +(HISTCMD)6.666 E F4(,)A F3(FUNCN)6.666 E(AME)-.18 E F4(,)A F3(GR)144 +559.2 Q(OUPS)-.27 E F4(,)A F0(or)2.523 E F3(DIRST)2.773 E -.495(AC)-.81 +G(K).495 E F0 .272(are unset, the)2.522 F 2.772(yl)-.15 G .272 +(ose their special properties, e)-2.772 F -.15(ve)-.25 G 2.772(ni).15 G +2.772(ft)-2.772 G(he)-2.772 E 2.772(ya)-.15 G .272(re subsequently) +-2.772 F 2.5(reset. The)144 571.2 R -.15(ex)2.5 G +(it status is true unless a).15 E F2(name)2.86 E F0(is readonly)2.68 E +(.)-.65 E F1(wait)108 588 Q F0([)2.5 E F2 2.5(n.)C(..)-2.5 E F0(])A -.8 +(Wa)144 600 S .288 +(it for each speci\214ed process and return its termination status.).8 F +(Each)5.288 E F2(n)3.148 E F0 .288(may be a process ID or a)3.028 F .722 +(job speci\214cation; if a job spec is gi)144 612 R -.15(ve)-.25 G .722 +(n, all processes in that job').15 F 3.222(sp)-.55 G .722(ipeline are w) +-3.222 F .722(aited for)-.1 F 5.722(.I)-.55 G(f)-5.722 E F2(n)3.582 E F0 +(is)3.462 E 1.265(not gi)144 624 R -.15(ve)-.25 G 1.265 +(n, all currently acti).15 F 1.565 -.15(ve c)-.25 H 1.265 +(hild processes are w).15 F 1.265(aited for)-.1 F 3.765(,a)-.4 G 1.266 +(nd the return status is zero.)-3.765 F(If)6.266 E F2(n)4.126 E F0 .457 +(speci\214es a non-e)144 636 R .457 +(xistent process or job, the return status is 127.)-.15 F .457 +(Otherwise, the return status is the)5.457 F -.15(ex)144 648 S +(it status of the last process or job w).15 E(aited for)-.1 E(.)-.55 E +/F5 10.95/Times-Bold@0 SF(RESTRICTED SHELL)72 664.8 Q F0(If)108 676.8 Q +F1(bash)4.396 E F0 1.896(is started with the name)4.396 F F1(rbash)4.397 +E F0 4.397(,o)C 4.397(rt)-4.397 G(he)-4.397 E F14.397 E F0 1.897 +(option is supplied at in)4.397 F -.2(vo)-.4 G 1.897 +(cation, the shell becomes).2 F 3.446(restricted. A)108 688.8 R .945 +(restricted shell is used to set up an en)3.446 F .945 +(vironment more controlled than the standard shell.)-.4 F(It)5.945 E +(beha)108 700.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F1 +(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E +(wing are disallo)-.25 E(wed or not performed:)-.25 E 32.5<8363>108 +717.6 S(hanging directories with)-32.5 E F1(cd)2.5 E F0(GNU Bash-4.1)72 +768 Q(2009 December 29)135.965 E(68)185.955 E 0 Cg EP +%%Page: 69 69 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E 32.5<8373>108 84 S(etting or unsetting the v)-32.5 E(alues of) +-.25 E/F1 9/Times-Bold@0 SF(SHELL)2.5 E/F2 9/Times-Roman@0 SF(,)A F1 +-.666(PA)2.25 G(TH)-.189 E F2(,)A F1(ENV)2.25 E F2(,)A F0(or)2.25 E F1 +-.27(BA)2.5 G(SH_ENV).27 E F0 32.5<8373>108 100.8 S +(pecifying command names containing)-32.5 E/F3 10/Times-Bold@0 SF(/)2.5 +E F0 32.5<8373>108 117.6 S(pecifying a \214le name containing a)-32.5 E +F3(/)2.5 E F0(as an ar)2.5 E(gument to the)-.18 E F3(.)2.5 E F0 -.2(bu)5 +G(iltin command).2 E 32.5<8353>108 134.4 S .351 +(pecifying a \214lename containing a slash as an ar)-32.5 F .351 +(gument to the)-.18 F F32.851 E F0 .351(option to the)2.851 F F3 +(hash)2.852 E F0 -.2(bu)2.852 G .352(iltin com-).2 F(mand)144 146.4 Q +32.5<8369>108 163.2 S(mporting function de\214nitions from the shell en) +-32.5 E(vironment at startup)-.4 E 32.5<8370>108 180 S(arsing the v) +-32.5 E(alue of)-.25 E F1(SHELLOPTS)2.5 E F0(from the shell en)2.25 E +(vironment at startup)-.4 E 32.5<8372>108 196.8 S(edirecting output usi\ +ng the >, >|, <>, >&, &>, and >> redirection operators)-32.5 E 32.5 +<8375>108 213.6 S(sing the)-32.5 E F3(exec)2.5 E F0 -.2(bu)2.5 G +(iltin command to replace the shell with another command).2 E 32.5<8361> +108 230.4 S(dding or deleting b)-32.5 E(uiltin commands with the)-.2 E +F32.5 E F0(and)2.5 E F32.5 E F0(options to the)2.5 E F3 +(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E 32.5<8355>108 247.2 S +(sing the)-32.5 E F3(enable)2.5 E F0 -.2(bu)2.5 G +(iltin command to enable disabled shell b).2 E(uiltins)-.2 E 32.5<8373> +108 264 S(pecifying the)-32.5 E F32.5 E F0(option to the)2.5 E F3 +(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E 32.5<8374>108 280.8 S +(urning of)-32.5 E 2.5(fr)-.25 G(estricted mode with)-2.5 E F3(set +r) +2.5 E F0(or)2.5 E F3(set +o r)2.5 E(estricted)-.18 E F0(.)A +(These restrictions are enforced after an)108 297.6 Q 2.5(ys)-.15 G +(tartup \214les are read.)-2.5 E 1.566 +(When a command that is found to be a shell script is e)108 314.4 R -.15 +(xe)-.15 G 1.566(cuted \(see).15 F F1 1.566(COMMAND EXECUTION)4.066 F F0 +(abo)3.816 E -.15(ve)-.15 G(\),).15 E F3(rbash)108 326.4 Q F0(turns of) +2.5 E 2.5(fa)-.25 G .3 -.15(ny r)-2.5 H(estrictions in the shell spa).15 +E(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E/F4 10.95 +/Times-Bold@0 SF(SEE ALSO)72 343.2 Q/F5 10/Times-Italic@0 SF(Bash Refer) +108 355.2 Q(ence Manual)-.37 E F0 2.5(,B)C(rian F)-2.5 E +(ox and Chet Rame)-.15 E(y)-.15 E F5(The Gnu Readline Libr)108 367.2 Q +(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E +F5(The Gnu History Libr)108 379.2 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E +(ox and Chet Rame)-.15 E(y)-.15 E F5 -.8(Po)108 391.2 S(rtable Oper).8 E +(ating System Interface \(POSIX\) P)-.15 E(art 2: Shell and Utilities) +-.8 E F0 2.5(,I)C(EEE)-2.5 E F5(sh)108 403.2 Q F0(\(1\),)A F5(ksh)2.5 E +F0(\(1\),)A F5(csh)2.5 E F0(\(1\))A F5(emacs)108 415.2 Q F0(\(1\),)A F5 +(vi)2.5 E F0(\(1\))A F5 -.37(re)108 427.2 S(adline).37 E F0(\(3\))A F4 +(FILES)72 444 Q F5(/bin/bash)109.666 456 Q F0(The)144 468 Q F3(bash)2.5 +E F0 -.15(exe)2.5 G(cutable).15 E F5(/etc/pr)109.666 480 Q(o\214le)-.45 +E F0(The systemwide initialization \214le, e)144 492 Q -.15(xe)-.15 G +(cuted for login shells).15 E F5(~/.bash_pr)109.666 504 Q(o\214le)-.45 E +F0(The personal initialization \214le, e)144 516 Q -.15(xe)-.15 G +(cuted for login shells).15 E F5(~/.bashr)109.666 528 Q(c)-.37 E F0 +(The indi)144 540 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G +(-shell startup \214le).15 E F5(~/.bash_lo)109.666 552 Q(gout)-.1 E F0 +(The indi)144 564 Q(vidual login shell cleanup \214le, e)-.25 E -.15(xe) +-.15 G(cuted when a login shell e).15 E(xits)-.15 E F5(~/.inputr)109.666 +576 Q(c)-.37 E F0(Indi)144 588 Q(vidual)-.25 E F5 -.37(re)2.5 G(adline) +.37 E F0(initialization \214le)2.5 E F4 -.548(AU)72 604.8 S(THORS).548 E +F0(Brian F)108 616.8 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 +E(bfox@gnu.or)108 628.8 Q(g)-.18 E(Chet Rame)108 645.6 Q 1.3 -.65(y, C) +-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve) +-.25 G(rsity).15 E(chet.rame)108 657.6 Q(y@case.edu)-.15 E F4 -.11(BU)72 +674.4 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .567 +(If you \214nd a b)108 686.4 R .568(ug in)-.2 F F3(bash,)3.068 E F0 .568 +(you should report it.)3.068 F .568(But \214rst, you should mak)5.568 F +3.068(es)-.1 G .568(ure that it really is a b)-3.068 F .568(ug, and)-.2 +F 5.626(that it appears in the latest v)108 698.4 R 5.625(ersion of)-.15 +F F3(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.625 +(ersion is al)-.15 F -.1(wa)-.1 G 5.625(ys a).1 F -.25(va)-.2 G 5.625 +(ilable from).25 F F5(ftp://ftp.gnu.or)108 710.4 Q(g/pub/bash/)-.37 E F0 +(.)A .41(Once you ha)108 727.2 R .71 -.15(ve d)-.2 H .41 +(etermined that a b).15 F .41(ug actually e)-.2 F .411(xists, use the) +-.15 F F5(bashb)3.181 E(ug)-.2 E F0 .411(command to submit a b)3.131 F +.411(ug report.)-.2 F(If)5.411 E(GNU Bash-4.1)72 768 Q(2009 December 29) +135.965 E(69)185.955 E 0 Cg EP +%%Page: 70 70 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E .595(you ha)108 84 R .895 -.15(ve a \214)-.2 H .595 +(x, you are encouraged to mail that as well!).15 F .594 +(Suggestions and `philosophical' b)5.595 F .594(ug reports may)-.2 F +(be mailed to)108 96 Q/F1 10/Times-Italic@0 SF -.2(bu)2.5 G +(g-bash@gnu.or).2 E(g)-.37 E F0(or posted to the Usenet ne)2.5 E +(wsgroup)-.25 E/F2 10/Times-Bold@0 SF(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A +(ALL b)108 112.8 Q(ug reports should include:)-.2 E(The v)108 129.6 Q +(ersion number of)-.15 E F2(bash)2.5 E F0(The hardw)108 141.6 Q +(are and operating system)-.1 E(The compiler used to compile)108 153.6 Q +2.5(Ad)108 165.6 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2 E +2.5(As)108 177.6 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15 G +(rcises the b).15 E(ug)-.2 E F1(bashb)108.27 194.4 Q(ug)-.2 E F0 +(inserts the \214rst three items automatically into the template it pro) +2.72 E(vides for \214ling a b)-.15 E(ug report.)-.2 E(Comments and b)108 +211.2 Q(ug reports concerning this manual page should be directed to)-.2 +E F1 -.15(ch)2.5 G(et@po.cwru.edu).15 E F0(.).25 E/F3 10.95/Times-Bold@0 +SF -.11(BU)72 228 S(GS).11 E F0(It')108 240 Q 2.5(st)-.55 G +(oo big and too slo)-2.5 E -.65(w.)-.25 G 1.868 +(There are some subtle dif)108 256.8 R 1.868(ferences between)-.25 F F2 +(bash)4.369 E F0 1.869(and traditional v)4.369 F 1.869(ersions of)-.15 F +F2(sh)4.369 E F0 4.369(,m)C 1.869(ostly because of the)-4.369 F/F4 9 +/Times-Bold@0 SF(POSIX)108 268.8 Q F0(speci\214cation.)2.25 E +(Aliases are confusing in some uses.)108 285.6 Q(Shell b)108 302.4 Q +(uiltin commands and functions are not stoppable/restartable.)-.2 E +1.315(Compound commands and command sequences of the form `a ; b ; c' a\ +re not handled gracefully when)108 319.2 R .389 +(process suspension is attempted.)108 331.2 R .389 +(When a process is stopped, the shell immediately e)5.389 F -.15(xe)-.15 +G .39(cutes the ne).15 F .39(xt com-)-.15 F .193(mand in the sequence.) +108 343.2 R .192(It suf)5.193 F .192(\214ces to place the sequence of c\ +ommands between parentheses to force it into a)-.25 F +(subshell, which may be stopped as a unit.)108 355.2 Q(Array v)108 372 Q +(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E +(There may be only one acti)108 388.8 Q .3 -.15(ve c)-.25 H +(oprocess at a time.).15 E(GNU Bash-4.1)72 768 Q(2009 December 29) +135.965 E(70)185.955 E 0 Cg EP +%%Trailer +end +%%EOF diff --git a/doc/bashbug.0 b/doc/bashbug.0 new file mode 100644 index 0000000..41fc1ed --- /dev/null +++ b/doc/bashbug.0 @@ -0,0 +1,50 @@ +BASHBUG(1) BASHBUG(1) + + + +NNAAMMEE + bashbug - report a bug in bash + +SSYYNNOOPPSSIISS + bbaasshhbbuugg [_-_-_v_e_r_s_i_o_n] [_-_-_h_e_l_p] [_e_m_a_i_l_-_a_d_d_r_e_s_s] + +DDEESSCCRRIIPPTTIIOONN + bbaasshhbbuugg is a shell script to help the user compose and mail bug reports + concerning bash in a standard format. bbaasshhbbuugg invokes the editor spec- + ified by the environment variable EEDDIITTOORR on a temporary copy of the bug + report format outline. The user must fill in the appropriate fields and + exit the editor. bbaasshhbbuugg then mails the completed report to _b_u_g_- + _b_a_s_h_@_g_n_u_._o_r_g, or _e_m_a_i_l_-_a_d_d_r_e_s_s. If the report cannot be mailed, it is + saved in the file _d_e_a_d_._b_a_s_h_b_u_g in the invoking user's home directory. + + The bug report format outline consists of several sections. The first + section provides information about the machine, operating system, the + bash version, and the compilation environment. The second section + should be filled in with a description of the bug. The third section + should be a description of how to reproduce the bug. The optional + fourth section is for a proposed fix. Fixes are encouraged. + +EENNVVIIRROONNMMEENNTT + bbaasshhbbuugg will utilize the following environment variables if they exist: + + EEDDIITTOORR Specifies the preferred editor. If EEDDIITTOORR is not set, bbaasshhbbuugg + defaults to eemmaaccss. + + HHOOMMEE Directory in which the failed bug report is saved if the mail + fails. + + TTMMPPDDIIRR Directory in which to create temporary files and directories. + +SSEEEE AALLSSOO + _b_a_s_h(1) + +AAUUTTHHOORRSS + Brian Fox, Free Software Foundation + bfox@gnu.org + + Chet Ramey, Case Western Reserve University + chet@po.cwru.edu + + + +GNU Bash-4.0 1998 July 30 BASHBUG(1) diff --git a/doc/bashbug.1 b/doc/bashbug.1 new file mode 100644 index 0000000..962cb9c --- /dev/null +++ b/doc/bashbug.1 @@ -0,0 +1,64 @@ +.\" +.\" MAN PAGE COMMENTS to +.\" +.\" Chet Ramey +.\" Case Western Reserve University +.\" chet@po.cwru.edu +.\" +.\" Last Change: Tue Apr 3 15:46:30 EDT 2007 +.\" +.TH BASHBUG 1 "1998 July 30" "GNU Bash-4.0" +.SH NAME +bashbug \- report a bug in bash +.SH SYNOPSIS +\fBbashbug\fP [\fI--version\fP] [\fI--help\fP] [\fIemail-address\fP] +.SH DESCRIPTION +.B bashbug +is a shell script to help the user compose and mail bug reports +concerning bash in a standard format. +.B bashbug +invokes the editor specified by the environment variable +.SM +.B EDITOR +on a temporary copy of the bug report format outline. The user must +fill in the appropriate fields and exit the editor. +.B bashbug +then mails the completed report to \fIbug-bash@gnu.org\fP, or +\fIemail-address\fP. If the report cannot be mailed, it is saved in the +file \fIdead.bashbug\fP in the invoking user's home directory. +.PP +The bug report format outline consists of several sections. The first +section provides information about the machine, operating system, the +bash version, and the compilation environment. The second section +should be filled in with a description of the bug. The third section +should be a description of how to reproduce the bug. The optional +fourth section is for a proposed fix. Fixes are encouraged. +.SH ENVIRONMENT +.B bashbug +will utilize the following environment variables if they exist: +.TP +.B EDITOR +Specifies the preferred editor. If +.SM +.B EDITOR +is not set, +.B bashbug +defaults to +.BR emacs . +.TP +.B HOME +Directory in which the failed bug report is saved if the mail fails. +.TP +.B TMPDIR +Directory in which to create temporary files and directories. +.SH "SEE ALSO" +.TP +\fIbash\fP(1) +.SH AUTHORS +Brian Fox, Free Software Foundation +.br +bfox@gnu.org +.PP +Chet Ramey, Case Western Reserve University +.br +chet@po.cwru.edu diff --git a/doc/bashbug.ps b/doc/bashbug.ps new file mode 100644 index 0000000..efbcdda --- /dev/null +++ b/doc/bashbug.ps @@ -0,0 +1,284 @@ +%!PS-Adobe-3.0 +%%Creator: groff version 1.19.2 +%%CreationDate: Mon Nov 17 17:38:06 2008 +%%DocumentNeededResources: font Times-Roman +%%+ font Times-Bold +%%+ font Times-Italic +%%DocumentSuppliedResources: procset grops 1.19 2 +%%Pages: 1 +%%PageOrder: Ascend +%%DocumentMedia: Default 595 842 0 () () +%%Orientation: Portrait +%%EndComments +%%BeginDefaults +%%PageMedia: Default +%%EndDefaults +%%BeginProlog +%%BeginResource: procset grops 1.19 2 +%!PS-Adobe-3.0 Resource-ProcSet +/setpacking where{ +pop +currentpacking +true setpacking +}if +/grops 120 dict dup begin +/SC 32 def +/A/show load def +/B{0 SC 3 -1 roll widthshow}bind def +/C{0 exch ashow}bind def +/D{0 exch 0 SC 5 2 roll awidthshow}bind def +/E{0 rmoveto show}bind def +/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def +/G{0 rmoveto 0 exch ashow}bind def +/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/I{0 exch rmoveto show}bind def +/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def +/K{0 exch rmoveto 0 exch ashow}bind def +/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/M{rmoveto show}bind def +/N{rmoveto 0 SC 3 -1 roll widthshow}bind def +/O{rmoveto 0 exch ashow}bind def +/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/Q{moveto show}bind def +/R{moveto 0 SC 3 -1 roll widthshow}bind def +/S{moveto 0 exch ashow}bind def +/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/SF{ +findfont exch +[exch dup 0 exch 0 exch neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/MF{ +findfont +[5 2 roll +0 3 1 roll +neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/level0 0 def +/RES 0 def +/PL 0 def +/LS 0 def +/MANUAL{ +statusdict begin/manualfeed true store end +}bind def +/PLG{ +gsave newpath clippath pathbbox grestore +exch pop add exch pop +}bind def +/BP{ +/level0 save def +1 setlinecap +1 setlinejoin +72 RES div dup scale +LS{ +90 rotate +}{ +0 PL translate +}ifelse +1 -1 scale +}bind def +/EP{ +level0 restore +showpage +}def +/DA{ +newpath arcn stroke +}bind def +/SN{ +transform +.25 sub exch .25 sub exch +round .25 add exch round .25 add exch +itransform +}bind def +/DL{ +SN +moveto +SN +lineto stroke +}bind def +/DC{ +newpath 0 360 arc closepath +}bind def +/TM matrix def +/DE{ +TM currentmatrix pop +translate scale newpath 0 0 .5 0 360 arc closepath +TM setmatrix +}bind def +/RC/rcurveto load def +/RL/rlineto load def +/ST/stroke load def +/MT/moveto load def +/CL/closepath load def +/Fr{ +setrgbcolor fill +}bind def +/setcmykcolor where{ +pop +/Fk{ +setcmykcolor fill +}bind def +}if +/Fg{ +setgray fill +}bind def +/FL/fill load def +/LW/setlinewidth load def +/Cr/setrgbcolor load def +/setcmykcolor where{ +pop +/Ck/setcmykcolor load def +}if +/Cg/setgray load def +/RE{ +findfont +dup maxlength 1 index/FontName known not{1 add}if dict begin +{ +1 index/FID ne{def}{pop pop}ifelse +}forall +/Encoding exch def +dup/FontName exch def +currentdict end definefont pop +}bind def +/DEFS 0 def +/EBEGIN{ +moveto +DEFS begin +}bind def +/EEND/end load def +/CNT 0 def +/level1 0 def +/PBEGIN{ +/level1 save def +translate +div 3 1 roll div exch scale +neg exch neg exch translate +0 setgray +0 setlinecap +1 setlinewidth +0 setlinejoin +10 setmiterlimit +[]0 setdash +/setstrokeadjust where{ +pop +false setstrokeadjust +}if +/setoverprint where{ +pop +false setoverprint +}if +newpath +/CNT countdictstack def +userdict begin +/showpage{}def +/setpagedevice{}def +}bind def +/PEND{ +countdictstack CNT sub{end}repeat +level1 restore +}bind def +end def +/setpacking where{ +pop +setpacking +}if +%%EndResource +%%EndProlog +%%BeginSetup +%%BeginFeature: *PageSize Default +<< /PageSize [ 595 842 ] /ImagingBBox null >> setpagedevice +%%EndFeature +%%IncludeResource: font Times-Roman +%%IncludeResource: font Times-Bold +%%IncludeResource: font Times-Italic +grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 +def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron +/Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent +/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen +/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon +/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O +/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex +/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y +/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft +/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl +/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut +/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash +/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen +/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft +/logicalnot/minus/registered/macron/degree/plusminus/twosuperior +/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior +/ordmasculine/guilsinglright/onequarter/onehalf/threequarters +/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE +/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn +/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash +/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def +/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE +/Times-Roman@0 ENC0/Times-Roman RE +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SHB).35 E 347.52(UG\(1\) B)-.1 F +(ASHB)-.35 E(UG\(1\))-.1 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME) +.219 E F0(bashb)108 96 Q(ug \255 report a b)-.2 E(ug in bash)-.2 E F1 +(SYNOPSIS)72 112.8 Q/F2 10/Times-Bold@0 SF(bashb)108 124.8 Q(ug)-.2 E F0 +([)2.5 E/F3 10/Times-Italic@0 SF(--ver)A(sion)-.1 E F0 2.5(][)C F3 +(--help)-2.5 E F0 2.5(][)C F3(email-addr)-2.5 E(ess)-.37 E F0(])A F1 +(DESCRIPTION)72 141.6 Q F2(bashb)108 153.6 Q(ug)-.2 E F0 .446 +(is a shell script to help the user compose and mail b)2.947 F .446 +(ug reports concerning bash in a standard for)-.2 F(-)-.2 E(mat.)108 +165.6 Q F2(bashb)5.961 E(ug)-.2 E F0(in)3.461 E -.2(vo)-.4 G -.1(ke).2 G +3.461(st).1 G .962(he editor speci\214ed by the en)-3.461 F .962 +(vironment v)-.4 F(ariable)-.25 E/F4 9/Times-Bold@0 SF(EDIT)3.462 E(OR) +-.162 E F0 .962(on a temporary cop)3.212 F 3.462(yo)-.1 G(f)-3.462 E +.374(the b)108 177.6 R .374(ug report format outline. The user must \ +\214ll in the appropriate \214elds and e)-.2 F .374(xit the editor)-.15 +F(.)-.55 E F2(bashb)5.373 E(ug)-.2 E F0(then)2.873 E 1.141 +(mails the completed report to)108 189.6 R F3 -.2(bu)3.641 G +(g-bash@gnu.or).2 E(g)-.37 E F0 3.641(,o)C(r)-3.641 E F3(email-addr) +3.641 E(ess)-.37 E F0 6.141(.I)C 3.641(ft)-6.141 G 1.142 +(he report cannot be mailed, it is)-3.641 F(sa)108 201.6 Q -.15(ve)-.2 G +2.5(di).15 G 2.5(nt)-2.5 G(he \214le)-2.5 E F3(dead.bashb)2.5 E(ug)-.2 E +F0(in the in)2.5 E -.2(vo)-.4 G(king user').2 E 2.5(sh)-.55 G +(ome directory)-2.5 E(.)-.65 E .354(The b)108 218.4 R .354 +(ug report format outline consists of se)-.2 F -.15(ve)-.25 G .353 +(ral sections.).15 F .353(The \214rst section pro)5.353 F .353 +(vides information about the)-.15 F .37 +(machine, operating system, the bash v)108 230.4 R .371 +(ersion, and the compilation en)-.15 F 2.871(vironment. The)-.4 F .371 +(second section should)2.871 F .209 +(be \214lled in with a description of the b)108 242.4 R 2.709(ug. The) +-.2 F .208(third section should be a description of ho)2.709 F 2.708(wt) +-.25 G 2.708(or)-2.708 G .208(eproduce the)-2.708 F -.2(bu)108 254.4 S +2.5(g. The).2 F(optional fourth section is for a proposed \214x.)2.5 E +(Fix)5 E(es are encouraged.)-.15 E F1(ENVIR)72 271.2 Q(ONMENT)-.329 E F2 +(bashb)108 283.2 Q(ug)-.2 E F0(will utilize the follo)2.5 E(wing en)-.25 +E(vironment v)-.4 E(ariables if the)-.25 E 2.5(ye)-.15 G(xist:)-2.65 E +F2(EDIT)108 300 Q(OR)-.18 E F0(Speci\214es the preferred editor)144 312 +Q 2.5(.I)-.55 G(f)-2.5 E F4(EDIT)2.5 E(OR)-.162 E F0(is not set,)2.25 E +F2(bashb)2.5 E(ug)-.2 E F0(def)2.5 E(aults to)-.1 E F2(emacs)2.5 E F0(.) +A F2(HOME)108 328.8 Q F0(Directory in which the f)144 340.8 Q(ailed b) +-.1 E(ug report is sa)-.2 E -.15(ve)-.2 G 2.5(di).15 G 2.5(ft)-2.5 G +(he mail f)-2.5 E(ails.)-.1 E F2(TMPDIR)108 357.6 Q F0 +(Directory in which to create temporary \214les and directories.)144 +369.6 Q F1(SEE ALSO)72 386.4 Q F3(bash)108 398.4 Q F0(\(1\))A F1 -.548 +(AU)72 415.2 S(THORS).548 E F0(Brian F)108 427.2 Q(ox, Free Softw)-.15 E +(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 439.2 Q(g)-.18 E +(Chet Rame)108 456 Q 1.3 -.65(y, C)-.15 H(ase W).65 E(estern Reserv)-.8 +E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E(chet@po.cwru.edu) +108 468 Q(GNU Bash-4.0)72 768 Q(1998 July 30)148.175 E(1)203.165 E 0 Cg +EP +%%Trailer +end +%%EOF diff --git a/doc/bashref.dvi b/doc/bashref.dvi new file mode 100644 index 0000000..652145a Binary files /dev/null and b/doc/bashref.dvi differ diff --git a/doc/bashref.html b/doc/bashref.html new file mode 100644 index 0000000..d36b72b --- /dev/null +++ b/doc/bashref.html @@ -0,0 +1,16225 @@ + + + + + +Bash Reference Manual: + + + + + + + + + + + + + + + + + +
[Top][Contents][Index][ ? ]
+

Bash Reference Manual

+ +This text is a brief description of the features that are present in +the Bash shell (version 4.1, 23 December 2009). +

+ +This is Edition 4.1, last updated 23 December 2009, +of The GNU Bash Reference Manual, +for Bash, Version 4.1. +

+ +Bash contains features that appear in other popular shells, and some +features that only appear in Bash. Some of the shells that Bash has +borrowed concepts from are the Bourne Shell (`sh'), the Korn Shell +(`ksh'), and the C-shell (`csh' and its successor, +`tcsh'). The following menu breaks the features up into +categories 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. +

+ +

+ + + + + + + + + + + + + + +
1. Introduction  An introduction to the shell.
2. Definitions  Some definitions used in the rest of this + manual.
3. Basic Shell Features  The shell "building blocks".
4. Shell Builtin Commands  Commands that are a part of the shell.
5. Shell Variables  Variables used or set by Bash.
6. Bash Features  Features found only in Bash.
7. Job Control  What job control is and how Bash allows you + to use it.
8. Command Line Editing  Chapter describing the command line + editing features.
9. Using History Interactively  Command History Expansion
10. Installing Bash  How to build and install Bash on your system.
A. Reporting Bugs  How to report bugs in Bash.
B. Major Differences From The Bourne Shell  A terse list of the differences + between Bash and historical + versions of /bin/sh.
C. GNU Free Documentation License  Copying and sharing this documentation.
D. Indexes  Various indexes for this manual.
+

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

1. Introduction

+ +
+ + +
1.1 What is Bash?  A short description of Bash.
1.2 What is a shell?  A brief introduction to shells.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

1.1 What is Bash?

+ +

+ +Bash is the shell, or command language interpreter, +for the GNU operating system. +The name is an acronym for the `Bourne-Again SHell', +a pun on Stephen Bourne, the author of the direct ancestor of +the current Unix shell sh, +which appeared in the Seventh Edition Bell Labs Research version +of Unix. +

+ +Bash is largely compatible with sh and incorporates useful +features from the Korn shell ksh and the C shell csh. +It is intended to be a conformant implementation of the IEEE +POSIX Shell and Tools portion of the IEEE POSIX +specification (IEEE Standard 1003.1). +It offers functional improvements over sh for both interactive and +programming use. +

+ +While the GNU operating system provides other shells, including +a version of csh, Bash is the default shell. +Like other GNU software, Bash is quite portable. It currently runs +on nearly every version of Unix and a few other operating systems - +independently-supported ports exist for MS-DOS, OS/2, +and Windows platforms. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

1.2 What is a shell?

+ +

+ +At its base, a shell is simply a macro processor that executes +commands. The term macro processor means functionality where text +and symbols are expanded to create larger expressions. +

+ +A Unix shell is both a command interpreter and a programming +language. As a command interpreter, the shell provides the user +interface to the rich set of GNU utilities. The programming +language features allow these utilities to be combined. +Files containing commands can be created, and become +commands themselves. These new commands have the same status as +system commands in directories such as `/bin', allowing users +or groups to establish custom environments to automate their common +tasks. +

+ +Shells may be used interactively or non-interactively. In +interactive mode, they accept input typed from the keyboard. +When executing non-interactively, shells execute commands read +from a file. +

+ +A shell allows execution of GNU commands, both synchronously and +asynchronously. +The shell waits for synchronous commands to complete before accepting +more input; asynchronous commands continue to execute in parallel +with the shell while it reads and executes additional commands. +The redirection constructs permit +fine-grained control of the input and output of those commands. +Moreover, the shell allows control over the contents of commands' +environments. +

+ +Shells also provide a small set of built-in +commands (builtins) implementing functionality impossible +or inconvenient to obtain via separate utilities. +For example, cd, break, continue, and +exec) cannot be implemented outside of the shell because +they directly manipulate the shell itself. +The history, getopts, kill, or pwd +builtins, among others, could be implemented in separate utilities, +but they are more convenient to use as builtin commands. +All of the shell builtins are described in +subsequent sections. +

+ +While executing commands is essential, most of the power (and +complexity) of shells is due to their embedded programming +languages. Like any high-level language, the shell provides +variables, flow control constructs, quoting, and functions. +

+ +Shells offer features geared specifically for +interactive use rather than to augment the programming language. +These interactive features include job control, command line +editing, command history and aliases. Each of these features is +described in this manual. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

2. Definitions

+ +These definitions are used throughout the remainder of this manual. +

+ +

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

+ +

blank +
A space or tab character. +

+ +

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

+ +

control operator +
+A token that performs a control function. It is a newline +or one of the following: +`||', `&&', `&', `;', `;;', +`|', `|&', `(', or `)'. +

+ +

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

+ +

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

+ +

filename +
+A string of characters used to identify a file. +

+ +

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

+ +

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

+ +

metacharacter +
+A character that, when unquoted, separates words. A metacharacter is +a blank or one of the following characters: +`|', `&', `;', `(', `)', `<', or +`>'. +

+ +

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

+ +

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

+ +

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

+ +

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

+ +

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

+ +

return status +
+A synonym for exit status. +

+ +

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

+ +

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

+ +

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

+ +

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3. Basic Shell Features

+ +

+ +Bash is an acronym for `Bourne-Again SHell'. +The Bourne shell is +the traditional Unix shell originally written by Stephen Bourne. +All of the Bourne shell builtin commands are available in Bash, +The rules for evaluation and quoting are taken from the POSIX +specification for the `standard' Unix shell. +

+ +This chapter briefly summarizes the shell's `building blocks': +commands, control structures, shell functions, shell parameters, +shell expansions, +redirections, which are a way to direct input and output from +and to named files, and how the shell executes commands. +

+ +

+ + + + + + + + +
3.1 Shell Syntax  What your input means to the shell.
3.2 Shell Commands  The types of commands you can use.
3.3 Shell Functions  Grouping commands by name.
3.4 Shell Parameters  How the shell stores values.
3.5 Shell Expansions  How Bash expands parameters and the various + expansions available.
3.6 Redirections  A way to control where input and output go.
3.7 Executing Commands  What happens when you run a command.
3.8 Shell Scripts  Executing files of shell commands.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1 Shell Syntax

+ +
+ + + +
3.1.1 Shell Operation  The basic operation of the shell.
3.1.2 Quoting  How to remove the special meaning from characters.
3.1.3 Comments  How to specify comments.
+

+ +When the shell reads input, it proceeds through a +sequence of operations. If the input indicates the beginning of a +comment, the shell ignores the comment symbol (`#'), and the rest +of that line. + +Otherwise, roughly speaking, the shell reads its input and +divides the input into words and operators, employing the quoting rules +to select which meanings to assign various words and characters. +

+ +The shell then parses these tokens into commands and other constructs, +removes the special meaning of certain words or characters, expands +others, redirects input and output as needed, executes the specified +command, waits for the command's exit status, and makes that exit status +available for further inspection or processing. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1.1 Shell Operation

+ +

+ +The following is a brief description of the shell's operation when it +reads and executes a command. Basically, the shell does the +following: +

+ +

    +
  1. +Reads its input from a file (see section 3.8 Shell Scripts), from a string +supplied as an argument to the `-c' invocation option +(see section 6.1 Invoking Bash), or from the user's terminal. +

    + +

  2. +Breaks the input into words and operators, obeying the quoting rules +described in 3.1.2 Quoting. These tokens are separated by +metacharacters. Alias expansion is performed by this step +(see section 6.6 Aliases). +

    + +

  3. +Parses the tokens into simple and compound commands +(see section 3.2 Shell Commands). +

    + +

  4. +Performs the various shell expansions (see section 3.5 Shell Expansions), breaking +the expanded tokens into lists of filenames (see section 3.5.8 Filename Expansion) +and commands and arguments. +

    + +

  5. +Performs any necessary redirections (see section 3.6 Redirections) and removes +the redirection operators and their operands from the argument list. +

    + +

  6. +Executes the command (see section 3.7 Executing Commands). +

    + +

  7. +Optionally waits for the command to complete and collects its exit +status (see section 3.7.5 Exit Status). +

    + +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1.2 Quoting

+ +
+ + + + + +
3.1.2.1 Escape Character  How to remove the special meaning from a single + character.
3.1.2.2 Single Quotes  How to inhibit all interpretation of a sequence + of characters.
3.1.2.3 Double Quotes  How to suppress most of the interpretation of a + sequence of characters.
3.1.2.4 ANSI-C Quoting  How to expand ANSI-C sequences in quoted strings.
3.1.2.5 Locale-Specific Translation  How to translate strings into different languages.
+

+ +Quoting is used to remove the special meaning of certain +characters or words to the shell. Quoting can be used to +disable special treatment for special characters, to prevent +reserved words from being recognized as such, and to prevent +parameter expansion. +

+ +Each of the shell metacharacters (see section 2. 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 +(see section 9.3 History Expansion), the +history expansion character, usually `!', must be quoted +to prevent history expansion. See section 9.1 Bash History Facilities, for +more details concerning history expansion. +

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1.2.1 Escape Character

+ +A non-quoted backslash `\' is the Bash escape character. +It preserves the literal value of the next character that follows, +with the exception of newline. If a \newline pair +appears, and the backslash itself is not quoted, the \newline +is treated as a line continuation (that is, it is removed from +the input stream and effectively ignored). +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1.2.2 Single Quotes

+ +

+ +Enclosing characters in single quotes (`'') preserves the literal value +of each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a backslash. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1.2.3 Double Quotes

+ +

+ +Enclosing characters in double quotes (`"') preserves the literal value +of all characters within the quotes, with the exception of +`$', ``', `\', +and, when history expansion is enabled, `!'. +The characters `$' and ``' +retain their special meaning within double quotes (see section 3.5 Shell Expansions). +The backslash retains its special meaning only when followed by one of +the following characters: +`$', ``', `"', `\', or newline. +Within double quotes, backslashes that are followed by one of these +characters are removed. Backslashes preceding characters without a +special meaning are left unmodified. +A double quote may be quoted within double quotes by preceding it with +a backslash. +If enabled, history expansion will be performed unless an `!' +appearing in double quotes is escaped using a backslash. +The backslash preceding the `!' is not removed. +

+ +The special parameters `*' and `@' have special meaning +when in double quotes (see section 3.5.3 Shell Parameter Expansion). +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1.2.4 ANSI-C Quoting

+ +

+ +Words of the form $'string' are treated specially. The +word expands to string, with backslash-escaped characters replaced +as specified by the ANSI C standard. Backslash escape sequences, if +present, are decoded as follows: +

+ +

+
\a +
alert (bell) +
\b +
backspace +
\e +
\E +
an escape character (not ANSI C) +
\f +
form feed +
\n +
newline +
\r +
carriage return +
\t +
horizontal tab +
\v +
vertical tab +
\\ +
backslash +
\' +
single quote +
\" +
double quote +
\nnn +
the eight-bit character whose value is the octal value nnn +(one to three digits) +
\xHH +
the eight-bit character whose value is the hexadecimal value HH +(one or two hex digits) +
\cx +
a control-x character +
+

+ +The expanded result is single-quoted, as if the dollar sign had not +been present. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1.2.5 Locale-Specific Translation

+ +

+ +A double-quoted string preceded by a dollar sign (`$') will cause +the string to be translated according to the current locale. +If the current locale is C or POSIX, the dollar sign +is ignored. +If the string is translated and replaced, the replacement is +double-quoted. +

+ + + + +Some systems use the message catalog selected by the LC_MESSAGES +shell variable. Others create the name of the message catalog from the +value of the TEXTDOMAIN shell variable, possibly adding a +suffix of `.mo'. If you use the TEXTDOMAIN variable, you +may need to set the TEXTDOMAINDIR variable to the location of +the message catalog files. Still others use both variables in this +fashion: +TEXTDOMAINDIR/LC_MESSAGES/LC_MESSAGES/TEXTDOMAIN.mo. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.1.3 Comments

+ +

+ +In a non-interactive shell, or an interactive shell in which the +interactive_comments option to the shopt +builtin is enabled (see section 4.3.2 The Shopt Builtin), +a word beginning with `#' +causes that word and all remaining characters on that line to +be ignored. An interactive shell without the interactive_comments +option enabled does not allow comments. The interactive_comments +option is on by default in interactive shells. +See section 6.3 Interactive Shells, for a description of what makes +a shell interactive. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2 Shell Commands

+ +

+ +A simple shell command such as echo a b c consists of the command +itself followed by arguments, separated by spaces. +

+ +More complex shell commands are composed of simple commands arranged together +in a variety of ways: in a pipeline in which the output of one command +becomes the input of a second, in a loop or conditional construct, or in +some other grouping. +

+ +

+ + + + + +
3.2.1 Simple Commands  The most common type of command.
3.2.2 Pipelines  Connecting the input and output of several + commands.
3.2.3 Lists of Commands  How to execute commands sequentially.
3.2.4 Compound Commands  Shell commands for control flow.
3.2.5 Coprocesses  Two-way communication between commands.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2.1 Simple Commands

+ +

+ +A simple command is the kind of command encountered most often. +It's just a sequence of words separated by blanks, terminated +by one of the shell's control operators (see section 2. 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 (see section 3.7.5 Exit Status) of a simple command is +its exit status as provided +by the POSIX 1003.1 waitpid function, or 128+n if +the command was terminated by signal n. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2.2 Pipelines

+ +

+ +A pipeline is a sequence of simple commands separated by one of +the control operators `|' or `|&'. +

+ + + + +The format for a pipeline is +
 
[time [-p]] [!] command1 [ [| or |&] command2 ...]
+

+ +The output of each command in the pipeline is connected via a pipe +to the input of the next command. +That is, each command reads the previous command's output. This +connection is performed before any redirections specified by the +command. +

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

+ +The reserved word time causes timing statistics +to be printed for the pipeline once it finishes. +The statistics currently consist of elapsed (wall-clock) time and +user and system time consumed by the command's execution. +The `-p' option changes the output format to that specified +by POSIX. +The TIMEFORMAT variable may be set to a format string that +specifies how the timing information should be displayed. +See section 5.2 Bash Variables, for a description of the available formats. +The use of time as a reserved word permits the timing of +shell builtins, shell functions, and pipelines. An external +time command cannot time these easily. +

+ +If the pipeline is not executed asynchronously (see section 3.2.3 Lists of Commands), the +shell waits for all commands in the pipeline to complete. +

+ +Each command in a pipeline is executed in its own subshell +(see section 3.7.3 Command Execution Environment). The exit +status of a pipeline is the exit status of the last command in the +pipeline, unless the pipefail option is enabled +(see section 4.3.1 The Set Builtin). +If pipefail is enabled, the pipeline's return status is the +value of the last (rightmost) command to exit with a non-zero status, +or zero if all commands exit successfully. +If the reserved word `!' precedes the pipeline, the +exit status is the logical negation of the exit status as described +above. +The shell waits for all commands in the pipeline to terminate before +returning a value. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2.3 Lists of Commands

+ +

+ +A list is a sequence of one or more pipelines separated by one +of the operators `;', `&', `&&', or `||', +and optionally terminated by one of `;', `&', or a +newline. +

+ +Of these list operators, `&&' and `||' +have equal precedence, followed by `;' and `&', +which have equal precedence. +

+ +A sequence of one or more newlines may appear in a list +to delimit commands, equivalent to a semicolon. +

+ +If a command is terminated by the control operator `&', +the shell executes the command asynchronously in a subshell. +This is known as executing the command in the background. +The shell does not wait for the command to finish, and the return +status is 0 (true). +When job control is not active (see section 7. Job Control), +the standard input for asynchronous commands, in the absence of any +explicit redirections, is redirected from /dev/null. +

+ +Commands separated by a `;' are executed sequentially; the shell +waits for each command to terminate in turn. The return status is the +exit status of the last command executed. +

+ +AND and OR lists are sequences of one or more pipelines +separated by the control operators `&&' and `||', +respectively. AND and OR lists are executed with left +associativity. +

+ +An AND list has the form +
 
command1 && command2
+

+ +command2 is executed if, and only if, command1 +returns an exit status of zero. +

+ +An OR list has the form +
 
command1 || command2
+

+ +command2 is executed if, and only if, command1 +returns a non-zero exit status. +

+ +The return status of +AND and OR lists is the exit status of the last command +executed in the list. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2.4 Compound Commands

+ +

+ +

+ + + +
3.2.4.1 Looping Constructs  Shell commands for iterative action.
3.2.4.2 Conditional Constructs  Shell commands for conditional execution.
3.2.4.3 Grouping Commands  Ways to group commands.
+

+ +Compound commands are the shell programming constructs. +Each construct begins with a reserved word or control operator and is +terminated by a corresponding reserved word or operator. +Any redirections (see section 3.6 Redirections) associated with a compound command +apply to all commands within that compound command unless explicitly overridden. +

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2.4.1 Looping Constructs

+ +

+ +Bash supports the following looping constructs. +

+ +Note that wherever a `;' appears in the description of a +command's syntax, it may be replaced with one or more newlines. +

+ +

+
until +
+ + +The syntax of the until command is: +
 
until test-commands; do consequent-commands; done
+
Execute consequent-commands as long as +test-commands has an exit status which is not zero. +The return status is the exit status of the last command executed +in consequent-commands, or zero if none was executed. +

+ +

while +
+The syntax of the while command is: +
 
while test-commands; do consequent-commands; done
+

+ +Execute consequent-commands as long as +test-commands has an exit status of zero. +The return status is the exit status of the last command executed +in consequent-commands, or zero if none was executed. +

+ +

for +
+The syntax of the for command is: +

+ +
 
for name [ [in [words ...] ] ; ] do commands; done
+
Expand words, and execute commands once for each member +in the resultant list, with name bound to the current member. +If `in words' is not present, the for command +executes the commands once for each positional parameter that is +set, as if `in "$@"' had been specified +(see section 3.4.2 Special Parameters). +The return status is the exit status of the last command that executes. +If there are no items in the expansion of words, no commands are +executed, and the return status is zero. +

+ +An alternate form of the for command is also supported: +

+ +
 
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
+
First, the arithmetic expression expr1 is evaluated according +to the rules described below (see section 6.5 Shell Arithmetic). +The arithmetic expression expr2 is then evaluated repeatedly +until it evaluates to zero. +Each time expr2 evaluates to a non-zero value, commands are +executed and the arithmetic expression expr3 is evaluated. +If any expression is omitted, it behaves as if it evaluates to 1. +The return value is the exit status of the last command in list +that is executed, or false if any of the expressions is invalid. +

+ +

+

+ +The break and continue builtins (see section 4.1 Bourne Shell Builtins) +may be used to control loop execution. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2.4.2 Conditional Constructs

+ +

+ +

+
if +
+ + + + +The syntax of the if command is: +

+ +
 
if test-commands; then
+  consequent-commands;
+[elif more-test-commands; then
+  more-consequents;]
+[else alternate-consequents;]
+fi
+

+ +The test-commands list is executed, and if its return status is zero, +the consequent-commands list is executed. +If test-commands returns a non-zero status, each elif list +is executed in turn, and if its exit status is zero, +the corresponding more-consequents is executed and the +command completes. +If `else alternate-consequents' is present, and +the final command in the final if or elif clause +has a non-zero exit status, then alternate-consequents is executed. +The return status is the exit status of the last command executed, or +zero if no condition tested true. +

+ +

case +
+ + +The syntax of the case command is: +

+ +
 
case word in [ [(] pattern [| pattern]...) command-list ;;]... esac
+

+ +case will selectively execute the command-list corresponding to +the first pattern that matches word. +If the shell option nocasematch +(see the description of shopt in 4.3.2 The Shopt Builtin) +is enabled, the match is performed without regard to the case +of alphabetic characters. +The `|' is used to separate multiple patterns, and the `)' +operator terminates a pattern list. +A list of patterns and an associated command-list is known +as a clause. +

+ +Each clause must be terminated with `;;', `;&', or `;;&'. +The word undergoes tilde expansion, parameter expansion, command +substitution, arithmetic expansion, and quote removal before matching is +attempted. Each pattern undergoes tilde expansion, parameter +expansion, command substitution, and arithmetic expansion. +

+ +There may be an arbitrary number of case clauses, each terminated +by a `;;', `;&', or `;;&'. +The first pattern that matches determines the +command-list that is executed. +

+ +Here is an example using case in a script that could be used to +describe one interesting feature of an animal: +

+ +
 
echo -n "Enter the name of an animal: "
+read ANIMAL
+echo -n "The $ANIMAL has "
+case $ANIMAL in
+  horse | dog | cat) echo -n "four";;
+  man | kangaroo ) echo -n "two";;
+  *) echo -n "an unknown number of";;
+esac
+echo " legs."
+

+ +

+ +If the `;;' operator is used, no subsequent matches are attempted after +the first pattern match. +Using `;&' in place of `;;' causes execution to continue with +the command-list associated with the next clause, if any. +Using `;;&' in place of `;;' causes the shell to test the patterns +in the next clause, if any, and execute any associated command-list +on a successful match. +

+ +The return status is zero if no pattern is matched. Otherwise, the +return status is the exit status of the command-list executed. +

+ +

select +
+

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

+ +
 
select name [in words ...]; do commands; done
+

+ +The list of words following in is expanded, generating a list +of items. The set of expanded words is printed on the standard +error output stream, each preceded by a number. If the +`in words' is omitted, the positional parameters are printed, +as if `in "$@"' had been specified. +The PS3 prompt is then displayed and a line is read from the +standard input. +If the line consists of a number corresponding to one of the displayed +words, then the value of name is set to that word. +If the line is empty, the words and prompt are displayed again. +If EOF is read, the select command completes. +Any other value read causes name to be set to null. +The line read is saved in the variable REPLY. +

+ +The commands are executed after each selection until a +break command is executed, at which +point the select command completes. +

+ +Here is an example that allows the user to pick a filename from the +current directory, and displays the name and index of the file +selected. +

+ +
 
select fname in *;
+do
+	echo you picked $fname \($REPLY\)
+	break;
+done
+

+ +

((...)) +
 
(( expression ))
+

+ +The arithmetic expression is evaluated according to the rules +described below (see section 6.5 Shell Arithmetic). +If the value of the expression is non-zero, the return status is 0; +otherwise the return status is 1. This is exactly equivalent to +
 
let "expression"
+
See section 4.2 Bash Builtin Commands, for a full description of the let builtin. +

+ +

[[...]] +
+ +
 
[[ expression ]]
+

+ +Return a status of 0 or 1 depending on the evaluation of +the conditional expression expression. +Expressions are composed of the primaries described below in +6.4 Bash Conditional Expressions. +Word splitting and filename expansion are not performed on the words +between the `[[' and `]]'; tilde expansion, parameter and +variable expansion, arithmetic expansion, command substitution, process +substitution, and quote removal are performed. +Conditional operators such as `-f' must be unquoted to be recognized +as primaries. +

+ +When used with `[[', The `<' and `>' operators sort +lexicographically using the current locale. +

+ +When the `==' and `!=' operators are used, the string to the +right of the operator is considered a pattern and matched according +to the rules described below in 3.5.8.1 Pattern Matching. +If the shell option nocasematch +(see the description of shopt in 4.3.2 The Shopt Builtin) +is enabled, the match is performed without regard to the case +of alphabetic characters. +The return value is 0 if the string matches (`==') or does not +match (`!=')the pattern, and 1 otherwise. +Any part of the pattern may be quoted to force it to be matched as a +string. +

+ +An additional binary operator, `=~', is available, with the same +precedence as `==' and `!='. +When it is used, the string to the right of the operator is considered +an extended regular expression and matched accordingly (as in regex3)). +The return value is 0 if the string matches +the pattern, and 1 otherwise. +If the regular expression is syntactically incorrect, the conditional +expression's return value is 2. +If the shell option nocasematch +(see the description of shopt in 4.3.2 The Shopt Builtin) +is enabled, the match is performed without regard to the case +of alphabetic characters. +Any part of the pattern may be quoted to force it to be matched as a +string. +Substrings matched by parenthesized subexpressions within the regular +expression are saved in the array variable BASH_REMATCH. +The element of BASH_REMATCH with index 0 is the portion of the string +matching the entire regular expression. +The element of BASH_REMATCH with index n is the portion of the +string matching the nth parenthesized subexpression. +

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

+ +

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

+ +

! expression +
True if expression is false. +

+ +

expression1 && expression2 +
True if both expression1 and expression2 are true. +

+ +

expression1 || expression2 +
True if either expression1 or expression2 is true. +
+The && and || operators do not evaluate expression2 if the +value of expression1 is sufficient to determine the return +value of the entire conditional expression. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2.4.3 Grouping Commands

+ +

+ +Bash provides two ways to group a list of commands to be executed +as a unit. When commands are grouped, redirections may be applied +to the entire command list. For example, the output of all the +commands in the list may be redirected to a single stream. +

+ +

+
() +
 
( list )
+

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

+ +

{} +
+ +
 
{ list; }
+

+ +Placing a list of commands between curly braces causes the list to +be executed in the current shell context. No subshell is created. +The semicolon (or newline) following list is required. +

+

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

+ +The exit status of both of these constructs is the exit status of +list. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.2.5 Coprocesses

+ +

+ +A coprocess is a shell command preceded by the coproc +reserved word. +A coprocess is executed asynchronously in a subshell, as if the command +had been terminated with the `&' control operator, with a two-way pipe +established between the executing shell and the coprocess. +

+ +The format for a coprocess is: +
 
coproc [NAME] command [redirections]
+

+ +This creates a coprocess named NAME. +If NAME is not supplied, the default name is COPROC. +NAME must not be supplied if command is a simple +command (see section 3.2.1 Simple Commands); otherwise, it is interpreted as +the first word of the simple command. +

+ +When the coproc is executed, the shell creates an array variable +(see section 6.7 Arrays) +named NAME in the context of the executing shell. +The standard output of command +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to NAME[0]. +The standard input of command +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to NAME[1]. +This pipe is established before any redirections specified by the +command (see section 3.6 Redirections). +The file descriptors can be utilized as arguments to shell commands +and redirections using standard word expansions. +

+ +The process id of the shell spawned to execute the coprocess is +available as the value of the variable NAME_PID. +The wait +builtin command may be used to wait for the coprocess to terminate. +

+ +The return status of a coprocess is the exit status of command. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.3 Shell Functions

+ +

+ +Shell functions are a way to group commands for later execution +using a single name for the group. They are executed just like +a "regular" command. +When the name of a shell function is used as a simple command name, +the list of commands associated with that function name is executed. +Shell functions are executed in the current +shell context; no new process is created to interpret them. +

+ +Functions are declared using this syntax: + +
 
[ function ] name () compound-command [ redirections ]
+

+ +This defines a shell function named name. The reserved +word function is optional. +If the function reserved +word is supplied, the parentheses are optional. +The body of the function is the compound command +compound-command (see section 3.2.4 Compound Commands). +That command is usually a list enclosed between { and }, but +may be any compound command listed above. +compound-command is executed whenever name is specified as the +name of a command. +Any redirections (see section 3.6 Redirections) associated with the shell function +are performed when the function is executed. +

+ +A function definition may be deleted using the `-f' option to the +unset builtin (see section 4.1 Bourne Shell Builtins). +

+ +The exit status of a function definition is zero unless a syntax error +occurs or a readonly function with the same name already exists. +When executed, the exit status of a function is the exit status of the +last command executed in the body. +

+ +Note that for historical reasons, in the most common usage the curly braces +that surround the body of the function must be separated from the body by +blanks or newlines. +This is because the braces are reserved words and are only recognized +as such when they are separated from the command list +by whitespace or another shell metacharacter. +Also, when using the braces, the list must be terminated by a semicolon, +a `&', or a newline. +

+ +When a function is executed, the arguments to the +function become the positional parameters +during its execution (see section 3.4.1 Positional Parameters). +The special parameter `#' that expands to the number of +positional parameters is updated to reflect the change. +Special parameter 0 is unchanged. +The first element of the FUNCNAME variable is set to the +name of the function while the function is executing. +

+ +All other aspects of the shell execution +environment are identical between a function and its caller +with these exceptions: +the DEBUG and RETURN traps +are not inherited unless the function has been given the +trace attribute using the declare builtin or +the -o functrace option has been enabled with +the set builtin, +(in which case all functions inherit the DEBUG and RETURN traps), +and the ERR trap is not inherited unless the -o errtrace +shell option has been enabled. +See section 4.1 Bourne Shell Builtins, for the description of the +trap builtin. +

+ +If the builtin command return +is executed in a function, the function completes and +execution resumes with the next command after the function +call. +Any command associated with the RETURN trap is executed +before execution resumes. +When a function completes, the values of the +positional parameters and the special parameter `#' +are restored to the values they had prior to the function's +execution. If a numeric argument is given to return, +that is the function's return status; otherwise the function's +return status is the exit status of the last command executed +before the return. +

+ +Variables local to the function may be declared with the +local builtin. These variables are visible only to +the function and the commands it invokes. +

+ +Function names and definitions may be listed with the +`-f' option to the declare or typeset +builtin commands (see section 4.2 Bash Builtin Commands). +The `-F' option to declare or typeset +will list the function names only +(and optionally the source file and line number, if the extdebug +shell option is enabled). +Functions may be exported so that subshells +automatically have them defined with the +`-f' option to the export builtin +(see section 4.1 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. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.4 Shell Parameters

+ +

+ +

+ + +
3.4.1 Positional Parameters  The shell's command-line arguments.
3.4.2 Special Parameters  Parameters denoted by special characters.
+

+ +A parameter is an entity that stores values. +It can be a name, a number, or one of the special characters +listed below. +A variable is a parameter denoted by a name. +A variable has a value and zero or more attributes. +Attributes are assigned using the declare builtin command +(see the description of the declare builtin in 4.2 Bash Builtin Commands). +

+ +A parameter is set if it has been assigned a value. The null string is +a valid value. Once a variable is set, it may be unset only by using +the unset builtin command. +

+ +A variable may be assigned to by a statement of the form +
 
name=[value]
+
If value +is not given, the variable is assigned the null string. All +values undergo tilde expansion, parameter and variable expansion, +command substitution, arithmetic expansion, and quote +removal (detailed below). If the variable has its integer +attribute set, then value +is evaluated as an arithmetic expression even if the $((...)) +expansion is not used (see section 3.5.5 Arithmetic Expansion). +Word splitting is not performed, with the exception +of "$@" as explained below. +Filename expansion is not performed. +Assignment statements may also appear as arguments to the +alias, +declare, typeset, export, readonly, +and local builtin commands. +

+ +In the context where an assignment statement is assigning a value +to a shell variable or array index (see section 6.7 Arrays), the `+=' +operator can be used to +append to or add to the variable's previous value. +When `+=' is applied to a variable for which the integer attribute +has been set, value is evaluated as an arithmetic expression and +added to the variable's current value, which is also evaluated. +When `+=' is applied to an array variable using compound assignment +(see section 6.7 Arrays), the +variable's value is not unset (as it is when using `='), and new +values are appended to the array beginning at one greater than the array's +maximum index (for indexed arrays), or added as additional key-value pairs +in an associative array. +When applied to a string-valued variable, value is expanded and +appended to the variable's value. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.4.1 Positional Parameters

+ +

+ +A positional parameter is a parameter denoted by one or more +digits, other than the single digit 0. Positional parameters are +assigned from the shell's arguments when it is invoked, +and may be reassigned using the set builtin command. +Positional parameter N may be referenced as ${N}, or +as $N when N consists of a single digit. +Positional parameters may not be assigned to with assignment statements. +The set and shift builtins are used to set and +unset them (see section 4. Shell Builtin Commands). +The positional parameters are +temporarily replaced when a shell function is executed +(see section 3.3 Shell Functions). +

+ +When a positional parameter consisting of more than a single +digit is expanded, it must be enclosed in braces. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.4.2 Special Parameters

+ +

+ +The shell treats several parameters specially. These parameters may +only be referenced; assignment to them is not allowed. +

+ +

+ + +
* +
+Expands to the positional parameters, starting from one. When the +expansion occurs within double quotes, it expands to a single word +with the value of each parameter separated by the first character +of the IFS +special variable. That is, "$*" is equivalent +to "$1c$2c...", where c +is the first character of the value of the IFS +variable. +If IFS is unset, the parameters are separated by spaces. +If IFS is null, the parameters are joined without intervening +separators. +

+ + +

@ +
+Expands to the positional parameters, starting from one. When the +expansion occurs within double quotes, each parameter expands to a +separate word. That is, "$@" is equivalent to +"$1" "$2" .... +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. +When there are no positional parameters, "$@" and +$@ +expand to nothing (i.e., they are removed). +

+ + +

# +
+Expands to the number of positional parameters in decimal. +

+ + +

? +
+Expands to the exit status of the most recently executed foreground +pipeline. +

+ + +

- +
+(A hyphen.) Expands to the current option flags as specified upon +invocation, by the set +builtin command, or those set by the shell itself +(such as the `-i' option). +

+ + +

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

+ + +

! +
+Expands to the process ID of the most recently executed background +(asynchronous) command. +

+ + +

0 +
+Expands to the name of the shell or shell script. This is set at +shell initialization. If Bash is invoked with a file of commands +(see section 3.8 Shell Scripts), $0 is set to the name of that file. +If Bash is started with the `-c' option (see section 6.1 Invoking Bash), +then $0 is set to the first argument after the string to be +executed, if one is present. Otherwise, it is set +to the filename used to invoke Bash, as given by argument zero. +

+ + +

_ +
+(An underscore.) +At shell startup, set to the absolute pathname used to invoke the +shell or shell script being executed as passed in the environment +or argument list. +Subsequently, expands to the last argument to the previous command, +after expansion. +Also set to the full pathname used to invoke each command executed +and placed in the environment exported to that command. +When checking mail, this parameter holds the name of the mail file. +
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5 Shell Expansions

+ +

+ +Expansion is performed on the command line after it has been split into +tokens. There are seven kinds of expansion performed: +

    +
  • brace expansion +
  • tilde expansion +
  • parameter and variable expansion +
  • command substitution +
  • arithmetic expansion +
  • word splitting +
  • filename expansion +
+

+ +

+ + + + + + + + + +
3.5.1 Brace Expansion  Expansion of expressions within braces.
3.5.2 Tilde Expansion  Expansion of the ~ character.
3.5.3 Shell Parameter Expansion  How Bash expands variables to their values.
3.5.4 Command Substitution  Using the output of a command as an argument.
3.5.5 Arithmetic Expansion  How to use arithmetic in shell expansions.
3.5.6 Process Substitution  A way to write and read to and from a + command.
3.5.7 Word Splitting  How the results of expansion are split into separate + arguments.
3.5.8 Filename Expansion  A shorthand for specifying filenames matching patterns.
3.5.9 Quote Removal  How and when quote characters are removed from + words.
+

+ +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: 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 +"$@" (see section 3.4.2 Special Parameters) and "${name[@]}" +(see section 6.7 Arrays). +

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.1 Brace Expansion

+ +

+ +Brace expansion is a mechanism by which arbitrary strings may be generated. +This mechanism is similar to +filename expansion (see section 3.5.8 Filename Expansion), +but the file names generated need not exist. +Patterns to be brace expanded take the form of an optional preamble, +followed by either a series of comma-separated strings or a seqeunce expression +between a pair of braces, +followed by an optional postscript. +The preamble is prefixed to each string contained within the braces, and +the postscript is then appended to each resulting string, expanding left +to right. +

+ +Brace expansions may be nested. +The results of each expanded string are not sorted; left to right order +is preserved. +For example, +
 
bash$ echo a{d,c,b}e
+ade ace abe
+

+ +A sequence expression takes the form {x..y[..incr]}, +where x and y are either integers or single characters, +and incr, an optional increment, is an integer. +When integers are supplied, the expression expands to each number between +x and y, inclusive. +Supplied integers may be prefixed with `0' to force each term to have the +same width. When either x or y begins with a zero, the shell +attempts to force all generated terms to contain the same number of digits, +zero-padding where necessary. +When characters are supplied, the expression expands to each character +lexicographically between x and y, inclusive. Note that +both x and y must be of the same type. +When the increment is supplied, it is used as the difference between +each term. The default increment is 1 or -1 as appropriate. +

+ +Brace expansion is performed before any other expansions, +and any characters special to other expansions are preserved +in the result. It is strictly textual. Bash +does not apply any syntactic interpretation to the context of the +expansion or the text between the braces. +To avoid conflicts with parameter expansion, the string `${' +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 `,' may be quoted with a backslash to prevent its +being considered part of a brace expression. +To avoid conflicts with parameter expansion, the string `${' +is not considered eligible for brace expansion. +

+ +This construct is typically used as shorthand when the common +prefix of the strings to be generated is longer than in the +above example: +
 
mkdir /usr/local/src/bash/{old,new,dist,bugs}
+
or +
 
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.2 Tilde Expansion

+ +

+ +If a word begins with an unquoted tilde character (`~'), all of the +characters up to the first unquoted slash (or all characters, +if there is no unquoted slash) are considered a tilde-prefix. +If none of the characters in the tilde-prefix are quoted, the +characters in the tilde-prefix following the tilde are treated as a +possible login name. +If this login name is the null string, the tilde is replaced with the +value of the HOME shell variable. +If HOME is unset, the home directory of the user executing the +shell is substituted instead. +Otherwise, the tilde-prefix is replaced with the home directory +associated with the specified login name. +

+ +If the tilde-prefix is `~+', the value of +the shell variable PWD replaces the tilde-prefix. +If the tilde-prefix is `~-', the value of the shell variable +OLDPWD, if it is set, is substituted. +

+ +If the characters following the tilde in the tilde-prefix consist of a +number N, optionally prefixed by a `+' or a `-', +the tilde-prefix is replaced with the +corresponding element from the directory stack, as it would be displayed +by the dirs builtin invoked with the characters following tilde +in the tilde-prefix as an argument (see section 6.8 The Directory Stack). +If the tilde-prefix, sans the tilde, consists of a number without a +leading `+' or `-', `+' is assumed. +

+ +If the login name is invalid, or the tilde expansion fails, the word is +left unchanged. +

+ +Each variable assignment is checked for unquoted tilde-prefixes immediately +following a `:' or the first `='. +In these cases, tilde expansion is also performed. +Consequently, one may use file names with tildes in assignments to +PATH, MAILPATH, and CDPATH, +and the shell assigns the expanded value. +

+ +The following table shows how Bash treats unquoted tilde-prefixes: +

+ +

+
~ +
The value of $HOME +
~/foo +
`$HOME/foo' +

+ +

~fred/foo +
The subdirectory foo of the home directory of the user +fred +

+ +

~+/foo +
`$PWD/foo' +

+ +

~-/foo +
`${OLDPWD-'~-'}/foo' +

+ +

~N +
The string that would be displayed by `dirs +N' +

+ +

~+N +
The string that would be displayed by `dirs +N' +

+ +

~-N +
The string that would be displayed by `dirs -N' +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.3 Shell Parameter Expansion

+ +

+ +The `$' character introduces parameter expansion, +command substitution, or arithmetic expansion. The parameter name +or symbol to be expanded may be enclosed in braces, which +are optional but serve to protect the variable to be expanded from +characters immediately following it which could be +interpreted as part of the name. +

+ +When braces are used, the matching ending brace is the first `}' +not escaped by a backslash or within a quoted string, and not within an +embedded arithmetic expansion, command substitution, or parameter +expansion. +

+ +The basic form of parameter expansion is ${parameter}. +The value of parameter is substituted. The braces are required +when parameter +is a positional parameter with more than one digit, +or when parameter +is followed by a character that is not to be +interpreted as part of its name. +

+ +If the first character of parameter is an exclamation point (!), +a level of variable indirection is introduced. +Bash uses the value of the variable formed from the rest of +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 parameter itself. +This is known as indirect expansion. +The exceptions to this are the expansions of ${!prefix*} +and ${!name[@]} +described below. +The exclamation point must immediately follow the left brace in order to +introduce indirection. +

+ +In each of the cases below, word is subject to tilde expansion, +parameter expansion, command substitution, and arithmetic expansion. +

+ +When not performing substring expansion, using the form described +below, Bash tests for a parameter that is unset or null. +Omitting the colon results in a test only for a parameter that is unset. +Put another way, if the colon is included, +the operator tests for both parameter's existence and that its value +is not null; if the colon is omitted, the operator tests only for existence. +

+ +

+ +
${parameter:-word} +
If parameter is unset or null, the expansion of +word is substituted. Otherwise, the value of +parameter is substituted. +

+ +

${parameter:=word} +
If parameter +is unset or null, the expansion of word +is assigned to parameter. +The value of parameter is then substituted. +Positional parameters and special parameters may not be assigned to +in this way. +

+ +

${parameter:?word} +
If parameter +is null or unset, the expansion of word (or a message +to that effect if word +is not present) is written to the standard error and the shell, if it +is not interactive, exits. Otherwise, the value of parameter is +substituted. +

+ +

${parameter:+word} +
If parameter +is null or unset, nothing is substituted, otherwise the expansion of +word is substituted. +

+ +

${parameter:offset} +
${parameter:offset:length} +
Expands to up to length characters of parameter +starting at the character specified by offset. +If length is omitted, expands to the substring of +parameter starting at the character specified by offset. +length and offset are arithmetic expressions +(see section 6.5 Shell Arithmetic). +This is referred to as Substring Expansion. +

+ +length must evaluate to a number greater than or equal to zero. +If offset evaluates to a number less than zero, the value +is used as an offset from the end of the value of parameter. +If parameter is `@', the result is length positional +parameters beginning at offset. +If parameter is an indexed array name subscripted +by `@' or `*', the result is the length +members of the array beginning with ${parameter[offset]}. +A negative offset is taken relative to one greater than the maximum +index of the specified array. +Substring expansion applied to an associative array produces undefined +results. +

+ +Note that a negative offset must be separated from the colon by at least +one space to avoid being confused with the `:-' expansion. +Substring indexing is zero-based unless the positional parameters +are used, in which case the indexing starts at 1 by default. +If offset is 0, and the positional parameters are used, $@ is +prefixed to the list. +

+ +

${!prefix*} +
${!prefix@} +
Expands to the names of variables whose names begin with prefix, +separated by the first character of the IFS special variable. +When `@' is used and the expansion appears within double quotes, each +variable name expands to a separate word. +

+ +

${!name[@]} +
${!name[*]} +
If name is an array variable, expands to the list of array indices +(keys) assigned in name. +If name is not an array, expands to 0 if name is set and null +otherwise. +When `@' is used and the expansion appears within double quotes, each +key expands to a separate word. +

+ +

${#parameter} +
The length in characters of the expanded value of parameter is +substituted. +If parameter is `*' or `@', the value substituted +is the number of positional parameters. +If parameter is an array name subscripted by `*' or `@', +the value substituted is the number of elements in the array. +

+ +

${parameter#word} +
${parameter##word} +
The word +is expanded to produce a pattern just as in filename +expansion (see section 3.5.8 Filename Expansion). If the pattern matches +the beginning of the expanded value of parameter, +then the result of the expansion is the expanded value of parameter +with the shortest matching pattern (the `#' case) or the +longest matching pattern (the `##' case) deleted. +If parameter is `@' or `*', +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If parameter is an array variable subscripted with +`@' or `*', +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. +

+ +

${parameter%word} +
${parameter%%word} +
The word is expanded to produce a pattern just as in +filename expansion. +If the pattern matches a trailing portion of the expanded value of +parameter, then the result of the expansion is the value of +parameter with the shortest matching pattern (the `%' case) +or the longest matching pattern (the `%%' case) deleted. +If parameter is `@' or `*', +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If parameter +is an array variable subscripted with `@' or `*', +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. +

+ +

${parameter/pattern/string} +

+ +The pattern is expanded to produce a pattern just as in +filename expansion. +Parameter is expanded and the longest match of pattern +against its value is replaced with string. +If pattern begins with `/', all matches of pattern are +replaced with string. Normally only the first match is replaced. +If pattern begins with `#', it must match at the beginning +of the expanded value of parameter. +If pattern begins with `%', it must match at the end +of the expanded value of parameter. +If string is null, matches of pattern are deleted +and the / following pattern may be omitted. +If parameter is `@' or `*', +the substitution operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If parameter +is an array variable subscripted with `@' or `*', +the substitution operation is applied to each member of the +array in turn, and the expansion is the resultant list. +

+ +

${parameter^pattern} +
${parameter^^pattern} +
${parameter,pattern} +
${parameter,,pattern} +
This expansion modifies the case of alphabetic characters in parameter. +The pattern is expanded to produce a pattern just as in +filename expansion. +The `^' operator converts lowercase letters matching pattern +to uppercase; the `,' operator converts matching uppercase letters +to lowercase. +The `^^' and `,,' expansions convert each matched character in the +expanded value; the `^' and `,' expansions match and convert only +the first character in the expanded value. +If pattern is omitted, it is treated like a `?', which matches +every character. +If parameter is `@' or `*', +the case modification operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If parameter +is an array variable subscripted with `@' or `*', +the case modification operation is applied to each member of the +array in turn, and the expansion is the resultant list. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.4 Command Substitution

+ +

+ +Command substitution allows the output of a command to replace +the command itself. +Command substitution occurs when a command is enclosed as follows: +
 
$(command)
+
or +
 
`command`
+

+ +Bash performs the expansion by executing command and +replacing the command substitution with the standard output of the +command, with any trailing newlines deleted. +Embedded newlines are not deleted, but they may be removed during +word splitting. +The command substitution $(cat file) can be +replaced by the equivalent but faster $(< file). +

+ +When the old-style backquote form of substitution is used, +backslash retains its literal meaning except when followed by +`$', ``', or `\'. +The first backquote not preceded by a backslash terminates the +command substitution. +When using the $(command) form, all characters between +the parentheses make up the command; none are treated specially. +

+ +Command substitutions may be nested. To nest when using the backquoted +form, escape the inner backquotes with backslashes. +

+ +If the substitution appears within double quotes, word splitting and +filename expansion are not performed on the results. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.5 Arithmetic Expansion

+ +

+ +Arithmetic expansion allows the evaluation of an arithmetic expression +and the substitution of the result. The format for arithmetic expansion is: +

+ +
 
$(( expression ))
+

+ +The expression is treated as if it were within double quotes, but +a double quote inside the parentheses is not treated specially. +All tokens in the expression undergo parameter expansion, command +substitution, and quote removal. +Arithmetic expansions may be nested. +

+ +The evaluation is performed according to the rules listed below +(see section 6.5 Shell Arithmetic). +If the expression is invalid, Bash prints a message indicating +failure to the standard error and no substitution occurs. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.6 Process Substitution

+ +

+ +Process substitution is supported on systems that support named +pipes (FIFOs) or the `/dev/fd' method of naming open files. +It takes the form of +
 
<(list)
+
or +
 
>(list)
+
The process list is run with its input or output connected to a +FIFO or some file in `/dev/fd'. The name of this file is +passed as an argument to the current command as the result of the +expansion. If the >(list) form is used, writing to +the file will provide input for list. If the +<(list) form is used, the file passed as an +argument should be read to obtain the output of list. +Note that no space may appear between the < or > +and the left parenthesis, otherwise the construct would be interpreted +as a redirection. +

+ +When available, process substitution is performed simultaneously with +parameter and variable expansion, command substitution, and arithmetic +expansion. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.7 Word Splitting

+ +

+ +The shell scans the results of parameter expansion, command substitution, +and arithmetic expansion that did not occur within double quotes for +word splitting. +

+ +The shell treats each character of $IFS as a delimiter, and splits +the results of the other expansions into words on these characters. +If IFS is unset, or its value is exactly <space><tab><newline>, +the default, then sequences of + <space>, <tab>, and <newline> +at the beginning and end of the results of the previous +expansions are ignored, and any sequence of IFS +characters not at the beginning or end serves to delimit words. +If IFS has a value other than the default, then sequences of +the whitespace characters space and tab +are ignored at the beginning and end of the +word, as long as the whitespace character is in the +value of IFS (an IFS whitespace character). +Any character in IFS that is not IFS +whitespace, along with any adjacent IFS +whitespace characters, delimits a field. A sequence of IFS +whitespace characters is also treated as a delimiter. +If the value of IFS is null, no word splitting occurs. +

+ +Explicit null arguments ("" or ") are retained. +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. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.8 Filename Expansion

+ +
+ +
3.5.8.1 Pattern Matching  How the shell matches patterns.
+ + + + +

+ +After word splitting, unless the `-f' option has been set +(see section 4.3.1 The Set Builtin), Bash scans each word for the characters +`*', `?', and `['. +If one of these characters appears, then the word is +regarded as a pattern, +and replaced with an alphabetically sorted list of +file names matching the pattern. If no matching file names are found, +and the shell option nullglob is disabled, the word is left +unchanged. +If the nullglob option is set, and no matches are found, the word +is removed. +If the failglob shell option is set, and no matches are found, +an error message is printed and the command is not executed. +If the shell option nocaseglob is enabled, the match is performed +without regard to the case of alphabetic characters. +

+ +When a pattern is used for filename expansion, the character `.' +at the start of a filename or immediately following a slash +must be matched explicitly, unless the shell option dotglob is set. +When matching a file name, the slash character must always be +matched explicitly. +In other cases, the `.' character is not treated specially. +

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

+ +The GLOBIGNORE +shell variable may be used to restrict the set of filenames matching a +pattern. If GLOBIGNORE +is set, each matching filename that also matches one of the patterns in +GLOBIGNORE is removed from the list of matches. The filenames +`.' and `..' +are always ignored when GLOBIGNORE +is set and not null. +However, setting GLOBIGNORE to a non-null value has the effect of +enabling the dotglob +shell option, so all other filenames beginning with a +`.' will match. +To get the old behavior of ignoring filenames beginning with a +`.', make `.*' one of the patterns in GLOBIGNORE. +The dotglob option is disabled when GLOBIGNORE +is unset. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.8.1 Pattern Matching

+ +

+ +Any character that appears in a pattern, other than the special pattern +characters described below, matches itself. +The NUL character may not occur in a pattern. +A backslash escapes the following character; the +escaping backslash is discarded when matching. +The special pattern characters must be quoted if they are to be matched +literally. +

+ +The special pattern characters have the following meanings: +

+
* +
Matches any string, including the null string. +When the globstar shell option is enabled, and `*' is used in +a filename expansion context, two adjacent `*'s used as a single +pattern will match all files and zero or more directories and +subdirectories. +If followed by a `/', two adjacent `*'s will match only +directories and subdirectories. +
? +
Matches any single character. +
[...] +
Matches any one of the enclosed characters. A pair of characters +separated by a hyphen denotes a range expression; +any character that sorts between those two characters, inclusive, +using the current locale's collating sequence and character set, +is matched. If the first character following the +`[' is a `!' or a `^' +then any character not enclosed is matched. A `-' +may be matched by including it as the first or last character +in the set. A `]' may be matched by including it as the first +character in the set. +The sorting order of characters in range expressions is determined by +the current locale and the value of the LC_COLLATE shell variable, +if set. +

+ +For example, in the default C locale, `[a-dx-z]' is equivalent to +`[abcdxyz]'. Many locales sort characters in dictionary order, and in +these locales `[a-dx-z]' is typically not equivalent to `[abcdxyz]'; +it might be equivalent to `[aBbCcDdxXyYz]', for example. To obtain +the traditional interpretation of ranges in bracket expressions, you can +force the use of the C locale by setting the LC_COLLATE or +LC_ALL environment variable to the value `C'. +

+ +Within `[' and `]', character classes can be specified +using the syntax +[:class:], where class is one of the +following classes defined in the POSIX standard: +
 
alnum   alpha   ascii   blank   cntrl   digit   graph   lower
+print   punct   space   upper   word    xdigit
+
A character class matches any character belonging to that class. +The word character class matches letters, digits, and the character +`_'. +

+ +Within `[' and `]', an equivalence class can be +specified using the syntax [=c=], which +matches all characters with the same collation weight (as defined +by the current locale) as the character c. +

+ +Within `[' and `]', the syntax [.symbol.] +matches the collating symbol symbol. +

+

+ +If the extglob shell option is enabled using the shopt +builtin, several extended pattern matching operators are recognized. +In the following description, a pattern-list is a list of one +or more patterns separated by a `|'. +Composite patterns may be formed using one or more of the following +sub-patterns: +

+ +

+
?(pattern-list) +
Matches zero or one occurrence of the given patterns. +

+ +

*(pattern-list) +
Matches zero or more occurrences of the given patterns. +

+ +

+(pattern-list) +
Matches one or more occurrences of the given patterns. +

+ +

@(pattern-list) +
Matches one of the given patterns. +

+ +

!(pattern-list) +
Matches anything except one of the given patterns. +
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.5.9 Quote Removal

+ +

+ +After the preceding expansions, all unquoted occurrences of the +characters `\', `'', and `"' that did not +result from one of the above expansions are removed. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6 Redirections

+ +

+ +Before a command is executed, its input and output +may be 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. +

+ +Each redirection that may be preceded by a file descriptor number +may instead be preceded by a word of the form {varname}. +In this case, for each redirection operator except +>&- and <&-, the shell will allocate a file descriptor greater +than 10 and assign it to {varname}. If >&- or <&- is preceded +by {varname}, the value of varname defines the file +descriptor to close. +

+ +In the following descriptions, if the file descriptor number is +omitted, and the first character of the redirection operator is +`<', the redirection refers to the standard input (file +descriptor 0). If the first character of the redirection operator +is `>', the redirection refers to the standard output (file +descriptor 1). +

+ +The word following the redirection operator in the following +descriptions, unless otherwise noted, is subjected to brace expansion, +tilde expansion, parameter expansion, command substitution, arithmetic +expansion, quote removal, filename expansion, and word splitting. +If it expands to more than one word, Bash reports an error. +

+ +Note that the order of redirections is significant. For example, +the command +
 
ls > dirlist 2>&1
+
directs both standard output (file descriptor 1) and standard error +(file descriptor 2) to the file dirlist, while the command +
 
ls 2>&1 > dirlist
+
directs only the standard output to file dirlist, +because the standard error was made a copy of the standard output +before the standard output was redirected to dirlist. +

+ +Bash handles several filenames specially when they are used in +redirections, as described in the following table: +

+ +

+
/dev/fd/fd +
If fd is a valid integer, file descriptor fd is duplicated. +

+ +

/dev/stdin +
File descriptor 0 is duplicated. +

+ +

/dev/stdout +
File descriptor 1 is duplicated. +

+ +

/dev/stderr +
File descriptor 2 is duplicated. +

+ +

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

+ +

/dev/udp/host/port +
If host is a valid hostname or Internet address, and port +is an integer port number or service name, Bash attempts to open a UDP +connection to the corresponding socket. +

+ +

+

+ +A failure to open or create a file causes the redirection to fail. +

+ +Redirections using file descriptors greater than 9 should be used with +care, as they may conflict with file descriptors the shell uses +internally. +

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.1 Redirecting Input

+ +Redirection of input causes the file whose name results from +the expansion of word +to be opened for reading on file descriptor n, +or the standard input (file descriptor 0) if n +is not specified. +

+ +The general format for redirecting input is: +
 
[n]<word
+

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.2 Redirecting Output

+ +Redirection of output causes the file whose name results from +the expansion of word +to be opened for writing on file descriptor n, +or the standard output (file descriptor 1) if n +is not specified. If the file does not exist it is created; +if it does exist it is truncated to zero size. +

+ +The general format for redirecting output is: +
 
[n]>[|]word
+

+ +If the redirection operator is `>', and the noclobber +option to the set builtin has been enabled, the redirection +will fail if the file whose name results from the expansion of +word exists and is a regular file. +If the redirection operator is `>|', or the redirection operator is +`>' and the noclobber option is not enabled, the redirection +is attempted even if the file named by word exists. +

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.3 Appending Redirected Output

+ +Redirection of output in this fashion +causes the file whose name results from +the expansion of word +to be opened for appending on file descriptor n, +or the standard output (file descriptor 1) if n +is not specified. If the file does not exist it is created. +

+ +The general format for appending output is: +
 
[n]>>word
+

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.4 Redirecting Standard Output and Standard Error

+ +This construct allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be redirected to the file whose name is the +expansion of word. +

+ +There are two formats for redirecting standard output and +standard error: +
 
&>word
+
and +
 
>&word
+
Of the two forms, the first is preferred. +This is semantically equivalent to +
 
>word 2>&1
+

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.5 Appending Standard Output and Standard Error

+ +This construct allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be appended to the file whose name is the +expansion of word. +

+ +The format for appending standard output and standard error is: +
 
&>>word
+
This is semantically equivalent to +
 
>>word 2>&1
+

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.6 Here Documents

+ +This type of redirection instructs the shell to read input from the +current source until a line containing only word +(with no trailing blanks) is seen. All of +the lines read up to that point are then used as the standard +input for a command. +

+ +The format of here-documents is: +
 
<<[-]word
+        here-document
+delimiter
+

+ +No parameter expansion, command substitution, arithmetic expansion, +or filename expansion is performed on +word. If any characters in word are quoted, the +delimiter is the result of quote removal on word, +and the lines in the here-document are not expanded. +If word is unquoted, +all lines of the here-document are subjected to parameter expansion, +command substitution, and arithmetic expansion. In the latter +case, the character sequence \newline is ignored, and `\' +must be used to quote the characters +`\', `$', and ``'. +

+ +If the redirection operator is `<<-', +then all leading tab characters are stripped from input lines and the +line containing delimiter. +This allows here-documents within shell scripts to be indented in a +natural fashion. +

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.7 Here Strings

+ +A variant of here documents, the format is: +
 
<<< word
+

+ +The word is expanded and supplied to the command on its standard +input. +

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.8 Duplicating File Descriptors

+ +The redirection operator +
 
[n]<&word
+
is used to duplicate input file descriptors. +If word +expands to one or more digits, the file descriptor denoted by n +is made to be a copy of that file descriptor. +If the digits in word do not specify a file descriptor open for +input, a redirection error occurs. +If word +evaluates to `-', file descriptor n is closed. If +n is not specified, the standard input (file descriptor 0) is used. +

+ +The operator +
 
[n]>&word
+
is used similarly to duplicate output file descriptors. If +n is not specified, the standard output (file descriptor 1) is used. +If the digits in word do not specify a file descriptor open for +output, a redirection error occurs. +As a special case, if n is omitted, and word does not +expand to one or more digits, the standard output and standard +error are redirected as described previously. +

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.9 Moving File Descriptors

+ +The redirection operator +
 
[n]<&digit-
+
moves the file descriptor digit to file descriptor n, +or the standard input (file descriptor 0) if n is not specified. +digit is closed after being duplicated to n. +

+ +Similarly, the redirection operator +
 
[n]>&digit-
+
moves the file descriptor digit to file descriptor n, +or the standard output (file descriptor 1) if n is not specified. +

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.6.10 Opening File Descriptors for Reading and Writing

+ +The redirection operator +
 
[n]<>word
+
causes the file whose name is the expansion of word +to be opened for both reading and writing on file descriptor +n, or on file descriptor 0 if n +is not specified. If the file does not exist, it is created. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.7 Executing Commands

+ +

+ +

+ + + + + + +
3.7.1 Simple Command Expansion  How Bash expands simple commands before + executing them.
3.7.2 Command Search and Execution  How Bash finds commands and runs them.
3.7.3 Command Execution Environment  The environment in which Bash + executes commands that are not + shell builtins.
3.7.4 Environment  The environment given to a command.
3.7.5 Exit Status  The status returned by commands and how Bash + interprets it.
3.7.6 Signals  What happens when Bash or a command it runs + receives a signal.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.7.1 Simple Command Expansion

+ +

+ +When a simple command is executed, the shell performs the following +expansions, assignments, and redirections, from left to right. +

+ +

    +
  1. +The words that the parser has marked as variable assignments (those +preceding the command name) and redirections are saved for later +processing. +

    + +

  2. +The words that are not variable assignments or redirections are +expanded (see section 3.5 Shell Expansions). +If any words remain after expansion, the first word +is taken to be the name of the command and the remaining words are +the arguments. +

    + +

  3. +Redirections are performed as described above (see section 3.6 Redirections). +

    + +

  4. +The text after the `=' in each variable assignment undergoes tilde +expansion, parameter expansion, command substitution, arithmetic expansion, +and quote removal before being assigned to the variable. +
+

+ +If no command name results, the variable assignments affect the current +shell environment. Otherwise, the variables are added to the environment +of the executed command and do not affect the current shell environment. +If any of the assignments attempts to assign a value to a readonly variable, +an error occurs, and the command exits with a non-zero status. +

+ +If no command name results, redirections are performed, but do not +affect the current shell environment. A redirection error causes the +command to exit with a non-zero status. +

+ +If there is a command name left after expansion, execution proceeds as +described below. Otherwise, the command exits. If one of the expansions +contained a command substitution, the exit status of the command is +the exit status of the last command substitution performed. If there +were no command substitutions, the command exits with a status of zero. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.7.2 Command Search and Execution

+ +

+ +After a command has been split into words, if it results in a +simple command and an optional list of arguments, the following +actions are taken. +

+ +

    +
  1. +If the command name contains no slashes, the shell attempts to +locate it. If there exists a shell function by that name, that +function is invoked as described in 3.3 Shell Functions. +

    + +

  2. +If the name does not match a function, the shell searches for +it in the list of shell builtins. If a match is found, that +builtin is invoked. +

    + +

  3. +If the name is neither a shell function nor a builtin, +and contains no slashes, Bash searches each element of +$PATH for a directory containing an executable file +by that name. Bash uses a hash table to remember the full +pathnames of executable files to avoid multiple PATH searches +(see the description of hash in 4.1 Bourne Shell Builtins). +A full search of the directories in $PATH +is performed only if the command is not found in the hash table. +If the search is unsuccessful, the shell searches for a defined shell +function named command_not_found_handle. +If that function exists, it is invoked with the original command and +the original command's arguments as its arguments, and the function's +exit status becomes the exit status of the shell. +If that function is not defined, the shell prints an error +message and returns an exit status of 127. +

    + +

  4. +If the search is successful, or if the command name contains +one or more slashes, the shell executes the named program in +a separate execution environment. +Argument 0 is set to the name given, and the remaining arguments +to the command are set to the arguments supplied, if any. +

    + +

  5. +If this execution fails because the file is not in executable +format, and the file is not a directory, it is assumed to be a +shell script and the shell executes it as described in +3.8 Shell Scripts. +

    + +

  6. +If the command was not begun asynchronously, the shell waits for +the command to complete and collects its exit status. +

    + +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.7.3 Command Execution Environment

+ +

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

+ +

    +
  • +open files inherited by the shell at invocation, as modified by +redirections supplied to the exec builtin +

    + +

  • +the current working directory as set by cd, pushd, or +popd, or inherited by the shell at invocation +

    + +

  • +the file creation mode mask as set by umask or inherited from +the shell's parent +

    + +

  • +current traps set by trap +

    + +

  • +shell parameters that are set by variable assignment or with set +or inherited from the shell's parent in the environment +

    + +

  • +shell functions defined during execution or inherited from the shell's +parent in the environment +

    + +

  • +options enabled at invocation (either by default or with command-line +arguments) or by set +

    + +

  • +options enabled by shopt (see section 4.3.2 The Shopt Builtin) +

    + +

  • +shell aliases defined with alias (see section 6.6 Aliases) +

    + +

  • +various process IDs, including those of background jobs +(see section 3.2.3 Lists of Commands), the value of $$, and the value of +$PPID +

    + +

+

+ +When a simple command other than a builtin or shell function +is to be executed, it +is invoked in a separate execution environment that consists of +the following. Unless otherwise noted, the values are inherited +from the shell. +

+ +

    +
  • +the shell's open files, plus any modifications and additions specified +by redirections to the command +

    + +

  • +the current working directory +

    + +

  • +the file creation mode mask +

    + +

  • +shell variables and functions marked for export, along with variables +exported for the command, passed in the environment (see section 3.7.4 Environment) +

    + +

  • +traps caught by the shell are reset to the values inherited from the +shell's parent, and traps ignored by the shell are ignored +

    + +

+

+ +A command invoked in this separate environment cannot affect the +shell's execution environment. +

+ +Command substitution, commands grouped with parentheses, +and asynchronous commands are invoked in a +subshell environment that is a duplicate of the shell environment, +except that traps caught by the shell are reset to the values +that the shell inherited from its parent at invocation. Builtin +commands that are invoked as part of a pipeline are also executed +in a subshell environment. Changes made to the subshell environment +cannot affect the shell's execution environment. +

+ +Subshells spawned to execute command substitutions inherit the value of +the `-e' option from the parent shell. When not in POSIX mode, +Bash clears the `-e' option in such subshells. +

+ +If a command is followed by a `&' and job control is not active, the +default standard input for the command is the empty file `/dev/null'. +Otherwise, the invoked command inherits the file descriptors of the calling +shell as modified by redirections. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.7.4 Environment

+ +

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

+ +Bash provides several ways to manipulate the environment. +On invocation, the shell scans its own environment and +creates a parameter for each name found, automatically marking +it for export +to child processes. Executed commands inherit the environment. +The export and `declare -x' +commands allow parameters and functions to be added to and +deleted from the environment. If the value of a parameter +in the environment is modified, the new value becomes part +of the environment, replacing the old. The environment +inherited by any executed command consists of the shell's +initial environment, whose values may be modified in the shell, +less any pairs removed by the unset and `export -n' +commands, plus any additions via the export and +`declare -x' commands. +

+ +The environment for any simple command +or function may be augmented temporarily by prefixing it with +parameter assignments, as described in 3.4 Shell Parameters. +These assignment statements affect only the environment seen +by that command. +

+ +If the `-k' option is set (see section 4.3.1 The Set Builtin), then all +parameter assignments are placed in the environment for a command, +not just those that precede the command name. +

+ +When Bash invokes an external command, the variable `$_' +is set to the full path name of the command and passed to that +command in its environment. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.7.5 Exit Status

+ +

+ +The exit status of an executed command is the value returned by the +waitpid system call or equivalent function. Exit statuses +fall between 0 and 255, though, as explained below, the shell may +use values above 125 specially. Exit statuses from shell builtins and +compound commands are also limited to this range. Under certain +circumstances, the shell will use special values to indicate specific +failure modes. +

+ +For the shell's purposes, a command which exits with a +zero exit status has succeeded. +A non-zero exit status indicates failure. +This seemingly counter-intuitive scheme is used so there +is one well-defined way to indicate success and a variety of +ways to indicate various failure modes. +When a command terminates on a fatal signal whose number is N, +Bash uses the value 128+N as the exit status. +

+ +If a command is not found, the child process created to +execute it returns a status of 127. If a command is found +but is not executable, the return status is 126. +

+ +If a command fails because of an error during expansion or redirection, +the exit status is greater than zero. +

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

+ +All of the Bash builtins return an exit status of zero if they succeed +and a non-zero status on failure, so they may be used by the +conditional and list constructs. +All builtins return an exit status of 2 to indicate incorrect usage. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.7.6 Signals

+ +

+ +When Bash is interactive, in the absence of any traps, it ignores +SIGTERM (so that `kill 0' does not kill an interactive shell), +and SIGINT +is caught and handled (so that the wait builtin is interruptible). +When Bash receives a SIGINT, it breaks out of any executing loops. +In all cases, Bash ignores SIGQUIT. +If job control is in effect (see section 7. Job Control), Bash +ignores SIGTTIN, SIGTTOU, and SIGTSTP. +

+ +Non-builtin commands started by Bash have signal handlers set to the +values inherited by the shell from its parent. +When job control is not in effect, asynchronous commands +ignore SIGINT and SIGQUIT in addition to these inherited +handlers. +Commands run as a result of +command substitution ignore the keyboard-generated job control signals +SIGTTIN, SIGTTOU, and SIGTSTP. +

+ +The shell exits by default upon receipt of a SIGHUP. +Before exiting, an interactive shell resends the SIGHUP to +all jobs, running or stopped. +Stopped jobs are sent SIGCONT to ensure that they receive +the SIGHUP. +To prevent the shell from sending the SIGHUP signal to a +particular job, it should be removed +from the jobs table with the disown +builtin (see section 7.2 Job Control Builtins) or marked +to not receive SIGHUP using disown -h. +

+ +If the huponexit shell option has been set with shopt +(see section 4.3.2 The Shopt Builtin), Bash sends a SIGHUP to all jobs when +an interactive login shell exits. +

+ +If Bash is waiting for a command to complete and receives a signal +for which a trap has been set, the trap will not be executed until +the command completes. +When Bash is waiting for an asynchronous +command via the wait builtin, the reception of a signal for +which a trap has been set will cause the wait builtin to return +immediately with an exit status greater than 128, immediately after +which the trap is executed. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

3.8 Shell Scripts

+ +

+ +A shell script is a text file containing shell commands. When such +a file is used as the first non-option argument when invoking Bash, +and neither the `-c' nor `-s' option is supplied +(see section 6.1 Invoking Bash), +Bash reads and executes commands from the file, then exits. This +mode of operation creates a non-interactive shell. The shell first +searches for the file in the current directory, and looks in the +directories in $PATH if not found there. +

+ +When Bash runs +a shell script, it sets the special parameter 0 to the name +of the file, rather than the name of the shell, and the positional +parameters are set to the remaining arguments, if any are given. +If no additional arguments are supplied, the positional parameters +are unset. +

+ +A shell script may be made executable by using the chmod command +to turn on the execute bit. When Bash finds such a file while +searching the $PATH for a command, it spawns a subshell to +execute it. In other words, executing +
 
filename arguments
+
is equivalent to executing +
 
bash filename arguments
+

+ +if filename is an executable shell script. +This subshell reinitializes itself, so that the effect is as if a +new shell had been invoked to interpret the script, with the +exception that the locations of commands remembered by the parent +(see the description of hash in 4.1 Bourne Shell Builtins) +are retained by the child. +

+ +Most versions of Unix make this a part of the operating system's command +execution mechanism. If the first line of a script begins with +the two characters `#!', the remainder of the line specifies +an interpreter for the program. +Thus, you can specify Bash, awk, Perl, or some other +interpreter and write the rest of the script file in that language. +

+ +The arguments to the interpreter +consist of a single optional argument following the interpreter +name on the first line of the script file, followed by the name of +the script file, followed by the rest of the arguments. Bash +will perform this action on operating systems that do not handle it +themselves. Note that some older versions of Unix limit the interpreter +name and argument to a maximum of 32 characters. +

+ +Bash scripts often begin with #! /bin/bash (assuming that +Bash has been installed in `/bin'), since this ensures that +Bash will be used to interpret the script, even if it is executed +under another shell. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

4. Shell Builtin Commands

+ +

+ +

+ + + + +
4.1 Bourne Shell Builtins  Builtin commands inherited from the Bourne + Shell.
4.2 Bash Builtin Commands  Table of builtins specific to Bash.
4.3 Modifying Shell Behavior  Builtins to modify shell attributes and + optional behavior.
4.4 Special Builtins  Builtin commands classified specially by + POSIX.
+

+ +Builtin commands are contained within the shell itself. +When the name of a builtin command is used as the first word of +a simple command (see section 3.2.1 Simple Commands), the shell executes +the command directly, without invoking another program. +Builtin commands are necessary to implement functionality impossible +or inconvenient to obtain with separate utilities. +

+ +This section briefly describes the builtins which Bash inherits from +the Bourne Shell, as well as the builtin commands which are unique +to or have been extended in Bash. +

+ +Several builtin commands are described in other chapters: builtin +commands which provide the Bash interface to the job control +facilities (see section 7.2 Job Control Builtins), the directory stack +(see section 6.8.1 Directory Stack Builtins), the command history +(see section 9.2 Bash History Builtins), and the programmable completion +facilities (see section 8.7 Programmable Completion Builtins). +

+ +Many of the builtins have been extended by POSIX or Bash. +

+ +Unless otherwise noted, each builtin command documented as accepting +options preceded by `-' accepts `--' +to signify the end of the options. +The :, true, false, and test +builtins do not accept options and do not treat `--' specially. +The exit, logout, break, continue, let, +and shift builtins accept and process arguments beginning +with `-' without requiring `--'. +Other builtins that accept arguments but are not specified as accepting +options interpret arguments beginning with `-' as invalid options and +require `--' to prevent this interpretation. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

4.1 Bourne Shell Builtins

+ +

+ +The following shell builtin commands are inherited from the Bourne Shell. +These commands are implemented as specified by the POSIX standard. +

+ +

+
: (a colon) +
+
 
: [arguments]
+
Do nothing beyond expanding arguments and performing redirections. +The return status is zero. +

+ +

. (a period) +
+
 
. filename [arguments]
+
Read and execute commands from the filename argument in the +current shell context. If filename does not contain a slash, +the PATH variable is used to find filename. +When Bash is not in POSIX mode, the current directory is searched +if filename is not found in $PATH. +If any arguments are supplied, they become the positional +parameters when filename is executed. Otherwise the positional +parameters are unchanged. +The return status is the exit status of the last command executed, or +zero if no commands are executed. If filename is not found, or +cannot be read, the return status is non-zero. +This builtin is equivalent to source. +

+ +

break +
+
 
break [n]
+
Exit from a for, while, until, or select loop. +If n is supplied, the nth enclosing loop is exited. +n must be greater than or equal to 1. +The return status is zero unless n is not greater than or equal to 1. +

+ +

cd +
+
 
cd [-L|-P] [directory]
+
Change the current working directory to directory. +If directory is not given, the value of the HOME shell +variable is used. +If the shell variable CDPATH exists, it is used as a search path. +If directory begins with a slash, CDPATH is not used. +

+ +The `-P' option means to not follow symbolic links; symbolic +links are followed by default or with the `-L' option. +If directory is `-', it is equivalent to $OLDPWD. +

+ +If a non-empty directory name from CDPATH is used, or if +`-' is the first argument, and the directory change is +successful, the absolute pathname of the new working directory is +written to the standard output. +

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

+ +

continue +
+
 
continue [n]
+
Resume the next iteration of an enclosing for, while, +until, or select loop. +If n is supplied, the execution of the nth enclosing loop +is resumed. +n must be greater than or equal to 1. +The return status is zero unless n is not greater than or equal to 1. +

+ +

eval +
+
 
eval [arguments]
+
The arguments are concatenated together into a single command, which is +then read and executed, and its exit status returned as the exit status +of eval. +If there are no arguments or only empty arguments, the return status is +zero. +

+ +

exec +
+
 
exec [-cl] [-a name] [command [arguments]]
+
If command +is supplied, it replaces the shell without creating a new process. +If the `-l' option is supplied, the shell places a dash at the +beginning of the zeroth argument passed to command. +This is what the login program does. +The `-c' option causes command to be executed with an empty +environment. +If `-a' is supplied, the shell passes name as the zeroth +argument to command. +If no command is specified, redirections may be used to affect +the current shell environment. If there are no redirection errors, the +return status is zero; otherwise the return status is non-zero. +

+ +

exit +
+
 
exit [n]
+
Exit the shell, returning a status of n to the shell's parent. +If n is omitted, the exit status is that of the last command executed. +Any trap on EXIT is executed before the shell terminates. +

+ +

export +
+
 
export [-fn] [-p] [name[=value]]
+
Mark each name to be passed to child processes +in the environment. If the `-f' option is supplied, the names +refer to shell functions; otherwise the names refer to shell variables. +The `-n' option means to no longer mark each name for export. +If no names are supplied, or if the `-p' option is given, a +list of exported names is displayed. +The `-p' option displays output in a form that may be reused as input. +If a variable name is followed by =value, the value of +the variable is set to value. +

+ +The return status is zero unless an invalid option is supplied, one of +the names is not a valid shell variable name, or `-f' is supplied +with a name that is not a shell function. +

+ +

getopts +
+
 
getopts optstring name [args]
+
getopts is used by shell scripts to parse positional parameters. +optstring contains the option characters to be recognized; if a +character is followed by a colon, the option is expected to have an +argument, which should be separated from it by white space. +The colon (`:') and question mark (`?') may not be +used as option characters. +Each time it is invoked, getopts +places the next option in the shell variable name, initializing +name if it does not exist, +and the index of the next argument to be processed into the +variable OPTIND. +OPTIND is initialized to 1 each time the shell or a shell script +is invoked. +When an option requires an argument, +getopts places that argument into the variable OPTARG. +The shell does not reset OPTIND automatically; it must be manually +reset between multiple calls to getopts within the same shell +invocation if a new set of parameters is to be used. +

+ +When the end of options is encountered, getopts exits with a +return value greater than zero. +OPTIND is set to the index of the first non-option argument, +and name is set to `?'. +

+ +getopts +normally parses the positional parameters, but if more arguments are +given in args, getopts parses those instead. +

+ +getopts can report errors in two ways. If the first character of +optstring is a colon, silent +error reporting is used. In normal operation diagnostic messages +are printed when invalid options or missing option arguments are +encountered. +If the variable OPTERR +is set to 0, no error messages will be displayed, even if the first +character of optstring is not a colon. +

+ +If an invalid option is seen, +getopts places `?' into name and, if not silent, +prints an error message and unsets OPTARG. +If getopts is silent, the option character found is placed in +OPTARG and no diagnostic message is printed. +

+ +If a required argument is not found, and getopts +is not silent, a question mark (`?') is placed in name, +OPTARG is unset, and a diagnostic message is printed. +If getopts is silent, then a colon (`:') is placed in +name and OPTARG is set to the option character found. +

+ +

hash +
+
 
hash [-r] [-p filename] [-dt] [name]
+
Remember the full pathnames of commands specified as name arguments, +so they need not be searched for on subsequent invocations. +The commands are found by searching through the directories listed in +$PATH. +The `-p' option inhibits the path search, and filename is +used as the location of name. +The `-r' option causes the shell to forget all remembered locations. +The `-d' option causes the shell to forget the remembered location +of each name. +If the `-t' option is supplied, the full pathname to which each +name corresponds is printed. If multiple name arguments are +supplied with `-t' the name is printed before the hashed +full pathname. +The `-l' option causes output to be displayed in a format +that may be reused as input. +If no arguments are given, or if only `-l' is supplied, +information about remembered commands is printed. +The return status is zero unless a name is not found or an invalid +option is supplied. +

+ +

pwd +
+
 
pwd [-LP]
+
Print the absolute pathname of the current working directory. +If the `-P' option is supplied, the pathname printed will not +contain symbolic links. +If the `-L' option is supplied, the pathname printed may contain +symbolic links. +The return status is zero unless an error is encountered while +determining the name of the current directory or an invalid option +is supplied. +

+ +

readonly +
+
 
readonly [-aApf] [name[=value]] ...
+
Mark each name as readonly. +The values of these names may not be changed by subsequent assignment. +If the `-f' option is supplied, each name refers to a shell +function. +The `-a' option means each name refers to an indexed +array variable; the `-A' option means each name refers +to an associative array variable. +If no name arguments are given, or if the `-p' +option is supplied, a list of all readonly names is printed. +The `-p' option causes output to be displayed in a format that +may be reused as input. +If a variable name is followed by =value, the value of +the variable is set to value. +The return status is zero unless an invalid option is supplied, one of +the name arguments is not a valid shell variable or function name, +or the `-f' option is supplied with a name that is not a shell function. +

+ +

return +
+
 
return [n]
+
Cause a shell function to exit with the return value n. +If 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 . (or source) builtin, returning either 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 RETURN trap is executed +before execution resumes after the function or script. +The return status is non-zero if return is used outside a function +and not during the execution of a script by . or source. +

+ +

shift +
+
 
shift [n]
+
Shift the positional parameters to the left by n. +The positional parameters from n+1 ... $# are +renamed to $1 ... $#-n. +Parameters represented by the numbers $# to $#-n+1 +are unset. +n must be a non-negative number less than or equal to $#. +If n is zero or greater than $#, the positional parameters +are not changed. +If n is not supplied, it is assumed to be 1. +The return status is zero unless n is greater than $# or +less than zero, non-zero otherwise. +

+ +

test +
[ +
+ +Evaluate a conditional expression expr. +Each operator and operand must be a separate argument. +Expressions are composed of the primaries described below in +6.4 Bash Conditional Expressions. +test does not accept any options, nor does it accept and ignore +an argument of `--' as signifying the end of options. +

+ +When the [ form is used, the last argument to the command must +be a ]. +

+ +Expressions may be combined using the following operators, listed in +decreasing order of precedence. +The evaluation depends on the number of arguments; see below. +

+ +

+
! expr +
True if expr is false. +

+ +

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

+ +

expr1 -a expr2 +
True if both expr1 and expr2 are true. +

+ +

expr1 -o expr2 +
True if either expr1 or expr2 is true. +
+

+ +The test and [ builtins evaluate conditional +expressions using a set of rules based on the number of arguments. +

+ +

+
0 arguments +
The expression is false. +

+ +

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

+ +

2 arguments +
If the first argument is `!', the expression is true if and +only if the second argument is null. +If the first argument is one of the unary conditional operators +(see section 6.4 Bash Conditional Expressions), the expression +is true if the unary test is true. +If the first argument is not a valid unary operator, the expression is +false. +

+ +

3 arguments +
If the second argument is one of the binary conditional +operators (see section 6.4 Bash Conditional Expressions), the +result of the expression is the result of the binary test using the +first and third arguments as operands. +The `-a' and `-o' operators are considered binary operators +when there are three arguments. +If the first argument is `!', the value is the negation of +the two-argument test using the second and third arguments. +If the first argument is exactly `(' and the third argument is +exactly `)', the result is the one-argument test of the second +argument. +Otherwise, the expression is false. +

+ +

4 arguments +
If the first argument is `!', the result is the negation of +the three-argument expression composed of the remaining arguments. +Otherwise, the expression is parsed and evaluated according to +precedence using the rules listed above. +

+ +

5 or more arguments +
The expression is parsed and evaluated according to precedence +using the rules listed above. +
+

+ +

times +
+
 
times
+
Print out the user and system times used by the shell and its children. +The return status is zero. +

+ +

trap +
+
 
trap [-lp] [arg] [sigspec ...]
+
The commands in arg are to be read and executed when the +shell receives signal sigspec. If arg is absent (and +there is a single sigspec) or +equal to `-', each specified signal's disposition is reset +to the value it had when the shell was started. +If arg is the null string, then the signal specified by +each sigspec is ignored by the shell and commands it invokes. +If arg is not present and `-p' has been supplied, +the shell displays the trap commands associated with each sigspec. +If no arguments are supplied, or +only `-p' is given, trap prints the list of commands +associated with each signal number in a form that may be reused as +shell input. +The `-l' option causes the shell to print a list of signal names +and their corresponding numbers. +Each sigspec is either a signal name or a signal number. +Signal names are case insensitive and the SIG prefix is optional. +

+ +If a sigspec +is 0 or EXIT, arg is executed when the shell exits. +If a sigspec is DEBUG, the command arg is executed +before every simple command, for command, case command, +select command, every arithmetic for command, and before +the first command executes in a shell function. +Refer to the description of the extdebug option to the +shopt builtin (see section 4.3.2 The Shopt Builtin) for details of its +effect on the DEBUG trap. +If a sigspec is RETURN, the command arg is executed +each time a shell function or a script executed with the . or +source builtins finishes executing. +

+ +If a sigspec is ERR, the command arg +is executed whenever a simple command has a non-zero exit status, +subject to the following conditions. +The ERR trap is not executed if the failed command is part of the +command list immediately following an until or while keyword, +part of the test following the if or elif reserved words, +part of a command executed in a && or || list, +or if the command's return +status is being inverted using !. +These are the same conditions obeyed by the errexit option. +

+ +Signals ignored upon entry to the shell cannot be trapped or reset. +Trapped signals that are not being ignored are reset to their original +values in a subshell or subshell environment when one is created. +

+ +The return status is zero unless a sigspec does not specify a +valid signal. +

+ +

umask +
+
 
umask [-p] [-S] [mode]
+
Set the shell process's file creation mask to mode. If +mode begins with a digit, it is interpreted as an octal number; +if not, it is interpreted as a symbolic mode mask similar +to that accepted by the chmod command. If mode is +omitted, the current value of the mask is printed. If the `-S' +option is supplied without a mode argument, the mask is printed +in a symbolic format. +If the `-p' option is supplied, and mode +is omitted, the output is in a form that may be reused as input. +The return status is zero if the mode is successfully changed or if +no mode argument is supplied, and non-zero otherwise. +

+ +Note that when the mode is interpreted as an octal number, each number +of the umask is subtracted from 7. Thus, a umask of 022 +results in permissions of 755. +

+ +

unset +
+
 
unset [-fv] [name]
+
Each variable or function name is removed. +If no options are supplied, or the `-v' option is given, each +name refers to a shell variable. +If the `-f' option is given, the names 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 name is readonly. +
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

4.2 Bash Builtin Commands

+ +

+ +This section describes builtin commands which are unique to +or have been extended in Bash. +Some of these commands are specified in the POSIX standard. +

+ +

+ +
alias +
+
 
alias [-p] [name[=value] ...]
+

+ +Without arguments or with the `-p' option, alias prints +the list of aliases on the standard output in a form that allows +them to be reused as input. +If arguments are supplied, an alias is defined for each name +whose value is given. If no value is given, the name +and value of the alias is printed. +Aliases are described in 6.6 Aliases. +

+ +

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

+ +Display current Readline (see section 8. Command Line Editing) +key and function bindings, +bind a key sequence to a Readline function or macro, +or set a Readline variable. +Each non-option argument is a command as it would appear in a +Readline initialization file (see section 8.3 Readline Init File), +but each binding or command must be passed as a separate argument; e.g., +`"\C-x\C-r":re-read-init-file'. +

+ +Options, if supplied, have the following meanings: +

+ +

+
-m keymap +
Use keymap as the keymap to be affected by +the subsequent bindings. Acceptable keymap +names are +emacs, +emacs-standard, +emacs-meta, +emacs-ctlx, +vi, +vi-move, +vi-command, and +vi-insert. +vi is equivalent to vi-command; +emacs is equivalent to emacs-standard. +

+ +

-l +
List the names of all Readline functions. +

+ +

-p +
Display Readline function names and bindings in such a way that they +can be used as input or in a Readline initialization file. +

+ +

-P +
List current Readline function names and bindings. +

+ +

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

+ +

-V +
List current Readline variable names and values. +

+ +

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

+ +

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

+ +

-f filename +
Read key bindings from filename. +

+ +

-q function +
Query about which keys invoke the named function. +

+ +

-u function +
Unbind all keys bound to the named function. +

+ +

-r keyseq +
Remove any current binding for keyseq. +

+ +

-x keyseq:shell-command +
Cause shell-command to be executed whenever keyseq is +entered. +When shell-command is executed, the shell sets the +READLINE_LINE variable to the contents of the Readline line +buffer and the READLINE_POINT variable to the current location +of the insertion point. +If the executed command changes the value of READLINE_LINE or +READLINE_POINT, those new values will be reflected in the +editing state. +
+

+ +The return status is zero unless an invalid option is supplied or an +error occurs. +

+ +

builtin +
+
 
builtin [shell-builtin [args]]
+
Run a shell builtin, passing it args, and return its exit status. +This is useful when defining a shell function with the same +name as a shell builtin, retaining the functionality of the builtin within +the function. +The return status is non-zero if shell-builtin is not a shell +builtin command. +

+ +

caller +
+
 
caller [expr]
+
Returns the context of any active subroutine call (a shell function or +a script executed with the . or source builtins). +

+ +Without expr, caller displays the line number and source +filename of the current subroutine call. +If a non-negative integer is supplied as expr, caller +displays the line number, subroutine name, and source file corresponding +to that position in the current execution call stack. This extra +information may be used, for example, to print a stack trace. The +current frame is frame 0. +

+ +The return value is 0 unless the shell is not executing a subroutine +call or expr does not correspond to a valid position in the +call stack. +

+ +

command +
+
 
command [-pVv] command [arguments ...]
+
Runs command with arguments ignoring any shell function +named command. +Only shell builtin commands or commands found by searching the +PATH are executed. +If there is a shell function named ls, running `command ls' +within the function will execute the external command ls +instead of calling the function recursively. +The `-p' option means to use a default value for PATH +that is guaranteed to find all of the standard utilities. +The return status in this case is 127 if command cannot be +found or an error occurred, and the exit status of command +otherwise. +

+ +If either the `-V' or `-v' option is supplied, a +description of command is printed. The `-v' option +causes a single word indicating the command or file name used to +invoke command to be displayed; the `-V' option produces +a more verbose description. In this case, the return status is +zero if command is found, and non-zero if not. +

+ +

declare +
+
 
declare [-aAfFilrtux] [-p] [name[=value] ...]
+

+ +Declare variables and give them attributes. If no names +are given, then display the values of variables instead. +

+ +The `-p' option will display the attributes and values of each +name. +When `-p' is used with name arguments, additional options +are ignored. +

+ +When `-p' is supplied without name arguments, declare +will display the attributes and values of all variables having the +attributes specified by the additional options. +If no other options are supplied with `-p', declare will +display the attributes and values of all shell variables. The `-f' +option will restrict the display to shell functions. +

+ +The `-F' option inhibits the display of function definitions; +only the function name and attributes are printed. +If the extdebug shell option is enabled using shopt +(see section 4.3.2 The Shopt Builtin), the source file name and line number where +the function is defined are displayed as well. +`-F' implies `-f'. +The following options can be used to restrict output to variables with +the specified attributes or to give variables attributes: +

+ +

+
-a +
Each name is an indexed array variable (see section 6.7 Arrays). +

+ +

-A +
Each name is an associative array variable (see section 6.7 Arrays). +

+ +

-f +
Use function names only. +

+ +

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

+ +

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

+ +

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

+ +

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

+ +

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

+ +

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

+ +Using `+' instead of `-' turns off the attribute instead, +with the exceptions that `+a' +may not be used to destroy an array variable and `+r' will not +remove the readonly attribute. +When used in a function, declare makes each name local, +as with the local command. If a variable name is followed by +=value, the value of the variable is set to value. +

+ +The return status is zero unless an invalid option is encountered, +an attempt is made to define a function using `-f foo=bar', +an attempt is made to assign a value to a readonly variable, +an attempt is made to assign a value to an array variable without +using the compound assignment syntax (see section 6.7 Arrays), +one of the names is not a valid shell variable name, +an attempt is made to turn off readonly status for a readonly variable, +an attempt is made to turn off array status for an array variable, +or an attempt is made to display a non-existent function with `-f'. +

+ +

echo +
+
 
echo [-neE] [arg ...]
+
Output the args, separated by spaces, terminated with a +newline. +The return status is always 0. +If `-n' is specified, the trailing newline is suppressed. +If the `-e' option is given, interpretation of the following +backslash-escaped characters is enabled. +The `-E' option disables the interpretation of these escape characters, +even on systems where they are interpreted by default. +The xpg_echo shell option may be used to +dynamically determine whether or not echo expands these +escape characters by default. +echo does not interpret `--' to mean the end of options. +

+ +echo interprets the following escape sequences: +

+
\a +
alert (bell) +
\b +
backspace +
\c +
suppress further output +
\e +
escape +
\f +
form feed +
\n +
new line +
\r +
carriage return +
\t +
horizontal tab +
\v +
vertical tab +
\\ +
backslash +
\0nnn +
the eight-bit character whose value is the octal value nnn +(zero to three octal digits) +
\xHH +
the eight-bit character whose value is the hexadecimal value HH +(one or two hex digits) +
+

+ +

enable +
+
 
enable [-a] [-dnps] [-f filename] [name ...]
+
Enable and disable builtin shell commands. +Disabling a builtin allows a disk command which has the same name +as a shell builtin to be executed without specifying a full pathname, +even though the shell normally searches for builtins before disk commands. +If `-n' is used, the names become disabled. Otherwise +names are enabled. For example, to use the test binary +found via $PATH instead of the shell builtin version, type +`enable -n test'. +

+ +If the `-p' option is supplied, or no name arguments appear, +a list of shell builtins is printed. With no other arguments, the list +consists of all enabled shell builtins. +The `-a' option means to list +each builtin with an indication of whether or not it is enabled. +

+ +The `-f' option means to load the new builtin command name +from shared object filename, on systems that support dynamic loading. +The `-d' option will delete a builtin loaded with `-f'. +

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

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

+ +

help +
+
 
help [-dms] [pattern]
+
Display helpful information about builtin commands. +If pattern is specified, help gives detailed help +on all commands matching pattern, otherwise a list of +the builtins is printed. +

+ +Options, if supplied, have the following meanings: +

+ +

+
-d +
Display a short description of each pattern +
-m +
Display the description of each pattern in a manpage-like format +
-s +
Display only a short usage synopsis for each pattern +
+

+ +The return status is zero unless no command matches pattern. +

+ +

let +
+
 
let expression [expression]
+
The let builtin allows arithmetic to be performed on shell +variables. Each expression is evaluated according to the +rules given below in 6.5 Shell Arithmetic. If the +last expression evaluates to 0, let returns 1; +otherwise 0 is returned. +

+ +

local +
+
 
local [option] name[=value] ...
+
For each argument, a local variable named name is created, +and assigned value. +The option can be any of the options accepted by declare. +local can only be used within a function; it makes the variable +name have a visible scope restricted to that function and its +children. The return status is zero unless local is used outside +a function, an invalid name is supplied, or name is a +readonly variable. +

+ +

logout +
+
 
logout [n]
+
Exit a login shell, returning a status of n to the shell's +parent. +

+ +

mapfile +
+
 
mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [
+-C callback] [-c quantum] [array]
+
Read lines from the standard input into the indexed array variable array, +or from file descriptor fd +if the `-u' option is supplied. +The variable MAPFILE is the default array. +Options, if supplied, have the following meanings: +
+ +
-n +
Copy at most count lines. If count is 0, all lines are copied. +
-O +
Begin assigning to array at index origin. +The default index is 0. +
-s +
Discard the first count lines read. +
-t +
Remove a trailing newline from each line read. +
-u +
Read lines from file descriptor fd instead of the standard input. +
-C +
Evaluate callback each time quantumP lines are read. +The `-c' option specifies quantum. +
-c +
Specify the number of lines read between each call to callback. +
+

+ +If `-C' is specified without `-c', +the default quantum is 5000. +When callback is evaluated, it is supplied the index of the next +array element to be assigned as an additional argument. +callback is evaluated after the line is read but before the +array element is assigned. +

+ +If not supplied with an explicit origin, mapfile will clear array +before assigning to it. +

+ +mapfile returns successfully unless an invalid option or option +argument is supplied, array is invalid or unassignable, or array +is not an indexed array. +

+ +

printf +
+
 
printf [-v var] format [arguments]
+
Write the formatted arguments to the standard output under the +control of the format. +The format is a character string which contains three types of objects: +plain characters, which are simply copied to standard output, character +escape sequences, which are converted and copied to the standard output, and +format specifications, each of which causes printing of the next successive +argument. +In addition to the standard printf(1) formats, `%b' causes +printf to expand backslash escape sequences in the corresponding +argument, +(except that `\c' terminates output, backslashes in +`\'', `\"', and `\?' are not removed, and octal escapes +beginning with `\0' may contain up to four digits), +and `%q' causes printf to output the +corresponding argument in a format that can be reused as shell input. +

+ +The `-v' option causes the output to be assigned to the variable +var rather than being printed to the standard output. +

+ +The format is reused as necessary to consume all of the arguments. +If the format requires more arguments than are supplied, the +extra format specifications behave as if a zero value or null string, as +appropriate, had been supplied. The return value is zero on success, +non-zero on failure. +

+ +

read +
+
 
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
+
One line is read from the standard input, or from the file descriptor +fd supplied as an argument to the `-u' option, and the first word +is assigned to the first name, the second word to the second name, +and so on, with leftover words and their intervening separators assigned +to the last name. +If there are fewer words read from the input stream than names, +the remaining names are assigned empty values. +The characters in the value of the IFS variable +are used to split the line into words. +The backslash character `\' may be used to remove any special +meaning for the next character read and for line continuation. +If no names are supplied, the line read is assigned to the +variable REPLY. +The return code is zero, unless end-of-file is encountered, read +times out (in which case the return code is greater than 128), or an +invalid file descriptor is supplied as the argument to `-u'. +

+ +Options, if supplied, have the following meanings: +

+ +

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

+ +

-d delim +
The first character of delim is used to terminate the input line, +rather than newline. +

+ +

-e +
Readline (see section 8. Command Line Editing) is used to obtain the line. +Readline uses the current (or default, if line editing was not previously +active) editing settings. +

+ +

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

+ +

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

+ +

-N nchars +
read returns after reading exactly nchars characters rather +than waiting for a complete line of input, unless EOF is encountered or +read times out. +Delimiter characters encountered in the input are +not treated specially and do not cause read to return until +nchars characters are read. +

+ +

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

+ +

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

+ +

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

+ +

-t timeout +
Cause read to time out and return failure if a complete line of +input is not read within timeout seconds. +timeout may be a decimal number with a fractional portion following +the decimal point. +This option is only effective if read is reading input from a +terminal, pipe, or other special file; it has no effect when reading +from regular files. +If timeout is 0, read returns success if input is available on +the specified file descriptor, failure otherwise. +The exit status is greater than 128 if the timeout is exceeded. +

+ +

-u fd +
Read input from file descriptor fd. +

+ +

+

+ +

readarray +
+
 
readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [
+-C callback] [-c quantum] [array]
+
Read lines from the standard input into the indexed array variable array, +or from file descriptor fd +if the `-u' option is supplied. +

+ +A synonym for mapfile. +

+ +

source +
+
 
source filename
+
A synonym for . (see section 4.1 Bourne Shell Builtins). +

+ +

type +
+
 
type [-afptP] [name ...]
+
For each name, indicate how it would be interpreted if used as a +command name. +

+ +If the `-t' option is used, type prints a single word +which is one of `alias', `function', `builtin', +`file' or `keyword', +if name is an alias, shell function, shell builtin, +disk file, or shell reserved word, respectively. +If the name is not found, then nothing is printed, and +type returns a failure status. +

+ +If the `-p' option is used, type either returns the name +of the disk file that would be executed, or nothing if `-t' +would not return `file'. +

+ +The `-P' option forces a path search for each name, even if +`-t' would not return `file'. +

+ +If a command is hashed, `-p' and `-P' print the hashed value, +not necessarily the file that appears first in $PATH. +

+ +If the `-a' option is used, type returns all of the places +that contain an executable named file. +This includes aliases and functions, if and only if the `-p' option +is not also used. +

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

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

+ +

typeset +
+
 
typeset [-afFrxi] [-p] [name[=value] ...]
+
The typeset command is supplied for compatibility with the Korn +shell; however, it has been deprecated in favor of the declare +builtin command. +

+ +

ulimit +
+
 
ulimit [-abcdefilmnpqrstuvxHST] [limit]
+
ulimit provides control over the resources available to processes +started by the shell, on systems that allow such control. If an +option is given, it is interpreted as follows: +
+
-S +
Change and report the soft limit associated with a resource. +

+ +

-H +
Change and report the hard limit associated with a resource. +

+ +

-a +
All current limits are reported. +

+ +

-b +
The maximum socket buffer size. +

+ +

-c +
The maximum size of core files created. +

+ +

-d +
The maximum size of a process's data segment. +

+ +

-e +
The maximum scheduling priority ("nice"). +

+ +

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

+ +

-i +
The maximum number of pending signals. +

+ +

-l +
The maximum size that may be locked into memory. +

+ +

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

+ +

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

+ +

-p +
The pipe buffer size. +

+ +

-q +
The maximum number of bytes in POSIX message queues. +

+ +

-r +
The maximum real-time scheduling priority. +

+ +

-s +
The maximum stack size. +

+ +

-t +
The maximum amount of cpu time in seconds. +

+ +

-u +
The maximum number of processes available to a single user. +

+ +

-v +
The maximum amount of virtual memory available to the process. +

+ +

-x +
The maximum number of file locks. +

+ +

-T +
The maximum number of threads. +

+ +

+

+ +If limit is given, it is the new value of the specified resource; +the special limit values hard, soft, and +unlimited stand for the current hard limit, the current soft limit, +and no limit, respectively. +A hard limit cannot be increased by a non-root user once it is set; +a soft limit may be increased up to the value of the hard limit. +Otherwise, the current value of the soft limit for the specified resource +is printed, unless the `-H' option is supplied. +When setting new limits, if neither `-H' nor `-S' is supplied, +both the hard and soft limits are set. +If no option is given, then `-f' is assumed. Values are in 1024-byte +increments, except for `-t', which is in seconds, `-p', +which is in units of 512-byte blocks, and `-n' and `-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. +

+ +

unalias +
+
 
unalias [-a] [name ... ]
+

+ +Remove each name from the list of aliases. If `-a' is +supplied, all aliases are removed. +Aliases are described in 6.6 Aliases. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

4.3 Modifying Shell Behavior

+ + +
+ + +
4.3.1 The Set Builtin  Change the values of shell attributes and + positional parameters.
4.3.2 The Shopt Builtin  Modify shell optional behavior.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

4.3.1 The Set Builtin

+ +

+ +This builtin is so complicated that it deserves its own section. set +allows you to change the values of shell options and set the positional +parameters, or to display the names and values of shell variables. +

+ +

+
set +
+
 
set [--abefhkmnptuvxBCEHPT] [-o option] [argument ...]
+set [+abefhkmnptuvxBCEHPT] [+o option] [argument ...]
+

+ +If no options or arguments are supplied, set displays the names +and values of all shell variables and functions, sorted according to the +current locale, in a format that may be reused as input +for setting or resetting the currently-set variables. +Read-only variables cannot be reset. +In POSIX mode, only shell variables are listed. +

+ +When options are supplied, they set or unset shell attributes. +Options, if specified, have the following meanings: +

+ +

+
-a +
Mark variables and function which are modified or created for export +to the environment of subsequent commands. +

+ +

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

+ +

-e +
Exit immediately if a pipeline (see section 3.2.2 Pipelines), which may consist +of a single simple command (see section 3.2.1 Simple Commands), +a subshell command enclosed in parentheses (see section 3.2.4.3 Grouping Commands), +or one of the commands executed as part of a command list enclosed +by braces (see section 3.2.4.3 Grouping Commands) +returns a non-zero status. +The shell does not exit if the command that fails is part of the +command list immediately following a while or until keyword, +part of the test in an if statement, +part of any command executed in a && or || list except +the command following the final && or ||, +any command in a pipeline but the last, +or if the command's return status is being inverted with !. +A trap on ERR, if set, is executed before the shell exits. +

+ +This option applies to the shell environment and each subshell environment +separately (see section 3.7.3 Command Execution Environment), and may cause +subshells to exit before executing all the commands in the subshell. +

+ +

-f +
Disable filename expansion (globbing). +

+ +

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

+ +

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

+ +

-m +
Job control is enabled (see section 7. Job Control). +

+ +

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

+ +

-o option-name +

+ +Set the option corresponding to option-name: +

+ +

+
allexport +
Same as -a. +

+ +

braceexpand +
Same as -B. +

+ +

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

+ +

errexit +
Same as -e. +

+ +

errtrace +
Same as -E. +

+ +

functrace +
Same as -T. +

+ +

hashall +
Same as -h. +

+ +

histexpand +
Same as -H. +

+ +

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

+ +

ignoreeof +
An interactive shell will not exit upon reading EOF. +

+ +

keyword +
Same as -k. +

+ +

monitor +
Same as -m. +

+ +

noclobber +
Same as -C. +

+ +

noexec +
Same as -n. +

+ +

noglob +
Same as -f. +

+ +

nolog +
Currently ignored. +

+ +

notify +
Same as -b. +

+ +

nounset +
Same as -u. +

+ +

onecmd +
Same as -t. +

+ +

physical +
Same as -P. +

+ +

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

+ +

posix +
Change the behavior of Bash where the default operation differs +from the POSIX standard to match the standard +(see section 6.11 Bash POSIX Mode). +This is intended to make Bash behave as a strict superset of that +standard. +

+ +

privileged +
Same as -p. +

+ +

verbose +
Same as -v. +

+ +

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

+ +

xtrace +
Same as -x. +
+

+ +

-p +
Turn on privileged mode. +In this mode, the $BASH_ENV and $ENV files are not +processed, shell functions are not inherited from the environment, +and the SHELLOPTS, BASHOPTS, CDPATH and GLOBIGNORE +variables, if they appear in the environment, are ignored. +If the shell is started with the effective user (group) id not equal to the +real user (group) id, and the -p option is not supplied, these actions +are taken and the effective user id is set to the real user id. +If the -p option is supplied at startup, the effective user id is +not reset. +Turning this option off causes the effective user +and group ids to be set to the real user and group ids. +

+ +

-t +
Exit after reading and executing one command. +

+ +

-u +
Treat unset variables and parameters other than the special parameters +`@' or `*' as an error when performing parameter expansion. +An error message will be written to the standard error, and a non-interactive +shell will exit. +

+ +

-v +
Print shell input lines as they are read. +

+ +

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

+ +

-B +
The shell will perform brace expansion (see section 3.5.1 Brace Expansion). +This option is on by default. +

+ +

-C +
Prevent output redirection using `>', `>&', and `<>' +from overwriting existing files. +

+ +

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

+ +

-H +
Enable `!' style history substitution (see section 9.3 History Expansion). +This option is on by default for interactive shells. +

+ +

-P +
If set, do not follow symbolic links when performing commands such as +cd which change the current directory. The physical directory +is used instead. By default, Bash follows +the logical chain of directories when performing commands +which change the current directory. +

+ +For example, if `/usr/sys' is a symbolic link to `/usr/local/sys' +then: +
 
$ cd /usr/sys; echo $PWD
+/usr/sys
+$ cd ..; pwd
+/usr
+

+ +If set -P is on, then: +
 
$ cd /usr/sys; echo $PWD
+/usr/local/sys
+$ cd ..; pwd
+/usr/local
+

+ +

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

+ +

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

+ +

- +
Signal the end of options, cause all remaining arguments +to be assigned to the positional parameters. The `-x' +and `-v' options are turned off. +If there are no arguments, the positional parameters remain unchanged. +
+

+ +Using `+' rather than `-' causes these options to be +turned off. The options can also be used upon invocation of the +shell. The current set of options may be found in $-. +

+ +The remaining N arguments are positional parameters and are +assigned, in order, to $1, $2, ... $N. +The special parameter # is set to N. +

+ +The return status is always zero unless an invalid option is supplied. +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

4.3.2 The Shopt Builtin

+ +

+ +This builtin allows you to change additional shell optional behavior. +

+ +

+ +
shopt +
+
 
shopt [-pqsu] [-o] [optname ...]
+
Toggle the values of variables controlling optional shell behavior. +With no options, or with the `-p' option, a list of all settable +options is displayed, with an indication of whether or not each is set. +The `-p' option causes output to be displayed in a form that +may be reused as input. +Other options have the following meanings: +

+ +

+
-s +
Enable (set) each optname. +

+ +

-u +
Disable (unset) each optname. +

+ +

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

+ +

-o +
Restricts the values of +optname to be those defined for the `-o' option to the +set builtin (see section 4.3.1 The Set Builtin). +
+

+ +If either `-s' or `-u' +is used with no optname arguments, the display is limited to +those options which are set or unset, respectively. +

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

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

+ +The list of shopt options is: +

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

+ +

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

+ +

cdspell +
If set, minor errors in the spelling of a directory component in a +cd command will be corrected. +The errors checked for are transposed characters, +a missing character, and a character too many. +If a correction is found, the corrected path is printed, +and the command proceeds. +This option is only used by interactive shells. +

+ +

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

+ +

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

+ +

checkwinsize +
If set, Bash checks the window size after each command +and, if necessary, updates the values of +LINES and COLUMNS. +

+ +

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

+ +

compat31 +
If set, Bash +changes its behavior to that of version 3.1 with respect to quoted +arguments to the conditional command's =~ operator. +

+ +

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

+ +

dotglob +
If set, Bash includes filenames beginning with a `.' in +the results of filename expansion. +

+ +

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

+ +

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

+ +

extdebug +
If set, behavior intended for use by debuggers is enabled: +

+ +

    +
  1. +The `-F' option to the declare builtin (see section 4.2 Bash Builtin Commands) +displays the source file name and line number corresponding to each function +name supplied as an argument. +

    + +

  2. +If the command run by the DEBUG trap returns a non-zero value, the +next command is skipped and not executed. +

    + +

  3. +If the command run by the DEBUG trap returns a value of 2, and the +shell is executing in a subroutine (a shell function or a shell script +executed by the . or source builtins), a call to +return is simulated. +

    + +

  4. +BASH_ARGC and BASH_ARGV are updated as described in their +descriptions (see section 5.2 Bash Variables). +

    + +

  5. +Function tracing is enabled: command substitution, shell functions, and +subshells invoked with ( command ) inherit the +DEBUG and RETURN traps. +

    + +

  6. +Error tracing is enabled: command substitution, shell functions, and +subshells invoked with ( command ) inherit the +ERROR trap. +
+

+ +

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

+ +

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

+ +

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

+ +

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

+ +

globstar +
If set, the pattern `**' used in a filename expansion context will +match a files and zero or more directories and subdirectories. +If the pattern is followed by a `/', only directories and +subdirectories match. +

+ +

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

+ +

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

+ +

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

+ +

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

+ +

hostcomplete +
If set, and Readline is being used, Bash will attempt to perform +hostname completion when a word containing a `@' is being +completed (see section 8.4.6 Letting Readline Type For You). This option is enabled +by default. +

+ +

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

+ +

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

+ +

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

+ +

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

+ +

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

+ +

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

+ +

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

+ +

nocasematch +
If set, Bash matches patterns in a case-insensitive fashion when +performing matching while executing case or [[ +conditional commands. +

+ +

nullglob +
If set, Bash allows filename patterns which match no +files to expand to a null string, rather than themselves. +

+ +

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

+ +

promptvars +
If set, prompt strings undergo +parameter expansion, command substitution, arithmetic +expansion, and quote removal after being expanded +as described below (see section 6.9 Controlling the Prompt). +This option is enabled by default. +

+ +

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

+ +

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

+ +

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

+ +

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

+ +

+

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

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

4.4 Special Builtins

+ +

+ +For historical reasons, the POSIX standard has classified +several builtin commands as special. +When Bash is executing in POSIX mode, the special builtins +differ from other builtin commands in three respects: +

+ +

    +
  1. +Special builtins are found before shell functions during command lookup. +

    + +

  2. +If a special builtin returns an error status, a non-interactive shell exits. +

    + +

  3. +Assignment statements preceding the command stay in effect in the shell +environment after the command completes. +
+

+ +When Bash is not executing in POSIX mode, these builtins behave no +differently than the rest of the Bash builtin commands. +The Bash POSIX mode is described in 6.11 Bash POSIX Mode. +

+ +These are the POSIX special builtins: +
 
break : . continue eval exec exit export readonly return set
+shift trap unset
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

5. Shell Variables

+ +

+ +

+ + +
5.1 Bourne Shell Variables  Variables which Bash uses in the same way + as the Bourne Shell.
5.2 Bash Variables  List of variables that exist in Bash.
+

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

5.1 Bourne Shell Variables

+ +

+ +Bash uses certain shell variables in the same way as the Bourne shell. +In some cases, Bash assigns a default value to the variable. +

+ +

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

+ + +

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

+ + +

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

+ + +

MAIL +
+If this parameter is set to a filename and the MAILPATH variable +is not set, Bash informs the user of the arrival of mail in +the specified file. +

+ + +

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 `?'. +When used in the text of the message, $_ expands to the name of +the current mail file. +

+ + +

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

+ + +

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

+ + +

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

+ + +

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

+ + +

PS2 +
+The secondary prompt string. The default value is `> '. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

5.2 Bash Variables

+ +

+ +These variables are set or used by Bash, but other shells +do not normally treat them specially. +

+ +A few variables used by Bash are described in different chapters: +variables for controlling the job control facilities +(see section 7.3 Job Control Variables). +

+ +

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

+ + +

BASHOPTS +
+A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the `-s' option to the +shopt builtin command (see section 4.3.2 The Shopt Builtin). +The options appearing in BASHOPTS are those reported +as `on' by `shopt'. +If this variable is in the environment when Bash +starts up, each shell option in the list will be enabled before +reading any startup files. This variable is readonly. +

+ + +

BASHPID +
+Expands to the process id of the current Bash process. +This differs from $$ under certain circumstances, such as subshells +that do not require Bash to be re-initialized. +

+ + +

BASH_ALIASES +
+An associative array variable whose members correspond to the internal +list of aliases as maintained by the alias builtin +(see section 4.1 Bourne Shell Builtins). +Elements added to this array appear in the alias list; unsetting array +elements cause aliases to be removed from the alias list. +

+ + +

BASH_ARGC +
+An array variable whose values are the number of parameters in each +frame of the current bash execution call stack. The number of +parameters to the current subroutine (shell function or script executed +with . or source) is at the top of the stack. When a +subroutine is executed, the number of parameters passed is pushed onto +BASH_ARGC. +The shell sets BASH_ARGC only when in extended debugging mode +(see 4.3.2 The Shopt Builtin +for a description of the extdebug option to the shopt +builtin). +

+ + +

BASH_ARGV +
+An array variable containing all of the parameters in the current bash +execution call stack. The final parameter of the last subroutine call +is at the top of the stack; the first parameter of the initial call is +at the bottom. When a subroutine is executed, the parameters supplied +are pushed onto BASH_ARGV. +The shell sets BASH_ARGV only when in extended debugging mode +(see 4.3.2 The Shopt Builtin +for a description of the extdebug option to the shopt +builtin). +

+ + +

BASH_CMDS +
+An associative array variable whose members correspond to the internal +hash table of commands as maintained by the hash builtin +(see section 4.1 Bourne Shell Builtins). +Elements added to this array appear in the hash table; unsetting array +elements cause commands to be removed from the hash table. +

+ + +

BASH_COMMAND +
+The command currently being executed or about to be executed, unless the +shell is executing a command as the result of a trap, +in which case it is the command executing at the time of the trap. +

+ + +

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

+ + +

BASH_EXECUTION_STRING +
+The command argument to the `-c' invocation option. +

+ + +

BASH_LINENO +
+An array variable whose members are the line numbers in source files +corresponding to each member of FUNCNAME. +${BASH_LINENO[$i]} is the line number in the source file where +${FUNCNAME[$i]} was called (or ${BASH_LINENO[$i-1]} if +referenced within another shell function). +The corresponding source file name is ${BASH_SOURCE[$i]}. +Use LINENO to obtain the current line number. +

+ + +

BASH_REMATCH +
+An array variable whose members are assigned by the `=~' binary +operator to the [[ conditional command +(see section 3.2.4.2 Conditional Constructs). +The element with index 0 is the portion of the string +matching the entire regular expression. +The element with index n is the portion of the +string matching the nth parenthesized subexpression. +This variable is read-only. +

+ + +

BASH_SOURCE +
+An array variable whose members are the source filenames corresponding +to the elements in the FUNCNAME array variable. +

+ + +

BASH_SUBSHELL +
+Incremented by one each time a subshell or subshell environment is spawned. +The initial value is 0. +

+ + +

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

+ +

+ +
BASH_VERSINFO[0] +
The major version number (the release). +

+ +

BASH_VERSINFO[1] +
The minor version number (the version). +

+ +

BASH_VERSINFO[2] +
The patch level. +

+ +

BASH_VERSINFO[3] +
The build version. +

+ +

BASH_VERSINFO[4] +
The release status (e.g., beta1). +

+ +

BASH_VERSINFO[5] +
The value of MACHTYPE. +

+ +

+

+ + +

BASH_VERSION +
+The version number of the current instance of Bash. +

+ + +

BASH_XTRACEFD +
+If set to an integer corresponding to a valid file descriptor, Bash +will write the trace output generated when `set -x' +is enabled to that file descriptor. +This allows tracing output to be separated from diagnostic and error +messages. +The file descriptor is closed when BASH_XTRACEFD is unset or assigned +a new value. +Unsetting BASH_XTRACEFD or assigning it the empty string causes the +trace output to be sent to the standard error. +Note that setting BASH_XTRACEFD to 2 (the standard error file +descriptor) and then unsetting it will result in the standard error +being closed. +

+ + +

COLUMNS +
+Used by the select builtin command to determine the terminal width +when printing selection lists. Automatically set upon receipt of a +SIGWINCH. +

+ + +

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

+ + +

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

+ + +

COMP_POINT +
+The index of the current cursor position relative to the beginning of +the current command. +If the current cursor position is at the end of the current command, +the value of this variable is equal to ${#COMP_LINE}. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see section 8.6 Programmable Completion). +

+ + +

COMP_TYPE +
+Set to an integer value corresponding to the type of completion attempted +that caused a completion function to be called: +TAB, for normal completion, +`?', for listing completions after successive tabs, +`!', for listing alternatives on partial word completion, +`@', to list completions if the word is not unmodified, +or +`%', for menu completion. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see section 8.6 Programmable Completion). +

+ + +

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

+ + +

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

+ + +

COMP_WORDS +
+An array variable consisting of the individual +words in the current command line. +The line is split into words as Readline would split it, using +COMP_WORDBREAKS as described above. +This variable is available only in shell functions invoked by the +programmable completion facilities (see section 8.6 Programmable Completion). +

+ + +

COMPREPLY +
+An array variable from which Bash reads the possible completions +generated by a shell function invoked by the programmable completion +facility (see section 8.6 Programmable Completion). +

+ + +

DIRSTACK +
+An array variable containing the current contents of the directory stack. +Directories appear in the stack in the order they are displayed by the +dirs builtin. +Assigning to members of this array variable may be used to modify +directories already in the stack, but the pushd and popd +builtins must be used to add and remove directories. +Assignment to this variable will not change the current directory. +If DIRSTACK is unset, it loses its special properties, even if +it is subsequently reset. +

+ + +

EMACS +
+If Bash finds this variable in the environment when the shell +starts with value `t', it assumes that the shell is running in an +emacs shell buffer and disables line editing. +

+ + +

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

+ + +

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

+ + +

FIGNORE +
+A colon-separated list of suffixes to ignore when performing +filename completion. +A file name whose suffix matches one of the entries in +FIGNORE +is excluded from the list of matched file names. A sample +value is `.o:~' +

+ + +

FUNCNAME +
+An array variable containing the names of all shell functions +currently in the execution call stack. +The element with index 0 is the name of any currently-executing +shell function. +The bottom-most element is "main". +This variable exists only when a shell function is executing. +Assignments to FUNCNAME have no effect and return an error status. +If FUNCNAME is unset, it loses its special properties, even if +it is subsequently reset. +

+ + +

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 GLOBIGNORE, it is removed from the list +of matches. +

+ + +

GROUPS +
+An array variable containing the list of groups of which the current +user is a member. +Assignments to GROUPS have no effect and return an error status. +If GROUPS is unset, it loses its special properties, even if it is +subsequently reset. +

+ + +

histchars +
+Up to three characters which control history expansion, quick +substitution, and tokenization (see section 9.3 History Expansion). +The first character is the +history expansion character, that is, the character which signifies the +start of a history expansion, normally `!'. The second character is the +character which signifies `quick substitution' when seen as the first +character on a line, normally `^'. The optional third character is the +character which indicates that the remainder of the line is a comment when +found as the first character of a word, usually `#'. The history +comment character causes history substitution to be skipped for the +remaining words on the line. It does not necessarily cause the shell +parser to treat the rest of the line as a comment. +

+ + +

HISTCMD +
+The history number, or index in the history list, of the current +command. If HISTCMD is unset, it loses its special properties, +even if it is subsequently reset. +

+ + +

HISTCONTROL +
+A colon-separated list of values controlling how commands are saved on +the history list. +If the list of values includes `ignorespace', lines which begin +with a space character are not saved in the history list. +A value of `ignoredups' causes lines which match the previous +history entry to not be saved. +A value of `ignoreboth' is shorthand for +`ignorespace' and `ignoredups'. +A value of `erasedups' causes all previous lines matching the +current line to be removed from the history list before that line +is saved. +Any value not in the above list is ignored. +If HISTCONTROL is unset, or does not include a valid value, +all lines read by the shell parser are saved on the history list, +subject to the value of HISTIGNORE. +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +HISTCONTROL. +

+ + +

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

+ + +

HISTFILESIZE +
+The maximum number of lines contained in the history file. When this +variable is assigned a value, the history file is truncated, if +necessary, by removing the oldest entries, +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. +

+ + +

HISTIGNORE +
+A colon-separated list of patterns used to decide which command +lines should be saved on the history list. Each pattern is +anchored at the beginning of the line and must match the complete +line (no implicit `*' is appended). Each pattern is tested +against the line after the checks specified by HISTCONTROL +are applied. In addition to the normal shell pattern matching +characters, `&' matches the previous history line. `&' +may be escaped using a backslash; the backslash is removed +before attempting a match. +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +HISTIGNORE. +

+ +HISTIGNORE subsumes the function of HISTCONTROL. A +pattern of `&' is identical to ignoredups, and a +pattern of `[ ]*' is identical to ignorespace. +Combining these two patterns, separating them with a colon, +provides the functionality of ignoreboth. +

+ + +

HISTSIZE +
+The maximum number of commands to remember on the history list. +The default value is 500. +

+ + +

HISTTIMEFORMAT +
+If this variable is set and not null, its value is used as a format string +for strftime to print the time stamp associated with each history +entry displayed by the history builtin. +If this variable is set, time stamps are written to the history file so +they may be preserved across shell sessions. +This uses the history comment character to distinguish timestamps from +other history lines. +

+ + +

HOSTFILE +
+Contains the name of a file in the same format as `/etc/hosts' that +should be read when the shell needs to complete a hostname. +The list of possible hostname completions may be changed while the shell +is running; +the next time hostname completion is attempted after the +value is changed, Bash adds the contents of the new file to the +existing list. +If HOSTFILE is set, but has no value, or does not name a readable file, +Bash attempts to read +`/etc/hosts' to obtain the list of possible hostname completions. +When HOSTFILE is unset, the hostname list is cleared. +

+ + +

HOSTNAME +
+The name of the current host. +

+ + +

HOSTTYPE +
+A string describing the machine Bash is running on. +

+ + +

IGNOREEOF +
+Controls the action of the shell on receipt of an EOF character +as the sole input. If set, the value denotes the number +of consecutive EOF characters that can be read as the +first character on an input line +before the shell will exit. If the variable exists but does not +have a numeric value (or has no value) then the default is 10. +If the variable does not exist, then EOF signifies the end of +input to the shell. This is only in effect for interactive shells. +

+ + +

INPUTRC +
+The name of the Readline initialization file, overriding the default +of `~/.inputrc'. +

+ + +

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

+ + +

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

+ + +

LC_COLLATE +
+This variable determines the collation order used when sorting the +results of filename expansion, and +determines the behavior of range expressions, equivalence classes, +and collating sequences within filename expansion and pattern matching +(see section 3.5.8 Filename Expansion). +

+ + +

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

+ + +

LC_MESSAGES +
+This variable determines the locale used to translate double-quoted +strings preceded by a `$' (see section 3.1.2.5 Locale-Specific Translation). +

+ + +

LC_NUMERIC +
+This variable determines the locale category used for number formatting. +

+ + +

LINENO +
+The line number in the script or shell function currently executing. +

+ + +

LINES +
+Used by the select builtin command to determine the column length +for printing selection lists. Automatically set upon receipt of a +SIGWINCH. +

+ + +

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

+ + +

MAILCHECK +
+How often (in seconds) that the shell should check for mail in the +files specified in the MAILPATH or MAIL variables. +The default is 60 seconds. When it is time to check +for mail, the shell does so before displaying the primary prompt. +If this variable is unset, or set to a value that is not a number +greater than or equal to zero, the shell disables mail checking. +

+ + +

OLDPWD +
+The previous working directory as set by the cd builtin. +

+ + +

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

+ + +

OSTYPE +
+A string describing the operating system Bash is running on. +

+ + +

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

+ + +

POSIXLY_CORRECT +
+If this variable is in the environment when bash starts, the shell +enters POSIX mode (see section 6.11 Bash POSIX Mode) before reading the +startup files, as if the `--posix' invocation option had been supplied. +If it is set while the shell is running, bash enables POSIX mode, +as if the command +
 
set -o posix
+
had been executed. +

+ + +

PPID +
+The process ID of the shell's parent process. This variable +is readonly. +

+ + +

PROMPT_COMMAND +
+If set, the value is interpreted as a command to execute +before the printing of each primary prompt ($PS1). +

+ + +

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

+ + +

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

+ + +

PS4 +
+The value is the prompt printed before the command line is echoed +when the `-x' option is set (see section 4.3.1 The Set Builtin). +The first character of PS4 is replicated multiple times, as +necessary, to indicate multiple levels of indirection. +The default is `+ '. +

+ + +

PWD +
+The current working directory as set by the cd builtin. +

+ + +

RANDOM +
+Each time this parameter is referenced, a random integer +between 0 and 32767 is generated. Assigning a value to this +variable seeds the random number generator. +

+ + +

REPLY +
+The default variable for the read builtin. +

+ + +

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

+ + +

SHELL +
+The full pathname to the shell is kept in this environment variable. +If it is not set when the shell starts, +Bash assigns to it the full pathname of the current user's login shell. +

+ + +

SHELLOPTS +
+A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the `-o' option to the +set builtin command (see section 4.3.1 The Set Builtin). +The options appearing in SHELLOPTS are those reported +as `on' by `set -o'. +If this variable is in the environment when Bash +starts up, each shell option in the list will be enabled before +reading any startup files. This variable is readonly. +

+ + +

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

+ + +

TIMEFORMAT +
+The value of this parameter is used as a format string specifying +how the timing information for pipelines prefixed with the time +reserved word should be displayed. +The `%' character introduces an +escape sequence that is expanded to a time value or other +information. +The escape sequences and their meanings are as +follows; the braces denote optional portions. +

+ +

+ +
%% +
A literal `%'. +

+ +

%[p][l]R +
The elapsed time in seconds. +

+ +

%[p][l]U +
The number of CPU seconds spent in user mode. +

+ +

%[p][l]S +
The number of CPU seconds spent in system mode. +

+ +

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

+ +The optional p is a digit specifying the precision, the number of +fractional digits after a decimal point. +A value of 0 causes no decimal point or fraction to be output. +At most three places after the decimal point may be specified; values +of p greater than 3 are changed to 3. +If p is not specified, the value 3 is used. +

+ +The optional l specifies a longer format, including minutes, of +the form MMmSS.FFs. +The value of p determines whether or not the fraction is included. +

+ +If this variable is not set, Bash acts as if it had the value +
 
$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+
If the value is null, no timing information is displayed. +A trailing newline is added when the format string is displayed. +

+ + +

TMOUT +
+If set to a value greater than zero, TMOUT is treated as the +default timeout for the read builtin (see section 4.2 Bash Builtin Commands). +The select command (see section 3.2.4.2 Conditional Constructs) terminates +if input does not arrive after TMOUT seconds when input is coming +from a terminal. +

+ +In an interactive shell, the value is interpreted as +the number of seconds to wait for input after issuing the primary +prompt when the shell is interactive. +Bash terminates after that number of seconds if input does +not arrive. +

+ + +

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

+ + +

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

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6. Bash Features

+ +

+ +This section describes features unique to Bash. +

+ +

+ + + + + + + + + + + +
6.1 Invoking Bash  Command line options that you can give + to Bash.
6.2 Bash Startup Files  When and how Bash executes scripts.
6.3 Interactive Shells  What an interactive shell is.
6.4 Bash Conditional Expressions  Primitives used in composing expressions for + the test builtin.
6.5 Shell Arithmetic  Arithmetic on shell variables.
6.6 Aliases  Substituting one command for another.
6.7 Arrays  Array Variables.
6.8 The Directory Stack  History of visited directories.
6.9 Controlling the Prompt  Controlling the PS1 string.
6.10 The Restricted Shell  A more controlled mode of shell execution.
6.11 Bash POSIX Mode  Making Bash behave more closely to what + the POSIX standard specifies.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.1 Invoking Bash

+ +

+ +
 
bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] [argument ...]
+bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] -c string [argument ...]
+bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] [argument ...]
+

+ +In addition to the single-character shell command-line options +(see section 4.3.1 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. +

+ +

+
--debugger +
Arrange for the debugger profile to be executed before the shell +starts. Turns on extended debugging mode (see 4.3.2 The Shopt Builtin +for a description of the extdebug option to the shopt +builtin) and shell function tracing +(see 4.3.1 The Set Builtin for a description of the -o functrace +option). +

+ +

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

+ +

--dump-strings +
Equivalent to `-D'. +

+ +

--help +
Display a usage message on standard output and exit successfully. +

+ +

--init-file filename +
--rcfile filename +
Execute commands from filename (instead of `~/.bashrc') +in an interactive shell. +

+ +

--login +
Equivalent to `-l'. +

+ +

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

+ +

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

+ +

--norc +
Don't read the `~/.bashrc' initialization file in an +interactive shell. This is on by default if the shell is +invoked as sh. +

+ +

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

+ +

--restricted +
Make the shell a restricted shell (see section 6.10 The Restricted Shell). +

+ +

--verbose +
Equivalent to `-v'. Print shell input lines as they're read. +

+ +

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

+ +

+

+ +There are several single-character options that may be supplied at +invocation which are not available with the set builtin. +

+ +

+
-c string +
Read and execute commands from string after processing the +options, then exit. Any remaining arguments are assigned to the +positional parameters, starting with $0. +

+ +

-i +
Force the shell to run interactively. Interactive shells are +described in 6.3 Interactive Shells. +

+ +

-l +
Make this shell act as if it had been directly invoked by login. +When the shell is interactive, this is equivalent to starting a +login shell with `exec -l bash'. +When the shell is not interactive, the login shell startup files will +be executed. +`exec bash -l' or `exec bash --login' +will replace the current shell with a Bash login shell. +See section 6.2 Bash Startup Files, for a description of the special behavior +of a login shell. +

+ +

-r +
Make the shell a restricted shell (see section 6.10 The Restricted Shell). +

+ +

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

+ +

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

+ +

[-+]O [shopt_option] +
shopt_option is one of the shell options accepted by the +shopt builtin (see section 4.3.2 The Shopt Builtin). +If shopt_option is present, `-O' sets the value of that option; +`+O' unsets it. +If shopt_option is not supplied, the names and values of the shell +options accepted by shopt are printed on the standard output. +If the invocation option is `+O', the output is displayed in a format +that may be reused as input. +

+ +

-- +
A -- signals the end of options and disables further option +processing. +Any arguments after the -- are treated as filenames and arguments. +

+ +

+

+ + +A login shell is one whose first character of argument zero is +`-', or one invoked with the `--login' option. +

+ + +An interactive shell is one started without non-option arguments, +unless `-s' is specified, +without specifying the `-c' option, and whose input and output are both +connected to terminals (as determined by isatty(3)), or one +started with the `-i' option. See section 6.3 Interactive Shells, for more +information. +

+ +If arguments remain after option processing, and neither the +`-c' nor the `-s' +option has been supplied, the first argument is assumed to +be the name of a file containing shell commands (see section 3.8 Shell Scripts). +When Bash is invoked in this fashion, $0 +is set to the name of the file, and the positional parameters +are set to the remaining arguments. +Bash reads and executes commands from this file, then exits. +Bash's exit status is the exit status of the last command executed +in the script. If no commands are executed, the exit status is 0. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.2 Bash Startup Files

+ +

+ +This section describes how Bash executes its startup files. +If any of the files exist but cannot be read, Bash reports an error. +Tildes are expanded in file names as described above under +Tilde Expansion (see section 3.5.2 Tilde Expansion). +

+ +Interactive shells are described in 6.3 Interactive Shells. +

+ + +

Invoked as an interactive login shell, or with `--login'

+ +

+ +When Bash is invoked as an interactive login shell, or as a +non-interactive shell with the `--login' option, it first reads and +executes commands from the file `/etc/profile', if that file exists. +After reading that file, it looks for `~/.bash_profile', +`~/.bash_login', and `~/.profile', in that order, and reads +and executes commands from the first one that exists and is readable. +The `--noprofile' option may be used when the shell is started to +inhibit this behavior. +

+ +When a login shell exits, Bash reads and executes commands from +the file `~/.bash_logout', if it exists. +

+ + +

Invoked as an interactive non-login shell

+ +

+ +When an interactive shell that is not a login shell is started, Bash +reads and executes commands from `~/.bashrc', if that file exists. +This may be inhibited by using the `--norc' option. +The `--rcfile file' option will force Bash to read and +execute commands from file instead of `~/.bashrc'. +

+ +So, typically, your `~/.bash_profile' contains the line +
 
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
+
after (or before) any login-specific initializations. +

+ + +

Invoked non-interactively

+ +

+ +When Bash is started non-interactively, to run a shell script, +for example, it looks for the variable BASH_ENV in the environment, +expands its value if it appears there, and uses the expanded value as +the name of a file to read and execute. Bash behaves as if the +following command were executed: +
 
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
+
but the value of the PATH variable is not used to search for the +file name. +

+ +As noted above, if a non-interactive shell is invoked with the +`--login' option, Bash attempts to read and execute commands from the +login shell startup files. +

+ + +

Invoked with name sh

+ +

+ +If Bash is invoked with the name sh, it tries to mimic the +startup behavior of historical versions of sh as closely as +possible, while conforming to the POSIX standard as well. +

+ +When invoked as an interactive login shell, or as a non-interactive +shell with the `--login' option, it first attempts to read +and execute commands from `/etc/profile' and `~/.profile', in +that order. +The `--noprofile' option may be used to inhibit this behavior. +When invoked as an interactive shell with the name sh, Bash +looks for the variable ENV, expands its value if it is defined, +and uses the expanded value as the name of a file to read and execute. +Since a shell invoked as sh does not attempt to read and execute +commands from any other startup files, the `--rcfile' option has +no effect. +A non-interactive shell invoked with the name sh does not attempt +to read any other startup files. +

+ +When invoked as sh, Bash enters POSIX mode after +the startup files are read. +

+ + +

Invoked in POSIX mode

+ +

+ +When Bash is started in POSIX mode, as with the +`--posix' command line option, it follows the POSIX standard +for startup files. +In this mode, interactive shells expand the ENV variable +and commands are read and executed from the file whose name is the +expanded value. +No other startup files are read. +

+ + +

Invoked by remote shell daemon

+ +

+ +Bash attempts to determine when it is being run with its standard input +connected to a a network connection, as if by the remote shell +daemon, usually rshd, or the secure shell daemon sshd. +If Bash determines it is being run in +this fashion, it reads and executes commands from `~/.bashrc', if that +file exists and is readable. +It will not do this if invoked as sh. +The `--norc' option may be used to inhibit this behavior, and the +`--rcfile' option may be used to force another file to be read, but +rshd does not generally invoke the shell with those options or +allow them to be specified. +

+ + +

Invoked with unequal effective and real UID/GIDs

+ +

+ +If Bash is started with the effective user (group) id not equal to the +real user (group) id, and the -p option is not supplied, no startup +files are read, shell functions are not inherited from the environment, +the SHELLOPTS, BASHOPTS, CDPATH, and GLOBIGNORE +variables, if they appear in the environment, are ignored, and the effective +user id is set to the real user id. +If the -p option is supplied at invocation, the startup behavior is +the same, but the effective user id is not reset. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.3 Interactive Shells

+ +

+ +

+ + + +
6.3.1 What is an Interactive Shell?  What determines whether a shell is Interactive.
6.3.2 Is this Shell Interactive?  How to tell if a shell is interactive.
6.3.3 Interactive Shell Behavior  What changes in a interactive shell?
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.3.1 What is an Interactive Shell?

+ +

+ +An interactive shell +is one started without non-option arguments, unless `-s' is +specified, without specifying the `-c' option, and +whose input and error output are both +connected to terminals (as determined by isatty(3)), +or one started with the `-i' option. +

+ +An interactive shell generally reads from and writes to a user's +terminal. +

+ +The `-s' invocation option may be used to set the positional parameters +when an interactive shell is started. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.3.2 Is this Shell Interactive?

+ +

+ +To determine within a startup script whether or not Bash is +running interactively, +test the value of the `-' special parameter. +It contains i when the shell is interactive. For example: +

+ +
 
case "$-" in
+*i*)	echo This shell is interactive ;;
+*)	echo This shell is not interactive ;;
+esac
+

+ +Alternatively, startup scripts may examine the variable +PS1; it is unset in non-interactive shells, and set in +interactive shells. Thus: +

+ +
 
if [ -z "$PS1" ]; then
+        echo This shell is not interactive
+else
+        echo This shell is interactive
+fi
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.3.3 Interactive Shell Behavior

+ +

+ +When the shell is running interactively, it changes its behavior in +several ways. +

+ +

    +
  1. +Startup files are read and executed as described in 6.2 Bash Startup Files. +

    + +

  2. +Job Control (see section 7. Job Control) is enabled by default. When job +control is in effect, Bash ignores the keyboard-generated job control +signals SIGTTIN, SIGTTOU, and SIGTSTP. +

    + +

  3. +Bash expands and displays PS1 before reading the first line +of a command, and expands and displays PS2 before reading the +second and subsequent lines of a multi-line command. +

    + +

  4. +Bash executes the value of the PROMPT_COMMAND variable as a command +before printing the primary prompt, $PS1 +(see section 5.2 Bash Variables). +

    + +

  5. +Readline (see section 8. Command Line Editing) is used to read commands from +the user's terminal. +

    + +

  6. +Bash inspects the value of the ignoreeof option to set -o +instead of exiting immediately when it receives an EOF on its +standard input when reading a command (see section 4.3.1 The Set Builtin). +

    + +

  7. +Command history (see section 9.1 Bash History Facilities) +and history expansion (see section 9.3 History Expansion) +are enabled by default. +Bash will save the command history to the file named by $HISTFILE +when an interactive shell exits. +

    + +

  8. +Alias expansion (see section 6.6 Aliases) is performed by default. +

    + +

  9. +In the absence of any traps, Bash ignores SIGTERM +(see section 3.7.6 Signals). +

    + +

  10. +In the absence of any traps, SIGINT is caught and handled +((see section 3.7.6 Signals). +SIGINT will interrupt some shell builtins. +

    + +

  11. +An interactive login shell sends a SIGHUP to all jobs on exit +if the huponexit shell option has been enabled (see section 3.7.6 Signals). +

    + +

  12. +The `-n' invocation option is ignored, and `set -n' has +no effect (see section 4.3.1 The Set Builtin). +

    + +

  13. +Bash will check for mail periodically, depending on the values of the +MAIL, MAILPATH, and MAILCHECK shell variables +(see section 5.2 Bash Variables). +

    + +

  14. +Expansion errors due to references to unbound shell variables after +`set -u' has been enabled will not cause the shell to exit +(see section 4.3.1 The Set Builtin). +

    + +

  15. +The shell will not exit on expansion errors caused by var being unset +or null in ${var:?word} expansions +(see section 3.5.3 Shell Parameter Expansion). +

    + +

  16. +Redirection errors encountered by shell builtins will not cause the +shell to exit. +

    + +

  17. +When running in POSIX mode, a special builtin returning an error +status will not cause the shell to exit (see section 6.11 Bash POSIX Mode). +

    + +

  18. +A failed exec will not cause the shell to exit +(see section 4.1 Bourne Shell Builtins). +

    + +

  19. +Parser syntax errors will not cause the shell to exit. +

    + +

  20. +Simple spelling correction for directory arguments to the cd +builtin is enabled by default (see the description of the cdspell +option to the shopt builtin in 4.3.2 The Shopt Builtin). +

    + +

  21. +The shell will check the value of the TMOUT variable and exit +if a command is not read within the specified number of seconds after +printing $PS1 (see section 5.2 Bash Variables). +

    + +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.4 Bash Conditional Expressions

+ +

+ +Conditional expressions are used by the [[ compound command +and the test and [ 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 file argument to one of the primaries is of the form +`/dev/fd/N', then file descriptor N is checked. +If the file argument to one of the primaries is one of +`/dev/stdin', `/dev/stdout', or `/dev/stderr', file +descriptor 0, 1, or 2, respectively, is checked. +

+ +When used with `[[', The `<' and `>' operators sort +lexicographically using the current locale. +

+ +Unless otherwise specified, primaries that operate on files follow symbolic +links and operate on the target of the link, rather than the link itself. +

+ +

+
-a file +
True if file exists. +

+ +

-b file +
True if file exists and is a block special file. +

+ +

-c file +
True if file exists and is a character special file. +

+ +

-d file +
True if file exists and is a directory. +

+ +

-e file +
True if file exists. +

+ +

-f file +
True if file exists and is a regular file. +

+ +

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

+ +

-h file +
True if file exists and is a symbolic link. +

+ +

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

+ +

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

+ +

-r file +
True if file exists and is readable. +

+ +

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

+ +

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

+ +

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

+ +

-w file +
True if file exists and is writable. +

+ +

-x file +
True if file exists and is executable. +

+ +

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

+ +

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

+ +

-L file +
True if file exists and is a symbolic link. +

+ +

-S file +
True if file exists and is a socket. +

+ +

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

+ +

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

+ +

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

+ +

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

+ +

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

+ +

-z string +
True if the length of string is zero. +

+ +

-n string +
string +
True if the length of string is non-zero. +

+ +

string1 == string2 +
string1 = string2 +
True if the strings are equal. +`=' should be used with the test command for POSIX conformance. +

+ +

string1 != string2 +
True if the strings are not equal. +

+ +

string1 < string2 +
True if string1 sorts before string2 lexicographically. +

+ +

string1 > string2 +
True if string1 sorts after string2 lexicographically. +

+ +

arg1 OP arg2 +
OP is one of +`-eq', `-ne', `-lt', `-le', `-gt', or `-ge'. +These arithmetic binary operators return true if arg1 +is equal to, not equal to, less than, less than or equal to, +greater than, or greater than or equal to arg2, +respectively. Arg1 and arg2 +may be positive or negative integers. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.5 Shell Arithmetic

+ +

+ +The shell allows arithmetic expressions to be evaluated, as one of +the shell expansions or by the let and the `-i' option +to the 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. +

+ +

+ +
id++ id-- +
variable post-increment and post-decrement +

+ +

++id --id +
variable pre-increment and pre-decrement +

+ +

- + +
unary minus and plus +

+ +

! ~ +
logical and bitwise negation +

+ +

** +
exponentiation +

+ +

* / % +
multiplication, division, remainder +

+ +

+ - +
addition, subtraction +

+ +

<< >> +
left and right bitwise shifts +

+ +

<= >= < > +
comparison +

+ +

== != +
equality and inequality +

+ +

& +
bitwise AND +

+ +

^ +
bitwise exclusive OR +

+ +

| +
bitwise OR +

+ +

&& +
logical AND +

+ +

|| +
logical OR +

+ +

expr ? expr : expr +
conditional operator +

+ +

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

+ +

expr1 , expr2 +
comma +
+

+ +Shell variables are allowed as operands; parameter expansion is +performed before the expression is evaluated. +Within an expression, shell variables may also be referenced by name +without using the parameter expansion syntax. +A shell variable that is null or unset evaluates to 0 when referenced +by name without using the parameter expansion syntax. +The value of a variable is evaluated as an arithmetic expression +when it is referenced, or when a variable which has been given the +integer attribute using `declare -i' is assigned a value. +A null value evaluates to 0. +A shell variable need not have its integer attribute turned on +to be used in an expression. +

+ +Constants with a leading 0 are interpreted as octal numbers. +A leading `0x' or `0X' denotes hexadecimal. Otherwise, +numbers take the form [base#]n, where base +is a decimal number between 2 and 64 representing the arithmetic +base, and n is a number in that base. If base# is +omitted, then base 10 is used. +The digits greater than 9 are represented by the lowercase letters, +the uppercase letters, `@', and `_', in that order. +If base is less than or equal to 36, lowercase and uppercase +letters may be used interchangeably to represent numbers between 10 +and 35. +

+ +Operators are evaluated in order of precedence. Sub-expressions in +parentheses are evaluated first and may override the precedence +rules above. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.6 Aliases

+ +

+ +Aliases allow a string to be substituted for a word when it is used +as the first word of a simple command. +The shell maintains a list of aliases that may be set and unset with +the alias and unalias builtin commands. +

+ +The first word of each simple command, if unquoted, is checked to see +if it has an alias. +If so, that word is replaced by the text of the alias. +The characters `/', `$', ``', `=' and any of the +shell metacharacters or quoting characters listed above may not appear +in an alias name. +The replacement text may contain any valid +shell input, including shell metacharacters. +The first word of the replacement text is tested for +aliases, but a word that is identical to an alias being expanded +is not expanded a second time. +This means that one may alias ls to "ls -F", +for instance, and Bash does not try to recursively expand the +replacement text. If the last character of the alias value is a +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 alias +command, and removed with the unalias command. +

+ +There is no mechanism for using arguments in the replacement text, +as in csh. +If arguments are needed, a shell function should be used +(see section 3.3 Shell Functions). +

+ +Aliases are not expanded when the shell is not interactive, +unless the expand_aliases shell option is set using +shopt (see section 4.3.2 The Shopt Builtin). +

+ +The rules concerning the definition and use of aliases are +somewhat confusing. Bash +always reads at least one complete line +of input 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 alias +in compound commands. +

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.7 Arrays

+ +

+ +Bash provides one-dimensional indexed and associative array variables. +Any variable may be used as an indexed array; +the declare builtin will explicitly declare an array. +There is no maximum +limit on the size of an array, nor any requirement that members +be indexed or assigned contiguously. +Indexed arrays are referenced using integers (including arithmetic +expressions (see section 6.5 Shell Arithmetic) and are zero-based; +associative arrays use arbitrary strings. +

+ +An indexed array is created automatically if any variable is assigned to +using the syntax +
 
name[subscript]=value
+

+ +The subscript +is treated as an arithmetic expression that must evaluate to a number +greater than or equal to zero. To explicitly declare an array, use +
 
declare -a name
+
The syntax +
 
declare -a name[subscript]
+
is also accepted; the subscript is ignored. +

+ +Associative arrays are created using +
 
declare -A name.
+

+ +Attributes may be +specified for an array variable using the declare and +readonly builtins. Each attribute applies to all members of +an array. +

+ +Arrays are assigned to using compound assignments of the form +
 
name=(value1 ... valuen)
+
where each +value is of the form [subscript]=string. +Indexed array assignments do not require the bracket and subscript. +When assigning to indexed arrays, if +the optional subscript is supplied, that index is assigned to; +otherwise the index of the element assigned is the last index assigned +to by the statement plus one. Indexing starts at zero. +

+ +When assigning to an associative array, the subscript is required. +

+ +This syntax is also accepted by the declare +builtin. Individual array elements may be assigned to using the +name[subscript]=value syntax introduced above. +

+ +Any element of an array may be referenced using +${name[subscript]}. +The braces are required to avoid +conflicts with the shell's filename expansion operators. If the +subscript is `@' or `*', the word expands to all members +of the array name. These subscripts differ only when the word +appears within double quotes. +If the word is double-quoted, +${name[*]} expands to a single word with +the value of each array member separated by the first character of the +IFS variable, and ${name[@]} expands each element of +name to a separate word. When there are no array members, +${name[@]} expands to nothing. +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. +This is analogous to the +expansion of the special parameters `@' and `*'. +${#name[subscript]} expands to the length of +${name[subscript]}. +If subscript is `@' or +`*', the expansion is the number of elements in the array. +Referencing an array variable without a subscript is equivalent to +referencing with a subscript of 0. +

+ +An array variable is considered set if a subscript has been assigned a +value. The null string is a valid value. +

+ +The unset builtin is used to destroy arrays. +unset name[subscript] +destroys the array element at index subscript. +Care must be taken to avoid unwanted side effects caused by filename +expansion. +unset name, where name is an array, removes the +entire array. A subscript of `*' or `@' also removes the +entire array. +

+ +The declare, local, and readonly +builtins each accept a `-a' option to specify an indexed +array and a `-A' option to specify an associative array. +The read builtin accepts a `-a' +option to assign a list of words read from the standard input +to an array, and can read values from the standard input into +individual array elements. The set and declare +builtins display array values in a way that allows them to be +reused as input. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.8 The Directory Stack

+ +

+ +

+ +
6.8.1 Directory Stack Builtins  Bash builtin commands to manipulate + the directory stack.
+

+ +The directory stack is a list of recently-visited directories. The +pushd builtin adds directories to the stack as it changes +the current directory, and the popd builtin removes specified +directories from the stack and changes the current directory to +the directory removed. The dirs builtin displays the contents +of the directory stack. +

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.8.1 Directory Stack Builtins

+ +

+ +

+ +
dirs +
+
 
dirs [+N | -N] [-clpv]
+
Display the list of currently remembered directories. Directories +are added to the list with the pushd command; the +popd command removes directories from the list. +
+
+N +
Displays the Nth directory (counting from the left of the +list printed by dirs when invoked without options), starting +with zero. +
-N +
Displays the Nth directory (counting from the right of the +list printed by dirs when invoked without options), starting +with zero. +
-c +
Clears the directory stack by deleting all of the elements. +
-l +
Produces a longer listing; the default listing format uses a +tilde to denote the home directory. +
-p +
Causes dirs to print the directory stack with one entry per +line. +
-v +
Causes dirs to print the directory stack with one entry per +line, prefixing each entry with its index in the stack. +
+

+ +

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

+ +Remove the top entry from the directory stack, and cd +to the new top directory. +When no arguments are given, popd +removes the top directory from the stack and +performs a cd to the new top directory. The +elements are numbered from 0 starting at the first directory listed with +dirs; i.e., popd is equivalent to popd +0. +

+
+N +
Removes the Nth directory (counting from the left of the +list printed by dirs), starting with zero. +
-N +
Removes the Nth directory (counting from the right of the +list printed by dirs), starting with zero. +
-n +
Suppresses the normal change of directory when removing directories +from the stack, so that only the stack is manipulated. +
+

+ + +

pushd +
 
pushd [-n] [+N | -N | dir ]
+

+ +Save the current directory on the top of the directory stack +and then cd to dir. +With no arguments, pushd exchanges the top two directories. +

+ +

+
-n +
Suppresses the normal change of directory when adding directories +to the stack, so that only the stack is manipulated. +
+N +
Brings the Nth directory (counting from the left of the +list printed by dirs, starting with zero) to the top of +the list by rotating the stack. +
-N +
Brings the Nth directory (counting from the right of the +list printed by dirs, starting with zero) to the top of +the list by rotating the stack. +
dir +
Makes the current working directory be the top of the stack, and then +executes the equivalent of `cd dir'. +cds to dir. +
+

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.9 Controlling the Prompt

+ +

+ +The value of the variable PROMPT_COMMAND is examined just before +Bash prints each primary prompt. If PROMPT_COMMAND is set and +has a non-null value, then the +value is executed just as if it had been typed on the command line. +

+ +In addition, the following table describes the special characters which +can appear in the prompt variables: +

+ +

+
\a +
A bell character. +
\d +
The date, in "Weekday Month Date" format (e.g., "Tue May 26"). +
\D{format} +
The format is passed to strftime(3) and the result is inserted +into the prompt string; an empty format results in a locale-specific +time representation. The braces are required. +
\e +
An escape character. +
\h +
The hostname, up to the first `.'. +
\H +
The hostname. +
\j +
The number of jobs currently managed by the shell. +
\l +
The basename of the shell's terminal device name. +
\n +
A newline. +
\r +
A carriage return. +
\s +
The name of the shell, the basename of $0 (the portion +following the final slash). +
\t +
The time, in 24-hour HH:MM:SS format. +
\T +
The time, in 12-hour HH:MM:SS format. +
\@ +
The time, in 12-hour am/pm format. +
\A +
The time, in 24-hour HH:MM format. +
\u +
The username of the current user. +
\v +
The version of Bash (e.g., 2.00) +
\V +
The release of Bash, version + patchlevel (e.g., 2.00.0) +
\w +
The current working directory, with $HOME abbreviated with a tilde +(uses the $PROMPT_DIRTRIM variable). +
\W +
The basename of $PWD, with $HOME abbreviated with a tilde. +
\! +
The history number of this command. +
\# +
The command number of this command. +
\$ +
If the effective uid is 0, #, otherwise $. +
\nnn +
The character whose ASCII code is the octal value nnn. +
\\ +
A backslash. +
\[ +
Begin a sequence of non-printing characters. This could be used to +embed a terminal control sequence into the prompt. +
\] +
End a sequence of non-printing characters. +
+

+ +The command number and the history number are usually different: +the history number of a command is its position in the history +list, which may include commands restored from the history file +(see section 9.1 Bash History Facilities), while the command number is +the position in the sequence of commands executed during the current +shell session. +

+ +After the string is decoded, it is expanded via +parameter expansion, command substitution, arithmetic +expansion, and quote removal, subject to the value of the +promptvars shell option (see section 4.2 Bash Builtin Commands). +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.10 The Restricted Shell

+ +

+ +If Bash is started with the name rbash, or the +`--restricted' +or +`-r' +option is supplied at invocation, the shell becomes restricted. +A restricted shell is used to +set up an environment more controlled than the standard shell. +A restricted shell behaves identically to bash +with the exception that the following are disallowed or not performed: +

+ +

    +
  • +Changing directories with the cd builtin. +
  • +Setting or unsetting the values of the SHELL, PATH, +ENV, or BASH_ENV variables. +
  • +Specifying command names containing slashes. +
  • +Specifying a filename containing a slash as an argument to the . +builtin command. +
  • +Specifying a filename containing a slash as an argument to the `-p' +option to the hash builtin command. +
  • +Importing function definitions from the shell environment at startup. +
  • +Parsing the value of SHELLOPTS from the shell environment at startup. +
  • +Redirecting output using the `>', `>|', `<>', `>&', +`&>', and `>>' redirection operators. +
  • +Using the exec builtin to replace the shell with another command. +
  • +Adding or deleting builtin commands with the +`-f' and `-d' options to the enable builtin. +
  • +Using the enable builtin command to enable disabled shell builtins. +
  • +Specifying the `-p' option to the command builtin. +
  • +Turning off restricted mode with `set +r' or `set +o restricted'. +
+

+ +These restrictions are enforced after any startup files are read. +

+ +When a command that is found to be a shell script is executed +(see section 3.8 Shell Scripts), rbash turns off any restrictions in +the shell spawned to execute the script. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.11 Bash POSIX Mode

+ +

+ +Starting Bash with the `--posix' command-line option or executing +`set -o posix' while Bash is running will cause Bash to conform more +closely to the POSIX standard by changing the behavior to +match that specified by POSIX in areas where the Bash default differs. +

+ +When invoked as sh, Bash enters POSIX mode after reading the +startup files. +

+ +The following list is what's changed when `POSIX mode' is in effect: +

+ +

    +
  1. +When a command in the hash table no longer exists, Bash will re-search +$PATH to find the new location. This is also available with +`shopt -s checkhash'. +

    + +

  2. +The message printed by the job control code and builtins when a job +exits with a non-zero status is `Done(status)'. +

    + +

  3. +The message printed by the job control code and builtins when a job +is stopped is `Stopped(signame)', where signame is, for +example, SIGTSTP. +

    + +

  4. +The bg builtin uses the required format to describe each job placed +in the background, which does not include an indication of whether the job +is the current or previous job. +

    + +

  5. +Reserved words appearing in a context where reserved words are recognized +do not undergo alias expansion. +

    + +

  6. +The POSIX PS1 and PS2 expansions of `!' to +the history number and `!!' to `!' are enabled, +and parameter expansion is performed on the values of PS1 and +PS2 regardless of the setting of the promptvars option. +

    + +

  7. +The POSIX startup files are executed ($ENV) rather than +the normal Bash files. +

    + +

  8. +Tilde expansion is only performed on assignments preceding a command +name, rather than on all assignment statements on the line. +

    + +

  9. +The default history file is `~/.sh_history' (this is the +default value of $HISTFILE). +

    + +

  10. +The output of `kill -l' prints all the signal names on a single line, +separated by spaces, without the `SIG' prefix. +

    + +

  11. +The kill builtin does not accept signal names with a `SIG' +prefix. +

    + +

  12. +Non-interactive shells exit if filename in . filename +is not found. +

    + +

  13. +Non-interactive shells exit if a syntax error in an arithmetic expansion +results in an invalid expression. +

    + +

  14. +Redirection operators do not perform filename expansion on the word +in the redirection unless the shell is interactive. +

    + +

  15. +Redirection operators do not perform word splitting on the word in the +redirection. +

    + +

  16. +Function names must be valid shell names. 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. +

    + +

  17. +POSIX special builtins are found before shell functions +during command lookup. +

    + +

  18. +If a POSIX special builtin returns an error status, a +non-interactive shell exits. The fatal errors are those listed in +the POSIX standard, and include things like passing incorrect options, +redirection errors, variable assignment errors for assignments preceding +the command name, and so on. +

    + +

  19. +If CDPATH is set, the cd builtin will not implicitly +append the current directory to it. This means that cd will +fail if no valid directory name can be constructed from +any of the entries in $CDPATH, even if the a directory with +the same name as the name given as an argument to cd exists +in the current directory. +

    + +

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

    + +

  21. +A non-interactive shell exits with an error status if the iteration +variable in a for statement or the selection variable in a +select statement is a readonly variable. +

    + +

  22. +Process substitution is not available. +

    + +

  23. +Assignment statements preceding POSIX special builtins +persist in the shell environment after the builtin completes. +

    + +

  24. +Assignment statements preceding shell function calls persist in the +shell environment after the function returns, as if a POSIX +special builtin command had been executed. +

    + +

  25. +The export and readonly builtin commands display their +output in the format required by POSIX. +

    + +

  26. +The trap builtin displays signal names without the leading +SIG. +

    + +

  27. +The trap builtin doesn't check the first argument for a possible +signal specification and revert the signal handling to the original +disposition if it is, unless that argument consists solely of digits and +is a valid signal number. If users want to reset the handler for a given +signal to the original disposition, they should use `-' as the +first argument. +

    + +

  28. +The . and source builtins do not search the current directory +for the filename argument if it is not found by searching PATH. +

    + +

  29. +Subshells spawned to execute command substitutions inherit the value of +the `-e' option from the parent shell. When not in POSIX mode, +Bash clears the `-e' option in such subshells. +

    + +

  30. +Alias expansion is always enabled, even in non-interactive shells. +

    + +

  31. +When the alias builtin displays alias definitions, it does not +display them with a leading `alias ' unless the `-p' option +is supplied. +

    + +

  32. +When the set builtin is invoked without options, it does not display +shell function names and definitions. +

    + +

  33. +When the set builtin is invoked without options, it displays +variable values without quotes, unless they contain shell metacharacters, +even if the result contains nonprinting characters. +

    + +

  34. +When the cd builtin is invoked in logical mode, and the pathname +constructed from $PWD and the directory name supplied as an argument +does not refer to an existing directory, cd will fail instead of +falling back to physical mode. +

    + +

  35. +When the pwd builtin is supplied the `-P' option, it resets +$PWD to a pathname containing no symlinks. +

    + +

  36. +The pwd builtin verifies that the value it prints is the same as the +current directory, even if it is not asked to check the file system with the +`-P' option. +

    + +

  37. +When listing the history, the fc builtin does not include an +indication of whether or not a history entry has been modified. +

    + +

  38. +The default editor used by fc is ed. +

    + +

  39. +The type and command builtins will not report a non-executable +file as having been found, though the shell will attempt to execute such a +file if it is the only so-named file found in $PATH. +

    + +

  40. +The vi editing mode will invoke the vi editor directly when +the `v' command is run, instead of checking $VISUAL and +$EDITOR. +

    + +

  41. +When the xpg_echo option is enabled, Bash does not attempt to interpret +any arguments to echo as options. Each argument is displayed, after +escape characters are converted. +

    + +

  42. +The ulimit builtin uses a block size of 512 bytes for the `-c' +and `-f' options. +

    + +

  43. +The arrival of SIGCHLD when a trap is set on SIGCHLD does +not interrupt the wait builtin and cause it to return immediately. +The trap command is run once for each child that exits. +

    + +

+

+ +There is other POSIX behavior that Bash does not implement by +default even when in POSIX mode. +Specifically: +

+ +

    + +
  1. +The fc builtin checks $EDITOR as a program to edit history +entries if FCEDIT is unset, rather than defaulting directly to +ed. fc uses ed if EDITOR is unset. +

    + +

  2. +As noted above, Bash requires the xpg_echo option to be enabled for +the echo builtin to be fully conformant. +

    + +

+

+ +Bash can be configured to be POSIX-conformant by default, by specifying +the `--enable-strict-posix-default' to configure when building +(see section 10.8 Optional Features). +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

7. Job Control

+ +

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

+ +

+ + + +
7.1 Job Control Basics  How job control works.
7.2 Job Control Builtins  Bash builtin commands used to interact + with job control.
7.3 Job Control Variables  Variables Bash uses to customize job + control.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

7.1 Job Control Basics

+ +

+ +Job control +refers to the ability to selectively stop (suspend) +the execution of processes and continue (resume) +their execution at a later point. A user typically employs +this facility via an interactive interface supplied jointly +by the operating system kernel's terminal driver and Bash. +

+ +The shell associates a job with each pipeline. It keeps a +table of currently executing jobs, which may be listed with the +jobs command. When Bash starts a job +asynchronously, it prints a line that looks +like: +
 
[1] 25647
+
indicating that this job is job number 1 and that the process ID +of the last process in the pipeline associated with this job is +25647. All of the processes in a single pipeline are members of +the same job. Bash uses the job abstraction as the +basis for job control. +

+ +To facilitate the implementation of the user interface to job +control, the operating system maintains the notion of a current terminal +process group ID. Members of this process group (processes whose +process group ID is equal to the current terminal process group +ID) receive keyboard-generated signals such as SIGINT. +These processes are said to be in the foreground. Background +processes are those whose process group ID differs from the +terminal's; such processes are immune to keyboard-generated +signals. Only foreground processes are allowed to read from or, if +the user so specifies with stty tostop, write to the terminal. +Background processes which attempt to +read from (write to when stty tostop is in effect) the +terminal are sent a SIGTTIN (SIGTTOU) +signal by the kernel's terminal driver, +which, unless caught, suspends the process. +

+ +If the operating system on which Bash is running supports +job control, Bash contains facilities to use it. Typing the +suspend character (typically `^Z', Control-Z) while a +process is running causes that process to be stopped and returns +control to Bash. Typing the delayed suspend character +(typically `^Y', Control-Y) causes the process to be stopped +when it attempts to read input from the terminal, and control to +be returned to Bash. The user then manipulates the state of +this job, using the bg command to continue it in the +background, the fg command to continue it in the +foreground, or the kill command to kill it. A `^Z' +takes effect immediately, and has the additional side effect of +causing pending output and typeahead to be discarded. +

+ +There are a number of ways to refer to a job in the shell. The +character `%' introduces a job specification (jobspec). +

+ +Job number n may be referred to as `%n'. +The symbols `%%' and `%+' refer to the shell's notion of the +current job, which is the last job stopped while it was in the foreground +or started in the background. +A single `%' (with no accompanying job specification) also refers +to the current job. +The previous job may be referenced using `%-'. +If there is only a single job, `%+' and `%-' can both be used +to refer to that job. +In output pertaining to jobs (e.g., the output of the jobs +command), the current job is always flagged with a `+', and the +previous job with a `-'. +

+ +A job may also be referred to +using a prefix of the name used to start it, or using a substring +that appears in its command line. For example, `%ce' refers +to a stopped ce job. Using `%?ce', on the +other hand, refers to any job containing the string `ce' in +its command line. If the prefix or substring matches more than one job, +Bash reports an error. +

+ +Simply naming a job can be used to bring it into the foreground: +`%1' is a synonym for `fg %1', bringing job 1 from the +background into the foreground. Similarly, `%1 &' resumes +job 1 in the background, equivalent to `bg %1' +

+ +The shell learns immediately whenever a job changes state. +Normally, Bash waits until it is about to print a prompt +before reporting changes in a job's status so as to not interrupt +any other output. +If the `-b' option to the set builtin is enabled, +Bash reports such changes immediately (see section 4.3.1 The Set Builtin). +Any trap on SIGCHLD is executed for each child process +that exits. +

+ +If an attempt to exit Bash is made while jobs are stopped, (or running, if +the checkjobs option is enabled -- see 4.3.2 The Shopt Builtin), the +shell prints a warning message, and if the checkjobs option is +enabled, lists the jobs and their statuses. +The jobs command may then be used to inspect their status. +If a second attempt to exit is made without an intervening command, +Bash does not print another warning, and any stopped jobs are terminated. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

7.2 Job Control Builtins

+ +

+ +

+ +
bg +
+
 
bg [jobspec ...]
+
Resume each suspended job jobspec in the background, as if it +had been started with `&'. +If jobspec is not supplied, the current job is used. +The return status is zero unless it is run when job control is not +enabled, or, when run with job control enabled, any +jobspec was not found or specifies a job +that was started without job control. +

+ +

fg +
+
 
fg [jobspec]
+
Resume the job jobspec in the foreground and make it the current job. +If jobspec is not supplied, the current job is used. +The return status is that of the command placed into the foreground, +or non-zero if run when job control is disabled or, when run with +job control enabled, jobspec does not specify a valid job or +jobspec specifies a job that was started without job control. +

+ +

jobs +
+
 
jobs [-lnprs] [jobspec]
+jobs -x command [arguments]
+

+ +The first form lists the active jobs. The options have the +following meanings: +

+ +

+
-l +
List process IDs in addition to the normal information. +

+ +

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

+ +

-p +
List only the process ID of the job's process group leader. +

+ +

-r +
Restrict output to running jobs. +

+ +

-s +
Restrict output to stopped jobs. +
+

+ +If jobspec is given, +output is restricted to information about that job. +If jobspec is not supplied, the status of all jobs is +listed. +

+ +If the `-x' option is supplied, jobs replaces any +jobspec found in command or arguments with the +corresponding process group ID, and executes command, +passing it arguments, returning its exit status. +

+ +

kill +
+
 
kill [-s sigspec] [-n signum] [-sigspec] jobspec or pid
+kill -l [exit_status]
+
Send a signal specified by sigspec or signum to the process +named by job specification jobspec or process ID pid. +sigspec is either a case-insensitive signal name such as +SIGINT (with or without the SIG prefix) +or a signal number; signum is a signal number. +If sigspec and signum are not present, SIGTERM is used. +The `-l' option lists the signal names. +If any arguments are supplied when `-l' is given, the names of the +signals corresponding to the arguments are listed, and the return status +is zero. +exit_status is a number specifying a signal number or the exit +status of a process terminated by a signal. +The return status is zero if at least one signal was successfully sent, +or non-zero if an error occurs or an invalid option is encountered. +

+ +

wait +
+
 
wait [jobspec or pid ...]
+
Wait until the child process specified by each process ID pid +or job specification jobspec exits and return the exit status of the +last command waited for. +If a job spec is given, all processes in the job are waited for. +If no arguments are given, all currently active child processes are +waited for, and the return status is zero. +If neither jobspec nor pid specifies an active child process +of the shell, the return status is 127. +

+ +

disown +
+
 
disown [-ar] [-h] [jobspec ...]
+
Without options, each jobspec is removed from the table of +active jobs. +If the `-h' option is given, the job is not removed from the table, +but is marked so that SIGHUP is not sent to the job if the shell +receives a SIGHUP. +If jobspec is not present, and neither the `-a' nor `-r' +option is supplied, the current job is used. +If no jobspec is supplied, the `-a' option means to remove or +mark all jobs; the `-r' option without a jobspec +argument restricts operation to running jobs. +

+ +

suspend +
+
 
suspend [-f]
+
Suspend the execution of this shell until it receives a +SIGCONT signal. +A login shell cannot be suspended; the `-f' +option can be used to override this and force the suspension. +

+ +

+

+ +When job control is not active, the kill and wait +builtins do not accept jobspec arguments. They must be +supplied process IDs. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

7.3 Job Control Variables

+ +

+ +

+ + +
auto_resume +
+This variable controls how the shell interacts with the user and +job control. If this variable exists then single word simple +commands without redirections are treated as candidates for resumption +of an existing job. There is no ambiguity allowed; if there is +more than one job beginning with the string typed, then +the most recently accessed job will be selected. +The name of a stopped job, in this context, is the command line +used to start it. If this variable is set to the value `exact', +the string supplied must match the name of a stopped job exactly; +if set to `substring', +the string supplied needs to match a substring of the name of a +stopped job. The `substring' value provides functionality +analogous to the `%?' job ID (see section 7.1 Job Control Basics). +If set to any other value, the supplied string must +be a prefix of a stopped job's name; this provides functionality +analogous to the `%' job ID. +

+ +

+

+ + +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8. Command Line Editing

+ +

+ +This chapter describes the basic features of the GNU +command line editing interface. +Command line editing is provided by the Readline library, which is +used by several different programs, including Bash. +Command line editing is enabled by default when using an interactive shell, +unless the `--noediting' option is supplied at shell invocation. +Line editing is also used when using the `-e' option to the +read builtin command (see section 4.2 Bash Builtin Commands). +By default, the line editing commands are similar to those of emacs. +A vi-style line editing interface is also available. +Line editing can be enabled at any time using the `-o emacs' or +`-o vi' options to the set builtin command +(see section 4.3.1 The Set Builtin), or disabled using the `+o emacs' or +`+o vi' options to set. +

+ +

+ + + + + + + +
8.1 Introduction to Line Editing  Notation used in this text.
8.2 Readline Interaction  The minimum set of commands for editing a line.
8.3 Readline Init File  Customizing Readline from a user's view.
8.4 Bindable Readline Commands  A description of most of the Readline commands + available for binding
8.5 Readline vi Mode  A short description of how to make Readline + behave like the vi editor.
8.6 Programmable Completion  How to specify the possible completions for + a specific command.
8.7 Programmable Completion Builtins  Builtin commands to specify how to + complete arguments for a particular command.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.1 Introduction to Line Editing

+ +

+ +The following paragraphs describe the notation used to represent +keystrokes. +

+ +The text C-k is read as `Control-K' and describes the character +produced when the k key is pressed while the Control key +is depressed. +

+ +The text M-k is read as `Meta-K' and describes the character +produced when the Meta key (if you have one) is depressed, and the k +key is pressed. +The Meta key is labeled ALT on many keyboards. +On keyboards with two keys labeled ALT (usually to either side of +the space bar), the ALT on the left side is generally set to +work as a Meta key. +The ALT key on the right may also be configured to work as a +Meta key or may be configured as some other modifier, such as a +Compose key for typing accented characters. +

+ +If you do not have a Meta or ALT key, or another key working as +a Meta key, the identical keystroke can be generated by typing ESC +first, and then typing k. +Either process is known as metafying the k key. +

+ +The text M-C-k is read as `Meta-Control-k' and describes the +character produced by metafying C-k. +

+ +In addition, several keys have their own names. Specifically, +DEL, ESC, LFD, SPC, RET, and TAB all +stand for themselves when seen in this text, or in an init file +(see section 8.3 Readline Init File). +If your keyboard lacks a LFD key, typing C-j will +produce the desired character. +The RET key may be labeled Return or Enter on +some keyboards. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.2 Readline Interaction

+ +

+ +Often during an interactive session you type in a long line of text, +only to notice that the first word on the line is misspelled. The +Readline library gives you a set of commands for manipulating the text +as you type it in, allowing you to just fix your typo, and not forcing +you to retype the majority of the line. Using these editing commands, +you move the cursor to the place that needs correction, and delete or +insert the text of the corrections. Then, when you are satisfied with +the line, you simply press RET. You do not have to be at the +end of the line to press RET; the entire line is accepted +regardless of the location of the cursor within the line. +

+ +

+ + + + + +
8.2.1 Readline Bare Essentials  The least you need to know about Readline.
8.2.2 Readline Movement Commands  Moving about the input line.
8.2.3 Readline Killing Commands  How to delete text, and how to get it back!
8.2.4 Readline Arguments  Giving numeric arguments to commands.
8.2.5 Searching for Commands in the History  Searching through previous lines.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.2.1 Readline Bare Essentials

+ +

+ +In order to enter characters into the line, simply type them. The typed +character appears where the cursor was, and then the cursor moves one +space to the right. If you mistype a character, you can use your +erase character to back up and delete the mistyped character. +

+ +Sometimes you may mistype a character, and +not notice the error until you have typed several other characters. In +that case, you can type C-b to move the cursor to the left, and then +correct your mistake. Afterwards, you can move the cursor to the right +with C-f. +

+ +When you add text in the middle of a line, you will notice that characters +to the right of the cursor are `pushed over' to make room for the text +that you have inserted. Likewise, when you delete text behind the cursor, +characters to the right of the cursor are `pulled back' to fill in the +blank space created by the removal of the text. A list of the bare +essentials for editing the text of an input line follows. +

+ +

+
C-b +
Move back one character. +
C-f +
Move forward one character. +
DEL or Backspace +
Delete the character to the left of the cursor. +
C-d +
Delete the character underneath the cursor. +
Printing characters +
Insert the character into the line at the cursor. +
C-_ or C-x C-u +
Undo the last editing command. You can undo all the way back to an +empty line. +
+

+ +(Depending on your configuration, the Backspace key be set to +delete the character to the left of the cursor and the DEL key set +to delete the character underneath the cursor, like C-d, rather +than the character to the left of the cursor.) +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.2.2 Readline Movement Commands

+ +

+ +The above table describes the most basic keystrokes that you need +in order to do editing of the input line. For your convenience, many +other commands have been added in addition to C-b, C-f, +C-d, and DEL. Here are some commands for moving more rapidly +about the line. +

+ +

+
C-a +
Move to the start of the line. +
C-e +
Move to the end of the line. +
M-f +
Move forward a word, where a word is composed of letters and digits. +
M-b +
Move backward a word. +
C-l +
Clear the screen, reprinting the current line at the top. +
+

+ +Notice how C-f moves forward a character, while M-f moves +forward a word. It is a loose convention that control keystrokes +operate on characters while meta keystrokes operate on words. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.2.3 Readline Killing Commands

+ +

+ + + +

+ +Killing text means to delete the text from the line, but to save +it away for later use, usually by yanking (re-inserting) +it back into the line. +(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) +

+ +If the description for a command says that it `kills' text, then you can +be sure that you can get the text back in a different (or the same) +place later. +

+ +When you use a kill command, the text is saved in a kill-ring. +Any number of consecutive kills save all of the killed text together, so +that when you yank it back, you get it all. The kill +ring is not line specific; the text that you killed on a previously +typed line is available to be yanked back later, when you are typing +another line. + +

+ +Here is the list of commands for killing text. +

+ +

+
C-k +
Kill the text from the current cursor position to the end of the line. +

+ +

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

+ +

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

+ +

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

+ +

+

+ +Here is how to yank the text back into the line. Yanking +means to copy the most-recently-killed text from the kill buffer. +

+ +

+
C-y +
Yank the most recently killed text back into the buffer at the cursor. +

+ +

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.2.4 Readline Arguments

+ +

+ +You can pass numeric arguments to Readline commands. Sometimes the +argument acts as a repeat count, other times it is the sign of the +argument that is significant. If you pass a negative argument to a +command which normally acts in a forward direction, that command will +act in a backward direction. For example, to kill text back to the +start of the line, you might type `M-- C-k'. +

+ +The general way to pass numeric arguments to a command is to type meta +digits before the command. If the first `digit' typed is a minus +sign (`-'), then the sign of the argument will be negative. Once +you have typed one meta digit to get the argument started, you can type +the remainder of the digits, and then the command. For example, to give +the C-d command an argument of 10, you could type `M-1 0 C-d', +which will delete the next ten characters on the input line. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.2.5 Searching for Commands in the History

+ +

+ +Readline provides commands for searching through the command history +(see section 9.1 Bash History Facilities) +for lines containing a specified string. +There are two search modes: incremental and non-incremental. +

+ +Incremental searches begin before the user has finished typing the +search string. +As each character of the search string is typed, Readline displays +the next entry from the history matching the string typed so far. +An incremental search requires only as many characters as needed to +find the desired history entry. +To search backward in the history for a particular string, type +C-r. Typing C-s searches forward through the history. +The characters present in the value of the isearch-terminators variable +are used to terminate an incremental search. +If that variable has not been assigned a value, the ESC and +C-J characters will terminate an incremental search. +C-g will abort an incremental search and restore the original line. +When the search is terminated, the history entry containing the +search string becomes the current line. +

+ +To find other matching entries in the history list, type C-r or +C-s as appropriate. +This will search backward or forward in the history for the next +entry matching the search string typed so far. +Any other key sequence bound to a Readline command will terminate +the search and execute that command. +For instance, a RET will terminate the search and accept +the line, thereby executing the command from the history list. +A movement command will terminate the search, make the last line found +the current line, and begin editing. +

+ +Readline remembers the last incremental search string. If two +C-rs are typed without any intervening characters defining a new +search string, any remembered search string is used. +

+ +Non-incremental searches read the entire search string before starting +to search for matching history lines. The search string may be +typed by the user or be part of the contents of the current line. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.3 Readline Init File

+ +

+ +Although the Readline library comes with a set of Emacs-like +keybindings installed by default, it is possible to use a different set +of keybindings. +Any user can customize programs that use Readline by putting +commands in an inputrc file, conventionally in his home directory. +The name of this +file is taken from the value of the shell variable INPUTRC. If +that variable is unset, the default is `~/.inputrc'. If that +file does not exist or cannot be read, the ultimate default is +`/etc/inputrc'. +

+ +When a program which uses the Readline library starts up, the +init file is read, and the key bindings are set. +

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

+ +

+ +
8.3.1 Readline Init File Syntax  Syntax for the commands in the inputrc file.
+ +
+ + +
8.3.2 Conditional Init Constructs  Conditional key bindings in the inputrc file.
+ +
+ + +
8.3.3 Sample Init File  An example inputrc file.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.3.1 Readline Init File Syntax

+ +

+ +There are only a few basic constructs allowed in the +Readline init file. Blank lines are ignored. +Lines beginning with a `#' are comments. +Lines beginning with a `$' indicate conditional +constructs (see section 8.3.2 Conditional Init Constructs). Other lines +denote variable settings and key bindings. +

+ +

+
Variable Settings +
You can modify the run-time behavior of Readline by +altering the values of variables in Readline +using the set command within the init file. +The syntax is simple: +

+ +
 
set variable value
+

+ +Here, for example, is how to +change from the default Emacs-like key binding to use +vi line editing commands: +

+ +
 
set editing-mode vi
+

+ +Variable names and values, where appropriate, are recognized without regard +to case. Unrecognized variable names are ignored. +

+ +Boolean variables (those that can be set to on or off) are set to on if +the value is null or empty, on (case-insensitive), or 1. Any other +value results in the variable being set to off. +

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

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

+ + +

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

+ +

bind-tty-special-chars +
+If set to `on', Readline attempts to bind the control characters +treated specially by the kernel's terminal driver to their Readline +equivalents. +

+ +

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

+ +

completion-ignore-case +
If set to `on', Readline performs filename matching and completion +in a case-insensitive fashion. +The default value is `off'. +

+ +

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

+ +

completion-query-items +
+The number of possible completions that determines when the user is +asked whether the list of possibilities should be displayed. +If the number of possible completions is greater than this value, +Readline will ask the user whether or not he wishes to view +them; otherwise, they are simply listed. +This variable must be set to an integer value greater than or equal to 0. +A negative value means Readline should never ask. +The default limit is 100. +

+ +

convert-meta +
+If set to `on', Readline will convert characters with the +eighth bit set to an ASCII key sequence by stripping the eighth +bit and prefixing an ESC character, converting them to a +meta-prefixed key sequence. The default value is `on'. +

+ +

disable-completion +
+If set to `On', Readline will inhibit word completion. +Completion characters will be inserted into the line as if they had +been mapped to self-insert. The default is `off'. +

+ +

editing-mode +
+The editing-mode variable controls which default set of +key bindings is used. By default, Readline starts up in Emacs editing +mode, where the keystrokes are most similar to Emacs. This variable can be +set to either `emacs' or `vi'. +

+ +

echo-control-characters +
When set to `on', on operating systems that indicate they support it, +readline echoes a character corresponding to a signal generated from the +keyboard. The default is `on'. +

+ +

enable-keypad +
+When set to `on', Readline will try to enable the application +keypad when it is called. Some systems need this to enable the +arrow keys. The default is `off'. +

+ +

enable-meta-key +
When set to `on', Readline will try to enable any meta modifier +key the terminal claims to support when it is called. On many terminals, +the meta key is used to send eight-bit characters. +The default is `on'. +

+ +

expand-tilde +
+If set to `on', tilde expansion is performed when Readline +attempts word completion. The default is `off'. +

+ +

history-preserve-point +
+If set to `on', the history code attempts to place the point (the +current cursor position) at the +same location on each history line retrieved with previous-history +or next-history. The default is `off'. +

+ +

history-size +
+Set the maximum number of history entries saved in the history list. If +set to zero, the number of entries in the history list is not limited. +

+ +

horizontal-scroll-mode +
+This variable can be set to either `on' or `off'. Setting it +to `on' means that the text of the lines being edited will scroll +horizontally on a single screen line when they are longer than the width +of the screen, instead of wrapping onto a new screen line. By default, +this variable is set to `off'. +

+ +

input-meta +
+ +If set to `on', Readline will enable eight-bit input (it +will not clear the eighth bit in the characters it reads), +regardless of what the terminal claims it can support. The +default value is `off'. The name meta-flag is a +synonym for this variable. +

+ +

isearch-terminators +
+The string of characters that should terminate an incremental search without +subsequently executing the character as a command (see section 8.2.5 Searching for Commands in the History). +If this variable has not been given a value, the characters ESC and +C-J will terminate an incremental search. +

+ +

keymap +
+Sets Readline's idea of the current keymap for key binding commands. +Acceptable keymap names are +emacs, +emacs-standard, +emacs-meta, +emacs-ctlx, +vi, +vi-move, +vi-command, and +vi-insert. +vi is equivalent to vi-command; emacs is +equivalent to emacs-standard. The default value is emacs. +The value of the editing-mode variable also affects the +default keymap. +

+ +

mark-directories +
If set to `on', completed directory names have a slash +appended. The default is `on'. +

+ +

mark-modified-lines +
+This variable, when set to `on', causes Readline to display an +asterisk (`*') at the start of history lines which have been modified. +This variable is `off' by default. +

+ +

mark-symlinked-directories +
+If set to `on', completed names which are symbolic links +to directories have a slash appended (subject to the value of +mark-directories). +The default is `off'. +

+ +

match-hidden-files +
+This variable, when set to `on', causes Readline to match files whose +names begin with a `.' (hidden files) when performing filename +completion, unless the leading `.' is +supplied by the user in the filename to be completed. +This variable is `on' by default. +

+ +

output-meta +
+If set to `on', Readline will display characters with the +eighth bit set directly rather than as a meta-prefixed escape +sequence. The default is `off'. +

+ +

page-completions +
+If set to `on', Readline uses an internal more-like pager +to display a screenful of possible completions at a time. +This variable is `on' by default. +

+ +

print-completions-horizontally +
If set to `on', Readline will display completions with matches +sorted horizontally in alphabetical order, rather than down the screen. +The default is `off'. +

+ +

revert-all-at-newline +
+If set to `on', Readline will undo all changes to history lines +before returning when accept-line is executed. By default, +history lines may be modified and retain individual undo lists across +calls to readline. The default is `off'. +

+ +

show-all-if-ambiguous +
+This alters the default behavior of the completion functions. If +set to `on', +words which have more than one possible completion cause the +matches to be listed immediately instead of ringing the bell. +The default value is `off'. +

+ +

show-all-if-unmodified +
+This alters the default behavior of the completion functions in +a fashion similar to show-all-if-ambiguous. +If set to `on', +words which have more than one possible completion without any +possible partial completion (the possible completions don't share +a common prefix) cause the matches to be listed immediately instead +of ringing the bell. +The default value is `off'. +

+ +

skip-completed-text +
+If set to `on', this alters the default completion behavior when +inserting a single match into the line. It's only active when +performing completion in the middle of a word. If enabled, readline +does not insert characters from the completion that match characters +after point in the word being completed, so portions of the word +following the cursor are not duplicated. +For instance, if this is enabled, attempting completion when the cursor +is after the `e' in `Makefile' will result in `Makefile' +rather than `Makefilefile', assuming there is a single possible +completion. +The default value is `off'. +

+ +

visible-stats +
+If set to `on', a character denoting a file's type +is appended to the filename when listing possible +completions. The default is `off'. +

+ +

+

+ +

Key Bindings +
The syntax for controlling key bindings in the init file is +simple. First you need to find the name of the command that you +want to change. The following sections contain tables of the command +name, the default keybinding, if any, and a short description of what +the command does. +

+ +Once you know the name of the command, simply place on a line +in the init file the name of the key +you wish to bind the command to, a colon, and then the name of the +command. +There can be no space between the key name and the colon -- that will be +interpreted as part of the key name. +The name of the key can be expressed in different ways, depending on +what you find most comfortable. +

+ +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a macro). +

+ +The bind -p command displays Readline function names and +bindings in a format that can put directly into an initialization file. +See section 4.2 Bash Builtin Commands. +

+ +

+
keyname: function-name or macro +
keyname is the name of a key spelled out in English. For example: +
 
Control-u: universal-argument
+Meta-Rubout: backward-kill-word
+Control-o: "> output"
+

+ +In the above example, C-u is bound to the function +universal-argument, +M-DEL is bound to the function backward-kill-word, and +C-o is bound to run the macro +expressed on the right hand side (that is, to insert the text +`> output' into the line). +

+ +A number of symbolic character names are recognized while +processing this key binding syntax: +DEL, +ESC, +ESCAPE, +LFD, +NEWLINE, +RET, +RETURN, +RUBOUT, +SPACE, +SPC, +and +TAB. +

+ +

"keyseq": function-name or macro +
keyseq differs from keyname above in that strings +denoting an entire key sequence can be specified, by placing +the key sequence in double quotes. Some GNU Emacs style key +escapes can be used, as in the following example, but the +special character names are not recognized. +

+ +
 
"\C-u": universal-argument
+"\C-x\C-r": re-read-init-file
+"\e[11~": "Function Key 1"
+

+ +In the above example, C-u is again bound to the function +universal-argument (just as it was in the first example), +`C-x C-r' is bound to the function re-read-init-file, +and `ESC [ 1 1 ~' is bound to insert +the text `Function Key 1'. +

+ +

+

+ +The following GNU Emacs style escape sequences are available when +specifying key sequences: +

+ +

+
\C- +
control prefix +
\M- +
meta prefix +
\e +
an escape character +
\\ +
backslash +
\" +
", a double quotation mark +
\' +
', a single quote or apostrophe +
+

+ +In addition to the GNU Emacs style escape sequences, a second +set of backslash escapes is available: +

+ +

+
\a +
alert (bell) +
\b +
backspace +
\d +
delete +
\f +
form feed +
\n +
newline +
\r +
carriage return +
\t +
horizontal tab +
\v +
vertical tab +
\nnn +
the eight-bit character whose value is the octal value nnn +(one to three digits) +
\xHH +
the eight-bit character whose value is the hexadecimal value HH +(one or two hex digits) +
+

+ +When entering the text of a macro, single or double quotes must +be used to indicate a macro definition. +Unquoted text is assumed to be a function name. +In the macro body, the backslash escapes described above are expanded. +Backslash will quote any other character in the macro text, +including `"' and `''. +For example, the following binding will make `C-x \' +insert a single `\' into the line: +
 
"\C-x\\": "\\"
+

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.3.2 Conditional Init Constructs

+ +

+ +Readline implements a facility similar in spirit to the conditional +compilation features of the C preprocessor which allows key +bindings and variable settings to be performed as the result +of tests. There are four parser directives used. +

+ +

+
$if +
The $if construct allows bindings to be made based on the +editing mode, the terminal being used, or the application using +Readline. The text of the test extends to the end of the line; +no characters are required to isolate it. +

+ +

+
mode +
The mode= form of the $if directive is used to test +whether Readline is in emacs or vi mode. +This may be used in conjunction +with the `set keymap' command, for instance, to set bindings in +the emacs-standard and emacs-ctlx keymaps only if +Readline is starting out in emacs mode. +

+ +

term +
The term= form may be used to include terminal-specific +key bindings, perhaps to bind the key sequences output by the +terminal's function keys. The word on the right side of the +`=' is tested against both the full name of the terminal and +the portion of the terminal name before the first `-'. This +allows sun to match both sun and sun-cmd, +for instance. +

+ +

application +
The application construct is used to include +application-specific settings. Each program using the Readline +library sets the application name, and you can test for +a particular value. +This could be used to bind key sequences to functions useful for +a specific program. For instance, the following command adds a +key sequence that quotes the current or previous word in Bash: +
 
$if Bash
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+$endif
+
+

+ +

$endif +
This command, as seen in the previous example, terminates an +$if command. +

+ +

$else +
Commands in this branch of the $if directive are executed if +the test fails. +

+ +

$include +
This directive takes a single filename as an argument and reads commands +and bindings from that file. +For example, the following directive reads from `/etc/inputrc': +
 
$include /etc/inputrc
+
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.3.3 Sample Init File

+ +

+ +Here is an example of an inputrc file. This illustrates key +binding, variable assignment, and conditional syntax. +

+ +
 
# This file controls the behaviour of line input editing for
+# programs that use the GNU Readline library.  Existing
+# programs include FTP, Bash, and GDB.
+#
+# You can re-read the inputrc file with C-x C-r.
+# Lines beginning with '#' are comments.
+#
+# First, include any systemwide bindings and variable
+# assignments from /etc/Inputrc
+$include /etc/Inputrc
+
+#
+# Set various bindings for emacs mode.
+
+set editing-mode emacs 
+
+$if mode=emacs
+
+Meta-Control-h:	backward-kill-word	Text after the function name is ignored
+
+#
+# Arrow keys in keypad mode
+#
+#"\M-OD":        backward-char
+#"\M-OC":        forward-char
+#"\M-OA":        previous-history
+#"\M-OB":        next-history
+#
+# Arrow keys in ANSI mode
+#
+"\M-[D":        backward-char
+"\M-[C":        forward-char
+"\M-[A":        previous-history
+"\M-[B":        next-history
+#
+# Arrow keys in 8 bit keypad mode
+#
+#"\M-\C-OD":       backward-char
+#"\M-\C-OC":       forward-char
+#"\M-\C-OA":       previous-history
+#"\M-\C-OB":       next-history
+#
+# Arrow keys in 8 bit ANSI mode
+#
+#"\M-\C-[D":       backward-char
+#"\M-\C-[C":       forward-char
+#"\M-\C-[A":       previous-history
+#"\M-\C-[B":       next-history
+
+C-q: quoted-insert
+
+$endif
+
+# An old-style binding.  This happens to be the default.
+TAB: complete
+
+# Macros that are convenient for shell interaction
+$if Bash
+# edit the path
+"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+# prepare to type a quoted word --
+# insert open and close double quotes
+# and move to just after the open quote
+"\C-x\"": "\"\"\C-b"
+# insert a backslash (testing backslash escapes
+# in sequences and macros)
+"\C-x\\": "\\"
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+# Add a binding to refresh the line, which is unbound
+"\C-xr": redraw-current-line
+# Edit variable on current line.
+"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+$endif
+
+# use a visible bell if one is available
+set bell-style visible
+
+# don't strip characters to 7 bits when reading
+set input-meta on
+
+# allow iso-latin1 characters to be inserted rather
+# than converted to prefix-meta sequences
+set convert-meta off
+
+# display characters with the eighth bit set directly
+# rather than as meta-prefixed characters
+set output-meta on
+
+# if there are more than 150 possible completions for
+# a word, ask the user if he wants to see all of them
+set completion-query-items 150
+
+# For FTP
+$if Ftp
+"\C-xg": "get \M-?"
+"\C-xt": "put \M-?"
+"\M-.": yank-last-arg
+$endif
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4 Bindable Readline Commands

+ +

+ +

+ + + + + + + + +
8.4.1 Commands For Moving  Moving about the line.
8.4.2 Commands For Manipulating The History  Getting at previous lines.
8.4.3 Commands For Changing Text  Commands for changing text.
8.4.4 Killing And Yanking  Commands for killing and yanking.
8.4.5 Specifying Numeric Arguments  Specifying numeric arguments, repeat counts.
8.4.6 Letting Readline Type For You  Getting Readline to do the typing for you.
8.4.7 Keyboard Macros  Saving and re-executing typed characters
8.4.8 Some Miscellaneous Commands  Other miscellaneous commands.
+

+ +This section describes Readline commands that may be bound to key +sequences. +You can list your key bindings by executing +bind -P or, for a more terse format, suitable for an +inputrc file, bind -p. (See section 4.2 Bash Builtin Commands.) +Command names without an accompanying key sequence are unbound by default. +

+ +In the following descriptions, point refers to the current cursor +position, and mark refers to a cursor position saved by the +set-mark command. +The text between the point and mark is referred to as the region. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4.1 Commands For Moving

+ +
+ +
beginning-of-line (C-a) +
+Move to the start of the current line. +

+ + +

end-of-line (C-e) +
+Move to the end of the line. +

+ + +

forward-char (C-f) +
+Move forward a character. +

+ + +

backward-char (C-b) +
+Move back a character. +

+ + +

forward-word (M-f) +
+Move forward to the end of the next word. +Words are composed of letters and digits. +

+ + +

backward-word (M-b) +
+Move back to the start of the current or previous word. +Words are composed of letters and digits. +

+ + +

shell-forward-word () +
+Move forward to the end of the next word. +Words are delimited by non-quoted shell metacharacters. +

+ + +

shell-backward-word () +
+Move back to the start of the current or previous word. +Words are delimited by non-quoted shell metacharacters. +

+ + +

clear-screen (C-l) +
+Clear the screen and redraw the current line, +leaving the current line at the top of the screen. +

+ + +

redraw-current-line () +
+Refresh the current line. By default, this is unbound. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4.2 Commands For Manipulating The History

+ +

+ +

+ +
accept-line (Newline or Return) +
+Accept the line regardless of where the cursor is. +If this line is +non-empty, add it to the history list according to the setting of +the HISTCONTROL and HISTIGNORE variables. +If this line is a modified history line, then restore the history line +to its original state. +

+ + +

previous-history (C-p) +
+Move `back' through the history list, fetching the previous command. +

+ + +

next-history (C-n) +
+Move `forward' through the history list, fetching the next command. +

+ + +

beginning-of-history (M-<) +
+Move to the first line in the history. +

+ + +

end-of-history (M->) +
+Move to the end of the input history, i.e., the line currently +being entered. +

+ + +

reverse-search-history (C-r) +
+Search backward starting at the current line and moving `up' through +the history as necessary. This is an incremental search. +

+ + +

forward-search-history (C-s) +
+Search forward starting at the current line and moving `down' through +the the history as necessary. This is an incremental search. +

+ + +

non-incremental-reverse-search-history (M-p) +
+Search backward starting at the current line and moving `up' +through the history as necessary using a non-incremental search +for a string supplied by the user. +

+ + +

non-incremental-forward-search-history (M-n) +
+Search forward starting at the current line and moving `down' +through the the history as necessary using a non-incremental search +for a string supplied by the user. +

+ + +

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. +By default, this command is unbound. +

+ + +

history-search-backward () +
+Search backward through the history for the string of characters +between the start of the current line and the point. This +is a non-incremental search. By default, this command is unbound. +

+ + +

yank-nth-arg (M-C-y) +
+Insert the first argument to the previous command (usually +the second word on the previous line) at point. +With an argument n, +insert the nth word from the previous command (the words +in the previous command begin with word 0). A negative argument +inserts the nth word from the end of the previous command. +Once the argument n is computed, the argument is extracted +as if the `!n' history expansion had been specified. +

+ + +

yank-last-arg (M-. or M-_) +
+Insert last argument to the previous command (the last word of the +previous history entry). With an +argument, behave exactly like yank-nth-arg. +Successive calls to yank-last-arg move back through the history +list, inserting the last argument of each line in turn. +The history expansion facilities are used to extract the last argument, +as if the `!$' history expansion had been specified. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4.3 Commands For Changing Text

+ +

+ +

+ +
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 delete-char, then +return EOF. +

+ + +

backward-delete-char (Rubout) +
+Delete the character behind the cursor. A numeric argument means +to kill the characters instead of deleting them. +

+ + +

forward-backward-delete-char () +
+Delete the character under the cursor, unless the cursor is at the +end of the line, in which case the character behind the cursor is +deleted. By default, this is not bound to a key. +

+ + +

quoted-insert (C-q or C-v) +
+Add the next character typed to the line verbatim. This is +how to insert key sequences like C-q, for example. +

+ + +

self-insert (a, b, A, 1, !, ...) +
+Insert yourself. +

+ + +

transpose-chars (C-t) +
+Drag the character before the cursor forward over +the character at the cursor, moving the +cursor forward as well. If the insertion point +is at the end of the line, then this +transposes the last two characters of the line. +Negative arguments have no effect. +

+ + +

transpose-words (M-t) +
+Drag the word before point past the word after point, +moving point past that word as well. +If the insertion point is at the end of the line, this transposes +the last two words on the line. +

+ + +

upcase-word (M-u) +
+Uppercase the current (or following) word. With a negative argument, +uppercase the previous word, but do not move the cursor. +

+ + +

downcase-word (M-l) +
+Lowercase the current (or following) word. With a negative argument, +lowercase the previous word, but do not move the cursor. +

+ + +

capitalize-word (M-c) +
+Capitalize the current (or following) word. With a negative argument, +capitalize the previous word, but do not move the cursor. +

+ + +

overwrite-mode () +
+Toggle overwrite mode. With an explicit positive numeric argument, +switches to overwrite mode. With an explicit non-positive numeric +argument, switches to insert mode. This command affects only +emacs mode; vi mode does overwrite differently. +Each call to readline() starts in insert mode. +

+ +In overwrite mode, characters bound to self-insert replace +the text at point rather than pushing the text to the right. +Characters bound to backward-delete-char replace the character +before point with a space. +

+ +By default, this command is unbound. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4.4 Killing And Yanking

+ +

+ +

+ + +
kill-line (C-k) +
+Kill the text from point to the end of the line. +

+ + +

backward-kill-line (C-x Rubout) +
+Kill backward to the beginning of the line. +

+ + +

unix-line-discard (C-u) +
+Kill backward from the cursor to the beginning of the current line. +

+ + +

kill-whole-line () +
+Kill all characters on the current line, no matter where point is. +By default, this is unbound. +

+ + +

kill-word (M-d) +
+Kill from point to the end of the current word, or if between +words, to the end of the next word. +Word boundaries are the same as forward-word. +

+ + +

backward-kill-word (M-DEL) +
+Kill the word behind point. +Word boundaries are the same as backward-word. +

+ + +

shell-kill-word () +
+Kill from point to the end of the current word, or if between +words, to the end of the next word. +Word boundaries are the same as shell-forward-word. +

+ + +

backward-kill-word () +
+Kill the word behind point. +Word boundaries are the same as shell-backward-word. +

+ + +

unix-word-rubout (C-w) +
+Kill the word behind point, using white space as a word boundary. +The killed text is saved on the kill-ring. +

+ + +

unix-filename-rubout () +
+Kill the word behind point, using white space and the slash character +as the word boundaries. +The killed text is saved on the kill-ring. +

+ + +

delete-horizontal-space () +
+Delete all spaces and tabs around point. By default, this is unbound. +

+ + +

kill-region () +
+Kill the text in the current region. +By default, this command is unbound. +

+ + +

copy-region-as-kill () +
+Copy the text in the region to the kill buffer, so it can be yanked +right away. By default, this command is unbound. +

+ + +

copy-backward-word () +
+Copy the word before point to the kill buffer. +The word boundaries are the same as backward-word. +By default, this command is unbound. +

+ + +

copy-forward-word () +
+Copy the word following point to the kill buffer. +The word boundaries are the same as forward-word. +By default, this command is unbound. +

+ + +

yank (C-y) +
+Yank the top of the kill ring into the buffer at point. +

+ + +

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

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4.5 Specifying Numeric Arguments

+ +
+ + +
digit-argument (M-0, M-1, ... M--) +
+Add this digit to the argument already accumulating, or start a new +argument. M-- starts a negative argument. +

+ + +

universal-argument () +
+This is another way to specify an argument. +If this command is followed by one or more digits, optionally with a +leading minus sign, those digits define the argument. +If the command is followed by digits, executing universal-argument +again ends the numeric argument, but is otherwise ignored. +As a special case, if this command is immediately followed by a +character that is neither a digit 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. +By default, this is not bound to a key. +
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4.6 Letting Readline Type For You

+ +

+ +

+ +
complete (TAB) +
+Attempt to perform completion on the text before point. +The actual completion performed is application-specific. +Bash attempts completion treating the text as a variable (if the +text begins with `$'), username (if the text begins with +`~'), hostname (if the text begins with `@'), or +command (including aliases and functions) in turn. If none +of these produces a match, filename completion is attempted. +

+ + +

possible-completions (M-?) +
+List the possible completions of the text before point. +

+ + +

insert-completions (M-*) +
+Insert all completions of the text before point that would have +been generated by possible-completions. +

+ + +

menu-complete () +
+Similar to complete, but replaces the word to be completed +with a single match from the list of possible completions. +Repeated execution of menu-complete steps through the list +of possible completions, inserting each match in turn. +At the end of the list of completions, the bell is rung +(subject to the setting of bell-style) +and the original text is restored. +An argument of n moves n positions forward in the list +of matches; a negative argument may be used to move backward +through the list. +This command is intended to be bound to TAB, but is unbound +by default. +

+ + +

menu-complete-backward () +
+Identical to menu-complete, but moves backward through the list +of possible completions, as if menu-complete had been given a +negative argument. +

+ + +

delete-char-or-list () +
+Deletes the character under the cursor if not at the beginning or +end of the line (like delete-char). +If at the end of the line, behaves identically to +possible-completions. +This command is unbound by default. +

+ + +

complete-filename (M-/) +
+Attempt filename completion on the text before point. +

+ + +

possible-filename-completions (C-x /) +
+List the possible completions of the text before point, +treating it as a filename. +

+ + +

complete-username (M-~) +
+Attempt completion on the text before point, treating +it as a username. +

+ + +

possible-username-completions (C-x ~) +
+List the possible completions of the text before point, +treating it as a username. +

+ + +

complete-variable (M-$) +
+Attempt completion on the text before point, treating +it as a shell variable. +

+ + +

possible-variable-completions (C-x $) +
+List the possible completions of the text before point, +treating it as a shell variable. +

+ + +

complete-hostname (M-@) +
+Attempt completion on the text before point, treating +it as a hostname. +

+ + +

possible-hostname-completions (C-x @) +
+List the possible completions of the text before point, +treating it as a hostname. +

+ + +

complete-command (M-!) +
+Attempt completion on the text before point, treating +it as a command name. Command completion attempts to +match the text against aliases, reserved words, shell +functions, shell builtins, and finally executable filenames, +in that order. +

+ + +

possible-command-completions (C-x !) +
+List the possible completions of the text before point, +treating it as a command name. +

+ + +

dynamic-complete-history (M-TAB) +
+Attempt completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. +

+ + +

dabbrev-expand () +
+Attempt menu completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. +

+ + +

complete-into-braces (M-{) +
+Perform filename completion and insert the list of possible completions +enclosed within braces so the list is available to the shell +(see section 3.5.1 Brace Expansion). +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4.7 Keyboard Macros

+ +
+ + +
start-kbd-macro (C-x () +
+Begin saving the characters typed into the current keyboard macro. +

+ + +

end-kbd-macro (C-x )) +
+Stop saving the characters typed into the current keyboard macro +and save the definition. +

+ + +

call-last-kbd-macro (C-x e) +
+Re-execute the last keyboard macro defined, by making the characters +in the macro appear as if typed at the keyboard. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.4.8 Some Miscellaneous Commands

+ +
+ + +
re-read-init-file (C-x C-r) +
+Read in the contents of the inputrc file, and incorporate +any bindings or variable assignments found there. +

+ + +

abort (C-g) +
+Abort the current editing command and +ring the terminal's bell (subject to the setting of +bell-style). +

+ + +

do-uppercase-version (M-a, M-b, M-x, ...) +
+If the metafied character x is lowercase, run the command +that is bound to the corresponding uppercase character. +

+ + +

prefix-meta (ESC) +
+Metafy the next character typed. This is for keyboards +without a meta key. Typing `ESC f' is equivalent to typing +M-f. +

+ + +

undo (C-_ or C-x C-u) +
+Incremental undo, separately remembered for each line. +

+ + +

revert-line (M-r) +
+Undo all changes made to this line. This is like executing the undo +command enough times to get back to the beginning. +

+ + +

tilde-expand (M-&) +
+Perform tilde expansion on the current word. +

+ + +

set-mark (C-@) +
+Set the mark to the point. If a +numeric argument is supplied, the mark is set to that position. +

+ + +

exchange-point-and-mark (C-x C-x) +
+Swap the point with the mark. The current cursor position is set to +the saved position, and the old cursor position is saved as the mark. +

+ + +

character-search (C-]) +
+A character is read and point is moved to the next occurrence of that +character. A negative count searches for previous occurrences. +

+ + +

character-search-backward (M-C-]) +
+A character is read and point is moved to the previous occurrence +of that character. A negative count searches for subsequent +occurrences. +

+ + +

skip-csi-sequence () +
+Read enough characters to consume a multi-key sequence such as those +defined for keys like Home and End. Such sequences begin with a +Control Sequence Indicator (CSI), usually ESC-[. If this sequence is +bound to "\e[", keys producing such sequences will have no effect +unless explicitly bound to a readline command, instead of inserting +stray characters into the editing buffer. This is unbound by default, +but usually bound to ESC-[. +

+ + +

insert-comment (M-#) +
+Without a numeric argument, the value of the comment-begin +variable is inserted at the beginning of the current line. +If a numeric argument is supplied, this command acts as a toggle: if +the characters at the beginning of the line do not match the value +of comment-begin, the value is inserted, otherwise +the characters in comment-begin are deleted from the beginning of +the line. +In either case, the line is accepted as if a newline had been typed. +The default value of comment-begin causes this command +to make the current line a shell comment. +If a numeric argument causes the comment character to be removed, the line +will be executed by the shell. +

+ + +

dump-functions () +
+Print all of the functions and their key bindings to the +Readline output stream. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an inputrc file. This command is unbound by default. +

+ + +

dump-variables () +
+Print all of the settable variables and their values to the +Readline output stream. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an inputrc file. This command is unbound by default. +

+ + +

dump-macros () +
+Print all of the Readline key sequences bound to macros and the +strings they output. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an inputrc file. This command is unbound by default. +

+ + +

glob-complete-word (M-g) +
+The word before point is treated as a pattern for pathname expansion, +with an asterisk implicitly appended. This pattern is used to +generate a list of matching file names for possible completions. +

+ + +

glob-expand-word (C-x *) +
+The word before point is treated as a pattern for pathname expansion, +and the list of matching file names is inserted, replacing the word. +If a numeric argument is supplied, a `*' is appended before +pathname expansion. +

+ + +

glob-list-expansions (C-x g) +
+The list of expansions that would have been generated by +glob-expand-word is displayed, and the line is redrawn. +If a numeric argument is supplied, a `*' is appended before +pathname expansion. +

+ + +

display-shell-version (C-x C-v) +
+Display version information about the current instance of Bash. +

+ + +

shell-expand-line (M-C-e) +
+Expand the line as the shell does. +This performs alias and history expansion as well as all of the shell +word expansions (see section 3.5 Shell Expansions). +

+ + +

history-expand-line (M-^) +
+Perform history expansion on the current line. +

+ + +

magic-space () +
+Perform history expansion on the current line and insert a space +(see section 9.3 History Expansion). +

+ + +

alias-expand-line () +
+Perform alias expansion on the current line (see section 6.6 Aliases). +

+ + +

history-and-alias-expand-line () +
+Perform history and alias expansion on the current line. +

+ + +

insert-last-argument (M-. or M-_) +
+A synonym for yank-last-arg. +

+ + +

operate-and-get-next (C-o) +
+Accept the current line for execution and fetch the next line +relative to the current line from the history for editing. Any +argument is ignored. +

+ + +

edit-and-execute-command (C-xC-e) +
+Invoke an editor on the current command line, and execute the result as shell +commands. +Bash attempts to invoke +$VISUAL, $EDITOR, and emacs +as the editor, in that order. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.5 Readline vi Mode

+ +

+ +While the Readline library does not have a full set of vi +editing functions, it does contain enough to allow simple editing +of the line. The Readline vi mode behaves as specified in +the POSIX 1003.2 standard. +

+ +In order to switch interactively between emacs and vi +editing modes, use the `set -o emacs' and `set -o vi' +commands (see section 4.3.1 The Set Builtin). +The Readline default is emacs mode. +

+ +When you enter a line in vi mode, you are already placed in +`insertion' mode, as if you had typed an `i'. Pressing ESC +switches you into `command' mode, where you can edit the text of the +line with the standard vi movement keys, move to previous +history lines with `k' and subsequent lines with `j', and +so forth. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.6 Programmable Completion

+ +

+ +When word completion is attempted for an argument to a command for +which a completion specification (a compspec) has been defined +using the complete builtin (see section 8.7 Programmable Completion Builtins), +the programmable completion facilities are invoked. +

+ +First, the command name is identified. +If a compspec has been defined for that command, the +compspec is used to generate the list of possible completions for the word. +If the command word is the empty string (completion attempted at the +beginning of an empty line), any compspec defined with +the `-E' option to complete is used. +If the command word is a full pathname, a compspec for the full +pathname is searched for first. +If no compspec is found for the full pathname, an attempt is made to +find a compspec for the portion following the final slash. +If those searches do not result in a compspec, any compspec defined with +the `-D' option to complete is used as the default. +

+ +Once a compspec has been found, it is used to generate the list of +matching words. +If a compspec is not found, the default Bash completion +described above (see section 8.4.6 Letting Readline Type For You) is performed. +

+ +First, the actions specified by the compspec are used. +Only matches which are prefixed by the word being completed are +returned. +When the `-f' or `-d' option is used for filename or +directory name completion, the shell variable FIGNORE is +used to filter the matches. +See section 5.2 Bash Variables, for a description of FIGNORE. +

+ +Any completions specified by a filename expansion pattern to the +`-G' option are generated next. +The words generated by the pattern need not match the word being completed. +The GLOBIGNORE shell variable is not used to filter the matches, +but the FIGNORE shell variable is used. +

+ +Next, the string specified as the argument to the `-W' option +is considered. +The string is first split using the characters in the IFS +special variable as delimiters. +Shell quoting is honored. +Each word is then expanded using +brace expansion, tilde expansion, parameter and variable expansion, +command substitution, and arithmetic expansion, +as described above (see section 3.5 Shell Expansions). +The results are split using the rules described above +(see section 3.5.7 Word Splitting). +The results of the expansion are prefix-matched against the word being +completed, and the matching words become the possible completions. +

+ +After these matches have been generated, any shell function or command +specified with the `-F' and `-C' options is invoked. +When the command or function is invoked, the COMP_LINE, +COMP_POINT, COMP_KEY, and COMP_TYPE variables are +assigned values as described above (see section 5.2 Bash Variables). +If a shell function is being invoked, the COMP_WORDS and +COMP_CWORD variables are also set. +When the function or command is invoked, the first argument 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. +

+ +Any function specified with `-F' is invoked first. +The function may use any of the shell facilities, including the +compgen and compopt builtins described below +(see section 8.7 Programmable Completion Builtins), to generate the matches. +It must put the possible completions in the COMPREPLY array +variable. +

+ +Next, any command specified with the `-C' option is invoked +in an environment equivalent to command substitution. +It should print a list of completions, one per line, to +the standard output. +Backslash may be used to escape a newline, if necessary. +

+ +After all of the possible completions are generated, any filter +specified with the `-X' option is applied to the list. +The filter is a pattern as used for pathname expansion; a `&' +in the pattern is replaced with the text of the word being completed. +A literal `&' may be escaped with a backslash; the backslash +is removed before attempting a match. +Any completion that matches the pattern will be removed from the list. +A leading `!' negates the pattern; in this case any completion +not matching the pattern will be removed. +

+ +Finally, any prefix and suffix specified with the `-P' and `-S' +options are added to each member of the completion list, and the result is +returned to the Readline completion code as the list of possible +completions. +

+ +If the previously-applied actions do not generate any matches, and the +`-o dirnames' option was supplied to complete when the +compspec was defined, directory name completion is attempted. +

+ +If the `-o plusdirs' option was supplied to complete when +the compspec was defined, directory name completion is attempted and any +matches are added to the results of the other actions. +

+ +By default, if a compspec is found, whatever it generates is returned to +the completion code as the full set of possible completions. +The default Bash completions are not attempted, and the Readline default +of filename completion is disabled. +If the `-o bashdefault' option was supplied to complete when +the compspec was defined, the default Bash completions are attempted +if the compspec generates no matches. +If the `-o default' option was supplied to complete when the +compspec was defined, Readline's default completion will be performed +if the compspec (and, if attempted, the default Bash completions) +generate no matches. +

+ +When a compspec indicates that directory name completion is desired, +the programmable completion functions force Readline to append a slash +to completed names which are symbolic links to directories, subject to +the value of the mark-directories Readline variable, regardless +of the setting of the mark-symlinked-directories Readline variable. +

+ +There is some support for dynamically modifying completions. This is +most useful when used in combination with a default completion specified +with `-D'. It's possible for shell functions executed as completion +handlers to indicate that completion should be retried by returning an +exit status of 124. If a shell function returns 124, and changes +the compspec associated with the command on which completion is being +attempted (supplied as the first argument when the function is executed), +programmable completion restarts from the beginning, with an +attempt to find a compspec for that command. This allows a set of +completions to be built dynamically as completion is attempted, rather than +being loaded all at once. +

+ +For instance, assuming that there is a library of compspecs, each kept in a +file corresponding to the name of the command, the following default +completion function would load completions dynamically: +

+ +
 
_completion_loader()
+{
+	. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
+}
+complete -D -F _completion_loader
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

8.7 Programmable Completion Builtins

+ +

+ +Two builtin commands are available to manipulate the programmable completion +facilities. +

+ +

+
compgen +
+
 
compgen [option] [word]
+

+ +Generate possible completion matches for word according to +the options, which may be any option accepted by the +complete +builtin with the exception of `-p' and `-r', and write +the matches to the standard output. +When using the `-F' or `-C' options, the various shell variables +set by the programmable completion facilities, while available, will not +have useful values. +

+ +The matches will be generated in the same way as if the programmable +completion code had generated them directly from a completion specification +with the same flags. +If word is specified, only those completions matching word +will be displayed. +

+ +The return value is true unless an invalid option is supplied, or no +matches were generated. +

+ +

complete +
+
 
complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist]
+[-F function] [-C command] [-X filterpat]
+[-P prefix] [-S suffix] name [name ...]
+complete -pr [-DE] [name ...]
+

+ +Specify how arguments to each name should be completed. +If the `-p' option is supplied, or if no options are supplied, existing +completion specifications are printed in a way that allows them to be +reused as input. +The `-r' option removes a completion specification for +each name, or, if no names are supplied, all +completion specifications. +The `-D' option indicates that the remaining options and actions should +apply to the "default" command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The `-E' option indicates that the remaining options and actions should +apply to "empty" command completion; that is, completion attempted on a +blank line. +

+ +The process of applying these completion specifications when word completion +is attempted is described above (see section 8.6 Programmable Completion). The +`-D' option takes precedence over `-E'. +

+ +Other options, if specified, have the following meanings. +The arguments to the `-G', `-W', and `-X' options +(and, if necessary, the `-P' and `-S' options) +should be quoted to protect them from expansion before the +complete builtin is invoked. +

+ +

+
-o comp-option +
The comp-option controls several aspects of the compspec's behavior +beyond the simple generation of completions. +comp-option may be one of: +

+ +

+ +
bashdefault +
Perform the rest of the default Bash completions if the compspec +generates no matches. +

+ +

default +
Use Readline's default filename completion if the compspec generates +no matches. +

+ +

dirnames +
Perform directory name completion if the compspec generates no matches. +

+ +

filenames +
Tell Readline that the compspec generates filenames, so it can perform any +filename-specific processing (like adding a slash to directory names +quoting special characters, or suppressing trailing spaces). +This option is intended to be used with shell functions specified +with `-F'. +

+ +

nospace +
Tell Readline not to append a space (the default) to words completed at +the end of the line. +

+ +

plusdirs +
After any matches defined by the compspec are generated, +directory name completion is attempted and any +matches are added to the results of the other actions. +

+ +

+

+ +

-A action +
The action may be one of the following to generate a list of possible +completions: +

+ +

+
alias +
Alias names. May also be specified as `-a'. +

+ +

arrayvar +
Array variable names. +

+ +

binding +
Readline key binding names (see section 8.4 Bindable Readline Commands). +

+ +

builtin +
Names of shell builtin commands. May also be specified as `-b'. +

+ +

command +
Command names. May also be specified as `-c'. +

+ +

directory +
Directory names. May also be specified as `-d'. +

+ +

disabled +
Names of disabled shell builtins. +

+ +

enabled +
Names of enabled shell builtins. +

+ +

export +
Names of exported shell variables. May also be specified as `-e'. +

+ +

file +
File names. May also be specified as `-f'. +

+ +

function +
Names of shell functions. +

+ +

group +
Group names. May also be specified as `-g'. +

+ +

helptopic +
Help topics as accepted by the help builtin (see section 4.2 Bash Builtin Commands). +

+ +

hostname +
Hostnames, as taken from the file specified by the +HOSTFILE shell variable (see section 5.2 Bash Variables). +

+ +

job +
Job names, if job control is active. May also be specified as `-j'. +

+ +

keyword +
Shell reserved words. May also be specified as `-k'. +

+ +

running +
Names of running jobs, if job control is active. +

+ +

service +
Service names. May also be specified as `-s'. +

+ +

setopt +
Valid arguments for the `-o' option to the set builtin +(see section 4.3.1 The Set Builtin). +

+ +

shopt +
Shell option names as accepted by the shopt builtin +(see section 4.2 Bash Builtin Commands). +

+ +

signal +
Signal names. +

+ +

stopped +
Names of stopped jobs, if job control is active. +

+ +

user +
User names. May also be specified as `-u'. +

+ +

variable +
Names of all shell variables. May also be specified as `-v'. +
+

+ +

-G globpat +
The filename expansion pattern globpat is expanded to generate +the possible completions. +

+ +

-W wordlist +
The wordlist is split using the characters in the +IFS special variable as delimiters, and each resultant word +is expanded. +The possible completions are the members of the resultant list which +match the word being completed. +

+ +

-C command +
command is executed in a subshell environment, and its output is +used as the possible completions. +

+ +

-F function +
The shell function function is executed in the current shell +environment. +When it finishes, the possible completions are retrieved from the value +of the COMPREPLY array variable. +

+ +

-X filterpat +
filterpat is a pattern as used for filename expansion. +It is applied to the list of possible completions generated by the +preceding options and arguments, and each completion matching +filterpat is removed from the list. +A leading `!' in filterpat negates the pattern; in this +case, any completion not matching filterpat is removed. +

+ +

-P prefix +
prefix is added at the beginning of each possible completion +after all other options have been applied. +

+ +

-S suffix +
suffix is appended to each possible completion +after all other options have been applied. +
+

+ +The return value is true unless an invalid option is supplied, an option +other than `-p' or `-r' is supplied without a name +argument, an attempt is made to remove a completion specification for +a name for which no specification exists, or +an error occurs adding a completion specification. +

+ +

compopt +
+
 
compopt [-o option] [-DE] [+o option] [name]
+
Modify completion options for each name according to the +options, or for the currently-execution completion if no names +are supplied. +If no options are given, display the completion options for each +name or the current completion. +The possible values of option are those valid for the complete +builtin described above. +The `-D' option indicates that the remaining options should +apply to the "default" command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The `-E' option indicates that the remaining options should +apply to "empty" command completion; that is, completion attempted on a +blank line. +

+ +The `-D' option takes precedence over `-E'. +

+ +The return value is true unless an invalid option is supplied, an attempt +is made to modify the options for a name for which no completion +specification exists, or an output error occurs. +

+ +

+

+ + +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

9. Using History Interactively

+ +

+ +This chapter describes how to use the GNU History Library +interactively, from a user's standpoint. +It should be considered a user's guide. +For information on using the GNU History Library in other programs, +see the GNU Readline Library Manual. +

+ +

+ + + +
9.1 Bash History Facilities  How Bash lets you manipulate your command + history.
9.2 Bash History Builtins  The Bash builtin commands that manipulate + the command history.
9.3 History Expansion  What it feels like using History as a user.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

9.1 Bash History Facilities

+ +

+ +When the `-o history' option to the set builtin +is enabled (see section 4.3.1 The Set Builtin), +the shell provides access to the command history, +the list of commands previously typed. +The value of the HISTSIZE shell variable is used as the +number of commands to save in a history list. +The text of the last $HISTSIZE +commands (default 500) is saved. +The shell stores each command in the history list prior to +parameter and variable expansion +but after history expansion is performed, subject to the +values of the shell variables +HISTIGNORE and HISTCONTROL. +

+ +When the shell starts up, the history is initialized from the +file named by the HISTFILE variable (default `~/.bash_history'). +The file named by the value of HISTFILE is truncated, if +necessary, to contain no more than the number of lines specified by +the value of the HISTFILESIZE variable. +When an interactive shell exits, the last +$HISTSIZE lines are copied from the history list to the file +named by $HISTFILE. +If the histappend shell option is set (see section 4.2 Bash Builtin Commands), +the lines are appended to the history file, +otherwise the history file is overwritten. +If HISTFILE +is unset, or if the history file is unwritable, the history is +not saved. After saving the history, the history file is truncated +to contain no more than $HISTFILESIZE +lines. If HISTFILESIZE is not set, no truncation is performed. +

+ +If the HISTTIMEFORMAT is set, the time stamp information +associated with each history entry is written to the history file, +marked with the history comment character. +When the history file is read, lines beginning with the history +comment character followed immediately by a digit are interpreted +as timestamps for the previous history line. +

+ +The builtin command fc may be used to list or edit and re-execute +a portion of the history list. +The history builtin may be used to display or modify the history +list and manipulate the history file. +When using command-line editing, search commands +are available in each editing mode that provide access to the +history list (see section 8.4.2 Commands For Manipulating The History). +

+ +The shell allows control over which commands are saved on the history +list. The HISTCONTROL and HISTIGNORE +variables may be set to cause the shell to save only a subset of the +commands entered. +The cmdhist +shell option, if enabled, causes the shell to attempt to save each +line of a multi-line command in the same history entry, adding +semicolons where necessary to preserve syntactic correctness. +The lithist +shell option causes the shell to save the command with embedded newlines +instead of semicolons. +The shopt builtin is used to set these options. +See section 4.2 Bash Builtin Commands, for a description of shopt. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

9.2 Bash History Builtins

+ +

+ +Bash provides two builtin commands which manipulate the +history list and history file. +

+ +

+ +
fc +
+
 
fc [-e ename] [-lnr] [first] [last]
+fc -s [pat=rep] [command]
+

+ +Fix Command. In the first form, a range of commands from first to +last is selected from the history list. Both first and +last may be specified as a string (to locate the most recent +command beginning with that string) or as a number (an index into the +history list, where a negative number is used as an offset from the +current command number). If last is not specified it is set to +first. If first is not specified it is set to the previous +command for editing and -16 for listing. If the `-l' flag is +given, the commands are listed on standard output. The `-n' flag +suppresses the command numbers when listing. The `-r' flag +reverses the order of the listing. Otherwise, the editor given by +ename is invoked on a file containing those commands. If +ename is not given, the value of the following variable expansion +is used: ${FCEDIT:-${EDITOR:-vi}}. This says to use the +value of the FCEDIT variable if set, or the value of the +EDITOR variable if that is set, or vi if neither is set. +When editing is complete, the edited commands are echoed and executed. +

+ +In the second form, command is re-executed after each instance +of pat in the selected command is replaced by rep. +

+ +A useful alias to use with the fc command is r='fc -s', so +that typing `r cc' runs the last command beginning with cc +and typing `r' re-executes the last command (see section 6.6 Aliases). +

+ +

history +
+
 
history [n]
+history -c
+history -d offset
+history [-anrw] [filename]
+history -ps arg
+

+ +With no options, display the history list with line numbers. +Lines prefixed with a `*' have been modified. +An argument of n lists only the last n lines. +If the shell variable HISTTIMEFORMAT is set and not null, +it is used as a format string for strftime to display +the time stamp associated with each displayed history entry. +No intervening blank is printed between the formatted time stamp +and the history line. +

+ +Options, if supplied, have the following meanings: +

+ +

+
-c +
Clear the history list. This may be combined +with the other options to replace the history list completely. +

+ +

-d offset +
Delete the history entry at position offset. +offset should be specified as it appears when the history is +displayed. +

+ +

-a +
Append the new +history lines (history lines entered since the beginning of the +current Bash session) to the history file. +

+ +

-n +
Append the history lines not already read from the history file +to the current history list. These are lines appended to the history +file since the beginning of the current Bash session. +

+ +

-r +
Read the current history file and append its contents to +the history list. +

+ +

-w +
Write out the current history to the history file. +

+ +

-p +
Perform history substitution on the args and display the result +on the standard output, without storing the results in the history list. +

+ +

-s +
The args are added to the end of +the history list as a single entry. +

+ +

+

+ +When any of the `-w', `-r', `-a', or `-n' options is +used, if filename +is given, then it is used as the history file. If not, then +the value of the HISTFILE variable is used. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

9.3 History Expansion

+ +

+ +The History library provides a history expansion feature that is similar +to the history expansion provided by csh. This section +describes the syntax used to manipulate the history information. +

+ +History expansions introduce words from the history list into +the input stream, making it easy to repeat commands, insert the +arguments to a previous command into the current input line, or +fix errors in previous commands quickly. +

+ +History expansion takes place in two parts. The first is to determine +which line from the history list should be used during substitution. +The second is to select portions of that line for inclusion into the +current one. The line selected from the history is called the +event, and the portions of that line that are acted upon are +called words. Various modifiers are available to manipulate +the selected words. The line is broken into words in the same fashion +that Bash does, so that several words +surrounded by quotes are considered one word. +History expansions are introduced by the appearance of the +history expansion character, which is `!' by default. +Only `\' and `'' may be used to escape the history expansion +character. +

+ +Several shell options settable with the shopt +builtin (see section 4.2 Bash Builtin Commands) may be used to tailor +the behavior of history expansion. If the +histverify shell option is enabled, and Readline +is being used, history substitutions are not immediately passed to +the shell parser. +Instead, the expanded line is reloaded into the Readline +editing buffer for further modification. +If Readline is being used, and the histreedit +shell option is enabled, a failed history expansion will be +reloaded into the Readline editing buffer for correction. +The `-p' option to the history builtin command +may be used to see what a history expansion will do before using it. +The `-s' option to the history builtin may be used to +add commands to the end of the history list without actually executing +them, so that they are available for subsequent recall. +This is most useful in conjunction with Readline. +

+ +The shell allows control of the various characters used by the +history expansion mechanism with the histchars variable, +as explained above (see section 5.2 Bash Variables). The shell uses +the history comment character to mark history timestamps when +writing the history file. +

+ +

+ + + +
9.3.1 Event Designators  How to specify which history line to use.
9.3.2 Word Designators  Specifying which words are of interest.
9.3.3 Modifiers  Modifying the results of substitution.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

9.3.1 Event Designators

+ +

+ +An event designator is a reference to a command line entry in the +history list. + +

+ +

+ +
! +
Start a history substitution, except when followed by a space, tab, +the end of the line, `=' or `(' (when the +extglob shell option is enabled using the shopt builtin). +

+ +

!n +
Refer to command line n. +

+ +

!-n +
Refer to the command n lines back. +

+ +

!! +
Refer to the previous command. This is a synonym for `!-1'. +

+ +

!string +
Refer to the most recent command starting with string. +

+ +

!?string[?] +
Refer to the most recent command containing string. The trailing +`?' may be omitted if the string is followed immediately by +a newline. +

+ +

^string1^string2^ +
Quick Substitution. Repeat the last command, replacing string1 +with string2. Equivalent to +!!:s/string1/string2/. +

+ +

!# +
The entire command line typed so far. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

9.3.2 Word Designators

+ +

+ +Word designators are used to select desired words from the event. +A `:' separates the event specification from the word designator. It +may be omitted if the word designator begins with a `^', `$', +`*', `-', or `%'. Words are numbered from the beginning +of the line, with the first word being denoted by 0 (zero). Words are +inserted into the current line separated by single spaces. +

+ +For example, +

+ +

+
!! +
designates the preceding command. When you type this, the preceding +command is repeated in toto. +

+ +

!!:$ +
designates the last argument of the preceding command. This may be +shortened to !$. +

+ +

!fi:2 +
designates the second argument of the most recent command starting with +the letters fi. +
+

+ +Here are the word designators: + +

+ +
0 (zero) +
The 0th word. For many applications, this is the command word. +

+ +

n +
The nth word. +

+ +

^ +
The first argument; that is, word 1. +

+ +

$ +
The last argument. +

+ +

% +
The word matched by the most recent `?string?' search. +

+ +

x-y +
A range of words; `-y' abbreviates `0-y'. +

+ +

* +
All of the words, except the 0th. This is a synonym for `1-$'. +It is not an error to use `*' if there is just one word in the event; +the empty string is returned in that case. +

+ +

x* +
Abbreviates `x-$' +

+ +

x- +
Abbreviates `x-$' like `x*', but omits the last word. +

+ +

+

+ +If a word designator is supplied without an event specification, the +previous command is used as the event. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

9.3.3 Modifiers

+ +

+ +After the optional word designator, you can add a sequence of one or more +of the following modifiers, each preceded by a `:'. +

+ +

+ +
h +
Remove a trailing pathname component, leaving only the head. +

+ +

t +
Remove all leading pathname components, leaving the tail. +

+ +

r +
Remove a trailing suffix of the form `.suffix', leaving +the basename. +

+ +

e +
Remove all but the trailing suffix. +

+ +

p +
Print the new command but do not execute it. +

+ +

q +
Quote the substituted words, escaping further substitutions. +

+ +

x +
Quote the substituted words as with `q', +but break into words at spaces, tabs, and newlines. +

+ +

s/old/new/ +
Substitute new for the first occurrence of old in the +event line. Any delimiter may be used in place of `/'. +The delimiter may be quoted in old and new +with a single backslash. If `&' appears in new, +it is replaced by old. A single backslash will quote +the `&'. The final delimiter is optional if it is the last +character on the input line. +

+ +

& +
Repeat the previous substitution. +

+ +

g +
a +
Cause changes to be applied over the entire event line. Used in +conjunction with `s', as in gs/old/new/, +or with `&'. +

+ +

G +
Apply the following `s' modifier once to each word in the event. +

+ +

+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10. Installing Bash

+ +

+ +This chapter provides basic instructions for installing Bash on +the various supported platforms. The distribution supports the +GNU operating systems, nearly every version of Unix, and several +non-Unix systems such as BeOS and Interix. +Other independent ports exist for +MS-DOS, OS/2, and Windows platforms. +

+ +

+ + + + + + + + +
10.1 Basic Installation  Installation instructions.
10.2 Compilers and Options  How to set special options for various + systems.
10.3 Compiling For Multiple Architectures  How to compile Bash for more + than one kind of system from + the same source tree.
10.4 Installation Names  How to set the various paths used by the installation.
10.5 Specifying the System Type  How to configure Bash for a particular system.
10.6 Sharing Defaults  How to share default configuration values among GNU + programs.
10.7 Operation Controls  Options recognized by the configuration program.
10.8 Optional Features  How to enable and disable optional features when + building Bash.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10.1 Basic Installation

+ +

+ +These are installation instructions for Bash. +

+ +The simplest way to compile Bash is: +

+ +

    +
  1. +cd to the directory containing the source code and type +`./configure' to configure Bash for your system. If you're +using csh on an old version of System V, you might need to +type `sh ./configure' instead to prevent csh from trying +to execute configure itself. +

    + +Running configure takes some time. +While running, it prints messages telling which features it is +checking for. +

    + +

  2. +Type `make' to compile Bash and build the bashbug bug +reporting script. +

    + +

  3. +Optionally, type `make tests' to run the Bash test suite. +

    + +

  4. +Type `make install' to install bash and bashbug. +This will also install the manual pages and Info file. +

    + +

+

+ +The configure shell script attempts to guess correct +values for various system-dependent variables used during +compilation. It uses those values to create a `Makefile' in +each directory of the package (the top directory, the +`builtins', `doc', and `support' directories, +each directory under `lib', and several others). It also creates a +`config.h' file containing system-dependent definitions. +Finally, it creates a shell script named config.status that you +can run in the future to recreate the current configuration, a +file `config.cache' that saves the results of its tests to +speed up reconfiguring, and a file `config.log' containing +compiler output (useful mainly for debugging configure). +If at some point +`config.cache' contains results you don't want to keep, you +may remove or edit it. +

+ +To find out more about the options and arguments that the +configure script understands, type +

+ +
 
bash-2.04$ ./configure --help
+

+ +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 configure could check whether or not +to do them, and mail diffs or instructions to +bash-maintainers@gnu.org so they can be +considered for the next release. +

+ +The file `configure.in' is used to create configure +by a program called Autoconf. You only need +`configure.in' if you want to change it or regenerate +configure using a newer version of Autoconf. If +you do this, make sure you are using Autoconf version 2.50 or +newer. +

+ +You can remove the program binaries and object files from the +source code directory by typing `make clean'. To also remove the +files that configure created (so you can compile Bash for +a different kind of computer), type `make distclean'. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10.2 Compilers and Options

+ +

+ +Some systems require unusual options for compilation or linking +that the configure script does not know about. You can +give configure initial values for variables by setting +them in the environment. Using a Bourne-compatible shell, you +can do that on the command line like this: +

+ +
 
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+

+ +On systems that have the env program, you can do it like this: +

+ +
 
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+

+ +The configuration process uses GCC to build Bash if it +is available. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10.3 Compiling For Multiple Architectures

+ +

+ +You can compile Bash for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of make that +supports the VPATH variable, such as GNU make. +cd to the +directory where you want the object files and executables to go and run +the configure script from the source directory. You may need to +supply the `--srcdir=PATH' argument to tell configure where the +source files are. configure automatically checks for the +source code in the directory that configure is in and in `..'. +

+ +If you have to use a make that does not supports the VPATH +variable, you can compile Bash for one architecture at a +time in the source code directory. After you have installed +Bash for one architecture, use `make distclean' before +reconfiguring for another architecture. +

+ +Alternatively, if your system supports symbolic links, you can use the +`support/mkclone' script to create a build tree which has +symbolic links back to each file in the source directory. Here's an +example that creates a build directory in the current directory from a +source directory `/usr/gnu/src/bash-2.0': +

+ +
 
bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+

+ +The mkclone script requires Bash, so you must have already built +Bash for at least one architecture before you can create build +directories for other architectures. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10.4 Installation Names

+ +

+ +By default, `make install' will install into +`/usr/local/bin', `/usr/local/man', etc. You can +specify an installation prefix other than `/usr/local' by +giving configure the option `--prefix=PATH', +or by specifying a value for the DESTDIR `make' +variable when running `make install'. +

+ +You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. +If you give configure the option +`--exec-prefix=PATH', `make install' will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10.5 Specifying the System Type

+ +

+ +There may be some features configure can not figure out +automatically, but need to determine by the type of host Bash +will run on. Usually configure can figure that +out, but if it prints a message saying it can not guess the host +type, give it the `--host=TYPE' option. `TYPE' can +either be a short name for the system type, such as `sun4', +or a canonical name with three fields: `CPU-COMPANY-SYSTEM' +(e.g., `i386-unknown-freebsd4.2'). +

+ +See the file `support/config.sub' for the possible +values of each field. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10.6 Sharing Defaults

+ +

+ +If you want to set default values for configure scripts to +share, you can create a site shell script called +config.site that gives default values for variables like +CC, cache_file, and prefix. configure +looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +CONFIG_SITE environment variable to the location of the site +script. A warning: the Bash configure looks for a site script, +but not all configure scripts do. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10.7 Operation Controls

+ +

+ +configure recognizes the following options to control how it +operates. +

+ +

+ +
--cache-file=file +
Use and save the results of the tests in +file instead of `./config.cache'. Set file to +`/dev/null' to disable caching, for debugging +configure. +

+ +

--help +
Print a summary of the options to configure, and exit. +

+ +

--quiet +
--silent +
-q +
Do not print messages saying which checks are being made. +

+ +

--srcdir=dir +
Look for the Bash source code in directory dir. Usually +configure can determine that directory automatically. +

+ +

--version +
Print the version of Autoconf used to generate the configure +script, and exit. +
+

+ +configure also accepts some other, not widely used, boilerplate +options. `configure --help' prints the complete list. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

10.8 Optional Features

+ +

+ +The Bash configure has a number of `--enable-feature' +options, where feature indicates an optional part of Bash. +There are also several `--with-package' options, +where package is something like `bash-malloc' or `purify'. +To turn off the default use of a package, use +`--without-package'. To configure Bash without a feature +that is enabled by default, use `--disable-feature'. +

+ +Here is a complete list of the `--enable-' and +`--with-' options that the Bash configure recognizes. +

+ +

+
--with-afs +
Define if you are using the Andrew File System from Transarc. +

+ +

--with-bash-malloc +
Use the Bash version of +malloc in the directory `lib/malloc'. This is not the same +malloc that appears in GNU libc, but an older version +originally derived from the 4.2 BSD malloc. This malloc +is very fast, but wastes some space on each allocation. +This option is enabled by default. +The `NOTES' file contains a list of systems for +which this should be turned off, and configure disables this +option automatically for a number of systems. +

+ +

--with-curses +
Use the curses library instead of the termcap library. This should +be supplied if your system has an inadequate or incomplete termcap +database. +

+ +

--with-gnu-malloc +
A synonym for --with-bash-malloc. +

+ +

--with-installed-readline[=PREFIX] +
Define this to make Bash link with a locally-installed version of Readline +rather than the version in `lib/readline'. This works only with +Readline 5.0 and later versions. If PREFIX is yes or not +supplied, configure uses the values of the make variables +includedir and libdir, which are subdirectories of prefix +by default, to find the installed version of Readline if it is not in +the standard system include and library directories. +If PREFIX is no, Bash links with the version in +`lib/readline'. +If PREFIX is set to any other value, configure treats it as +a directory pathname and looks for +the installed version of Readline in subdirectories of that directory +(include files in PREFIX/include and the library in +PREFIX/lib). +

+ +

--with-purify +
Define this to use the Purify memory allocation checker from Rational +Software. +

+ +

--enable-minimal-config +
This produces a shell with minimal features, close to the historical +Bourne shell. +
+

+ +There are several `--enable-' options that alter how Bash is +compiled and linked, rather than changing run-time features. +

+ +

+
--enable-largefile +
Enable support for large files if the operating system requires special compiler options +to build programs which can access large files. This is enabled by +default, if the operating system provides large file support. +

+ +

--enable-profiling +
This builds a Bash binary that produces profiling information to be +processed by gprof each time it is executed. +

+ +

--enable-static-link +
This causes Bash to be linked statically, if gcc is being used. +This could be used to build a version to use as root's shell. +
+

+ +The `minimal-config' option can be used to disable all of +the following options, but it is processed first, so individual +options may be enabled using `enable-feature'. +

+ +All of the following options except for `disabled-builtins' and +`xpg-echo-default' are +enabled by default, unless the operating system does not provide the +necessary support. +

+ +

+
--enable-alias +
Allow alias expansion and include the alias and unalias +builtins (see section 6.6 Aliases). +

+ +

--enable-arith-for-command +
Include support for the alternate form of the for command +that behaves like the C language for statement +(see section 3.2.4.1 Looping Constructs). +

+ +

--enable-array-variables +
Include support for one-dimensional array shell variables +(see section 6.7 Arrays). +

+ +

--enable-bang-history +
Include support for csh-like history substitution +(see section 9.3 History Expansion). +

+ +

--enable-brace-expansion +
Include csh-like brace expansion +( b{a,b}c ==> bac bbc ). +See 3.5.1 Brace Expansion, for a complete description. +

+ +

--enable-casemod-attributes +
Include support for case-modifying attributes in the declare builtin +and assignment statements. Variables with the uppercase attribute, +for example, will have their values converted to uppercase upon assignment. +

+ +

--enable-casemod-expansion +
Include support for case-modifying word expansions. +

+ +

--enable-command-timing +
Include support for recognizing time as a reserved word and for +displaying timing statistics for the pipeline following time +(see section 3.2.2 Pipelines). +This allows pipelines as well as shell builtins and functions to be timed. +

+ +

--enable-cond-command +
Include support for the [[ conditional command. +(see section 3.2.4.2 Conditional Constructs). +

+ +

--enable-cond-regexp +
Include support for matching POSIX regular expressions using the +`=~' binary operator in the [[ conditional command. +(see section 3.2.4.2 Conditional Constructs). +

+ +

--enable-coprocesses +
Include support for coprocesses and the coproc reserved word +(see section 3.2.2 Pipelines). +

+ +

--enable-debugger +
Include support for the bash debugger (distributed separately). +

+ +

--enable-directory-stack +
Include support for a csh-like directory stack and the +pushd, popd, and dirs builtins +(see section 6.8 The Directory Stack). +

+ +

--enable-disabled-builtins +
Allow builtin commands to be invoked via `builtin xxx' +even after xxx has been disabled using `enable -n xxx'. +See 4.2 Bash Builtin Commands, for details of the builtin and +enable builtin commands. +

+ +

--enable-dparen-arithmetic +
Include support for the ((...)) command +(see section 3.2.4.2 Conditional Constructs). +

+ +

--enable-extended-glob +
Include support for the extended pattern matching features described +above under 3.5.8.1 Pattern Matching. +

+ +

--enable-extended-glob-default +
Set the default value of the extglob shell option described +above under 4.3.2 The Shopt Builtin to be enabled. +

+ +

--enable-help-builtin +
Include the help builtin, which displays help on shell builtins and +variables (see section 4.2 Bash Builtin Commands). +

+ +

--enable-history +
Include command history and the fc and history +builtin commands (see section 9.1 Bash History Facilities). +

+ +

--enable-job-control +
This enables the job control features (see section 7. Job Control), +if the operating system supports them. +

+ +

--enable-multibyte +
This enables support for multibyte characters if the operating +system provides the necessary support. +

+ +

--enable-net-redirections +
This enables the special handling of filenames of the form +/dev/tcp/host/port and +/dev/udp/host/port +when used in redirections (see section 3.6 Redirections). +

+ +

--enable-process-substitution +
This enables process substitution (see section 3.5.6 Process Substitution) if +the operating system provides the necessary support. +

+ +

--enable-progcomp +
Enable the programmable completion facilities +(see section 8.6 Programmable Completion). +If Readline is not enabled, this option has no effect. +

+ +

--enable-prompt-string-decoding +
Turn on the interpretation of a number of backslash-escaped characters +in the $PS1, $PS2, $PS3, and $PS4 prompt +strings. See 6.9 Controlling the Prompt, for a complete list of prompt +string escape sequences. +

+ +

--enable-readline +
Include support for command-line editing and history with the Bash +version of the Readline library (see section 8. Command Line Editing). +

+ +

--enable-restricted +
Include support for a restricted shell. If this is enabled, Bash, +when called as rbash, enters a restricted mode. See +6.10 The Restricted Shell, for a description of restricted mode. +

+ +

--enable-select +
Include the select builtin, which allows the generation of simple +menus (see section 3.2.4.2 Conditional Constructs). +

+ +

--enable-separate-helpfiles +
Use external files for the documentation displayed by the help builtin +instead of storing the text internally. +

+ +

--enable-single-help-strings +
Store the text displayed by the help builtin as a single string for +each help topic. This aids in translating the text to different languages. +You may need to disable this if your compiler cannot handle very long string +literals. +

+ +

--enable-strict-posix-default +
Make Bash POSIX-conformant by default (see section 6.11 Bash POSIX Mode). +

+ +

--enable-usg-echo-default +
A synonym for --enable-xpg-echo-default. +

+ +

--enable-xpg-echo-default +
Make the echo builtin expand backslash-escaped characters by default, +without requiring the `-e' option. +This sets the default value of the xpg_echo shell option to on, +which makes the Bash echo behave more like the version specified in +the Single Unix Specification, version 3. +See section 4.2 Bash Builtin Commands, for a description of the escape sequences that +echo recognizes. +

+ +

+

+ +The file `config-top.h' contains C Preprocessor +`#define' statements for options which are not settable from +configure. +Some of these are not meant to be changed; beware of the consequences if +you do. +Read the comments associated with each definition for more +information about its effect. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

A. Reporting Bugs

+ +

+ +Please report all bugs you find in Bash. +But first, you should +make sure that it really is a bug, and that it appears in the latest +version of Bash. +The latest version of Bash is always available for FTP from +ftp://ftp.gnu.org/pub/gnu/bash/. +

+ +Once you have determined that a bug actually exists, use the +bashbug command to submit a bug report. +If you have a fix, you are encouraged to mail that as well! +Suggestions and `philosophical' bug reports may be mailed +to bug-bash@gnu.org or posted to the Usenet +newsgroup gnu.bash.bug. +

+ +All bug reports should include: +

    +
  • +The version number of Bash. +
  • +The hardware and operating system. +
  • +The compiler used to compile Bash. +
  • +A description of the bug behaviour. +
  • +A short script or `recipe' which exercises the bug and may be used +to reproduce it. +
+

+ +bashbug inserts the first three items automatically into +the template it provides for filing a bug report. +

+ +Please send all reports concerning this manual to +chet.ramey@case.edu. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

B. Major Differences From The Bourne Shell

+ +

+ +Bash implements essentially the same grammar, parameter and +variable expansion, redirection, and quoting as the Bourne Shell. +Bash uses the POSIX standard as the specification of +how these features are to be implemented. There are some +differences between the traditional Bourne shell and Bash; this +section quickly details the differences of significance. A +number of these differences are explained in greater depth in +previous sections. +This section uses the version of sh included in SVR4.2 (the +last version of the historical Bourne shell) as the baseline reference. +

+ +

    + +
  • +Bash is POSIX-conformant, even where the POSIX specification +differs from traditional sh behavior (see section 6.11 Bash POSIX Mode). +

    + +

  • +Bash has multi-character invocation options (see section 6.1 Invoking Bash). +

    + +

  • +Bash has command-line editing (see section 8. Command Line Editing) and +the bind builtin. +

    + +

  • +Bash provides a programmable word completion mechanism +(see section 8.6 Programmable Completion), and builtin commands +complete, compgen, and compopt, to +manipulate it. +

    + +

  • +Bash has command history (see section 9.1 Bash History Facilities) and the +history and fc builtins to manipulate it. +The Bash history list maintains timestamp information and uses the +value of the HISTTIMEFORMAT variable to display it. +

    + +

  • +Bash implements csh-like history expansion +(see section 9.3 History Expansion). +

    + +

  • +Bash has one-dimensional array variables (see section 6.7 Arrays), and the +appropriate variable expansions and assignment syntax to use them. +Several of the Bash builtins take options to act on arrays. +Bash provides a number of built-in array variables. +

    + +

  • +The $'...' quoting syntax, which expands ANSI-C +backslash-escaped characters in the text between the single quotes, +is supported (see section 3.1.2.4 ANSI-C Quoting). +

    + +

  • +Bash supports the $"..." quoting syntax to do +locale-specific translation of the characters between the double +quotes. The `-D', `--dump-strings', and `--dump-po-strings' +invocation options list the translatable strings found in a script +(see section 3.1.2.5 Locale-Specific Translation). +

    + +

  • +Bash implements the ! keyword to negate the return value of +a pipeline (see section 3.2.2 Pipelines). +Very useful when an if statement needs to act only if a test fails. +The Bash `-o pipefail' option to set will cause a pipeline to +return a failure status if any command fails. +

    + +

  • +Bash has the time reserved word and command timing (see section 3.2.2 Pipelines). +The display of the timing statistics may be controlled with the +TIMEFORMAT variable. +

    + +

  • +Bash implements the for (( expr1 ; expr2 ; expr3 )) +arithmetic for command, similar to the C language (see section 3.2.4.1 Looping Constructs). +

    + +

  • +Bash includes the select compound command, which allows the +generation of simple menus (see section 3.2.4.2 Conditional Constructs). +

    + +

  • +Bash includes the [[ compound command, which makes conditional +testing part of the shell grammar (see section 3.2.4.2 Conditional Constructs), including +optional regular expression matching. +

    + +

  • +Bash provides optional case-insensitive matching for the case and +[[ constructs. +

    + +

  • +Bash includes brace expansion (see section 3.5.1 Brace Expansion) and tilde +expansion (see section 3.5.2 Tilde Expansion). +

    + +

  • +Bash implements command aliases and the alias and unalias +builtins (see section 6.6 Aliases). +

    + +

  • +Bash provides shell arithmetic, the (( compound command +(see section 3.2.4.2 Conditional Constructs), +and arithmetic expansion (see section 6.5 Shell Arithmetic). +

    + +

  • +Variables present in the shell's initial environment are automatically +exported to child processes. The Bourne shell does not normally do +this unless the variables are explicitly marked using the export +command. +

    + +

  • +Bash supports the `+=' assignment operator, which appends to the value +of the variable named on the left hand side. +

    + +

  • +Bash includes the POSIX pattern removal `%', `#', `%%' +and `##' expansions to remove leading or trailing substrings from +variable values (see section 3.5.3 Shell Parameter Expansion). +

    + +

  • +The expansion ${#xx}, which returns the length of ${xx}, +is supported (see section 3.5.3 Shell Parameter Expansion). +

    + +

  • +The expansion ${var:offset[:length]}, +which expands to the substring of var's value of length +length, beginning at offset, is present +(see section 3.5.3 Shell Parameter Expansion). +

    + +

  • +The expansion +${var/[/]pattern[/replacement]}, +which matches pattern and replaces it with replacement in +the value of var, is available (see section 3.5.3 Shell Parameter Expansion). +

    + +

  • +The expansion ${!prefix}* expansion, which expands to +the names of all shell variables whose names begin with prefix, +is available (see section 3.5.3 Shell Parameter Expansion). +

    + +

  • +Bash has indirect variable expansion using ${!word} +(see section 3.5.3 Shell Parameter Expansion). +

    + +

  • +Bash can expand positional parameters beyond $9 using +${num}. +

    + +

  • +The POSIX $() form of command substitution +is implemented (see section 3.5.4 Command Substitution), +and preferred to the Bourne shell's " (which +is also implemented for backwards compatibility). +

    + +

  • +Bash has process substitution (see section 3.5.6 Process Substitution). +

    + +

  • +Bash automatically assigns variables that provide information about the +current user (UID, EUID, and GROUPS), the current host +(HOSTTYPE, OSTYPE, MACHTYPE, and HOSTNAME), +and the instance of Bash that is running (BASH, +BASH_VERSION, and BASH_VERSINFO). See section 5.2 Bash Variables, +for details. +

    + +

  • +The IFS variable is used to split only the results of expansion, +not all words (see section 3.5.7 Word Splitting). +This closes a longstanding shell security hole. +

    + +

  • +Bash implements the full set of POSIX filename expansion operators, +including character classes, equivalence classes, and +collating symbols (see section 3.5.8 Filename Expansion). +

    + +

  • +Bash implements extended pattern matching features when the extglob +shell option is enabled (see section 3.5.8.1 Pattern Matching). +

    + +

  • +It is possible to have a variable and a function with the same name; +sh does not separate the two name spaces. +

    + +

  • +Bash functions are permitted to have local variables using the +local builtin, and thus useful recursive functions may be written +(see section 4.2 Bash Builtin Commands). +

    + +

  • +Variable assignments preceding commands affect only that command, even +builtins and functions (see section 3.7.4 Environment). +In sh, all variable assignments +preceding commands are global unless the command is executed from the +file system. +

    + +

  • +Bash performs filename expansion on filenames specified as operands +to input and output redirection operators (see section 3.6 Redirections). +

    + +

  • +Bash contains the `<>' redirection operator, allowing a file to be +opened for both reading and writing, and the `&>' redirection +operator, for directing standard output and standard error to the same +file (see section 3.6 Redirections). +

    + +

  • +Bash includes the `<<<' redirection operator, allowing a string to +be used as the standard input to a command. +

    + +

  • +Bash implements the `[n]<&word' and `[n]>&word' +redirection operators, which move one file descriptor to another. +

    + +

  • +Bash treats a number of filenames specially when they are +used in redirection operators (see section 3.6 Redirections). +

    + +

  • +Bash can open network connections to arbitrary machines and services +with the redirection operators (see section 3.6 Redirections). +

    + +

  • +The noclobber option is available to avoid overwriting existing +files with output redirection (see section 4.3.1 The Set Builtin). +The `>|' redirection operator may be used to override noclobber. +

    + +

  • +The Bash cd and pwd builtins (see section 4.1 Bourne Shell Builtins) +each take `-L' and `-P' options to switch between logical and +physical modes. +

    + +

  • +Bash allows a function to override a builtin with the same name, and provides +access to that builtin's functionality within the function via the +builtin and command builtins (see section 4.2 Bash Builtin Commands). +

    + +

  • +The command builtin allows selective disabling of functions +when command lookup is performed (see section 4.2 Bash Builtin Commands). +

    + +

  • +Individual builtins may be enabled or disabled using the enable +builtin (see section 4.2 Bash Builtin Commands). +

    + +

  • +The Bash exec builtin takes additional options that allow users +to control the contents of the environment passed to the executed +command, and what the zeroth argument to the command is to be +(see section 4.1 Bourne Shell Builtins). +

    + +

  • +Shell functions may be exported to children via the environment +using export -f (see section 3.3 Shell Functions). +

    + +

  • +The Bash export, readonly, and declare builtins can +take a `-f' option to act on shell functions, a `-p' option to +display variables with various attributes set in a format that can be +used as shell input, a `-n' option to remove various variable +attributes, and `name=value' arguments to set variable attributes +and values simultaneously. +

    + +

  • +The Bash hash builtin allows a name to be associated with +an arbitrary filename, even when that filename cannot be found by +searching the $PATH, using `hash -p' +(see section 4.1 Bourne Shell Builtins). +

    + +

  • +Bash includes a help builtin for quick reference to shell +facilities (see section 4.2 Bash Builtin Commands). +

    + +

  • +The printf builtin is available to display formatted output +(see section 4.2 Bash Builtin Commands). +

    + +

  • +The Bash read builtin (see section 4.2 Bash Builtin Commands) +will read a line ending in `\' with +the `-r' option, and will use the REPLY variable as a +default if no non-option arguments are supplied. +The Bash read builtin +also accepts a prompt string with the `-p' option and will use +Readline to obtain the line when given the `-e' option. +The read builtin also has additional options to control input: +the `-s' option will turn off echoing of input characters as +they are read, the `-t' option will allow read to time out +if input does not arrive within a specified number of seconds, the +`-n' option will allow reading only a specified number of +characters rather than a full line, and the `-d' option will read +until a particular character rather than newline. +

    + +

  • +The return builtin may be used to abort execution of scripts +executed with the . or source builtins +(see section 4.1 Bourne Shell Builtins). +

    + +

  • +Bash includes the shopt builtin, for finer control of shell +optional capabilities (see section 4.3.2 The Shopt Builtin), and allows these options +to be set and unset at shell invocation (see section 6.1 Invoking Bash). +

    + +

  • +Bash has much more optional behavior controllable with the set +builtin (see section 4.3.1 The Set Builtin). +

    + +

  • +The `-x' (xtrace) option displays commands other than +simple commands when performing an execution trace +(see section 4.3.1 The Set Builtin). +

    + +

  • +The test builtin (see section 4.1 Bourne Shell Builtins) +is slightly different, as it implements the POSIX algorithm, +which specifies the behavior based on the number of arguments. +

    + +

  • +Bash includes the caller builtin, which displays the context of +any active subroutine call (a shell function or a script executed with +the . or source builtins). This supports the bash +debugger. +

    + +

  • +The trap builtin (see section 4.1 Bourne Shell Builtins) allows a +DEBUG pseudo-signal specification, similar to EXIT. +Commands specified with a DEBUG trap are executed before every +simple command, for command, case command, +select command, every arithmetic for command, and before +the first command executes in a shell function. +The DEBUG trap is not inherited by shell functions unless the +function has been given the trace attribute or the +functrace option has been enabled using the shopt builtin. +The extdebug shell option has additional effects on the +DEBUG trap. +

    + +The trap builtin (see section 4.1 Bourne Shell Builtins) allows an +ERR pseudo-signal specification, similar to EXIT and DEBUG. +Commands specified with an ERR trap are executed after a simple +command fails, with a few exceptions. +The ERR trap is not inherited by shell functions unless the +-o errtrace option to the set builtin is enabled. +

    + +The trap builtin (see section 4.1 Bourne Shell Builtins) allows a +RETURN pseudo-signal specification, similar to +EXIT and DEBUG. +Commands specified with an RETURN trap are executed before +execution resumes after a shell function or a shell script executed with +. or source returns. +The RETURN trap is not inherited by shell functions unless the +function has been given the trace attribute or the +functrace option has been enabled using the shopt builtin. +

    + +

  • +The Bash type builtin is more extensive and gives more information +about the names it finds (see section 4.2 Bash Builtin Commands). +

    + +

  • +The Bash umask builtin permits a `-p' option to cause +the output to be displayed in the form of a umask command +that may be reused as input (see section 4.1 Bourne Shell Builtins). +

    + +

  • +Bash implements a csh-like directory stack, and provides the +pushd, popd, and dirs builtins to manipulate it +(see section 6.8 The Directory Stack). +Bash also makes the directory stack visible as the value of the +DIRSTACK shell variable. +

    + +

  • +Bash interprets special backslash-escaped characters in the prompt +strings when interactive (see section 6.9 Controlling the Prompt). +

    + +

  • +The Bash restricted mode is more useful (see section 6.10 The Restricted Shell); +the SVR4.2 shell restricted mode is too limited. +

    + +

  • +The disown builtin can remove a job from the internal shell +job table (see section 7.2 Job Control Builtins) or suppress the sending +of SIGHUP to a job when the shell exits as the result of a +SIGHUP. +

    + +

  • +Bash includes a number of features to support a separate debugger for +shell scripts. +

    + +

  • +The SVR4.2 shell has two privilege-related builtins +(mldmode and priv) not present in Bash. +

    + +

  • +Bash does not have the stop or newgrp builtins. +

    + +

  • +Bash does not use the SHACCT variable or perform shell accounting. +

    + +

  • +The SVR4.2 sh uses a TIMEOUT variable like Bash uses +TMOUT. +

    + +

+

+ +More features unique to Bash may be found in 6. Bash Features. +

+ +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

B.1 Implementation Differences From The SVR4.2 Shell

+ +

+ +Since Bash is a completely new implementation, it does not suffer from +many of the limitations of the SVR4.2 shell. For instance: +

+ +

    + +
  • +Bash does not fork a subshell when redirecting into or out of +a shell control structure such as an if or while +statement. +

    + +

  • +Bash does not allow unbalanced quotes. The SVR4.2 shell will silently +insert a needed closing quote at EOF under certain circumstances. +This can be the cause of some hard-to-find errors. +

    + +

  • +The SVR4.2 shell uses a baroque memory management scheme based on +trapping SIGSEGV. If the shell is started from a process with +SIGSEGV blocked (e.g., by using the system() C library +function call), it misbehaves badly. +

    + +

  • +In a questionable attempt at security, the SVR4.2 shell, +when invoked without the `-p' option, will alter its real +and effective UID and GID if they are less than some +magic threshold value, commonly 100. +This can lead to unexpected results. +

    + +

  • +The SVR4.2 shell does not allow users to trap SIGSEGV, +SIGALRM, or SIGCHLD. +

    + +

  • +The SVR4.2 shell does not allow the IFS, MAILCHECK, +PATH, PS1, or PS2 variables to be unset. +

    + +

  • +The SVR4.2 shell treats `^' as the undocumented equivalent of +`|'. +

    + +

  • +Bash allows multiple option arguments when it is invoked (-x -v); +the SVR4.2 shell allows only one option argument (-xv). In +fact, some versions of the shell dump core if the second argument begins +with a `-'. +

    + +

  • +The SVR4.2 shell exits a script if any builtin fails; Bash exits +a script only if one of the POSIX special builtins fails, and +only for certain failures, as enumerated in the POSIX standard. +

    + +

  • +The SVR4.2 shell behaves differently when invoked as jsh +(it turns on job control). +
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

C. GNU Free Documentation License

+ +

+ +

+ Version 1.3, 3 November 2008 +
+

+ +
 
Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+http://fsf.org/
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+

+ +

    +
  1. +PREAMBLE +

    + +The purpose of this License is to make a manual, textbook, or other +functional and useful document free in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +

    + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +

    + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +

    + +

  2. +APPLICABILITY AND DEFINITIONS +

    + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +

    + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +

    + +A "Secondary Section" is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +

    + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +

    + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +

    + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". +

    + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, SGML or XML using a publicly available +DTD, and standard-conforming simple HTML, +PostScript or PDF designed for human modification. Examples +of transparent image formats include PNG, XCF and +JPG. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, SGML or +XML for which the DTD and/or processing tools are +not generally available, and the machine-generated HTML, +PostScript or PDF produced by some word processors for +output purposes only. +

    + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. +

    + +The "publisher" means any person or entity that distributes copies +of the Document to the public. +

    + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. +

    + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +

    + +

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

    + +

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

    + +

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

    + +

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

      + +

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

      + +

    3. +State on the Title page the name of the publisher of the +Modified Version, as the publisher. +

      + +

    4. +Preserve all the copyright notices of the Document. +

      + +

    5. +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. +

      + +

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

      + +

    7. +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. +

      + +

    8. +Include an unaltered copy of this License. +

      + +

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

      + +

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

      + +

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

      + +

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

      + +

    13. +Delete any section Entitled "Endorsements". Such a section +may not be included in the Modified Version. +

      + +

    14. +Do not retitle any existing section to be Entitled "Endorsements" or +to conflict in title with any Invariant Section. +

      + +

    15. +Preserve any Warranty Disclaimers. +
    +

    + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. +

    + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +

    + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +

    + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +

    + +

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

    + +

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

    + +

  8. +AGGREGATION WITH INDEPENDENT WORKS +

    + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +

    + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +

    + +

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

    + +

  10. +TERMINATION +

    + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +

    + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +

    + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +

    + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +

    + +

  11. +FUTURE REVISIONS OF THIS LICENSE +

    + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. +

    + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +

    + +

  12. +RELICENSING +

    + +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the +site means any set of copyrightable works thus published on the MMC +site. +

    + +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +

    + +"Incorporate" means to publish or republish a Document, in whole or +in part, as part of another Document. +

    + +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +

    + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +

    + +

+

+ + +

ADDENDUM: How to use this License for your documents

+ +

+ +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +

+ +
 
  Copyright (C)  year  your name.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.3
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+

+ +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: +

+ +
 
    with the Invariant Sections being list their titles, with
+    the Front-Cover Texts being list, and with the Back-Cover Texts
+    being list.
+

+ +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +

+ +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D. Indexes

+ +

+ +

+ + + + + +
D.1 Index of Shell Builtin Commands  Index of Bash builtin commands.
D.2 Index of Shell Reserved Words  Index of Bash reserved words.
D.3 Parameter and Variable Index  Quick reference helps you find the + variable you want.
D.4 Function Index  Index of bindable Readline functions.
D.5 Concept Index  General index for concepts described in + this manual.
+

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D.1 Index of Shell Builtin Commands

+ +
Jump to:   . +   +: +   +[ +   +
+A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +J +   +K +   +L +   +M +   +P +   +R +   +S +   +T +   +U +   +W +   +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index Entry Section

.
.4.1 Bourne Shell Builtins

:
:4.1 Bourne Shell Builtins

[
[4.1 Bourne Shell Builtins

A
alias4.2 Bash Builtin Commands

B
bg7.2 Job Control Builtins
bind4.2 Bash Builtin Commands
break4.1 Bourne Shell Builtins
builtin4.2 Bash Builtin Commands

C
caller4.2 Bash Builtin Commands
cd4.1 Bourne Shell Builtins
command4.2 Bash Builtin Commands
compgen8.7 Programmable Completion Builtins
complete8.7 Programmable Completion Builtins
compopt8.7 Programmable Completion Builtins
continue4.1 Bourne Shell Builtins

D
declare4.2 Bash Builtin Commands
dirs6.8.1 Directory Stack Builtins
disown7.2 Job Control Builtins

E
echo4.2 Bash Builtin Commands
enable4.2 Bash Builtin Commands
eval4.1 Bourne Shell Builtins
exec4.1 Bourne Shell Builtins
exit4.1 Bourne Shell Builtins
export4.1 Bourne Shell Builtins

F
fc9.2 Bash History Builtins
fg7.2 Job Control Builtins

G
getopts4.1 Bourne Shell Builtins

H
hash4.1 Bourne Shell Builtins
help4.2 Bash Builtin Commands
history9.2 Bash History Builtins

J
jobs7.2 Job Control Builtins

K
kill7.2 Job Control Builtins

L
let4.2 Bash Builtin Commands
local4.2 Bash Builtin Commands
logout4.2 Bash Builtin Commands

M
mapfile4.2 Bash Builtin Commands

P
popd6.8.1 Directory Stack Builtins
printf4.2 Bash Builtin Commands
pushd6.8.1 Directory Stack Builtins
pwd4.1 Bourne Shell Builtins

R
read4.2 Bash Builtin Commands
readarray4.2 Bash Builtin Commands
readonly4.1 Bourne Shell Builtins
return4.1 Bourne Shell Builtins

S
set4.3.1 The Set Builtin
shift4.1 Bourne Shell Builtins
shopt4.3.2 The Shopt Builtin
source4.2 Bash Builtin Commands
suspend7.2 Job Control Builtins

T
test4.1 Bourne Shell Builtins
times4.1 Bourne Shell Builtins
trap4.1 Bourne Shell Builtins
type4.2 Bash Builtin Commands
typeset4.2 Bash Builtin Commands

U
ulimit4.2 Bash Builtin Commands
umask4.1 Bourne Shell Builtins
unalias4.2 Bash Builtin Commands
unset4.1 Bourne Shell Builtins

W
wait7.2 Job Control Builtins

Jump to:   . +   +: +   +[ +   +
+A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +J +   +K +   +L +   +M +   +P +   +R +   +S +   +T +   +U +   +W +   +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D.2 Index of Shell Reserved Words

+ +
Jump to:   ! +   +[ +   +] +   +{ +   +} +   +
+C +   +D +   +E +   +F +   +I +   +S +   +T +   +U +   +W +   +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index Entry Section

!
!3.2.2 Pipelines

[
[[3.2.4.2 Conditional Constructs

]
]]3.2.4.2 Conditional Constructs

{
{3.2.4.3 Grouping Commands

}
}3.2.4.3 Grouping Commands

C
case3.2.4.2 Conditional Constructs

D
do3.2.4.1 Looping Constructs
done3.2.4.1 Looping Constructs

E
elif3.2.4.2 Conditional Constructs
else3.2.4.2 Conditional Constructs
esac3.2.4.2 Conditional Constructs

F
fi3.2.4.2 Conditional Constructs
for3.2.4.1 Looping Constructs
function3.3 Shell Functions

I
if3.2.4.2 Conditional Constructs
in3.2.4.2 Conditional Constructs

S
select3.2.4.2 Conditional Constructs

T
then3.2.4.2 Conditional Constructs
time3.2.2 Pipelines

U
until3.2.4.1 Looping Constructs

W
while3.2.4.1 Looping Constructs

Jump to:   ! +   +[ +   +] +   +{ +   +} +   +
+C +   +D +   +E +   +F +   +I +   +S +   +T +   +U +   +W +   +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D.3 Parameter and Variable Index

+ +
Jump to:   ! +   +# +   +$ +   +* +   +- +   +0 +   +? +   +@ +   +_ +   +
+A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +K +   +L +   +M +   +O +   +P +   +R +   +S +   +T +   +U +   +V +   +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index Entry Section

!
!3.4.2 Special Parameters
!3.4.2 Special Parameters

#
#3.4.2 Special Parameters
#3.4.2 Special Parameters

$
$3.4.2 Special Parameters
$3.4.2 Special Parameters

*
*3.4.2 Special Parameters
*3.4.2 Special Parameters

-
-3.4.2 Special Parameters
-3.4.2 Special Parameters

0
03.4.2 Special Parameters
03.4.2 Special Parameters

?
?3.4.2 Special Parameters
?3.4.2 Special Parameters

@
@3.4.2 Special Parameters
@3.4.2 Special Parameters

_
_3.4.2 Special Parameters
_3.4.2 Special Parameters

A
auto_resume7.3 Job Control Variables
auto_resume7.3 Job Control Variables

B
BASH5.2 Bash Variables
BASH5.2 Bash Variables
BASH_ALIASES5.2 Bash Variables
BASH_ALIASES5.2 Bash Variables
BASH_ARGC5.2 Bash Variables
BASH_ARGC5.2 Bash Variables
BASH_ARGV5.2 Bash Variables
BASH_ARGV5.2 Bash Variables
BASH_CMDS5.2 Bash Variables
BASH_CMDS5.2 Bash Variables
BASH_COMMAND5.2 Bash Variables
BASH_COMMAND5.2 Bash Variables
BASH_ENV5.2 Bash Variables
BASH_ENV5.2 Bash Variables
BASH_EXECUTION_STRING5.2 Bash Variables
BASH_EXECUTION_STRING5.2 Bash Variables
BASH_LINENO5.2 Bash Variables
BASH_LINENO5.2 Bash Variables
BASH_REMATCH5.2 Bash Variables
BASH_REMATCH5.2 Bash Variables
BASH_SOURCE5.2 Bash Variables
BASH_SOURCE5.2 Bash Variables
BASH_SUBSHELL5.2 Bash Variables
BASH_SUBSHELL5.2 Bash Variables
BASH_VERSINFO5.2 Bash Variables
BASH_VERSINFO5.2 Bash Variables
BASH_VERSION5.2 Bash Variables
BASH_VERSION5.2 Bash Variables
BASH_XTRACEFD5.2 Bash Variables
BASH_XTRACEFD5.2 Bash Variables
BASHOPTS5.2 Bash Variables
BASHOPTS5.2 Bash Variables
BASHPID5.2 Bash Variables
BASHPID5.2 Bash Variables
bell-style8.3.1 Readline Init File Syntax
bind-tty-special-chars8.3.1 Readline Init File Syntax

C
CDPATH5.1 Bourne Shell Variables
CDPATH5.1 Bourne Shell Variables
COLUMNS5.2 Bash Variables
COLUMNS5.2 Bash Variables
comment-begin8.3.1 Readline Init File Syntax
COMP_CWORD5.2 Bash Variables
COMP_CWORD5.2 Bash Variables
COMP_KEY5.2 Bash Variables
COMP_KEY5.2 Bash Variables
COMP_LINE5.2 Bash Variables
COMP_LINE5.2 Bash Variables
COMP_POINT5.2 Bash Variables
COMP_POINT5.2 Bash Variables
COMP_TYPE5.2 Bash Variables
COMP_TYPE5.2 Bash Variables
COMP_WORDBREAKS5.2 Bash Variables
COMP_WORDBREAKS5.2 Bash Variables
COMP_WORDS5.2 Bash Variables
COMP_WORDS5.2 Bash Variables
completion-prefix-display-length8.3.1 Readline Init File Syntax
completion-query-items8.3.1 Readline Init File Syntax
COMPREPLY5.2 Bash Variables
COMPREPLY5.2 Bash Variables
convert-meta8.3.1 Readline Init File Syntax

D
DIRSTACK5.2 Bash Variables
DIRSTACK5.2 Bash Variables
disable-completion8.3.1 Readline Init File Syntax

E
editing-mode8.3.1 Readline Init File Syntax
EMACS5.2 Bash Variables
EMACS5.2 Bash Variables
enable-keypad8.3.1 Readline Init File Syntax
EUID5.2 Bash Variables
EUID5.2 Bash Variables
expand-tilde8.3.1 Readline Init File Syntax

F
FCEDIT5.2 Bash Variables
FCEDIT5.2 Bash Variables
FIGNORE5.2 Bash Variables
FIGNORE5.2 Bash Variables
FUNCNAME5.2 Bash Variables
FUNCNAME5.2 Bash Variables

G
GLOBIGNORE5.2 Bash Variables
GLOBIGNORE5.2 Bash Variables
GROUPS5.2 Bash Variables
GROUPS5.2 Bash Variables

H
histchars5.2 Bash Variables
histchars5.2 Bash Variables
HISTCMD5.2 Bash Variables
HISTCMD5.2 Bash Variables
HISTCONTROL5.2 Bash Variables
HISTCONTROL5.2 Bash Variables
HISTFILE5.2 Bash Variables
HISTFILE5.2 Bash Variables
HISTFILESIZE5.2 Bash Variables
HISTFILESIZE5.2 Bash Variables
HISTIGNORE5.2 Bash Variables
HISTIGNORE5.2 Bash Variables
history-preserve-point8.3.1 Readline Init File Syntax
history-size8.3.1 Readline Init File Syntax
HISTSIZE5.2 Bash Variables
HISTSIZE5.2 Bash Variables
HISTTIMEFORMAT5.2 Bash Variables
HISTTIMEFORMAT5.2 Bash Variables
HOME5.1 Bourne Shell Variables
HOME5.1 Bourne Shell Variables
horizontal-scroll-mode8.3.1 Readline Init File Syntax
HOSTFILE5.2 Bash Variables
HOSTFILE5.2 Bash Variables
HOSTNAME5.2 Bash Variables
HOSTNAME5.2 Bash Variables
HOSTTYPE5.2 Bash Variables
HOSTTYPE5.2 Bash Variables

I
IFS5.1 Bourne Shell Variables
IFS5.1 Bourne Shell Variables
IGNOREEOF5.2 Bash Variables
IGNOREEOF5.2 Bash Variables
input-meta8.3.1 Readline Init File Syntax
INPUTRC5.2 Bash Variables
INPUTRC5.2 Bash Variables
isearch-terminators8.3.1 Readline Init File Syntax

K
keymap8.3.1 Readline Init File Syntax

L
LANG5.2 Bash Variables
LANG5.2 Bash Variables
LC_ALL5.2 Bash Variables
LC_ALL5.2 Bash Variables
LC_COLLATE5.2 Bash Variables
LC_COLLATE5.2 Bash Variables
LC_CTYPE5.2 Bash Variables
LC_CTYPE5.2 Bash Variables
LC_MESSAGES3.1.2.5 Locale-Specific Translation
LC_MESSAGES5.2 Bash Variables
LC_MESSAGES5.2 Bash Variables
LC_NUMERIC5.2 Bash Variables
LC_NUMERIC5.2 Bash Variables
LINENO5.2 Bash Variables
LINENO5.2 Bash Variables
LINES5.2 Bash Variables
LINES5.2 Bash Variables

M
MACHTYPE5.2 Bash Variables
MACHTYPE5.2 Bash Variables
MAIL5.1 Bourne Shell Variables
MAIL5.1 Bourne Shell Variables
MAILCHECK5.2 Bash Variables
MAILCHECK5.2 Bash Variables
MAILPATH5.1 Bourne Shell Variables
MAILPATH5.1 Bourne Shell Variables
mark-modified-lines8.3.1 Readline Init File Syntax
mark-symlinked-directories8.3.1 Readline Init File Syntax
match-hidden-files8.3.1 Readline Init File Syntax
meta-flag8.3.1 Readline Init File Syntax

O
OLDPWD5.2 Bash Variables
OLDPWD5.2 Bash Variables
OPTARG5.1 Bourne Shell Variables
OPTARG5.1 Bourne Shell Variables
OPTERR5.2 Bash Variables
OPTERR5.2 Bash Variables
OPTIND5.1 Bourne Shell Variables
OPTIND5.1 Bourne Shell Variables
OSTYPE5.2 Bash Variables
OSTYPE5.2 Bash Variables
output-meta8.3.1 Readline Init File Syntax

P
page-completions8.3.1 Readline Init File Syntax
PATH5.1 Bourne Shell Variables
PATH5.1 Bourne Shell Variables
PIPESTATUS5.2 Bash Variables
PIPESTATUS5.2 Bash Variables
POSIXLY_CORRECT5.2 Bash Variables
POSIXLY_CORRECT5.2 Bash Variables
PPID5.2 Bash Variables
PPID5.2 Bash Variables
PROMPT_COMMAND5.2 Bash Variables
PROMPT_COMMAND5.2 Bash Variables
PROMPT_DIRTRIM5.2 Bash Variables
PROMPT_DIRTRIM5.2 Bash Variables
PS15.1 Bourne Shell Variables
PS15.1 Bourne Shell Variables
PS25.1 Bourne Shell Variables
PS25.1 Bourne Shell Variables
PS35.2 Bash Variables
PS35.2 Bash Variables
PS45.2 Bash Variables
PS45.2 Bash Variables
PWD5.2 Bash Variables
PWD5.2 Bash Variables

R
RANDOM5.2 Bash Variables
RANDOM5.2 Bash Variables
REPLY5.2 Bash Variables
REPLY5.2 Bash Variables
revert-all-at-newline8.3.1 Readline Init File Syntax

S
SECONDS5.2 Bash Variables
SECONDS5.2 Bash Variables
SHELL5.2 Bash Variables
SHELL5.2 Bash Variables
SHELLOPTS5.2 Bash Variables
SHELLOPTS5.2 Bash Variables
SHLVL5.2 Bash Variables
SHLVL5.2 Bash Variables
show-all-if-ambiguous8.3.1 Readline Init File Syntax
show-all-if-unmodified8.3.1 Readline Init File Syntax
skip-completed-text8.3.1 Readline Init File Syntax

T
TEXTDOMAIN3.1.2.5 Locale-Specific Translation
TEXTDOMAINDIR3.1.2.5 Locale-Specific Translation
TIMEFORMAT5.2 Bash Variables
TIMEFORMAT5.2 Bash Variables
TMOUT5.2 Bash Variables
TMOUT5.2 Bash Variables
TMPDIR5.2 Bash Variables
TMPDIR5.2 Bash Variables

U
UID5.2 Bash Variables
UID5.2 Bash Variables

V
visible-stats8.3.1 Readline Init File Syntax

Jump to:   ! +   +# +   +$ +   +* +   +- +   +0 +   +? +   +@ +   +_ +   +
+A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +K +   +L +   +M +   +O +   +P +   +R +   +S +   +T +   +U +   +V +   +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D.4 Function Index

+ +
Jump to:   A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +K +   +M +   +N +   +O +   +P +   +Q +   +R +   +S +   +T +   +U +   +Y +   +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index Entry Section

A
abort (C-g)8.4.8 Some Miscellaneous Commands
abort (C-g)8.4.8 Some Miscellaneous Commands
accept-line (Newline or Return)8.4.2 Commands For Manipulating The History
accept-line (Newline or Return)8.4.2 Commands For Manipulating The History
alias-expand-line ()8.4.8 Some Miscellaneous Commands
alias-expand-line ()8.4.8 Some Miscellaneous Commands

B
backward-char (C-b)8.4.1 Commands For Moving
backward-char (C-b)8.4.1 Commands For Moving
backward-delete-char (Rubout)8.4.3 Commands For Changing Text
backward-delete-char (Rubout)8.4.3 Commands For Changing Text
backward-kill-line (C-x Rubout)8.4.4 Killing And Yanking
backward-kill-line (C-x Rubout)8.4.4 Killing And Yanking
backward-kill-word ()8.4.4 Killing And Yanking
backward-kill-word ()8.4.4 Killing And Yanking
backward-kill-word (M-DEL)8.4.4 Killing And Yanking
backward-kill-word (M-DEL)8.4.4 Killing And Yanking
backward-word (M-b)8.4.1 Commands For Moving
backward-word (M-b)8.4.1 Commands For Moving
beginning-of-history (M-&#60;)8.4.2 Commands For Manipulating The History
beginning-of-history (M-&#60;)8.4.2 Commands For Manipulating The History
beginning-of-line (C-a)8.4.1 Commands For Moving
beginning-of-line (C-a)8.4.1 Commands For Moving

C
call-last-kbd-macro (C-x e)8.4.7 Keyboard Macros
call-last-kbd-macro (C-x e)8.4.7 Keyboard Macros
capitalize-word (M-c)8.4.3 Commands For Changing Text
capitalize-word (M-c)8.4.3 Commands For Changing Text
character-search (C-])8.4.8 Some Miscellaneous Commands
character-search (C-])8.4.8 Some Miscellaneous Commands
character-search-backward (M-C-])8.4.8 Some Miscellaneous Commands
character-search-backward (M-C-])8.4.8 Some Miscellaneous Commands
clear-screen (C-l)8.4.1 Commands For Moving
clear-screen (C-l)8.4.1 Commands For Moving
complete (TAB)8.4.6 Letting Readline Type For You
complete (TAB)8.4.6 Letting Readline Type For You
complete-command (M-!)8.4.6 Letting Readline Type For You
complete-command (M-!)8.4.6 Letting Readline Type For You
complete-filename (M-/)8.4.6 Letting Readline Type For You
complete-filename (M-/)8.4.6 Letting Readline Type For You
complete-hostname (M-@)8.4.6 Letting Readline Type For You
complete-hostname (M-@)8.4.6 Letting Readline Type For You
complete-into-braces (M-{)8.4.6 Letting Readline Type For You
complete-into-braces (M-{)8.4.6 Letting Readline Type For You
complete-username (M-~)8.4.6 Letting Readline Type For You
complete-username (M-~)8.4.6 Letting Readline Type For You
complete-variable (M-$)8.4.6 Letting Readline Type For You
complete-variable (M-$)8.4.6 Letting Readline Type For You
copy-backward-word ()8.4.4 Killing And Yanking
copy-backward-word ()8.4.4 Killing And Yanking
copy-forward-word ()8.4.4 Killing And Yanking
copy-forward-word ()8.4.4 Killing And Yanking
copy-region-as-kill ()8.4.4 Killing And Yanking
copy-region-as-kill ()8.4.4 Killing And Yanking

D
dabbrev-expand ()8.4.6 Letting Readline Type For You
dabbrev-expand ()8.4.6 Letting Readline Type For You
delete-char (C-d)8.4.3 Commands For Changing Text
delete-char (C-d)8.4.3 Commands For Changing Text
delete-char-or-list ()8.4.6 Letting Readline Type For You
delete-char-or-list ()8.4.6 Letting Readline Type For You
delete-horizontal-space ()8.4.4 Killing And Yanking
delete-horizontal-space ()8.4.4 Killing And Yanking
digit-argument (M-0, M-1, <small>...</small> M--)8.4.5 Specifying Numeric Arguments
digit-argument (M-0, M-1, <small>...</small> M--)8.4.5 Specifying Numeric Arguments
display-shell-version (C-x C-v)8.4.8 Some Miscellaneous Commands
display-shell-version (C-x C-v)8.4.8 Some Miscellaneous Commands
do-uppercase-version (M-a, M-b, M-x, <small>...</small>)8.4.8 Some Miscellaneous Commands
do-uppercase-version (M-a, M-b, M-x, <small>...</small>)8.4.8 Some Miscellaneous Commands
downcase-word (M-l)8.4.3 Commands For Changing Text
downcase-word (M-l)8.4.3 Commands For Changing Text
dump-functions ()8.4.8 Some Miscellaneous Commands
dump-functions ()8.4.8 Some Miscellaneous Commands
dump-macros ()8.4.8 Some Miscellaneous Commands
dump-macros ()8.4.8 Some Miscellaneous Commands
dump-variables ()8.4.8 Some Miscellaneous Commands
dump-variables ()8.4.8 Some Miscellaneous Commands
dynamic-complete-history (M-TAB)8.4.6 Letting Readline Type For You
dynamic-complete-history (M-TAB)8.4.6 Letting Readline Type For You

E
edit-and-execute-command (C-xC-e)8.4.8 Some Miscellaneous Commands
edit-and-execute-command (C-xC-e)8.4.8 Some Miscellaneous Commands
end-kbd-macro (C-x ))8.4.7 Keyboard Macros
end-kbd-macro (C-x ))8.4.7 Keyboard Macros
end-of-history (M-&#62;)8.4.2 Commands For Manipulating The History
end-of-history (M-&#62;)8.4.2 Commands For Manipulating The History
end-of-line (C-e)8.4.1 Commands For Moving
end-of-line (C-e)8.4.1 Commands For Moving
exchange-point-and-mark (C-x C-x)8.4.8 Some Miscellaneous Commands
exchange-point-and-mark (C-x C-x)8.4.8 Some Miscellaneous Commands

F
forward-backward-delete-char ()8.4.3 Commands For Changing Text
forward-backward-delete-char ()8.4.3 Commands For Changing Text
forward-char (C-f)8.4.1 Commands For Moving
forward-char (C-f)8.4.1 Commands For Moving
forward-search-history (C-s)8.4.2 Commands For Manipulating The History
forward-search-history (C-s)8.4.2 Commands For Manipulating The History
forward-word (M-f)8.4.1 Commands For Moving
forward-word (M-f)8.4.1 Commands For Moving

G
glob-complete-word (M-g)8.4.8 Some Miscellaneous Commands
glob-complete-word (M-g)8.4.8 Some Miscellaneous Commands
glob-expand-word (C-x *)8.4.8 Some Miscellaneous Commands
glob-expand-word (C-x *)8.4.8 Some Miscellaneous Commands
glob-list-expansions (C-x g)8.4.8 Some Miscellaneous Commands
glob-list-expansions (C-x g)8.4.8 Some Miscellaneous Commands

H
history-and-alias-expand-line ()8.4.8 Some Miscellaneous Commands
history-and-alias-expand-line ()8.4.8 Some Miscellaneous Commands
history-expand-line (M-^)8.4.8 Some Miscellaneous Commands
history-expand-line (M-^)8.4.8 Some Miscellaneous Commands
history-search-backward ()8.4.2 Commands For Manipulating The History
history-search-backward ()8.4.2 Commands For Manipulating The History
history-search-forward ()8.4.2 Commands For Manipulating The History
history-search-forward ()8.4.2 Commands For Manipulating The History

I
insert-comment (M-#)8.4.8 Some Miscellaneous Commands
insert-comment (M-#)8.4.8 Some Miscellaneous Commands
insert-completions (M-*)8.4.6 Letting Readline Type For You
insert-completions (M-*)8.4.6 Letting Readline Type For You
insert-last-argument (M-. or M-_)8.4.8 Some Miscellaneous Commands
insert-last-argument (M-. or M-_)8.4.8 Some Miscellaneous Commands

K
kill-line (C-k)8.4.4 Killing And Yanking
kill-line (C-k)8.4.4 Killing And Yanking
kill-region ()8.4.4 Killing And Yanking
kill-region ()8.4.4 Killing And Yanking
kill-whole-line ()8.4.4 Killing And Yanking
kill-whole-line ()8.4.4 Killing And Yanking
kill-word (M-d)8.4.4 Killing And Yanking
kill-word (M-d)8.4.4 Killing And Yanking

M
magic-space ()8.4.8 Some Miscellaneous Commands
magic-space ()8.4.8 Some Miscellaneous Commands
menu-complete ()8.4.6 Letting Readline Type For You
menu-complete ()8.4.6 Letting Readline Type For You
menu-complete-backward ()8.4.6 Letting Readline Type For You
menu-complete-backward ()8.4.6 Letting Readline Type For You

N
next-history (C-n)8.4.2 Commands For Manipulating The History
next-history (C-n)8.4.2 Commands For Manipulating The History
non-incremental-forward-search-history (M-n)8.4.2 Commands For Manipulating The History
non-incremental-forward-search-history (M-n)8.4.2 Commands For Manipulating The History
non-incremental-reverse-search-history (M-p)8.4.2 Commands For Manipulating The History
non-incremental-reverse-search-history (M-p)8.4.2 Commands For Manipulating The History

O
operate-and-get-next (C-o)8.4.8 Some Miscellaneous Commands
operate-and-get-next (C-o)8.4.8 Some Miscellaneous Commands
overwrite-mode ()8.4.3 Commands For Changing Text
overwrite-mode ()8.4.3 Commands For Changing Text

P
possible-command-completions (C-x !)8.4.6 Letting Readline Type For You
possible-command-completions (C-x !)8.4.6 Letting Readline Type For You
possible-completions (M-?)8.4.6 Letting Readline Type For You
possible-completions (M-?)8.4.6 Letting Readline Type For You
possible-filename-completions (C-x /)8.4.6 Letting Readline Type For You
possible-filename-completions (C-x /)8.4.6 Letting Readline Type For You
possible-hostname-completions (C-x @)8.4.6 Letting Readline Type For You
possible-hostname-completions (C-x @)8.4.6 Letting Readline Type For You
possible-username-completions (C-x ~)8.4.6 Letting Readline Type For You
possible-username-completions (C-x ~)8.4.6 Letting Readline Type For You
possible-variable-completions (C-x $)8.4.6 Letting Readline Type For You
possible-variable-completions (C-x $)8.4.6 Letting Readline Type For You
prefix-meta (ESC)8.4.8 Some Miscellaneous Commands
prefix-meta (ESC)8.4.8 Some Miscellaneous Commands
previous-history (C-p)8.4.2 Commands For Manipulating The History
previous-history (C-p)8.4.2 Commands For Manipulating The History

Q
quoted-insert (C-q or C-v)8.4.3 Commands For Changing Text
quoted-insert (C-q or C-v)8.4.3 Commands For Changing Text

R
re-read-init-file (C-x C-r)8.4.8 Some Miscellaneous Commands
re-read-init-file (C-x C-r)8.4.8 Some Miscellaneous Commands
redraw-current-line ()8.4.1 Commands For Moving
redraw-current-line ()8.4.1 Commands For Moving
reverse-search-history (C-r)8.4.2 Commands For Manipulating The History
reverse-search-history (C-r)8.4.2 Commands For Manipulating The History
revert-line (M-r)8.4.8 Some Miscellaneous Commands
revert-line (M-r)8.4.8 Some Miscellaneous Commands

S
self-insert (a, b, A, 1, !, <small>...</small>)8.4.3 Commands For Changing Text
self-insert (a, b, A, 1, !, <small>...</small>)8.4.3 Commands For Changing Text
set-mark (C-@)8.4.8 Some Miscellaneous Commands
set-mark (C-@)8.4.8 Some Miscellaneous Commands
shell-backward-word ()8.4.1 Commands For Moving
shell-backward-word ()8.4.1 Commands For Moving
shell-expand-line (M-C-e)8.4.8 Some Miscellaneous Commands
shell-expand-line (M-C-e)8.4.8 Some Miscellaneous Commands
shell-forward-word ()8.4.1 Commands For Moving
shell-forward-word ()8.4.1 Commands For Moving
shell-kill-word ()8.4.4 Killing And Yanking
shell-kill-word ()8.4.4 Killing And Yanking
skip-csi-sequence ()8.4.8 Some Miscellaneous Commands
skip-csi-sequence ()8.4.8 Some Miscellaneous Commands
start-kbd-macro (C-x ()8.4.7 Keyboard Macros
start-kbd-macro (C-x ()8.4.7 Keyboard Macros

T
tilde-expand (M-&#38;)8.4.8 Some Miscellaneous Commands
tilde-expand (M-&#38;)8.4.8 Some Miscellaneous Commands
transpose-chars (C-t)8.4.3 Commands For Changing Text
transpose-chars (C-t)8.4.3 Commands For Changing Text
transpose-words (M-t)8.4.3 Commands For Changing Text
transpose-words (M-t)8.4.3 Commands For Changing Text

U
undo (C-_ or C-x C-u)8.4.8 Some Miscellaneous Commands
undo (C-_ or C-x C-u)8.4.8 Some Miscellaneous Commands
universal-argument ()8.4.5 Specifying Numeric Arguments
universal-argument ()8.4.5 Specifying Numeric Arguments
unix-filename-rubout ()8.4.4 Killing And Yanking
unix-filename-rubout ()8.4.4 Killing And Yanking
unix-line-discard (C-u)8.4.4 Killing And Yanking
unix-line-discard (C-u)8.4.4 Killing And Yanking
unix-word-rubout (C-w)8.4.4 Killing And Yanking
unix-word-rubout (C-w)8.4.4 Killing And Yanking
upcase-word (M-u)8.4.3 Commands For Changing Text
upcase-word (M-u)8.4.3 Commands For Changing Text

Y
yank (C-y)8.4.4 Killing And Yanking
yank (C-y)8.4.4 Killing And Yanking
yank-last-arg (M-. or M-_)8.4.2 Commands For Manipulating The History
yank-last-arg (M-. or M-_)8.4.2 Commands For Manipulating The History
yank-nth-arg (M-C-y)8.4.2 Commands For Manipulating The History
yank-nth-arg (M-C-y)8.4.2 Commands For Manipulating The History
yank-pop (M-y)8.4.4 Killing And Yanking
yank-pop (M-y)8.4.4 Killing And Yanking

Jump to:   A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +K +   +M +   +N +   +O +   +P +   +Q +   +R +   +S +   +T +   +U +   +Y +   +

+ + +


+ + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D.5 Concept Index

+ +
Jump to:   A +   +B +   +C +   +D +   +E +   +F +   +H +   +I +   +J +   +K +   +L +   +M +   +N +   +O +   +P +   +Q +   +R +   +S +   +T +   +V +   +W +   +Y +   +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index Entry Section

A
alias expansion6.6 Aliases
arithmetic evaluation6.5 Shell Arithmetic
arithmetic expansion3.5.5 Arithmetic Expansion
arithmetic, shell6.5 Shell Arithmetic
arrays6.7 Arrays

B
background7.1 Job Control Basics
Bash configuration10.1 Basic Installation
Bash installation10.1 Basic Installation
Bourne shell3. Basic Shell Features
brace expansion3.5.1 Brace Expansion
builtin2. Definitions

C
command editing8.2.1 Readline Bare Essentials
command execution3.7.2 Command Search and Execution
command expansion3.7.1 Simple Command Expansion
command history9.1 Bash History Facilities
command search3.7.2 Command Search and Execution
command substitution3.5.4 Command Substitution
command timing3.2.2 Pipelines
commands, compound3.2.4 Compound Commands
commands, conditional3.2.4.2 Conditional Constructs
commands, grouping3.2.4.3 Grouping Commands
commands, lists3.2.3 Lists of Commands
commands, looping3.2.4.1 Looping Constructs
commands, pipelines3.2.2 Pipelines
commands, shell3.2 Shell Commands
commands, simple3.2.1 Simple Commands
comments, shell3.1.3 Comments
completion builtins8.7 Programmable Completion Builtins
configuration10.1 Basic Installation
control operator2. Definitions
coprocess3.2.5 Coprocesses

D
directory stack6.8 The Directory Stack

E
editing command lines8.2.1 Readline Bare Essentials
environment3.7.4 Environment
evaluation, arithmetic6.5 Shell Arithmetic
event designators9.3.1 Event Designators
execution environment3.7.3 Command Execution Environment
exit status2. Definitions
exit status3.7.5 Exit Status
expansion3.5 Shell Expansions
expansion, arithmetic3.5.5 Arithmetic Expansion
expansion, brace3.5.1 Brace Expansion
expansion, filename3.5.8 Filename Expansion
expansion, parameter3.5.3 Shell Parameter Expansion
expansion, pathname3.5.8 Filename Expansion
expansion, tilde3.5.2 Tilde Expansion
expressions, arithmetic6.5 Shell Arithmetic
expressions, conditional6.4 Bash Conditional Expressions

F
field2. Definitions
filename2. Definitions
filename expansion3.5.8 Filename Expansion
foreground7.1 Job Control Basics
functions, shell3.3 Shell Functions

H
history builtins9.2 Bash History Builtins
history events9.3.1 Event Designators
history expansion9.3 History Expansion
history list9.1 Bash History Facilities
History, how to use8.7 Programmable Completion Builtins

I
identifier2. Definitions
initialization file, readline8.3 Readline Init File
installation10.1 Basic Installation
interaction, readline8.2 Readline Interaction
interactive shell6.1 Invoking Bash
interactive shell6.3 Interactive Shells
internationalization3.1.2.5 Locale-Specific Translation

J
job2. Definitions
job control2. Definitions
job control7.1 Job Control Basics

K
kill ring8.2.3 Readline Killing Commands
killing text8.2.3 Readline Killing Commands

L
localization3.1.2.5 Locale-Specific Translation
login shell6.1 Invoking Bash

M
matching, pattern3.5.8.1 Pattern Matching
metacharacter2. Definitions

N
name2. Definitions
native languages3.1.2.5 Locale-Specific Translation
notation, readline8.2.1 Readline Bare Essentials

O
operator, shell2. Definitions

P
parameter expansion3.5.3 Shell Parameter Expansion
parameters3.4 Shell Parameters
parameters, positional3.4.1 Positional Parameters
parameters, special3.4.2 Special Parameters
pathname expansion3.5.8 Filename Expansion
pattern matching3.5.8.1 Pattern Matching
pipeline3.2.2 Pipelines
POSIX2. Definitions
POSIX Mode6.11 Bash POSIX Mode
process group2. Definitions
process group ID2. Definitions
process substitution3.5.6 Process Substitution
programmable completion8.6 Programmable Completion
prompting6.9 Controlling the Prompt

Q
quoting3.1.2 Quoting
quoting, ANSI3.1.2.4 ANSI-C Quoting

R
Readline, how to use7.3 Job Control Variables
redirection3.6 Redirections
reserved word2. Definitions
restricted shell6.10 The Restricted Shell
return status2. Definitions

S
shell arithmetic6.5 Shell Arithmetic
shell function3.3 Shell Functions
shell script3.8 Shell Scripts
shell variable3.4 Shell Parameters
shell, interactive6.3 Interactive Shells
signal2. Definitions
signal handling3.7.6 Signals
special builtin2. Definitions
special builtin4.4 Special Builtins
startup files6.2 Bash Startup Files
suspending jobs7.1 Job Control Basics

T
tilde expansion3.5.2 Tilde Expansion
token2. Definitions
translation, native languages3.1.2.5 Locale-Specific Translation

V
variable, shell3.4 Shell Parameters
variables, readline8.3.1 Readline Init File Syntax

W
word2. Definitions
word splitting3.5.7 Word Splitting

Y
yanking text8.2.3 Readline Killing Commands

Jump to:   A +   +B +   +C +   +D +   +E +   +F +   +H +   +I +   +J +   +K +   +L +   +M +   +N +   +O +   +P +   +Q +   +R +   +S +   +T +   +V +   +W +   +Y +   +

+ +


+ + + + + + +
[Top][Contents][Index][ ? ]
+

Table of Contents

+ +
+ + + + + + +
[Top][Contents][Index][ ? ]
+

Short Table of Contents

+
+1. Introduction +
+2. Definitions +
+3. Basic Shell Features +
+4. Shell Builtin Commands +
+5. Shell Variables +
+6. Bash Features +
+7. Job Control +
+8. Command Line Editing +
+9. Using History Interactively +
+10. Installing Bash +
+A. Reporting Bugs +
+B. Major Differences From The Bourne Shell +
+C. GNU Free Documentation License +
+D. Indexes +
+ +
+
+ + + + + + +
[Top][Contents][Index][ ? ]
+

About this document

+This document was generated by Chet Ramey on December, 29 2009 +using texi2html +

+The buttons in the navigation panels have the following meaning: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Button Name Go to From 1.2.3 go to
+ [ < ] +Back + +previous section in reading order + +1.2.2 +
+ [ > ] +Forward + +next section in reading order + +1.2.4 +
+ [ << ] +FastBack + +previous or up-and-previous section + +1.1 +
+ [ Up ] +Up + +up section + +1.2 +
+ [ >> ] +FastForward + +next or up-and-next section + +1.3 +
+ [Top] +Top + +cover (top) of document + +   +
+ [Contents] +Contents + +table of contents + +   +
+ [Index] +Index + +concept index + +   +
+ [ ? ] +About + +this page + +   +
+

+where the Example assumes that the current position +is at Subsubsection One-Two-Three of a document of +the following structure: +
    +
  • 1. Section One
  • +
      +
    • 1.1 Subsection One-One
    • +
        +
      • ...
      • +
      +
    • 1.2 Subsection One-Two
    • +
        +
      • 1.2.1 Subsubsection One-Two-One +
      • 1.2.2 Subsubsection One-Two-Two +
      • 1.2.3 Subsubsection One-Two-Three     +<== Current Position +
      • 1.2.4 Subsubsection One-Two-Four +
      +
    • 1.3 Subsection One-Three
    • +
        +
      • ...
      • +
      +
    • 1.4 Subsection One-Four
    • +
    +
+ +
+
+ +This document was generated +by Chet Ramey on December, 29 2009 +using texi2html + + + diff --git a/doc/bashref.info b/doc/bashref.info new file mode 100644 index 0000000..189e58b --- /dev/null +++ b/doc/bashref.info @@ -0,0 +1,10348 @@ +This is bashref.info, produced by makeinfo version 4.13 from +/Users/chet/src/bash/src/doc/bashref.texi. + +This text is a brief description of the features that are present in +the Bash shell (version 4.1, 23 December 2009). + + This is Edition 4.1, last updated 23 December 2009, of `The GNU Bash +Reference Manual', for `Bash', Version 4.1. + + Copyright (C) 1988-2009 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. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, 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 are free to copy and modify + this GNU manual. Buying copies from GNU Press supports the FSF in + developing GNU and promoting software freedom." + + +INFO-DIR-SECTION Basics +START-INFO-DIR-ENTRY +* Bash: (bash). The GNU Bourne-Again SHell. +END-INFO-DIR-ENTRY + + +File: bashref.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) + +Bash Features +************* + +This text is a brief description of the features that are present in +the Bash shell (version 4.1, 23 December 2009). + + This is Edition 4.1, last updated 23 December 2009, of `The GNU Bash +Reference Manual', for `Bash', Version 4.1. + + Bash contains features that appear in other popular shells, and some +features that only appear in Bash. Some of the shells that Bash has +borrowed concepts from are the Bourne Shell (`sh'), the Korn Shell +(`ksh'), and the C-shell (`csh' and its successor, `tcsh'). The +following menu breaks the features up into categories 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:: What job control is and how Bash allows you + to use it. +* Command Line Editing:: Chapter describing the command line + editing features. +* Using History Interactively:: Command History Expansion +* Installing Bash:: How to build and install Bash on your system. +* Reporting Bugs:: How to report bugs in Bash. +* Major Differences From The Bourne Shell:: A terse list of the differences + between Bash and historical + versions of /bin/sh. +* GNU Free Documentation License:: Copying and sharing this documentation. +* Indexes:: Various indexes for this manual. + + +File: bashref.info, Node: Introduction, Next: Definitions, Prev: Top, Up: Top + +1 Introduction +************** + +* Menu: + +* What is Bash?:: A short description of Bash. +* What is a shell?:: A brief introduction to shells. + + +File: bashref.info, Node: What is Bash?, Next: What is a shell?, Up: Introduction + +1.1 What is Bash? +================= + +Bash is the shell, or command language interpreter, for the GNU +operating system. The name is an acronym for the `Bourne-Again SHell', +a pun on Stephen Bourne, the author of the direct ancestor of the +current Unix shell `sh', which appeared in the Seventh Edition Bell +Labs Research version of Unix. + + Bash is largely compatible with `sh' and incorporates useful +features from the Korn shell `ksh' and the C shell `csh'. It is +intended to be a conformant implementation of the IEEE POSIX Shell and +Tools portion of the IEEE POSIX specification (IEEE Standard 1003.1). +It offers functional improvements over `sh' for both interactive and +programming use. + + While the GNU operating system provides other shells, including a +version of `csh', Bash is the default shell. Like other GNU software, +Bash is quite portable. It currently runs on nearly every version of +Unix and a few other operating systems - independently-supported ports +exist for MS-DOS, OS/2, and Windows platforms. + + +File: bashref.info, Node: What is a shell?, Prev: What is Bash?, Up: Introduction + +1.2 What is a shell? +==================== + +At its base, a shell is simply a macro processor that executes +commands. The term macro processor means functionality where text and +symbols are expanded to create larger expressions. + + A Unix shell is both a command interpreter and a programming +language. As a command interpreter, the shell provides the user +interface to the rich set of GNU utilities. The programming language +features allow these utilities to be combined. Files containing +commands can be created, and become commands themselves. These new +commands have the same status as system commands in directories such as +`/bin', allowing users or groups to establish custom environments to +automate their common tasks. + + Shells may be used interactively or non-interactively. In +interactive mode, they accept input typed from the keyboard. When +executing non-interactively, shells execute commands read from a file. + + A shell allows execution of GNU commands, both synchronously and +asynchronously. The shell waits for synchronous commands to complete +before accepting more input; asynchronous commands continue to execute +in parallel with the shell while it reads and executes additional +commands. The "redirection" constructs permit fine-grained control of +the input and output of those commands. Moreover, the shell allows +control over the contents of commands' environments. + + Shells also provide a small set of built-in commands ("builtins") +implementing functionality impossible or inconvenient to obtain via +separate utilities. For example, `cd', `break', `continue', and +`exec') cannot be implemented outside of the shell because they +directly manipulate the shell itself. The `history', `getopts', +`kill', or `pwd' builtins, among others, could be implemented in +separate utilities, but they are more convenient to use as builtin +commands. All of the shell builtins are described in subsequent +sections. + + While executing commands is essential, most of the power (and +complexity) of shells is due to their embedded programming languages. +Like any high-level language, the shell provides variables, flow +control constructs, quoting, and functions. + + Shells offer features geared specifically for interactive use rather +than to augment the programming language. These interactive features +include job control, command line editing, command history and aliases. +Each of these features is described in this manual. + + +File: bashref.info, Node: Definitions, Next: Basic Shell Features, Prev: Introduction, Up: Top + +2 Definitions +************* + +These definitions are used throughout the remainder of this manual. + +`POSIX' + A family of open system standards based on Unix. Bash is + primarily concerned with the Shell and Utilities portion of the + POSIX 1003.1 standard. + +`blank' + A space or tab character. + +`builtin' + A command that is implemented internally by the shell itself, + rather than by an executable program somewhere in the file system. + +`control operator' + A `token' that performs a control function. It is a `newline' or + one of the following: `||', `&&', `&', `;', `;;', `|', `|&', `(', + or `)'. + +`exit status' + The value returned by a command to its caller. The value is + restricted to eight bits, so the maximum value is 255. + +`field' + A unit of text that is the result of one of the shell expansions. + After expansion, when executing a command, the resulting fields + are used as the command name and arguments. + +`filename' + A string of characters used to identify a file. + +`job' + A set of processes comprising a pipeline, and any processes + descended from it, that are all in the same process group. + +`job control' + A mechanism by which users can selectively stop (suspend) and + restart (resume) execution of processes. + +`metacharacter' + A character that, when unquoted, separates words. A metacharacter + is a `blank' or one of the following characters: `|', `&', `;', + `(', `)', `<', or `>'. + +`name' + A `word' consisting solely of letters, numbers, and underscores, + and beginning with a letter or underscore. `Name's are used as + shell variable and function names. Also referred to as an + `identifier'. + +`operator' + A `control operator' or a `redirection operator'. *Note + Redirections::, for a list of redirection operators. Operators + contain at least one unquoted `metacharacter'. + +`process group' + A collection of related processes each having the same process + group ID. + +`process group ID' + A unique identifier that represents a `process group' during its + lifetime. + +`reserved word' + A `word' that has a special meaning to the shell. Most reserved + words introduce shell flow control constructs, such as `for' and + `while'. + +`return status' + A synonym for `exit status'. + +`signal' + A mechanism by which a process may be notified by the kernel of an + event occurring in the system. + +`special builtin' + A shell builtin command that has been classified as special by the + POSIX standard. + +`token' + A sequence of characters considered a single unit by the shell. + It is either a `word' or an `operator'. + +`word' + A sequence of characters treated as a unit by the shell. Words + may not include unquoted `metacharacters'. + + +File: bashref.info, Node: Basic Shell Features, Next: Shell Builtin Commands, Prev: Definitions, Up: Top + +3 Basic Shell Features +********************** + +Bash is an acronym for `Bourne-Again SHell'. The Bourne shell is the +traditional Unix shell originally written by Stephen Bourne. All of +the Bourne shell builtin commands are available in Bash, The rules for +evaluation and quoting are taken from the POSIX specification for the +`standard' Unix shell. + + This chapter briefly summarizes the shell's `building blocks': +commands, control structures, shell functions, shell parameters, shell +expansions, redirections, which are a way to direct input and output +from and to named files, and how the shell executes commands. + +* Menu: + +* Shell Syntax:: What your input means to the shell. +* Shell Commands:: The types of commands you can use. +* Shell Functions:: Grouping commands by name. +* Shell Parameters:: How the shell stores values. +* Shell Expansions:: How Bash expands parameters and the various + expansions available. +* Redirections:: A way to control where input and output go. +* Executing Commands:: What happens when you run a command. +* Shell Scripts:: Executing files of shell commands. + + +File: bashref.info, Node: Shell Syntax, Next: Shell Commands, Up: Basic Shell Features + +3.1 Shell Syntax +================ + +* Menu: + +* Shell Operation:: The basic operation of the shell. +* Quoting:: How to remove the special meaning from characters. +* Comments:: How to specify comments. + + When the shell reads input, it proceeds through a sequence of +operations. If the input indicates the beginning of a comment, the +shell ignores the comment symbol (`#'), and the rest of that line. + + Otherwise, roughly speaking, the shell reads its input and divides +the input into words and operators, employing the quoting rules to +select which meanings to assign various words and characters. + + The shell then parses these tokens into commands and other +constructs, removes the special meaning of certain words or characters, +expands others, redirects input and output as needed, executes the +specified command, waits for the command's exit status, and makes that +exit status available for further inspection or processing. + + +File: bashref.info, Node: Shell Operation, Next: Quoting, Up: Shell Syntax + +3.1.1 Shell Operation +--------------------- + +The following is a brief description of the shell's operation when it +reads and executes a command. Basically, the shell does the following: + + 1. Reads its input from a file (*note Shell Scripts::), from a string + supplied as an argument to the `-c' invocation option (*note + Invoking Bash::), or from the user's terminal. + + 2. Breaks the input into words and operators, obeying the quoting + rules described in *note Quoting::. These tokens are separated by + `metacharacters'. Alias expansion is performed by this step + (*note Aliases::). + + 3. Parses the tokens into simple and compound commands (*note Shell + Commands::). + + 4. Performs the various shell expansions (*note Shell Expansions::), + breaking the expanded tokens into lists of filenames (*note + Filename Expansion::) and commands and arguments. + + 5. Performs any necessary redirections (*note Redirections::) and + removes the redirection operators and their operands from the + argument list. + + 6. Executes the command (*note Executing Commands::). + + 7. Optionally waits for the command to complete and collects its exit + status (*note Exit Status::). + + + +File: bashref.info, Node: Quoting, Next: Comments, Prev: Shell Operation, Up: Shell Syntax + +3.1.2 Quoting +------------- + +* Menu: + +* Escape Character:: How to remove the special meaning from a single + character. +* Single Quotes:: How to inhibit all interpretation of a sequence + of characters. +* Double Quotes:: How to suppress most of the interpretation of a + sequence of characters. +* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings. +* Locale Translation:: How to translate strings into different languages. + + Quoting is used to remove the special meaning of certain characters +or words to the shell. Quoting can be used to disable special +treatment for special characters, to prevent reserved words from being +recognized as such, and to prevent parameter expansion. + + Each of the shell metacharacters (*note Definitions::) has special +meaning to the shell and must be quoted if it is to represent itself. +When the command history expansion facilities are being used (*note +History Interaction::), the HISTORY EXPANSION character, usually `!', +must be quoted to prevent history expansion. *Note Bash History +Facilities::, for more details concerning history expansion. + + There are three quoting mechanisms: the ESCAPE CHARACTER, single +quotes, and double quotes. + + +File: bashref.info, Node: Escape Character, Next: Single Quotes, Up: Quoting + +3.1.2.1 Escape Character +........................ + +A non-quoted backslash `\' is the Bash escape character. It preserves +the literal value of the next character that follows, with the +exception of `newline'. If a `\newline' pair appears, and the +backslash itself is not quoted, the `\newline' is treated as a line +continuation (that is, it is removed from the input stream and +effectively ignored). + + +File: bashref.info, Node: Single Quotes, Next: Double Quotes, Prev: Escape Character, Up: Quoting + +3.1.2.2 Single Quotes +..................... + +Enclosing characters in single quotes (`'') preserves the literal value +of each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a backslash. + + +File: bashref.info, Node: Double Quotes, Next: ANSI-C Quoting, Prev: Single Quotes, Up: Quoting + +3.1.2.3 Double Quotes +..................... + +Enclosing characters in double quotes (`"') preserves the literal value +of all characters within the quotes, with the exception of `$', ``', +`\', and, when history expansion is enabled, `!'. The characters `$' +and ``' retain their special meaning within double quotes (*note Shell +Expansions::). The backslash retains its special meaning only when +followed by one of the following characters: `$', ``', `"', `\', or +`newline'. Within double quotes, backslashes that are followed by one +of these characters are removed. Backslashes preceding characters +without a special meaning are left unmodified. A double quote may be +quoted within double quotes by preceding it with a backslash. If +enabled, history expansion will be performed unless an `!' appearing in +double quotes is escaped using a backslash. The backslash preceding +the `!' is not removed. + + The special parameters `*' and `@' have special meaning when in +double quotes (*note Shell Parameter Expansion::). + + +File: bashref.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double Quotes, Up: Quoting + +3.1.2.4 ANSI-C Quoting +...................... + +Words of the form `$'STRING'' are treated specially. The word expands +to STRING, with backslash-escaped characters replaced as specified by +the ANSI C standard. Backslash escape sequences, if present, are +decoded as follows: + +`\a' + alert (bell) + +`\b' + backspace + +`\e' +`\E' + an escape character (not ANSI C) + +`\f' + form feed + +`\n' + newline + +`\r' + carriage return + +`\t' + horizontal tab + +`\v' + vertical tab + +`\\' + backslash + +`\'' + single quote + +`\"' + double quote + +`\NNN' + the eight-bit character whose value is the octal value NNN (one to + three digits) + +`\xHH' + the eight-bit character whose value is the hexadecimal value HH + (one or two hex digits) + +`\cX' + a control-X character + +The expanded result is single-quoted, as if the dollar sign had not +been present. + + +File: bashref.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoting + +3.1.2.5 Locale-Specific Translation +................................... + +A double-quoted string preceded by a dollar sign (`$') will cause the +string to be translated according to the current locale. If the +current locale is `C' or `POSIX', the dollar sign is ignored. If the +string is translated and replaced, the replacement is double-quoted. + + Some systems use the message catalog selected by the `LC_MESSAGES' +shell variable. Others create the name of the message catalog from the +value of the `TEXTDOMAIN' shell variable, possibly adding a suffix of +`.mo'. If you use the `TEXTDOMAIN' variable, you may need to set the +`TEXTDOMAINDIR' variable to the location of the message catalog files. +Still others use both variables in this fashion: +`TEXTDOMAINDIR'/`LC_MESSAGES'/LC_MESSAGES/`TEXTDOMAIN'.mo. + + +File: bashref.info, Node: Comments, Prev: Quoting, Up: Shell Syntax + +3.1.3 Comments +-------------- + +In a non-interactive shell, or an interactive shell in which the +`interactive_comments' option to the `shopt' builtin is enabled (*note +The Shopt Builtin::), a word beginning with `#' causes that word and +all remaining characters on that line to be ignored. An interactive +shell without the `interactive_comments' option enabled does not allow +comments. The `interactive_comments' option is on by default in +interactive shells. *Note Interactive Shells::, for a description of +what makes a shell interactive. + + +File: bashref.info, Node: Shell Commands, Next: Shell Functions, Prev: Shell Syntax, Up: Basic Shell Features + +3.2 Shell Commands +================== + +A simple shell command such as `echo a b c' consists of the command +itself followed by arguments, separated by spaces. + + More complex shell commands are composed of simple commands arranged +together in a variety of ways: in a pipeline in which the output of one +command becomes the input of a second, in a loop or conditional +construct, or in some other grouping. + +* Menu: + +* Simple Commands:: The most common type of command. +* Pipelines:: Connecting the input and output of several + commands. +* Lists:: How to execute commands sequentially. +* Compound Commands:: Shell commands for control flow. +* Coprocesses:: Two-way communication between commands. + + +File: bashref.info, Node: Simple Commands, Next: Pipelines, Up: Shell Commands + +3.2.1 Simple Commands +--------------------- + +A simple command is the kind of command encountered most often. It's +just a sequence of words separated by `blank's, terminated by one of +the shell's control operators (*note Definitions::). The first word +generally specifies a command to be executed, with the rest of the +words being that command's arguments. + + The return status (*note Exit Status::) of a simple command is its +exit status as provided by the POSIX 1003.1 `waitpid' function, or +128+N if the command was terminated by signal N. + + +File: bashref.info, Node: Pipelines, Next: Lists, Prev: Simple Commands, Up: Shell Commands + +3.2.2 Pipelines +--------------- + +A `pipeline' is a sequence of simple commands separated by one of the +control operators `|' or `|&'. + + The format for a pipeline is + [`time' [`-p']] [`!'] COMMAND1 [ [`|' or `|&'] COMMAND2 ...] + +The output of each command in the pipeline is connected via a pipe to +the input of the next command. That is, each command reads the +previous command's output. This connection is performed before any +redirections specified by the command. + + If `|&' is used, the standard error of COMMAND1 is connected to +COMMAND2's standard input through the pipe; it is shorthand for `2>&1 +|'. This implicit redirection of the standard error is performed after +any redirections specified by the command. + + The reserved word `time' causes timing statistics to be printed for +the pipeline once it finishes. The statistics currently consist of +elapsed (wall-clock) time and user and system time consumed by the +command's execution. The `-p' option changes the output format to that +specified by POSIX. The `TIMEFORMAT' variable may be set to a format +string that specifies how the timing information should be displayed. +*Note Bash Variables::, for a description of the available formats. +The use of `time' as a reserved word permits the timing of shell +builtins, shell functions, and pipelines. An external `time' command +cannot time these easily. + + If the pipeline is not executed asynchronously (*note Lists::), the +shell waits for all commands in the pipeline to complete. + + Each command in a pipeline is executed in its own subshell (*note +Command Execution Environment::). The exit status of a pipeline is the +exit status of the last command in the pipeline, unless the `pipefail' +option is enabled (*note The Set Builtin::). If `pipefail' is enabled, +the pipeline's return status is the value of the last (rightmost) +command to exit with a non-zero status, or zero if all commands exit +successfully. If the reserved word `!' precedes the pipeline, the exit +status is the logical negation of the exit status as described above. +The shell waits for all commands in the pipeline to terminate before +returning a value. + + +File: bashref.info, Node: Lists, Next: Compound Commands, Prev: Pipelines, Up: Shell Commands + +3.2.3 Lists of Commands +----------------------- + +A `list' is a sequence of one or more pipelines separated by one of the +operators `;', `&', `&&', or `||', and optionally terminated by one of +`;', `&', or a `newline'. + + Of these list operators, `&&' and `||' have equal precedence, +followed by `;' and `&', which have equal precedence. + + A sequence of one or more newlines may appear in a `list' to delimit +commands, equivalent to a semicolon. + + If a command is terminated by the control operator `&', the shell +executes the command asynchronously in a subshell. This is known as +executing the command in the BACKGROUND. The shell does not wait for +the command to finish, and the return status is 0 (true). When job +control is not active (*note Job Control::), the standard input for +asynchronous commands, in the absence of any explicit redirections, is +redirected from `/dev/null'. + + Commands separated by a `;' are executed sequentially; the shell +waits for each command to terminate in turn. The return status is the +exit status of the last command executed. + + AND and OR lists are sequences of one or more pipelines separated by +the control operators `&&' and `||', respectively. AND and OR lists +are executed with left associativity. + + An AND list has the form + COMMAND1 && COMMAND2 + +COMMAND2 is executed if, and only if, COMMAND1 returns an exit status +of zero. + + An OR list has the form + COMMAND1 || COMMAND2 + +COMMAND2 is executed if, and only if, COMMAND1 returns a non-zero exit +status. + + The return status of AND and OR lists is the exit status of the last +command executed in the list. + + +File: bashref.info, Node: Compound Commands, Next: Coprocesses, Prev: Lists, Up: Shell Commands + +3.2.4 Compound Commands +----------------------- + +* Menu: + +* Looping Constructs:: Shell commands for iterative action. +* Conditional Constructs:: Shell commands for conditional execution. +* Command Grouping:: Ways to group commands. + + Compound commands are the shell programming constructs. Each +construct begins with a reserved word or control operator and is +terminated by a corresponding reserved word or operator. Any +redirections (*note Redirections::) associated with a compound command +apply to all commands within that compound command unless explicitly +overridden. + + Bash provides looping constructs, conditional commands, and +mechanisms to group commands and execute them as a unit. + + +File: bashref.info, Node: Looping Constructs, Next: Conditional Constructs, Up: Compound Commands + +3.2.4.1 Looping Constructs +.......................... + +Bash supports the following looping constructs. + + Note that wherever a `;' appears in the description of a command's +syntax, it may be replaced with one or more newlines. + +`until' + The syntax of the `until' command is: + until TEST-COMMANDS; do CONSEQUENT-COMMANDS; done + Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit + status which is not zero. The return status is the exit status of + the last command executed in CONSEQUENT-COMMANDS, or zero if none + was executed. + +`while' + The syntax of the `while' command is: + while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done + + Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit + status of zero. The return status is the exit status of the last + command executed in CONSEQUENT-COMMANDS, or zero if none was + executed. + +`for' + The syntax of the `for' command is: + + for NAME [ [in [WORDS ...] ] ; ] do COMMANDS; done + Expand WORDS, and execute COMMANDS once for each member in the + resultant list, with NAME bound to the current member. If `in + WORDS' is not present, the `for' command executes the COMMANDS + once for each positional parameter that is set, as if `in "$@"' + had been specified (*note Special Parameters::). The return + status is the exit status of the last command that executes. If + there are no items in the expansion of WORDS, no commands are + executed, and the return status is zero. + + An alternate form of the `for' command is also supported: + + for (( EXPR1 ; EXPR2 ; EXPR3 )) ; do COMMANDS ; done + First, the arithmetic expression EXPR1 is evaluated according to + the rules described below (*note Shell Arithmetic::). The + arithmetic expression EXPR2 is then evaluated repeatedly until it + evaluates to zero. Each time EXPR2 evaluates to a non-zero value, + COMMANDS are executed and the arithmetic expression EXPR3 is + evaluated. If any expression is omitted, it behaves as if it + evaluates to 1. The return value is the exit status of the last + command in LIST that is executed, or false if any of the + expressions is invalid. + + + The `break' and `continue' builtins (*note Bourne Shell Builtins::) +may be used to control loop execution. + + +File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Prev: Looping Constructs, Up: Compound Commands + +3.2.4.2 Conditional Constructs +.............................. + +`if' + The syntax of the `if' command is: + + if TEST-COMMANDS; then + CONSEQUENT-COMMANDS; + [elif MORE-TEST-COMMANDS; then + MORE-CONSEQUENTS;] + [else ALTERNATE-CONSEQUENTS;] + fi + + The TEST-COMMANDS list is executed, and if its return status is + zero, the CONSEQUENT-COMMANDS list is executed. If TEST-COMMANDS + returns a non-zero status, each `elif' list is executed in turn, + and if its exit status is zero, the corresponding MORE-CONSEQUENTS + is executed and the command completes. If `else + ALTERNATE-CONSEQUENTS' is present, and the final command in the + final `if' or `elif' clause has a non-zero exit status, then + ALTERNATE-CONSEQUENTS is executed. The return status is the exit + status of the last command executed, or zero if no condition + tested true. + +`case' + The syntax of the `case' command is: + + `case WORD in [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]... esac' + + `case' will selectively execute the COMMAND-LIST corresponding to + the first PATTERN that matches WORD. If the shell option + `nocasematch' (see the description of `shopt' in *note The Shopt + Builtin::) is enabled, the match is performed without regard to + the case of alphabetic characters. The `|' is used to separate + multiple patterns, and the `)' operator terminates a pattern list. + A list of patterns and an associated command-list is known as a + CLAUSE. + + Each clause must be terminated with `;;', `;&', or `;;&'. The + WORD undergoes tilde expansion, parameter expansion, command + substitution, arithmetic expansion, and quote removal before + matching is attempted. Each PATTERN undergoes tilde expansion, + parameter expansion, command substitution, and arithmetic + expansion. + + There may be an arbitrary number of `case' clauses, each terminated + by a `;;', `;&', or `;;&'. The first pattern that matches + determines the command-list that is executed. + + Here is an example using `case' in a script that could be used to + describe one interesting feature of an animal: + + echo -n "Enter the name of an animal: " + read ANIMAL + echo -n "The $ANIMAL has " + case $ANIMAL in + horse | dog | cat) echo -n "four";; + man | kangaroo ) echo -n "two";; + *) echo -n "an unknown number of";; + esac + echo " legs." + + If the `;;' operator is used, no subsequent matches are attempted + after the first pattern match. Using `;&' in place of `;;' + causes execution to continue with the COMMAND-LIST associated with + the next clause, if any. Using `;;&' in place of `;;' causes the + shell to test the patterns in the next clause, if any, and execute + any associated COMMAND-LIST on a successful match. + + The return status is zero if no PATTERN is matched. Otherwise, the + return status is the exit status of the COMMAND-LIST executed. + +`select' + The `select' construct allows the easy generation of menus. It + has almost the same syntax as the `for' command: + + select NAME [in WORDS ...]; do COMMANDS; done + + The list of words following `in' is expanded, generating a list of + items. The set of expanded words is printed on the standard error + output stream, each preceded by a number. If the `in WORDS' is + omitted, the positional parameters are printed, as if `in "$@"' + had been specified. The `PS3' prompt is then displayed and a line + is read from the standard input. If the line consists of a number + corresponding to one of the displayed words, then the value of + NAME is set to that word. If the line is empty, the words and + prompt are displayed again. If `EOF' is read, the `select' + command completes. Any other value read causes NAME to be set to + null. The line read is saved in the variable `REPLY'. + + The COMMANDS are executed after each selection until a `break' + command is executed, at which point the `select' command completes. + + Here is an example that allows the user to pick a filename from the + current directory, and displays the name and index of the file + selected. + + select fname in *; + do + echo you picked $fname \($REPLY\) + break; + done + +`((...))' + (( EXPRESSION )) + + The arithmetic EXPRESSION is evaluated according to the rules + described below (*note Shell Arithmetic::). If the value of the + expression is non-zero, the return status is 0; otherwise the + return status is 1. This is exactly equivalent to + let "EXPRESSION" + *Note Bash Builtins::, for a full description of the `let' builtin. + +`[[...]]' + [[ EXPRESSION ]] + + Return a status of 0 or 1 depending on the evaluation of the + conditional expression EXPRESSION. Expressions are composed of + the primaries described below in *note Bash Conditional + Expressions::. Word splitting and filename expansion are not + performed on the words between the `[[' and `]]'; tilde expansion, + parameter and variable expansion, arithmetic expansion, command + substitution, process substitution, and quote removal are + performed. Conditional operators such as `-f' must be unquoted to + be recognized as primaries. + + When used with `[[', The `<' and `>' operators sort + lexicographically using the current locale. + + When the `==' and `!=' operators are used, the string to the right + of the operator is considered a pattern and matched according to + the rules described below in *note Pattern Matching::. If the + shell option `nocasematch' (see the description of `shopt' in + *note The Shopt Builtin::) is enabled, the match is performed + without regard to the case of alphabetic characters. The return + value is 0 if the string matches (`==') or does not match + (`!=')the pattern, and 1 otherwise. Any part of the pattern may + be quoted to force it to be matched as a string. + + An additional binary operator, `=~', is available, with the same + precedence as `==' and `!='. When it is used, the string to the + right of the operator is considered an extended regular expression + and matched accordingly (as in regex3)). The return value is 0 if + the string matches the pattern, and 1 otherwise. If the regular + expression is syntactically incorrect, the conditional + expression's return value is 2. If the shell option `nocasematch' + (see the description of `shopt' in *note The Shopt Builtin::) is + enabled, the match is performed without regard to the case of + alphabetic characters. Any part of the pattern may be quoted to + force it to be matched as a string. Substrings matched by + parenthesized subexpressions within the regular expression are + saved in the array variable `BASH_REMATCH'. The element of + `BASH_REMATCH' with index 0 is the portion of the string matching + the entire regular expression. The element of `BASH_REMATCH' with + index N is the portion of the string matching the Nth + parenthesized subexpression. + + Expressions may be combined using the following operators, listed + in decreasing order of precedence: + + `( EXPRESSION )' + Returns the value of EXPRESSION. This may be used to + override the normal precedence of operators. + + `! EXPRESSION' + True if EXPRESSION is false. + + `EXPRESSION1 && EXPRESSION2' + True if both EXPRESSION1 and EXPRESSION2 are true. + + `EXPRESSION1 || EXPRESSION2' + True if either EXPRESSION1 or EXPRESSION2 is true. + The `&&' and `||' operators do not evaluate EXPRESSION2 if the + value of EXPRESSION1 is sufficient to determine the return value + of the entire conditional expression. + + + +File: bashref.info, Node: Command Grouping, Prev: Conditional Constructs, Up: Compound Commands + +3.2.4.3 Grouping Commands +......................... + +Bash provides two ways to group a list of commands to be executed as a +unit. When commands are grouped, redirections may be applied to the +entire command list. For example, the output of all the commands in +the list may be redirected to a single stream. + +`()' + ( LIST ) + + Placing a list of commands between parentheses causes a subshell + environment to be created (*note Command Execution Environment::), + and each of the commands in LIST to be executed in that subshell. + Since the LIST is executed in a subshell, variable assignments do + not remain in effect after the subshell completes. + +`{}' + { LIST; } + + Placing a list of commands between curly braces causes the list to + be executed in the current shell context. No subshell is created. + The semicolon (or newline) following LIST is required. + + In addition to the creation of a subshell, there is a subtle +difference between these two constructs due to historical reasons. The +braces are `reserved words', so they must be separated from the LIST by +`blank's or other shell metacharacters. The parentheses are +`operators', and are recognized as separate tokens by the shell even if +they are not separated from the LIST by whitespace. + + The exit status of both of these constructs is the exit status of +LIST. + + +File: bashref.info, Node: Coprocesses, Prev: Compound Commands, Up: Shell Commands + +3.2.5 Coprocesses +----------------- + +A `coprocess' is a shell command preceded by the `coproc' reserved word. +A coprocess is executed asynchronously in a subshell, as if the command +had been terminated with the `&' control operator, with a two-way pipe +established between the executing shell and the coprocess. + + The format for a coprocess is: + `coproc' [NAME] COMMAND [REDIRECTIONS] + +This creates a coprocess named NAME. If NAME is not supplied, the +default name is COPROC. NAME must not be supplied if COMMAND is a +simple command (*note Simple Commands::); otherwise, it is interpreted +as the first word of the simple command. + + When the coproc is executed, the shell creates an array variable +(*note Arrays::) named NAME in the context of the executing shell. The +standard output of COMMAND is connected via a pipe to a file descriptor +in the executing shell, and that file descriptor is assigned to NAME[0]. +The standard input of COMMAND is connected via a pipe to a file +descriptor in the executing shell, and that file descriptor is assigned +to NAME[1]. This pipe is established before any redirections specified +by the command (*note Redirections::). The file descriptors can be +utilized as arguments to shell commands and redirections using standard +word expansions. + + The process id of the shell spawned to execute the coprocess is +available as the value of the variable NAME_PID. The `wait' builtin +command may be used to wait for the coprocess to terminate. + + The return status of a coprocess is the exit status of COMMAND. + + +File: bashref.info, Node: Shell Functions, Next: Shell Parameters, Prev: Shell Commands, Up: Basic Shell Features + +3.3 Shell Functions +=================== + +Shell functions are a way to group commands for later execution using a +single name for the group. They are executed just like a "regular" +command. When the name of a shell function is used as a simple command +name, the list of commands associated with that function name is +executed. Shell functions are executed in the current shell context; +no new process is created to interpret them. + + Functions are declared using this syntax: + [ `function' ] NAME () COMPOUND-COMMAND [ REDIRECTIONS ] + + This defines a shell function named NAME. The reserved word +`function' is optional. If the `function' reserved word is supplied, +the parentheses are optional. The BODY of the function is the compound +command COMPOUND-COMMAND (*note Compound Commands::). That command is +usually a LIST enclosed between { and }, but may be any compound +command listed above. COMPOUND-COMMAND is executed whenever NAME is +specified as the name of a command. Any redirections (*note +Redirections::) associated with the shell function are performed when +the function is executed. + + A function definition may be deleted using the `-f' option to the +`unset' builtin (*note Bourne Shell Builtins::). + + The exit status of a function definition is zero unless a syntax +error occurs or a readonly function with the same name already exists. +When executed, the exit status of a function is the exit status of the +last command executed in the body. + + Note that for historical reasons, in the most common usage the curly +braces that surround the body of the function must be separated from +the body by `blank's or newlines. This is because the braces are +reserved words and are only recognized as such when they are separated +from the command list by whitespace or another shell metacharacter. +Also, when using the braces, the LIST must be terminated by a semicolon, +a `&', or a newline. + + When a function is executed, the arguments to the function become +the positional parameters during its execution (*note Positional +Parameters::). The special parameter `#' that expands to the number of +positional parameters is updated to reflect the change. Special +parameter `0' is unchanged. The first element of the `FUNCNAME' +variable is set to the name of the function while the function is +executing. + + All other aspects of the shell execution environment are identical +between a function and its caller with these exceptions: the `DEBUG' +and `RETURN' traps are not inherited unless the function has been given +the `trace' attribute using the `declare' builtin or the `-o functrace' +option has been enabled with the `set' builtin, (in which case all +functions inherit the `DEBUG' and `RETURN' traps), and the `ERR' trap +is not inherited unless the `-o errtrace' shell option has been enabled. +*Note Bourne Shell Builtins::, for the description of the `trap' +builtin. + + If the builtin command `return' is executed in a function, the +function completes and execution resumes with the next command after +the function call. Any command associated with the `RETURN' trap is +executed before execution resumes. When a function completes, the +values of the positional parameters and the special parameter `#' are +restored to the values they had prior to the function's execution. If +a numeric argument is given to `return', that is the function's return +status; otherwise the function's return status is the exit status of +the last command executed before the `return'. + + Variables local to the function may be declared with the `local' +builtin. These variables are visible only to the function and the +commands it invokes. + + Function names and definitions may be listed with the `-f' option to +the `declare' or `typeset' builtin commands (*note Bash Builtins::). +The `-F' option to `declare' or `typeset' will list the function names +only (and optionally the source file and line number, if the `extdebug' +shell option is enabled). Functions may be exported so that subshells +automatically have them defined with the `-f' option to the `export' +builtin (*note Bourne Shell Builtins::). 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. + + +File: bashref.info, Node: Shell Parameters, Next: Shell Expansions, Prev: Shell Functions, Up: Basic Shell Features + +3.4 Shell Parameters +==================== + +* Menu: + +* Positional Parameters:: The shell's command-line arguments. +* Special Parameters:: Parameters denoted by special characters. + + A PARAMETER is an entity that stores values. It can be a `name', a +number, or one of the special characters listed below. A VARIABLE is a +parameter denoted by a `name'. A variable has a VALUE and zero or more +ATTRIBUTES. Attributes are assigned using the `declare' builtin command +(see the description of the `declare' builtin in *note Bash Builtins::). + + A parameter is set if it has been assigned a value. The null string +is a valid value. Once a variable is set, it may be unset only by using +the `unset' builtin command. + + A variable may be assigned to by a statement of the form + NAME=[VALUE] + If VALUE is not given, the variable is assigned the null string. All +VALUEs undergo tilde expansion, parameter and variable expansion, +command substitution, arithmetic expansion, and quote removal (detailed +below). If the variable has its `integer' attribute set, then VALUE is +evaluated as an arithmetic expression even if the `$((...))' expansion +is not used (*note Arithmetic Expansion::). Word splitting is not +performed, with the exception of `"$@"' as explained below. Filename +expansion is not performed. Assignment statements may also appear as +arguments to the `alias', `declare', `typeset', `export', `readonly', +and `local' builtin commands. + + In the context where an assignment statement is assigning a value to +a shell variable or array index (*note Arrays::), the `+=' operator can +be used to append to or add to the variable's previous value. When +`+=' is applied to a variable for which the integer attribute has been +set, VALUE is evaluated as an arithmetic expression and added to the +variable's current value, which is also evaluated. When `+=' is +applied to an array variable using compound assignment (*note +Arrays::), the variable's value is not unset (as it is when using `='), +and new values are appended to the array beginning at one greater than +the array's maximum index (for indexed arrays), or added as additional +key-value pairs in an associative array. When applied to a +string-valued variable, VALUE is expanded and appended to the +variable's value. + + +File: bashref.info, Node: Positional Parameters, Next: Special Parameters, Up: Shell Parameters + +3.4.1 Positional Parameters +--------------------------- + +A POSITIONAL PARAMETER is a parameter denoted by one or more digits, +other than the single digit `0'. Positional parameters are assigned +from the shell's arguments when it is invoked, and may be reassigned +using the `set' builtin command. Positional parameter `N' may be +referenced as `${N}', or as `$N' when `N' consists of a single digit. +Positional parameters may not be assigned to with assignment statements. +The `set' and `shift' builtins are used to set and unset them (*note +Shell Builtin Commands::). The positional parameters are temporarily +replaced when a shell function is executed (*note Shell Functions::). + + When a positional parameter consisting of more than a single digit +is expanded, it must be enclosed in braces. + + +File: bashref.info, Node: Special Parameters, Prev: Positional Parameters, Up: Shell Parameters + +3.4.2 Special Parameters +------------------------ + +The shell treats several parameters specially. These parameters may +only be referenced; assignment to them is not allowed. + +`*' + Expands to the positional parameters, starting from one. When the + expansion occurs within double quotes, it expands to a single word + with the value of each parameter separated by the first character + of the `IFS' special variable. That is, `"$*"' is equivalent to + `"$1C$2C..."', where C is the first character of the value of the + `IFS' variable. If `IFS' is unset, the parameters are separated + by spaces. If `IFS' is null, the parameters are joined without + intervening separators. + +`@' + Expands to the positional parameters, starting from one. When the + expansion occurs within double quotes, each parameter expands to a + separate word. That is, `"$@"' is equivalent to `"$1" "$2" ...'. + If the double-quoted expansion occurs within a word, the expansion + of the first parameter is joined with the beginning part of the + original word, and the expansion of the last parameter is joined + with the last part of the original word. When there are no + positional parameters, `"$@"' and `$@' expand to nothing (i.e., + they are removed). + +`#' + Expands to the number of positional parameters in decimal. + +`?' + Expands to the exit status of the most recently executed foreground + pipeline. + +`-' + (A hyphen.) Expands to the current option flags as specified upon + invocation, by the `set' builtin command, or those set by the + shell itself (such as the `-i' option). + +`$' + Expands to the process ID of the shell. In a `()' subshell, it + expands to the process ID of the invoking shell, not the subshell. + +`!' + Expands to the process ID of the most recently executed background + (asynchronous) command. + +`0' + Expands to the name of the shell or shell script. This is set at + shell initialization. If Bash is invoked with a file of commands + (*note Shell Scripts::), `$0' is set to the name of that file. If + Bash is started with the `-c' option (*note Invoking Bash::), then + `$0' is set to the first argument after the string to be executed, + if one is present. Otherwise, it is set to the filename used to + invoke Bash, as given by argument zero. + +`_' + (An underscore.) At shell startup, set to the absolute pathname + used to invoke the shell or shell script being executed as passed + in the environment or argument list. Subsequently, expands to the + last argument to the previous command, after expansion. Also set + to the full pathname used to invoke each command executed and + placed in the environment exported to that command. When checking + mail, this parameter holds the name of the mail file. + + +File: bashref.info, Node: Shell Expansions, Next: Redirections, Prev: Shell Parameters, Up: Basic Shell Features + +3.5 Shell Expansions +==================== + +Expansion is performed on the command line after it has been split into +`token's. There are seven kinds of expansion performed: + * brace expansion + + * tilde expansion + + * parameter and variable expansion + + * command substitution + + * arithmetic expansion + + * word splitting + + * filename expansion + +* Menu: + +* Brace Expansion:: Expansion of expressions within braces. +* Tilde Expansion:: Expansion of the ~ character. +* Shell Parameter Expansion:: How Bash expands variables to their values. +* Command Substitution:: Using the output of a command as an argument. +* Arithmetic Expansion:: How to use arithmetic in shell expansions. +* Process Substitution:: A way to write and read to and from a + command. +* Word Splitting:: How the results of expansion are split into separate + arguments. +* Filename Expansion:: A shorthand for specifying filenames matching patterns. +* Quote Removal:: How and when quote characters are removed from + words. + + The order of expansions is: brace expansion, tilde expansion, +parameter, 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: 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 `"$@"' (*note Special Parameters::) and `"${NAME[@]}"' +(*note Arrays::). + + After all expansions, `quote removal' (*note Quote Removal::) is +performed. + + +File: bashref.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell Expansions + +3.5.1 Brace Expansion +--------------------- + +Brace expansion is a mechanism by which arbitrary strings may be +generated. This mechanism is similar to FILENAME EXPANSION (*note +Filename Expansion::), but the file names generated need not exist. +Patterns to be brace expanded take the form of an optional PREAMBLE, +followed by either a series of comma-separated strings or a seqeunce +expression between a pair of braces, followed by an optional POSTSCRIPT. +The preamble is prefixed to each string contained within the braces, and +the postscript is then appended to each resulting string, expanding left +to right. + + Brace expansions may be nested. The results of each expanded string +are not sorted; left to right order is preserved. For example, + bash$ echo a{d,c,b}e + ade ace abe + + A sequence expression takes the form `{X..Y[..INCR]}', where X and Y +are either integers or single characters, and INCR, an optional +increment, is an integer. When integers are supplied, the expression +expands to each number between X and Y, inclusive. Supplied integers +may be prefixed with `0' to force each term to have the same width. +When either X or Y begins with a zero, the shell attempts to force all +generated terms to contain the same number of digits, zero-padding +where necessary. When characters are supplied, the expression expands +to each character lexicographically between X and Y, inclusive. Note +that both X and Y must be of the same type. When the increment is +supplied, it is used as the difference between each term. The default +increment is 1 or -1 as appropriate. + + Brace expansion is performed before any other expansions, and any +characters special to other expansions are preserved in the result. It +is strictly textual. Bash does not apply any syntactic interpretation +to the context of the expansion or the text between the braces. To +avoid conflicts with parameter expansion, the string `${' 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 `,' may be quoted with a backslash to prevent its being +considered part of a brace expression. To avoid conflicts with +parameter expansion, the string `${' is not considered eligible for +brace expansion. + + This construct is typically used as shorthand when the common prefix +of the strings to be generated is longer than in the above example: + mkdir /usr/local/src/bash/{old,new,dist,bugs} + or + chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} + + +File: bashref.info, Node: Tilde Expansion, Next: Shell Parameter Expansion, Prev: Brace Expansion, Up: Shell Expansions + +3.5.2 Tilde Expansion +--------------------- + +If a word begins with an unquoted tilde character (`~'), all of the +characters up to the first unquoted slash (or all characters, if there +is no unquoted slash) are considered a TILDE-PREFIX. If none of the +characters in the tilde-prefix are quoted, the characters in the +tilde-prefix following the tilde are treated as a possible LOGIN NAME. +If this login name is the null string, the tilde is replaced with the +value of the `HOME' shell variable. If `HOME' is unset, the home +directory of the user executing the shell is substituted instead. +Otherwise, the tilde-prefix is replaced with the home directory +associated with the specified login name. + + If the tilde-prefix is `~+', the value of the shell variable `PWD' +replaces the tilde-prefix. If the tilde-prefix is `~-', the value of +the shell variable `OLDPWD', if it is set, is substituted. + + If the characters following the tilde in the tilde-prefix consist of +a number N, optionally prefixed by a `+' or a `-', the tilde-prefix is +replaced with the corresponding element from the directory stack, as it +would be displayed by the `dirs' builtin invoked with the characters +following tilde in the tilde-prefix as an argument (*note The Directory +Stack::). If the tilde-prefix, sans the tilde, consists of a number +without a leading `+' or `-', `+' is assumed. + + If the login name is invalid, or the tilde expansion fails, the word +is left unchanged. + + Each variable assignment is checked for unquoted tilde-prefixes +immediately following a `:' or the first `='. In these cases, tilde +expansion is also performed. Consequently, one may use file names with +tildes in assignments to `PATH', `MAILPATH', and `CDPATH', and the +shell assigns the expanded value. + + The following table shows how Bash treats unquoted tilde-prefixes: + +`~' + The value of `$HOME' + +`~/foo' + `$HOME/foo' + +`~fred/foo' + The subdirectory `foo' of the home directory of the user `fred' + +`~+/foo' + `$PWD/foo' + +`~-/foo' + `${OLDPWD-'~-'}/foo' + +`~N' + The string that would be displayed by `dirs +N' + +`~+N' + The string that would be displayed by `dirs +N' + +`~-N' + The string that would be displayed by `dirs -N' + + + +File: bashref.info, Node: Shell Parameter Expansion, Next: Command Substitution, Prev: Tilde Expansion, Up: Shell Expansions + +3.5.3 Shell Parameter Expansion +------------------------------- + +The `$' character introduces parameter expansion, command substitution, +or arithmetic expansion. The parameter name or symbol to be expanded +may be enclosed in braces, which are optional but serve to protect the +variable to be expanded from characters immediately following it which +could be interpreted as part of the name. + + When braces are used, the matching ending brace is the first `}' not +escaped by a backslash or within a quoted string, and not within an +embedded arithmetic expansion, command substitution, or parameter +expansion. + + The basic form of parameter expansion is ${PARAMETER}. The value of +PARAMETER is substituted. The braces are required when PARAMETER is a +positional parameter with more than one digit, or when PARAMETER is +followed by a character that is not to be interpreted as part of its +name. + + If the first character of PARAMETER is an exclamation point (!), a +level of variable indirection is introduced. Bash uses the value of +the variable formed from the rest of 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 PARAMETER itself. +This is known as `indirect expansion'. The exceptions to this are the +expansions of ${!PREFIX*} and ${!NAME[@]} described below. The +exclamation point must immediately follow the left brace in order to +introduce indirection. + + In each of the cases below, WORD is subject to tilde expansion, +parameter expansion, command substitution, and arithmetic expansion. + + When not performing substring expansion, using the form described +below, Bash tests for a parameter that is unset or null. Omitting the +colon results in a test only for a parameter that is unset. Put +another way, if the colon is included, the operator tests for both +PARAMETER's existence and that its value is not null; if the colon is +omitted, the operator tests only for existence. + +`${PARAMETER:-WORD}' + If PARAMETER is unset or null, the expansion of WORD is + substituted. Otherwise, the value of PARAMETER is substituted. + +`${PARAMETER:=WORD}' + If PARAMETER is unset or null, the expansion of WORD is assigned + to PARAMETER. The value of PARAMETER is then substituted. + Positional parameters and special parameters may not be assigned to + in this way. + +`${PARAMETER:?WORD}' + If PARAMETER is null or unset, the expansion of WORD (or a message + to that effect if WORD is not present) is written to the standard + error and the shell, if it is not interactive, exits. Otherwise, + the value of PARAMETER is substituted. + +`${PARAMETER:+WORD}' + If PARAMETER is null or unset, nothing is substituted, otherwise + the expansion of WORD is substituted. + +`${PARAMETER:OFFSET}' +`${PARAMETER:OFFSET:LENGTH}' + Expands to up to LENGTH characters of PARAMETER starting at the + character specified by OFFSET. If LENGTH is omitted, expands to + the substring of PARAMETER starting at the character specified by + OFFSET. LENGTH and OFFSET are arithmetic expressions (*note Shell + Arithmetic::). This is referred to as Substring Expansion. + + LENGTH must evaluate to a number greater than or equal to zero. + If OFFSET evaluates to a number less than zero, the value is used + as an offset from the end of the value of PARAMETER. If PARAMETER + is `@', the result is LENGTH positional parameters beginning at + OFFSET. If PARAMETER is an indexed array name subscripted by `@' + or `*', the result is the LENGTH members of the array beginning + with `${PARAMETER[OFFSET]}'. A negative OFFSET is taken relative + to one greater than the maximum index of the specified array. + Substring expansion applied to an associative array produces + undefined results. + + Note that a negative offset must be separated from the colon by at + least one space to avoid being confused with the `:-' expansion. + Substring indexing is zero-based unless the positional parameters + are used, in which case the indexing starts at 1 by default. If + OFFSET is 0, and the positional parameters are used, `$@' is + prefixed to the list. + +`${!PREFIX*}' +`${!PREFIX@}' + Expands to the names of variables whose names begin with PREFIX, + separated by the first character of the `IFS' special variable. + When `@' is used and the expansion appears within double quotes, + each variable name expands to a separate word. + +`${!NAME[@]}' +`${!NAME[*]}' + If NAME is an array variable, expands to the list of array indices + (keys) assigned in NAME. If NAME is not an array, expands to 0 if + NAME is set and null otherwise. When `@' is used and the + expansion appears within double quotes, each key expands to a + separate word. + +`${#PARAMETER}' + The length in characters of the expanded value of PARAMETER is + substituted. If PARAMETER is `*' or `@', the value substituted is + the number of positional parameters. If PARAMETER is an array + name subscripted by `*' or `@', the value substituted is the + number of elements in the array. + +`${PARAMETER#WORD}' +`${PARAMETER##WORD}' + The WORD is expanded to produce a pattern just as in filename + expansion (*note Filename Expansion::). If the pattern matches + the beginning of the expanded value of PARAMETER, then the result + of the expansion is the expanded value of PARAMETER with the + shortest matching pattern (the `#' case) or the longest matching + pattern (the `##' case) deleted. If PARAMETER is `@' or `*', the + pattern removal operation is applied to each positional parameter + in turn, and the expansion is the resultant list. If PARAMETER is + an array variable subscripted with `@' or `*', the pattern removal + operation is applied to each member of the array in turn, and the + expansion is the resultant list. + +`${PARAMETER%WORD}' +`${PARAMETER%%WORD}' + The WORD is expanded to produce a pattern just as in filename + expansion. If the pattern matches a trailing portion of the + expanded value of PARAMETER, then the result of the expansion is + the value of PARAMETER with the shortest matching pattern (the `%' + case) or the longest matching pattern (the `%%' case) deleted. If + PARAMETER is `@' or `*', the pattern removal operation is applied + to each positional parameter in turn, and the expansion is the + resultant list. If PARAMETER is an array variable subscripted + with `@' or `*', the pattern removal operation is applied to each + member of the array in turn, and the expansion is the resultant + list. + +`${PARAMETER/PATTERN/STRING}' + The PATTERN is expanded to produce a pattern just as in filename + expansion. PARAMETER is expanded and the longest match of PATTERN + against its value is replaced with STRING. If PATTERN begins with + `/', all matches of PATTERN are replaced with STRING. Normally + only the first match is replaced. If PATTERN begins with `#', it + must match at the beginning of the expanded value of PARAMETER. + If PATTERN begins with `%', it must match at the end of the + expanded value of PARAMETER. If STRING is null, matches of + PATTERN are deleted and the `/' following PATTERN may be omitted. + If PARAMETER is `@' or `*', the substitution operation is applied + to each positional parameter in turn, and the expansion is the + resultant list. If PARAMETER is an array variable subscripted + with `@' or `*', the substitution operation is applied to each + member of the array in turn, and the expansion is the resultant + list. + +`${PARAMETER^PATTERN}' +`${PARAMETER^^PATTERN}' +`${PARAMETER,PATTERN}' +`${PARAMETER,,PATTERN}' + This expansion modifies the case of alphabetic characters in + PARAMETER. The PATTERN is expanded to produce a pattern just as in + filename expansion. The `^' operator converts lowercase letters + matching PATTERN to uppercase; the `,' operator converts matching + uppercase letters to lowercase. The `^^' and `,,' expansions + convert each matched character in the expanded value; the `^' and + `,' expansions match and convert only the first character in the + expanded value. If PATTERN is omitted, it is treated like a `?', + which matches every character. If PARAMETER is `@' or `*', the + case modification operation is applied to each positional + parameter in turn, and the expansion is the resultant list. If + PARAMETER is an array variable subscripted with `@' or `*', the + case modification operation is applied to each member of the array + in turn, and the expansion is the resultant list. + + + +File: bashref.info, Node: Command Substitution, Next: Arithmetic Expansion, Prev: Shell Parameter Expansion, Up: Shell Expansions + +3.5.4 Command Substitution +-------------------------- + +Command substitution allows the output of a command to replace the +command itself. Command substitution occurs when a command is enclosed +as follows: + $(COMMAND) + or + `COMMAND` + +Bash performs the expansion by executing COMMAND and replacing the +command substitution with the standard output of the command, with any +trailing newlines deleted. Embedded newlines are not deleted, but they +may be removed during word splitting. The command substitution `$(cat +FILE)' can be replaced by the equivalent but faster `$(< FILE)'. + + When the old-style backquote form of substitution is used, backslash +retains its literal meaning except when followed by `$', ``', or `\'. +The first backquote not preceded by a backslash terminates the command +substitution. When using the `$(COMMAND)' form, all characters between +the parentheses make up the command; none are treated specially. + + Command substitutions may be nested. To nest when using the +backquoted form, escape the inner backquotes with backslashes. + + If the substitution appears within double quotes, word splitting and +filename expansion are not performed on the results. + + +File: bashref.info, Node: Arithmetic Expansion, Next: Process Substitution, Prev: Command Substitution, Up: Shell Expansions + +3.5.5 Arithmetic Expansion +-------------------------- + +Arithmetic expansion allows the evaluation of an arithmetic expression +and the substitution of the result. The format for arithmetic +expansion is: + + $(( EXPRESSION )) + + The expression is treated as if it were within double quotes, but a +double quote inside the parentheses is not treated specially. All +tokens in the expression undergo parameter expansion, command +substitution, and quote removal. Arithmetic expansions may be nested. + + The evaluation is performed according to the rules listed below +(*note Shell Arithmetic::). If the expression is invalid, Bash prints +a message indicating failure to the standard error and no substitution +occurs. + + +File: bashref.info, Node: Process Substitution, Next: Word Splitting, Prev: Arithmetic Expansion, Up: Shell Expansions + +3.5.6 Process Substitution +-------------------------- + +Process substitution is supported on systems that support named pipes +(FIFOs) or the `/dev/fd' method of naming open files. It takes the +form of + <(LIST) + or + >(LIST) + The process LIST is run with its input or output connected to a FIFO +or some file in `/dev/fd'. The name of this file is passed as an +argument to the current command as the result of the expansion. If the +`>(LIST)' form is used, writing to the file will provide input for +LIST. If the `<(LIST)' form is used, the file passed as an argument +should be read to obtain the output of LIST. Note that no space may +appear between the `<' or `>' and the left parenthesis, otherwise the +construct would be interpreted as a redirection. + + When available, process substitution is performed simultaneously with +parameter and variable expansion, command substitution, and arithmetic +expansion. + + +File: bashref.info, Node: Word Splitting, Next: Filename Expansion, Prev: Process Substitution, Up: Shell Expansions + +3.5.7 Word Splitting +-------------------- + +The shell scans the results of parameter expansion, command +substitution, and arithmetic expansion that did not occur within double +quotes for word splitting. + + The shell treats each character of `$IFS' as a delimiter, and splits +the results of the other expansions into words on these characters. If +`IFS' is unset, or its value is exactly `', the +default, then sequences of ` ', `', and `' at the +beginning and end of the results of the previous expansions are +ignored, and any sequence of `IFS' characters not at the beginning or +end serves to delimit words. If `IFS' has a value other than the +default, then sequences of the whitespace characters `space' and `tab' +are ignored at the beginning and end of the word, as long as the +whitespace character is in the value of `IFS' (an `IFS' whitespace +character). Any character in `IFS' that is not `IFS' whitespace, along +with any adjacent `IFS' whitespace characters, delimits a field. A +sequence of `IFS' whitespace characters is also treated as a delimiter. +If the value of `IFS' is null, no word splitting occurs. + + Explicit null arguments (`""' or `''') are retained. 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. + + +File: bashref.info, Node: Filename Expansion, Next: Quote Removal, Prev: Word Splitting, Up: Shell Expansions + +3.5.8 Filename Expansion +------------------------ + +* Menu: + +* Pattern Matching:: How the shell matches patterns. + + After word splitting, unless the `-f' option has been set (*note The +Set Builtin::), Bash scans each word for the characters `*', `?', and +`['. If one of these characters appears, then the word is regarded as +a PATTERN, and replaced with an alphabetically sorted list of file +names matching the pattern. If no matching file names are found, and +the shell option `nullglob' is disabled, the word is left unchanged. +If the `nullglob' option is set, and no matches are found, the word is +removed. If the `failglob' shell option is set, and no matches are +found, an error message is printed and the command is not executed. If +the shell option `nocaseglob' is enabled, the match is performed +without regard to the case of alphabetic characters. + + When a pattern is used for filename expansion, the character `.' at +the start of a filename or immediately following a slash must be +matched explicitly, unless the shell option `dotglob' is set. When +matching a file name, the slash character must always be matched +explicitly. In other cases, the `.' character is not treated specially. + + See the description of `shopt' in *note The Shopt Builtin::, for a +description of the `nocaseglob', `nullglob', `failglob', and `dotglob' +options. + + The `GLOBIGNORE' shell variable may be used to restrict the set of +filenames matching a pattern. If `GLOBIGNORE' is set, each matching +filename that also matches one of the patterns in `GLOBIGNORE' is +removed from the list of matches. The filenames `.' and `..' are +always ignored when `GLOBIGNORE' is set and not null. However, setting +`GLOBIGNORE' to a non-null value has the effect of enabling the +`dotglob' shell option, so all other filenames beginning with a `.' +will match. To get the old behavior of ignoring filenames beginning +with a `.', make `.*' one of the patterns in `GLOBIGNORE'. The +`dotglob' option is disabled when `GLOBIGNORE' is unset. + + +File: bashref.info, Node: Pattern Matching, Up: Filename Expansion + +3.5.8.1 Pattern Matching +........................ + +Any character that appears in a pattern, other than the special pattern +characters described below, matches itself. The NUL character may not +occur in a pattern. A backslash escapes the following character; the +escaping backslash is discarded when matching. The special pattern +characters must be quoted if they are to be matched literally. + + The special pattern characters have the following meanings: +`*' + Matches any string, including the null string. When the + `globstar' shell option is enabled, and `*' is used in a filename + expansion context, two adjacent `*'s used as a single pattern will + match all files and zero or more directories and subdirectories. + If followed by a `/', two adjacent `*'s will match only + directories and subdirectories. + +`?' + Matches any single character. + +`[...]' + Matches any one of the enclosed characters. A pair of characters + separated by a hyphen denotes a RANGE EXPRESSION; any character + that sorts between those two characters, inclusive, using the + current locale's collating sequence and character set, is matched. + If the first character following the `[' is a `!' or a `^' then + any character not enclosed is matched. A `-' may be matched by + including it as the first or last character in the set. A `]' may + be matched by including it as the first character in the set. The + sorting order of characters in range expressions is determined by + the current locale and the value of the `LC_COLLATE' shell + variable, if set. + + For example, in the default C locale, `[a-dx-z]' is equivalent to + `[abcdxyz]'. Many locales sort characters in dictionary order, + and in these locales `[a-dx-z]' is typically not equivalent to + `[abcdxyz]'; it might be equivalent to `[aBbCcDdxXyYz]', for + example. To obtain the traditional interpretation of ranges in + bracket expressions, you can force the use of the C locale by + setting the `LC_COLLATE' or `LC_ALL' environment variable to the + value `C'. + + Within `[' and `]', CHARACTER CLASSES can be specified using the + syntax `[:'CLASS`:]', where CLASS is one of the following classes + defined in the POSIX standard: + alnum alpha ascii blank cntrl digit graph lower + print punct space upper word xdigit + A character class matches any character belonging to that class. + The `word' character class matches letters, digits, and the + character `_'. + + Within `[' and `]', an EQUIVALENCE CLASS can be specified using + the syntax `[='C`=]', which matches all characters with the same + collation weight (as defined by the current locale) as the + character C. + + Within `[' and `]', the syntax `[.'SYMBOL`.]' matches the + collating symbol SYMBOL. + + If the `extglob' shell option is enabled using the `shopt' builtin, +several extended pattern matching operators are recognized. In the +following description, a PATTERN-LIST is a list of one or more patterns +separated by a `|'. Composite patterns may be formed using one or more +of the following sub-patterns: + +`?(PATTERN-LIST)' + Matches zero or one occurrence of the given patterns. + +`*(PATTERN-LIST)' + Matches zero or more occurrences of the given patterns. + +`+(PATTERN-LIST)' + Matches one or more occurrences of the given patterns. + +`@(PATTERN-LIST)' + Matches one of the given patterns. + +`!(PATTERN-LIST)' + Matches anything except one of the given patterns. + + +File: bashref.info, Node: Quote Removal, Prev: Filename Expansion, Up: Shell Expansions + +3.5.9 Quote Removal +------------------- + +After the preceding expansions, all unquoted occurrences of the +characters `\', `'', and `"' that did not result from one of the above +expansions are removed. + + +File: bashref.info, Node: Redirections, Next: Executing Commands, Prev: Shell Expansions, Up: Basic Shell Features + +3.6 Redirections +================ + +Before a command is executed, its input and output may be REDIRECTED +using a special notation interpreted by the shell. Redirection 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. + + Each redirection that may be preceded by a file descriptor number +may instead be preceded by a word of the form {VARNAME}. In this case, +for each redirection operator except >&- and <&-, the shell will +allocate a file descriptor greater than 10 and assign it to {VARNAME}. +If >&- or <&- is preceded by {VARNAME}, the value of VARNAME defines +the file descriptor to close. + + In the following descriptions, if the file descriptor number is +omitted, and the first character of the redirection operator is `<', +the redirection refers to the standard input (file descriptor 0). If +the first character of the redirection operator is `>', the redirection +refers to the standard output (file descriptor 1). + + The word following the redirection operator in the following +descriptions, unless otherwise noted, is subjected to brace expansion, +tilde expansion, parameter expansion, command substitution, arithmetic +expansion, quote removal, filename expansion, and word splitting. If +it expands to more than one word, Bash reports an error. + + Note that the order of redirections is significant. For example, +the command + ls > DIRLIST 2>&1 + directs both standard output (file descriptor 1) and standard error +(file descriptor 2) to the file DIRLIST, while the command + ls 2>&1 > DIRLIST + directs only the standard output to file DIRLIST, because the +standard error was made a copy of the standard output before the +standard output was redirected to DIRLIST. + + Bash handles several filenames specially when they are used in +redirections, as described in the following table: + +`/dev/fd/FD' + If FD is a valid integer, file descriptor FD is duplicated. + +`/dev/stdin' + File descriptor 0 is duplicated. + +`/dev/stdout' + File descriptor 1 is duplicated. + +`/dev/stderr' + File descriptor 2 is duplicated. + +`/dev/tcp/HOST/PORT' + If HOST is a valid hostname or Internet address, and PORT is an + integer port number or service name, Bash attempts to open a TCP + connection to the corresponding socket. + +`/dev/udp/HOST/PORT' + If HOST is a valid hostname or Internet address, and PORT is an + integer port number or service name, Bash attempts to open a UDP + connection to the corresponding socket. + + + A failure to open or create a file causes the redirection to fail. + + Redirections using file descriptors greater than 9 should be used +with care, as they may conflict with file descriptors the shell uses +internally. + +3.6.1 Redirecting Input +----------------------- + +Redirection of input causes the file whose name results from the +expansion of WORD to be opened for reading on file descriptor `n', or +the standard input (file descriptor 0) if `n' is not specified. + + The general format for redirecting input is: + [N][|]WORD + + If the redirection operator is `>', and the `noclobber' option to +the `set' builtin has been enabled, the redirection will fail if the +file whose name results from the expansion of WORD exists and is a +regular file. If the redirection operator is `>|', or the redirection +operator is `>' and the `noclobber' option is not enabled, the +redirection is attempted even if the file named by WORD exists. + +3.6.3 Appending Redirected Output +--------------------------------- + +Redirection of output in this fashion causes the file whose name +results from the expansion of WORD to be opened for appending on file +descriptor N, or the standard output (file descriptor 1) if N is not +specified. If the file does not exist it is created. + + The general format for appending output is: + [N]>>WORD + +3.6.4 Redirecting Standard Output and Standard Error +---------------------------------------------------- + +This construct allows both the standard output (file descriptor 1) and +the standard error output (file descriptor 2) to be redirected to the +file whose name is the expansion of WORD. + + There are two formats for redirecting standard output and standard +error: + &>WORD + and + >&WORD + Of the two forms, the first is preferred. This is semantically +equivalent to + >WORD 2>&1 + +3.6.5 Appending Standard Output and Standard Error +-------------------------------------------------- + +This construct allows both the standard output (file descriptor 1) and +the standard error output (file descriptor 2) to be appended to the +file whose name is the expansion of WORD. + + The format for appending standard output and standard error is: + &>>WORD + This is semantically equivalent to + >>WORD 2>&1 + +3.6.6 Here Documents +-------------------- + +This type of redirection instructs the shell to read input from the +current source until a line containing only WORD (with no trailing +blanks) is seen. All of the lines read up to that point are then used +as the standard input for a command. + + The format of here-documents is: + <<[-]WORD + HERE-DOCUMENT + DELIMITER + + No parameter expansion, command substitution, arithmetic expansion, +or filename expansion is performed on WORD. If any characters in WORD +are quoted, the DELIMITER is the result of quote removal on WORD, and +the lines in the here-document are not expanded. If WORD is unquoted, +all lines of the here-document are subjected to parameter expansion, +command substitution, and arithmetic expansion. In the latter case, +the character sequence `\newline' is ignored, and `\' must be used to +quote the characters `\', `$', and ``'. + + If the redirection operator is `<<-', then all leading tab +characters are stripped from input lines and the line containing +DELIMITER. This allows here-documents within shell scripts to be +indented in a natural fashion. + +3.6.7 Here Strings +------------------ + +A variant of here documents, the format is: + <<< WORD + + The WORD is expanded and supplied to the command on its standard +input. + +3.6.8 Duplicating File Descriptors +---------------------------------- + +The redirection operator + [N]<&WORD + is used to duplicate input file descriptors. If WORD expands to one +or more digits, the file descriptor denoted by N is made to be a copy +of that file descriptor. If the digits in WORD do not specify a file +descriptor open for input, a redirection error occurs. If WORD +evaluates to `-', file descriptor N is closed. If N is not specified, +the standard input (file descriptor 0) is used. + + The operator + [N]>&WORD + is used similarly to duplicate output file descriptors. If N is not +specified, the standard output (file descriptor 1) is used. If the +digits in WORD do not specify a file descriptor open for output, a +redirection error occurs. As a special case, if N is omitted, and WORD +does not expand to one or more digits, the standard output and standard +error are redirected as described previously. + +3.6.9 Moving File Descriptors +----------------------------- + +The redirection operator + [N]<&DIGIT- + moves the file descriptor DIGIT to file descriptor N, or the +standard input (file descriptor 0) if N is not specified. DIGIT is +closed after being duplicated to N. + + Similarly, the redirection operator + [N]>&DIGIT- + moves the file descriptor DIGIT to file descriptor N, or the +standard output (file descriptor 1) if N is not specified. + +3.6.10 Opening File Descriptors for Reading and Writing +------------------------------------------------------- + +The redirection operator + [N]<>WORD + causes the file whose name is the expansion of WORD to be opened for +both reading and writing on file descriptor N, or on file descriptor 0 +if N is not specified. If the file does not exist, it is created. + + +File: bashref.info, Node: Executing Commands, Next: Shell Scripts, Prev: Redirections, Up: Basic Shell Features + +3.7 Executing Commands +====================== + +* Menu: + +* Simple Command Expansion:: How Bash expands simple commands before + executing them. +* Command Search and Execution:: How Bash finds commands and runs them. +* Command Execution Environment:: The environment in which Bash + executes commands that are not + shell builtins. +* Environment:: The environment given to a command. +* Exit Status:: The status returned by commands and how Bash + interprets it. +* Signals:: What happens when Bash or a command it runs + receives a signal. + + +File: bashref.info, Node: Simple Command Expansion, Next: Command Search and Execution, Up: Executing Commands + +3.7.1 Simple Command Expansion +------------------------------ + +When a simple command is executed, the shell performs the following +expansions, assignments, and redirections, from left to right. + + 1. The words that the parser has marked as variable assignments (those + preceding the command name) and redirections are saved for later + processing. + + 2. The words that are not variable assignments or redirections are + expanded (*note Shell Expansions::). If any words remain after + expansion, the first word is taken to be the name of the command + and the remaining words are the arguments. + + 3. Redirections are performed as described above (*note + Redirections::). + + 4. The text after the `=' in each variable assignment undergoes tilde + expansion, parameter expansion, command substitution, arithmetic + expansion, and quote removal before being assigned to the variable. + + If no command name results, the variable assignments affect the +current shell environment. Otherwise, the variables are added to the +environment of the executed command and do not affect the current shell +environment. If any of the assignments attempts to assign a value to a +readonly variable, an error occurs, and the command exits with a +non-zero status. + + If no command name results, redirections are performed, but do not +affect the current shell environment. A redirection error causes the +command to exit with a non-zero status. + + If there is a command name left after expansion, execution proceeds +as described below. Otherwise, the command exits. If one of the +expansions contained a command substitution, the exit status of the +command is the exit status of the last command substitution performed. +If there were no command substitutions, the command exits with a status +of zero. + + +File: bashref.info, Node: Command Search and Execution, Next: Command Execution Environment, Prev: Simple Command Expansion, Up: Executing Commands + +3.7.2 Command Search and Execution +---------------------------------- + +After a command has been split into words, if it results in a simple +command and an optional list of arguments, the following actions are +taken. + + 1. If the command name contains no slashes, the shell attempts to + locate it. If there exists a shell function by that name, that + function is invoked as described in *note Shell Functions::. + + 2. If the name does not match a function, the shell searches for it + in the list of shell builtins. If a match is found, that builtin + is invoked. + + 3. If the name is neither a shell function nor a builtin, and + contains no slashes, Bash searches each element of `$PATH' for a + directory containing an executable file by that name. Bash uses a + hash table to remember the full pathnames of executable files to + avoid multiple `PATH' searches (see the description of `hash' in + *note Bourne Shell Builtins::). A full search of the directories + in `$PATH' is performed only if the command is not found in the + hash table. If the search is unsuccessful, the shell searches for + a defined shell function named `command_not_found_handle'. If + that function exists, it is invoked with the original command and + the original command's arguments as its arguments, and the + function's exit status becomes the exit status of the shell. If + that function is not defined, the shell prints an error message + and returns an exit status of 127. + + 4. If the search is successful, or if the command name contains one + or more slashes, the shell executes the named program in a + separate execution environment. Argument 0 is set to the name + given, and the remaining arguments to the command are set to the + arguments supplied, if any. + + 5. If this execution fails because the file is not in executable + format, and the file is not a directory, it is assumed to be a + SHELL SCRIPT and the shell executes it as described in *note Shell + Scripts::. + + 6. If the command was not begun asynchronously, the shell waits for + the command to complete and collects its exit status. + + + +File: bashref.info, Node: Command Execution Environment, Next: Environment, Prev: Command Search and Execution, Up: Executing Commands + +3.7.3 Command Execution Environment +----------------------------------- + +The shell has an EXECUTION ENVIRONMENT, which consists of the following: + + * open files inherited by the shell at invocation, as modified by + redirections supplied to the `exec' builtin + + * the current working directory as set by `cd', `pushd', or `popd', + or inherited by the shell at invocation + + * the file creation mode mask as set by `umask' or inherited from + the shell's parent + + * current traps set by `trap' + + * shell parameters that are set by variable assignment or with `set' + or inherited from the shell's parent in the environment + + * shell functions defined during execution or inherited from the + shell's parent in the environment + + * options enabled at invocation (either by default or with + command-line arguments) or by `set' + + * options enabled by `shopt' (*note The Shopt Builtin::) + + * shell aliases defined with `alias' (*note Aliases::) + + * various process IDs, including those of background jobs (*note + Lists::), the value of `$$', and the value of `$PPID' + + + When a simple command other than a builtin or shell function is to +be executed, it is invoked in a separate execution environment that +consists of the following. Unless otherwise noted, the values are +inherited from the shell. + + * the shell's open files, plus any modifications and additions + specified by redirections to the command + + * the current working directory + + * the file creation mode mask + + * shell variables and functions marked for export, along with + variables exported for the command, passed in the environment + (*note Environment::) + + * traps caught by the shell are reset to the values inherited from + the shell's parent, and traps ignored by the shell are ignored + + + A command invoked in this separate environment cannot affect the +shell's execution environment. + + Command substitution, commands grouped with parentheses, and +asynchronous commands are invoked in a subshell environment that is a +duplicate of the shell environment, except that traps caught by the +shell are reset to the values that the shell inherited from its parent +at invocation. Builtin commands that are invoked as part of a pipeline +are also executed in a subshell environment. Changes made to the +subshell environment cannot affect the shell's execution environment. + + Subshells spawned to execute command substitutions inherit the value +of the `-e' option from the parent shell. When not in POSIX mode, Bash +clears the `-e' option in such subshells. + + If a command is followed by a `&' and job control is not active, the +default standard input for the command is the empty file `/dev/null'. +Otherwise, the invoked command inherits the file descriptors of the +calling shell as modified by redirections. + + +File: bashref.info, Node: Environment, Next: Exit Status, Prev: Command Execution Environment, Up: Executing Commands + +3.7.4 Environment +----------------- + +When a program is invoked it is given an array of strings called the +ENVIRONMENT. This is a list of name-value pairs, of the form +`name=value'. + + Bash provides several ways to manipulate the environment. On +invocation, the shell scans its own environment and creates a parameter +for each name found, automatically marking it for EXPORT to child +processes. Executed commands inherit the environment. The `export' +and `declare -x' commands allow parameters and functions to be added to +and deleted from the environment. If the value of a parameter in the +environment is modified, the new value becomes part of the environment, +replacing the old. The environment inherited by any executed command +consists of the shell's initial environment, whose values may be +modified in the shell, less any pairs removed by the `unset' and +`export -n' commands, plus any additions via the `export' and `declare +-x' commands. + + The environment for any simple command or function may be augmented +temporarily by prefixing it with parameter assignments, as described in +*note Shell Parameters::. These assignment statements affect only the +environment seen by that command. + + If the `-k' option is set (*note The Set Builtin::), then all +parameter assignments are placed in the environment for a command, not +just those that precede the command name. + + When Bash invokes an external command, the variable `$_' is set to +the full path name of the command and passed to that command in its +environment. + + +File: bashref.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: Executing Commands + +3.7.5 Exit Status +----------------- + +The exit status of an executed command is the value returned by the +WAITPID system call or equivalent function. Exit statuses fall between +0 and 255, though, as explained below, the shell may use values above +125 specially. Exit statuses from shell builtins and compound commands +are also limited to this range. Under certain circumstances, the shell +will use special values to indicate specific failure modes. + + For the shell's purposes, a command which exits with a zero exit +status has succeeded. A non-zero exit status indicates failure. This +seemingly counter-intuitive scheme is used so there is one well-defined +way to indicate success and a variety of ways to indicate various +failure modes. When a command terminates on a fatal signal whose +number is N, Bash uses the value 128+N as the exit status. + + If a command is not found, the child process created to execute it +returns a status of 127. If a command is found but is not executable, +the return status is 126. + + If a command fails because of an error during expansion or +redirection, the exit status is greater than zero. + + The exit status is used by the Bash conditional commands (*note +Conditional Constructs::) and some of the list constructs (*note +Lists::). + + All of the Bash builtins return an exit status of zero if they +succeed and a non-zero status on failure, so they may be used by the +conditional and list constructs. All builtins return an exit status of +2 to indicate incorrect usage. + + +File: bashref.info, Node: Signals, Prev: Exit Status, Up: Executing Commands + +3.7.6 Signals +------------- + +When Bash is interactive, in the absence of any traps, it ignores +`SIGTERM' (so that `kill 0' does not kill an interactive shell), and +`SIGINT' is caught and handled (so that the `wait' builtin is +interruptible). When Bash receives a `SIGINT', it breaks out of any +executing loops. In all cases, Bash ignores `SIGQUIT'. If job control +is in effect (*note Job Control::), Bash ignores `SIGTTIN', `SIGTTOU', +and `SIGTSTP'. + + Non-builtin commands started by Bash have signal handlers set to the +values inherited by the shell from its parent. When job control is not +in effect, asynchronous commands ignore `SIGINT' and `SIGQUIT' in +addition to these inherited handlers. Commands run as a result of +command substitution ignore the keyboard-generated job control signals +`SIGTTIN', `SIGTTOU', and `SIGTSTP'. + + The shell exits by default upon receipt of a `SIGHUP'. Before +exiting, an interactive shell resends the `SIGHUP' to all jobs, running +or stopped. Stopped jobs are sent `SIGCONT' to ensure that they receive +the `SIGHUP'. To prevent the shell from sending the `SIGHUP' signal to +a particular job, it should be removed from the jobs table with the +`disown' builtin (*note Job Control Builtins::) or marked to not +receive `SIGHUP' using `disown -h'. + + If the `huponexit' shell option has been set with `shopt' (*note +The Shopt Builtin::), Bash sends a `SIGHUP' to all jobs when an +interactive login shell exits. + + If Bash is waiting for a command to complete and receives a signal +for which a trap has been set, the trap will not be executed until the +command completes. When Bash is waiting for an asynchronous command +via the `wait' builtin, the reception of a signal for which a trap has +been set will cause the `wait' builtin to return immediately with an +exit status greater than 128, immediately after which the trap is +executed. + + +File: bashref.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features + +3.8 Shell Scripts +================= + +A shell script is a text file containing shell commands. When such a +file is used as the first non-option argument when invoking Bash, and +neither the `-c' nor `-s' option is supplied (*note Invoking Bash::), +Bash reads and executes commands from the file, then exits. This mode +of operation creates a non-interactive shell. The shell first searches +for the file in the current directory, and looks in the directories in +`$PATH' if not found there. + + When Bash runs a shell script, it sets the special parameter `0' to +the name of the file, rather than the name of the shell, and the +positional parameters are set to the remaining arguments, if any are +given. If no additional arguments are supplied, the positional +parameters are unset. + + A shell script may be made executable by using the `chmod' command +to turn on the execute bit. When Bash finds such a file while +searching the `$PATH' for a command, it spawns a subshell to execute +it. In other words, executing + filename ARGUMENTS + is equivalent to executing + bash filename ARGUMENTS + +if `filename' is an executable shell script. This subshell +reinitializes itself, so that the effect is as if a new shell had been +invoked to interpret the script, with the exception that the locations +of commands remembered by the parent (see the description of `hash' in +*note Bourne Shell Builtins::) are retained by the child. + + Most versions of Unix make this a part of the operating system's +command execution mechanism. If the first line of a script begins with +the two characters `#!', the remainder of the line specifies an +interpreter for the program. Thus, you can specify Bash, `awk', Perl, +or some other interpreter and write the rest of the script file in that +language. + + The arguments to the interpreter consist of a single optional +argument following the interpreter name on the first line of the script +file, followed by the name of the script file, followed by the rest of +the arguments. Bash will perform this action on operating systems that +do not handle it themselves. Note that some older versions of Unix +limit the interpreter name and argument to a maximum of 32 characters. + + Bash scripts often begin with `#! /bin/bash' (assuming that Bash has +been installed in `/bin'), since this ensures that Bash will be used to +interpret the script, even if it is executed under another shell. + + +File: bashref.info, Node: Shell Builtin Commands, Next: Shell Variables, Prev: Basic Shell Features, Up: Top + +4 Shell Builtin Commands +************************ + +* Menu: + +* Bourne Shell Builtins:: Builtin commands inherited from the Bourne + Shell. +* Bash Builtins:: Table of builtins specific to Bash. +* Modifying Shell Behavior:: Builtins to modify shell attributes and + optional behavior. +* Special Builtins:: Builtin commands classified specially by + POSIX. + + Builtin commands are contained within the shell itself. When the +name of a builtin command is used as the first word of a simple command +(*note Simple Commands::), the shell executes the command directly, +without invoking another program. Builtin commands are necessary to +implement functionality impossible or inconvenient to obtain with +separate utilities. + + This section briefly describes the builtins which Bash inherits from +the Bourne Shell, as well as the builtin commands which are unique to +or have been extended in Bash. + + Several builtin commands are described in other chapters: builtin +commands which provide the Bash interface to the job control facilities +(*note Job Control Builtins::), the directory stack (*note Directory +Stack Builtins::), the command history (*note Bash History Builtins::), +and the programmable completion facilities (*note Programmable +Completion Builtins::). + + Many of the builtins have been extended by POSIX or Bash. + + Unless otherwise noted, each builtin command documented as accepting +options preceded by `-' accepts `--' to signify the end of the options. +The `:', `true', `false', and `test' builtins do not accept options and +do not treat `--' specially. The `exit', `logout', `break', +`continue', `let', and `shift' builtins accept and process arguments +beginning with `-' without requiring `--'. Other builtins that accept +arguments but are not specified as accepting options interpret +arguments beginning with `-' as invalid options and require `--' to +prevent this interpretation. + + +File: bashref.info, Node: Bourne Shell Builtins, Next: Bash Builtins, Up: Shell Builtin Commands + +4.1 Bourne Shell Builtins +========================= + +The following shell builtin commands are inherited from the Bourne +Shell. These commands are implemented as specified by the POSIX +standard. + +`: (a colon)' + : [ARGUMENTS] + Do nothing beyond expanding ARGUMENTS and performing redirections. + The return status is zero. + +`. (a period)' + . FILENAME [ARGUMENTS] + Read and execute commands from the FILENAME argument in the + current shell context. If FILENAME does not contain a slash, the + `PATH' variable is used to find FILENAME. When Bash is not in + POSIX mode, the current directory is searched if FILENAME is not + found in `$PATH'. If any ARGUMENTS are supplied, they become the + positional parameters when FILENAME is executed. Otherwise the + positional parameters are unchanged. The return status is the + exit status of the last command executed, or zero if no commands + are executed. If FILENAME is not found, or cannot be read, the + return status is non-zero. This builtin is equivalent to `source'. + +`break' + break [N] + Exit from a `for', `while', `until', or `select' loop. If N is + supplied, the Nth enclosing loop is exited. N must be greater + than or equal to 1. The return status is zero unless N is not + greater than or equal to 1. + +`cd' + cd [-L|-P] [DIRECTORY] + Change the current working directory to DIRECTORY. If DIRECTORY + is not given, the value of the `HOME' shell variable is used. If + the shell variable `CDPATH' exists, it is used as a search path. + If DIRECTORY begins with a slash, `CDPATH' is not used. + + The `-P' option means to not follow symbolic links; symbolic links + are followed by default or with the `-L' option. If DIRECTORY is + `-', it is equivalent to `$OLDPWD'. + + If a non-empty directory name from `CDPATH' is used, or if `-' is + the first argument, and the directory change is successful, the + absolute pathname of the new working directory is written to the + standard output. + + The return status is zero if the directory is successfully changed, + non-zero otherwise. + +`continue' + continue [N] + Resume the next iteration of an enclosing `for', `while', `until', + or `select' loop. If N is supplied, the execution of the Nth + enclosing loop is resumed. N must be greater than or equal to 1. + The return status is zero unless N is not greater than or equal to + 1. + +`eval' + eval [ARGUMENTS] + The arguments are concatenated together into a single command, + which is then read and executed, and its exit status returned as + the exit status of `eval'. If there are no arguments or only + empty arguments, the return status is zero. + +`exec' + exec [-cl] [-a NAME] [COMMAND [ARGUMENTS]] + If COMMAND is supplied, it replaces the shell without creating a + new process. If the `-l' option is supplied, the shell places a + dash at the beginning of the zeroth argument passed to COMMAND. + This is what the `login' program does. The `-c' option causes + COMMAND to be executed with an empty environment. If `-a' is + supplied, the shell passes NAME as the zeroth argument to COMMAND. + If no COMMAND is specified, redirections may be used to affect the + current shell environment. If there are no redirection errors, the + return status is zero; otherwise the return status is non-zero. + +`exit' + exit [N] + Exit the shell, returning a status of N to the shell's parent. If + N is omitted, the exit status is that of the last command executed. + Any trap on `EXIT' is executed before the shell terminates. + +`export' + export [-fn] [-p] [NAME[=VALUE]] + Mark each NAME to be passed to child processes in the environment. + If the `-f' option is supplied, the NAMEs refer to shell + functions; otherwise the names refer to shell variables. The `-n' + option means to no longer mark each NAME for export. If no NAMES + are supplied, or if the `-p' option is given, a list of exported + names is displayed. The `-p' option displays output in a form + that may be reused as input. If a variable name is followed by + =VALUE, the value of the variable is set to VALUE. + + The return status is zero unless an invalid option is supplied, + one of the names is not a valid shell variable name, or `-f' is + supplied with a name that is not a shell function. + +`getopts' + getopts OPTSTRING NAME [ARGS] + `getopts' is used by shell scripts to parse positional parameters. + OPTSTRING contains the option characters to be recognized; if a + character is followed by a colon, the option is expected to have an + argument, which should be separated from it by white space. The + colon (`:') and question mark (`?') may not be used as option + characters. Each time it is invoked, `getopts' places the next + option in the shell variable NAME, initializing NAME if it does + not exist, and the index of the next argument to be processed into + the variable `OPTIND'. `OPTIND' is initialized to 1 each time the + shell or a shell script is invoked. When an option requires an + argument, `getopts' places that argument into the variable + `OPTARG'. The shell does not reset `OPTIND' automatically; it + must be manually reset between multiple calls to `getopts' within + the same shell invocation if a new set of parameters is to be used. + + When the end of options is encountered, `getopts' exits with a + return value greater than zero. `OPTIND' is set to the index of + the first non-option argument, and `name' is set to `?'. + + `getopts' normally parses the positional parameters, but if more + arguments are given in ARGS, `getopts' parses those instead. + + `getopts' can report errors in two ways. If the first character of + OPTSTRING is a colon, SILENT error reporting is used. In normal + operation diagnostic messages are printed when invalid options or + missing option arguments are encountered. If the variable `OPTERR' + is set to 0, no error messages will be displayed, even if the first + character of `optstring' is not a colon. + + If an invalid option is seen, `getopts' places `?' into NAME and, + if not silent, prints an error message and unsets `OPTARG'. If + `getopts' is silent, the option character found is placed in + `OPTARG' and no diagnostic message is printed. + + If a required argument is not found, and `getopts' is not silent, + a question mark (`?') is placed in NAME, `OPTARG' is unset, and a + diagnostic message is printed. If `getopts' is silent, then a + colon (`:') is placed in NAME and `OPTARG' is set to the option + character found. + +`hash' + hash [-r] [-p FILENAME] [-dt] [NAME] + Remember the full pathnames of commands specified as NAME + arguments, so they need not be searched for on subsequent + invocations. The commands are found by searching through the + directories listed in `$PATH'. The `-p' option inhibits the path + search, and FILENAME is used as the location of NAME. The `-r' + option causes the shell to forget all remembered locations. The + `-d' option causes the shell to forget the remembered location of + each NAME. If the `-t' option is supplied, the full pathname to + which each NAME corresponds is printed. If multiple NAME + arguments are supplied with `-t' the NAME is printed before the + hashed full pathname. The `-l' option causes output to be + displayed in a format that may be reused as input. If no + arguments are given, or if only `-l' is supplied, information + about remembered commands is printed. The return status is zero + unless a NAME is not found or an invalid option is supplied. + +`pwd' + pwd [-LP] + Print the absolute pathname of the current working directory. If + the `-P' option is supplied, the pathname printed will not contain + symbolic links. If the `-L' option is supplied, the pathname + printed may contain symbolic links. The return status is zero + unless an error is encountered while determining the name of the + current directory or an invalid option is supplied. + +`readonly' + readonly [-aApf] [NAME[=VALUE]] ... + Mark each NAME as readonly. The values of these names may not be + changed by subsequent assignment. If the `-f' option is supplied, + each NAME refers to a shell function. The `-a' option means each + NAME refers to an indexed array variable; the `-A' option means + each NAME refers to an associative array variable. If no NAME + arguments are given, or if the `-p' option is supplied, a list of + all readonly names is printed. The `-p' option causes output to + be displayed in a format that may be reused as input. If a + variable name is followed by =VALUE, the value of the variable is + set to VALUE. The return status is zero unless an invalid option + is supplied, one of the NAME arguments is not a valid shell + variable or function name, or the `-f' option is supplied with a + name that is not a shell function. + +`return' + return [N] + Cause a shell function to exit with the return value N. If 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 `.' (or + `source') builtin, returning either 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 `RETURN' trap is executed + before execution resumes after the function or script. The return + status is non-zero if `return' is used outside a function and not + during the execution of a script by `.' or `source'. + +`shift' + shift [N] + Shift the positional parameters to the left by N. The positional + parameters from N+1 ... `$#' are renamed to `$1' ... `$#'-N. + Parameters represented by the numbers `$#' to `$#'-N+1 are unset. + N must be a non-negative number less than or equal to `$#'. If N + is zero or greater than `$#', the positional parameters are not + changed. If N is not supplied, it is assumed to be 1. The return + status is zero unless N is greater than `$#' or less than zero, + non-zero otherwise. + +`test' +`[' + Evaluate a conditional expression EXPR. Each operator and operand + must be a separate argument. Expressions are composed of the + primaries described below in *note Bash Conditional Expressions::. + `test' does not accept any options, nor does it accept and ignore + an argument of `--' as signifying the end of options. + + When the `[' form is used, the last argument to the command must + be a `]'. + + Expressions may be combined using the following operators, listed + in decreasing order of precedence. The evaluation depends on the + number of arguments; see below. + + `! EXPR' + True if EXPR is false. + + `( EXPR )' + Returns the value of EXPR. This may be used to override the + normal precedence of operators. + + `EXPR1 -a EXPR2' + True if both EXPR1 and EXPR2 are true. + + `EXPR1 -o EXPR2' + True if either EXPR1 or EXPR2 is true. + + The `test' and `[' builtins evaluate conditional expressions using + a set of rules based on the number of arguments. + + 0 arguments + The expression is false. + + 1 argument + The expression is true if and only if the argument is not + null. + + 2 arguments + If the first argument is `!', the expression is true if and + only if the second argument is null. If the first argument + is one of the unary conditional operators (*note Bash + Conditional Expressions::), the expression is true if the + unary test is true. If the first argument is not a valid + unary operator, the expression is false. + + 3 arguments + If the second argument is one of the binary conditional + operators (*note Bash Conditional Expressions::), the result + of the expression is the result of the binary test using the + first and third arguments as operands. The `-a' and `-o' + operators are considered binary operators when there are + three arguments. If the first argument is `!', the value is + the negation of the two-argument test using the second and + third arguments. If the first argument is exactly `(' and + the third argument is exactly `)', the result is the + one-argument test of the second argument. Otherwise, the + expression is false. + + 4 arguments + If the first argument is `!', the result is the negation of + the three-argument expression composed of the remaining + arguments. Otherwise, the expression is parsed and evaluated + according to precedence using the rules listed above. + + 5 or more arguments + The expression is parsed and evaluated according to precedence + using the rules listed above. + +`times' + times + Print out the user and system times used by the shell and its + children. The return status is zero. + +`trap' + trap [-lp] [ARG] [SIGSPEC ...] + The commands in ARG are to be read and executed when the shell + receives signal SIGSPEC. If ARG is absent (and there is a single + SIGSPEC) or equal to `-', each specified signal's disposition is + reset to the value it had when the shell was started. If ARG is + the null string, then the signal specified by each SIGSPEC is + ignored by the shell and commands it invokes. If ARG is not + present and `-p' has been supplied, the shell displays the trap + commands associated with each SIGSPEC. If no arguments are + supplied, or only `-p' is given, `trap' prints the list of commands + associated with each signal number in a form that may be reused as + shell input. The `-l' option causes the shell to print a list of + signal names and their corresponding numbers. Each SIGSPEC is + either a signal name or a signal number. Signal names are case + insensitive and the `SIG' prefix is optional. + + If a SIGSPEC is `0' or `EXIT', ARG is executed when the shell + exits. If a SIGSPEC is `DEBUG', the command ARG is executed + before every simple command, `for' command, `case' command, + `select' command, every arithmetic `for' command, and before the + first command executes in a shell function. Refer to the + description of the `extdebug' option to the `shopt' builtin (*note + The Shopt Builtin::) for details of its effect on the `DEBUG' trap. + If a SIGSPEC is `RETURN', the command ARG is executed each time a + shell function or a script executed with the `.' or `source' + builtins finishes executing. + + If a SIGSPEC is `ERR', the command ARG is executed whenever a + simple command has a non-zero exit status, subject to the + following conditions. The `ERR' trap is not executed if the + failed command is part of the command list immediately following + an `until' or `while' keyword, part of the test following the `if' + or `elif' reserved words, part of a command executed in a `&&' or + `||' list, or if the command's return status is being inverted + using `!'. These are the same conditions obeyed by the `errexit' + option. + + Signals ignored upon entry to the shell cannot be trapped or reset. + Trapped signals that are not being ignored are reset to their + original values in a subshell or subshell environment when one is + created. + + The return status is zero unless a SIGSPEC does not specify a + valid signal. + +`umask' + umask [-p] [-S] [MODE] + Set the shell process's file creation mask to MODE. If MODE + begins with a digit, it is interpreted as an octal number; if not, + it is interpreted as a symbolic mode mask similar to that accepted + by the `chmod' command. If MODE is omitted, the current value of + the mask is printed. If the `-S' option is supplied without a + MODE argument, the mask is printed in a symbolic format. If the + `-p' option is supplied, and MODE is omitted, the output is in a + form that may be reused as input. The return status is zero if + the mode is successfully changed or if no MODE argument is + supplied, and non-zero otherwise. + + Note that when the mode is interpreted as an octal number, each + number of the umask is subtracted from `7'. Thus, a umask of `022' + results in permissions of `755'. + +`unset' + unset [-fv] [NAME] + Each variable or function NAME is removed. If no options are + supplied, or the `-v' option is given, each NAME refers to a shell + variable. If the `-f' option is given, the NAMEs 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 NAME is readonly. + + +File: bashref.info, Node: Bash Builtins, Next: Modifying Shell Behavior, Prev: Bourne Shell Builtins, Up: Shell Builtin Commands + +4.2 Bash Builtin Commands +========================= + +This section describes builtin commands which are unique to or have +been extended in Bash. Some of these commands are specified in the +POSIX standard. + +`alias' + alias [`-p'] [NAME[=VALUE] ...] + + Without arguments or with the `-p' option, `alias' prints the list + of aliases on the standard output in a form that allows them to be + reused as input. If arguments are supplied, an alias is defined + for each NAME whose VALUE is given. If no VALUE is given, the name + and value of the alias is printed. Aliases are described in *note + Aliases::. + +`bind' + bind [-m KEYMAP] [-lpsvPSV] + bind [-m KEYMAP] [-q FUNCTION] [-u FUNCTION] [-r KEYSEQ] + bind [-m KEYMAP] -f FILENAME + bind [-m KEYMAP] -x KEYSEQ:SHELL-COMMAND + bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME + bind READLINE-COMMAND + + Display current Readline (*note Command Line Editing::) key and + function bindings, bind a key sequence to a Readline function or + macro, or set a Readline variable. Each non-option argument is a + command as it would appear in a Readline initialization file + (*note Readline Init File::), but each binding or command must be + passed as a separate argument; e.g., + `"\C-x\C-r":re-read-init-file'. + + Options, if supplied, have the following meanings: + + `-m KEYMAP' + Use KEYMAP as the keymap to be affected by the subsequent + bindings. Acceptable KEYMAP names are `emacs', + `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move', + `vi-command', and `vi-insert'. `vi' is equivalent to + `vi-command'; `emacs' is equivalent to `emacs-standard'. + + `-l' + List the names of all Readline functions. + + `-p' + Display Readline function names and bindings in such a way + that they can be used as input or in a Readline + initialization file. + + `-P' + List current Readline function names and bindings. + + `-v' + Display Readline variable names and values in such a way that + they can be used as input or in a Readline initialization + file. + + `-V' + List current Readline variable names and values. + + `-s' + Display Readline key sequences bound to macros and the + strings they output in such a way that they can be used as + input or in a Readline initialization file. + + `-S' + Display Readline key sequences bound to macros and the + strings they output. + + `-f FILENAME' + Read key bindings from FILENAME. + + `-q FUNCTION' + Query about which keys invoke the named FUNCTION. + + `-u FUNCTION' + Unbind all keys bound to the named FUNCTION. + + `-r KEYSEQ' + Remove any current binding for KEYSEQ. + + `-x KEYSEQ:SHELL-COMMAND' + Cause SHELL-COMMAND to be executed whenever KEYSEQ is entered. + When SHELL-COMMAND is executed, the shell sets the + `READLINE_LINE' variable to the contents of the Readline line + buffer and the `READLINE_POINT' variable to the current + location of the insertion point. If the executed command + changes the value of `READLINE_LINE' or `READLINE_POINT', + those new values will be reflected in the editing state. + + The return status is zero unless an invalid option is supplied or + an error occurs. + +`builtin' + builtin [SHELL-BUILTIN [ARGS]] + Run a shell builtin, passing it ARGS, and return its exit status. + This is useful when defining a shell function with the same name + as a shell builtin, retaining the functionality of the builtin + within the function. The return status is non-zero if + SHELL-BUILTIN is not a shell builtin command. + +`caller' + caller [EXPR] + Returns the context of any active subroutine call (a shell + function or a script executed with the `.' or `source' builtins). + + Without EXPR, `caller' displays the line number and source + filename of the current subroutine call. If a non-negative + integer is supplied as EXPR, `caller' displays the line number, + subroutine name, and source file corresponding to that position in + the current execution call stack. This extra information may be + used, for example, to print a stack trace. The current frame is + frame 0. + + The return value is 0 unless the shell is not executing a + subroutine call or EXPR does not correspond to a valid position in + the call stack. + +`command' + command [-pVv] COMMAND [ARGUMENTS ...] + Runs COMMAND with ARGUMENTS ignoring any shell function named + COMMAND. Only shell builtin commands or commands found by + searching the `PATH' are executed. If there is a shell function + named `ls', running `command ls' within the function will execute + the external command `ls' instead of calling the function + recursively. The `-p' option means to use a default value for + `PATH' that is guaranteed to find all of the standard utilities. + The return status in this case is 127 if COMMAND cannot be found + or an error occurred, and the exit status of COMMAND otherwise. + + If either the `-V' or `-v' option is supplied, a description of + COMMAND is printed. The `-v' option causes a single word + indicating the command or file name used to invoke COMMAND to be + displayed; the `-V' option produces a more verbose description. + In this case, the return status is zero if COMMAND is found, and + non-zero if not. + +`declare' + declare [-aAfFilrtux] [-p] [NAME[=VALUE] ...] + + Declare variables and give them attributes. If no NAMEs are + given, then display the values of variables instead. + + The `-p' option will display the attributes and values of each + NAME. When `-p' is used with NAME arguments, additional options + are ignored. + + When `-p' is supplied without NAME arguments, `declare' will + display the attributes and values of all variables having the + attributes specified by the additional options. If no other + options are supplied with `-p', `declare' will display the + attributes and values of all shell variables. The `-f' option + will restrict the display to shell functions. + + The `-F' option inhibits the display of function definitions; only + the function name and attributes are printed. If the `extdebug' + shell option is enabled using `shopt' (*note The Shopt Builtin::), + the source file name and line number where the function is defined + are displayed as well. `-F' implies `-f'. The following options + can be used to restrict output to variables with the specified + attributes or to give variables attributes: + + `-a' + Each NAME is an indexed array variable (*note Arrays::). + + `-A' + Each NAME is an associative array variable (*note Arrays::). + + `-f' + Use function names only. + + `-i' + The variable is to be treated as an integer; arithmetic + evaluation (*note Shell Arithmetic::) is performed when the + variable is assigned a value. + + `-l' + When the variable is assigned a value, all upper-case + characters are converted to lower-case. The upper-case + attribute is disabled. + + `-r' + Make NAMEs readonly. These names cannot then be assigned + values by subsequent assignment statements or unset. + + `-t' + Give each NAME the `trace' attribute. Traced functions + inherit the `DEBUG' and `RETURN' traps from the calling shell. + The trace attribute has no special meaning for variables. + + `-u' + When the variable is assigned a value, all lower-case + characters are converted to upper-case. The lower-case + attribute is disabled. + + `-x' + Mark each NAME for export to subsequent commands via the + environment. + + Using `+' instead of `-' turns off the attribute instead, with the + exceptions that `+a' may not be used to destroy an array variable + and `+r' will not remove the readonly attribute. When used in a + function, `declare' makes each NAME local, as with the `local' + command. If a variable name is followed by =VALUE, the value of + the variable is set to VALUE. + + The return status is zero unless an invalid option is encountered, + an attempt is made to define a function using `-f foo=bar', an + attempt is made to assign a value to a readonly variable, an + attempt is made to assign a value to an array variable without + using the compound assignment syntax (*note Arrays::), one of the + NAMES is not a valid shell variable name, an attempt is made to + turn off readonly status for a readonly variable, an attempt is + made to turn off array status for an array variable, or an attempt + is made to display a non-existent function with `-f'. + +`echo' + echo [-neE] [ARG ...] + Output the ARGs, separated by spaces, terminated with a newline. + The return status is always 0. If `-n' is specified, the trailing + newline is suppressed. If the `-e' option is given, + interpretation of the following backslash-escaped characters is + enabled. The `-E' option disables the interpretation of these + escape characters, even on systems where they are interpreted by + default. The `xpg_echo' shell option may be used to dynamically + determine whether or not `echo' expands these escape characters by + default. `echo' does not interpret `--' to mean the end of + options. + + `echo' interprets the following escape sequences: + `\a' + alert (bell) + + `\b' + backspace + + `\c' + suppress further output + + `\e' + escape + + `\f' + form feed + + `\n' + new line + + `\r' + carriage return + + `\t' + horizontal tab + + `\v' + vertical tab + + `\\' + backslash + + `\0NNN' + the eight-bit character whose value is the octal value NNN + (zero to three octal digits) + + `\xHH' + the eight-bit character whose value is the hexadecimal value + HH (one or two hex digits) + +`enable' + enable [-a] [-dnps] [-f FILENAME] [NAME ...] + Enable and disable builtin shell commands. Disabling a builtin + allows a disk command which has the same name as a shell builtin + to be executed without specifying a full pathname, even though the + shell normally searches for builtins before disk commands. If + `-n' is used, the NAMEs become disabled. Otherwise NAMEs are + enabled. For example, to use the `test' binary found via `$PATH' + instead of the shell builtin version, type `enable -n test'. + + If the `-p' option is supplied, or no NAME arguments appear, a + list of shell builtins is printed. With no other arguments, the + list consists of all enabled shell builtins. The `-a' option + means to list each builtin with an indication of whether or not it + is enabled. + + The `-f' option means to load the new builtin command NAME from + shared object FILENAME, on systems that support dynamic loading. + The `-d' option will delete a builtin loaded with `-f'. + + If there are no options, a list of the shell builtins is displayed. + The `-s' option restricts `enable' to the POSIX special builtins. + If `-s' is used with `-f', the new builtin becomes a special + builtin (*note Special Builtins::). + + The return status is zero unless a NAME is not a shell builtin or + there is an error loading a new builtin from a shared object. + +`help' + help [-dms] [PATTERN] + Display helpful information about builtin commands. If PATTERN is + specified, `help' gives detailed help on all commands matching + PATTERN, otherwise a list of the builtins is printed. + + Options, if supplied, have the following meanings: + + `-d' + Display a short description of each PATTERN + + `-m' + Display the description of each PATTERN in a manpage-like + format + + `-s' + Display only a short usage synopsis for each PATTERN + + The return status is zero unless no command matches PATTERN. + +`let' + let EXPRESSION [EXPRESSION] + The `let' builtin allows arithmetic to be performed on shell + variables. Each EXPRESSION is evaluated according to the rules + given below in *note Shell Arithmetic::. If the last EXPRESSION + evaluates to 0, `let' returns 1; otherwise 0 is returned. + +`local' + local [OPTION] NAME[=VALUE] ... + For each argument, a local variable named NAME is created, and + assigned VALUE. The OPTION can be any of the options accepted by + `declare'. `local' can only be used within a function; it makes + the variable NAME have a visible scope restricted to that function + and its children. The return status is zero unless `local' is + used outside a function, an invalid NAME is supplied, or NAME is a + readonly variable. + +`logout' + logout [N] + Exit a login shell, returning a status of N to the shell's parent. + +`mapfile' + mapfile [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] [-u FD] [ + -C CALLBACK] [-c QUANTUM] [ARRAY] + Read lines from the standard input into the indexed array variable + ARRAY, or from file descriptor FD if the `-u' option is supplied. + The variable `MAPFILE' is the default ARRAY. Options, if + supplied, have the following meanings: + `-n' + Copy at most COUNT lines. If COUNT is 0, all lines are + copied. + + `-O' + Begin assigning to ARRAY at index ORIGIN. The default index + is 0. + + `-s' + Discard the first COUNT lines read. + + `-t' + Remove a trailing newline from each line read. + + `-u' + Read lines from file descriptor FD instead of the standard + input. + + `-C' + Evaluate CALLBACK each time QUANTUMP lines are read. The + `-c' option specifies QUANTUM. + + `-c' + Specify the number of lines read between each call to + CALLBACK. + + If `-C' is specified without `-c', the default quantum is 5000. + When CALLBACK is evaluated, it is supplied the index of the next + array element to be assigned as an additional argument. CALLBACK + is evaluated after the line is read but before the array element + is assigned. + + If not supplied with an explicit origin, `mapfile' will clear ARRAY + before assigning to it. + + `mapfile' returns successfully unless an invalid option or option + argument is supplied, ARRAY is invalid or unassignable, or ARRAY + is not an indexed array. + +`printf' + printf [-v VAR] FORMAT [ARGUMENTS] + Write the formatted ARGUMENTS to the standard output under the + control of the FORMAT. The FORMAT is a character string which + contains three types of objects: plain characters, which are + simply copied to standard output, character escape sequences, + which are converted and copied to the standard output, and format + specifications, each of which causes printing of the next + successive ARGUMENT. In addition to the standard `printf(1)' + formats, `%b' causes `printf' to expand backslash escape sequences + in the corresponding ARGUMENT, (except that `\c' terminates + output, backslashes in `\'', `\"', and `\?' are not removed, and + octal escapes beginning with `\0' may contain up to four digits), + and `%q' causes `printf' to output the corresponding ARGUMENT in a + format that can be reused as shell input. + + The `-v' option causes the output to be assigned to the variable + VAR rather than being printed to the standard output. + + The FORMAT is reused as necessary to consume all of the ARGUMENTS. + If the FORMAT requires more ARGUMENTS than are supplied, the extra + format specifications behave as if a zero value or null string, as + appropriate, had been supplied. The return value is zero on + success, non-zero on failure. + +`read' + read [-ers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS] [-N NCHARS] [-p PROMPT] [-t TIMEOUT] [-u FD] [NAME ...] + One line is read from the standard input, or from the file + descriptor FD supplied as an argument to the `-u' option, and the + first word is assigned to the first NAME, the second word to the + second NAME, and so on, with leftover words and their intervening + separators assigned to the last NAME. If there are fewer words + read from the input stream than names, the remaining names are + assigned empty values. The characters in the value of the `IFS' + variable are used to split the line into words. The backslash + character `\' may be used to remove any special meaning for the + next character read and for line continuation. If no names are + supplied, the line read is assigned to the variable `REPLY'. The + return code is zero, unless end-of-file is encountered, `read' + times out (in which case the return code is greater than 128), or + an invalid file descriptor is supplied as the argument to `-u'. + + Options, if supplied, have the following meanings: + + `-a ANAME' + The words are assigned to sequential indices of the array + variable ANAME, starting at 0. All elements are removed from + ANAME before the assignment. Other NAME arguments are + ignored. + + `-d DELIM' + The first character of DELIM is used to terminate the input + line, rather than newline. + + `-e' + Readline (*note Command Line Editing::) is used to obtain the + line. Readline uses the current (or default, if line editing + was not previously active) editing settings. + + `-i TEXT' + If Readline is being used to read the line, TEXT is placed + into the editing buffer before editing begins. + + `-n NCHARS' + `read' returns after reading NCHARS characters rather than + waiting for a complete line of input, but honor a delimiter + if fewer than NCHARS characters are read before the delimiter. + + `-N NCHARS' + `read' returns after reading exactly NCHARS characters rather + than waiting for a complete line of input, unless EOF is + encountered or `read' times out. Delimiter characters + encountered in the input are not treated specially and do not + cause `read' to return until NCHARS characters are read. + + `-p PROMPT' + Display PROMPT, without a trailing newline, before attempting + to read any input. The prompt is displayed only if input is + coming from a terminal. + + `-r' + If this option is given, backslash does not act as an escape + character. The backslash is considered to be part of the + line. In particular, a backslash-newline pair may not be + used as a line continuation. + + `-s' + Silent mode. If input is coming from a terminal, characters + are not echoed. + + `-t TIMEOUT' + Cause `read' to time out and return failure if a complete + line of input is not read within TIMEOUT seconds. TIMEOUT + may be a decimal number with a fractional portion following + the decimal point. This option is only effective if `read' + is reading input from a terminal, pipe, or other special + file; it has no effect when reading from regular files. If + TIMEOUT is 0, `read' returns success if input is available on + the specified file descriptor, failure otherwise. The exit + status is greater than 128 if the timeout is exceeded. + + `-u FD' + Read input from file descriptor FD. + + +`readarray' + readarray [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] [-u FD] [ + -C CALLBACK] [-c QUANTUM] [ARRAY] + Read lines from the standard input into the indexed array variable + ARRAY, or from file descriptor FD if the `-u' option is supplied. + + A synonym for `mapfile'. + +`source' + source FILENAME + A synonym for `.' (*note Bourne Shell Builtins::). + +`type' + type [-afptP] [NAME ...] + For each NAME, indicate how it would be interpreted if used as a + command name. + + If the `-t' option is used, `type' prints a single word which is + one of `alias', `function', `builtin', `file' or `keyword', if + NAME is an alias, shell function, shell builtin, disk file, or + shell reserved word, respectively. If the NAME is not found, then + nothing is printed, and `type' returns a failure status. + + If the `-p' option is used, `type' either returns the name of the + disk file that would be executed, or nothing if `-t' would not + return `file'. + + The `-P' option forces a path search for each NAME, even if `-t' + would not return `file'. + + If a command is hashed, `-p' and `-P' print the hashed value, not + necessarily the file that appears first in `$PATH'. + + If the `-a' option is used, `type' returns all of the places that + contain an executable named FILE. This includes aliases and + functions, if and only if the `-p' option is not also used. + + If the `-f' option is used, `type' does not attempt to find shell + functions, as with the `command' builtin. + + The return status is zero if all of the NAMES are found, non-zero + if any are not found. + +`typeset' + typeset [-afFrxi] [-p] [NAME[=VALUE] ...] + The `typeset' command is supplied for compatibility with the Korn + shell; however, it has been deprecated in favor of the `declare' + builtin command. + +`ulimit' + ulimit [-abcdefilmnpqrstuvxHST] [LIMIT] + `ulimit' provides control over the resources available to processes + started by the shell, on systems that allow such control. If an + option is given, it is interpreted as follows: + `-S' + Change and report the soft limit associated with a resource. + + `-H' + Change and report the hard limit associated with a resource. + + `-a' + All current limits are reported. + + `-b' + The maximum socket buffer size. + + `-c' + The maximum size of core files created. + + `-d' + The maximum size of a process's data segment. + + `-e' + The maximum scheduling priority ("nice"). + + `-f' + The maximum size of files written by the shell and its + children. + + `-i' + The maximum number of pending signals. + + `-l' + The maximum size that may be locked into memory. + + `-m' + The maximum resident set size (many systems do not honor this + limit). + + `-n' + The maximum number of open file descriptors (most systems do + not allow this value to be set). + + `-p' + The pipe buffer size. + + `-q' + The maximum number of bytes in POSIX message queues. + + `-r' + The maximum real-time scheduling priority. + + `-s' + The maximum stack size. + + `-t' + The maximum amount of cpu time in seconds. + + `-u' + The maximum number of processes available to a single user. + + `-v' + The maximum amount of virtual memory available to the process. + + `-x' + The maximum number of file locks. + + `-T' + The maximum number of threads. + + + If LIMIT is given, it is the new value of the specified resource; + the special LIMIT values `hard', `soft', and `unlimited' stand for + the current hard limit, the current soft limit, and no limit, + respectively. A hard limit cannot be increased by a non-root user + once it is set; a soft limit may be increased up to the value of + the hard limit. Otherwise, the current value of the soft limit + for the specified resource is printed, unless the `-H' option is + supplied. When setting new limits, if neither `-H' nor `-S' is + supplied, both the hard and soft limits are set. If no option is + given, then `-f' is assumed. Values are in 1024-byte increments, + except for `-t', which is in seconds, `-p', which is in units of + 512-byte blocks, and `-n' and `-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. + +`unalias' + unalias [-a] [NAME ... ] + + Remove each NAME from the list of aliases. If `-a' is supplied, + all aliases are removed. Aliases are described in *note Aliases::. + + + +File: bashref.info, Node: Modifying Shell Behavior, Next: Special Builtins, Prev: Bash Builtins, Up: Shell Builtin Commands + +4.3 Modifying Shell Behavior +============================ + +* Menu: + +* The Set Builtin:: Change the values of shell attributes and + positional parameters. +* The Shopt Builtin:: Modify shell optional behavior. + + +File: bashref.info, Node: The Set Builtin, Next: The Shopt Builtin, Up: Modifying Shell Behavior + +4.3.1 The Set Builtin +--------------------- + +This builtin is so complicated that it deserves its own section. `set' +allows you to change the values of shell options and set the positional +parameters, or to display the names and values of shell variables. + +`set' + set [--abefhkmnptuvxBCEHPT] [-o OPTION] [ARGUMENT ...] + set [+abefhkmnptuvxBCEHPT] [+o OPTION] [ARGUMENT ...] + + If no options or arguments are supplied, `set' displays the names + and values of all shell variables and functions, sorted according + to the current locale, in a format that may be reused as input for + setting or resetting the currently-set variables. Read-only + variables cannot be reset. In POSIX mode, only shell variables + are listed. + + When options are supplied, they set or unset shell attributes. + Options, if specified, have the following meanings: + + `-a' + Mark variables and function which are modified or created for + export to the environment of subsequent commands. + + `-b' + Cause the status of terminated background jobs to be reported + immediately, rather than before printing the next primary + prompt. + + `-e' + Exit immediately if a pipeline (*note Pipelines::), which may + consist of a single simple command (*note Simple Commands::), + a subshell command enclosed in parentheses (*note Command + Grouping::), or one of the commands executed as part of a + command list enclosed by braces (*note Command Grouping::) + returns a non-zero status. The shell does not exit if the + command that fails is part of the command list immediately + following a `while' or `until' keyword, part of the test in + an `if' statement, part of any command executed in a `&&' or + `||' list except the command following the final `&&' or `||', + any command in a pipeline but the last, or if the command's + return status is being inverted with `!'. A trap on `ERR', + if set, is executed before the shell exits. + + This option applies to the shell environment and each + subshell environment separately (*note Command Execution + Environment::), and may cause subshells to exit before + executing all the commands in the subshell. + + `-f' + Disable filename expansion (globbing). + + `-h' + Locate and remember (hash) commands as they are looked up for + execution. This option is enabled by default. + + `-k' + All arguments in the form of assignment statements are placed + in the environment for a command, not just those that precede + the command name. + + `-m' + Job control is enabled (*note Job Control::). + + `-n' + Read commands but do not execute them; this may be used to + check a script for syntax errors. This option is ignored by + interactive shells. + + `-o OPTION-NAME' + Set the option corresponding to OPTION-NAME: + + `allexport' + Same as `-a'. + + `braceexpand' + Same as `-B'. + + `emacs' + Use an `emacs'-style line editing interface (*note + Command Line Editing::). This also affects the editing + interface used for `read -e'. + + `errexit' + Same as `-e'. + + `errtrace' + Same as `-E'. + + `functrace' + Same as `-T'. + + `hashall' + Same as `-h'. + + `histexpand' + Same as `-H'. + + `history' + Enable command history, as described in *note Bash + History Facilities::. This option is on by default in + interactive shells. + + `ignoreeof' + An interactive shell will not exit upon reading EOF. + + `keyword' + Same as `-k'. + + `monitor' + Same as `-m'. + + `noclobber' + Same as `-C'. + + `noexec' + Same as `-n'. + + `noglob' + Same as `-f'. + + `nolog' + Currently ignored. + + `notify' + Same as `-b'. + + `nounset' + Same as `-u'. + + `onecmd' + Same as `-t'. + + `physical' + Same as `-P'. + + `pipefail' + If set, the return value of a pipeline is the value of + the last (rightmost) command to exit with a non-zero + status, or zero if all commands in the pipeline exit + successfully. This option is disabled by default. + + `posix' + Change the behavior of Bash where the default operation + differs from the POSIX standard to match the standard + (*note Bash POSIX Mode::). This is intended to make + Bash behave as a strict superset of that standard. + + `privileged' + Same as `-p'. + + `verbose' + Same as `-v'. + + `vi' + Use a `vi'-style line editing interface. This also + affects the editing interface used for `read -e'. + + `xtrace' + Same as `-x'. + + `-p' + Turn on privileged mode. In this mode, the `$BASH_ENV' and + `$ENV' files are not processed, shell functions are not + inherited from the environment, and the `SHELLOPTS', + `BASHOPTS', `CDPATH' and `GLOBIGNORE' variables, if they + appear in the environment, are ignored. If the shell is + started with the effective user (group) id not equal to the + real user (group) id, and the `-p' option is not supplied, + these actions are taken and the effective user id is set to + the real user id. If the `-p' option is supplied at startup, + the effective user id is not reset. Turning this option off + causes the effective user and group ids to be set to the real + user and group ids. + + `-t' + Exit after reading and executing one command. + + `-u' + Treat unset variables and parameters other than the special + parameters `@' or `*' as an error when performing parameter + expansion. An error message will be written to the standard + error, and a non-interactive shell will exit. + + `-v' + Print shell input lines as they are read. + + `-x' + Print a trace of simple commands, `for' commands, `case' + commands, `select' commands, and arithmetic `for' commands + and their arguments or associated word lists after they are + expanded and before they are executed. The value of the `PS4' + variable is expanded and the resultant value is printed before + the command and its expanded arguments. + + `-B' + The shell will perform brace expansion (*note Brace + Expansion::). This option is on by default. + + `-C' + Prevent output redirection using `>', `>&', and `<>' from + overwriting existing files. + + `-E' + If set, any trap on `ERR' is inherited by shell functions, + command substitutions, and commands executed in a subshell + environment. The `ERR' trap is normally not inherited in + such cases. + + `-H' + Enable `!' style history substitution (*note History + Interaction::). This option is on by default for interactive + shells. + + `-P' + If set, do not follow symbolic links when performing commands + such as `cd' which change the current directory. The + physical directory is used instead. By default, Bash follows + the logical chain of directories when performing commands + which change the current directory. + + For example, if `/usr/sys' is a symbolic link to + `/usr/local/sys' then: + $ cd /usr/sys; echo $PWD + /usr/sys + $ cd ..; pwd + /usr + + If `set -P' is on, then: + $ cd /usr/sys; echo $PWD + /usr/local/sys + $ cd ..; pwd + /usr/local + + `-T' + If set, any trap on `DEBUG' and `RETURN' are inherited by + shell functions, command substitutions, and commands executed + in a subshell environment. The `DEBUG' and `RETURN' traps + are normally not inherited in such cases. + + `--' + If no arguments follow this option, then the positional + parameters are unset. Otherwise, the positional parameters + are set to the ARGUMENTS, even if some of them begin with a + `-'. + + `-' + Signal the end of options, cause all remaining ARGUMENTS to + be assigned to the positional parameters. The `-x' and `-v' + options are turned off. If there are no arguments, the + positional parameters remain unchanged. + + Using `+' rather than `-' causes these options to be turned off. + The options can also be used upon invocation of the shell. The + current set of options may be found in `$-'. + + The remaining N ARGUMENTS are positional parameters and are + assigned, in order, to `$1', `$2', ... `$N'. The special + parameter `#' is set to N. + + The return status is always zero unless an invalid option is + supplied. + + +File: bashref.info, Node: The Shopt Builtin, Prev: The Set Builtin, Up: Modifying Shell Behavior + +4.3.2 The Shopt Builtin +----------------------- + +This builtin allows you to change additional shell optional behavior. + +`shopt' + shopt [-pqsu] [-o] [OPTNAME ...] + Toggle the values of variables controlling optional shell behavior. + With no options, or with the `-p' option, a list of all settable + options is displayed, with an indication of whether or not each is + set. The `-p' option causes output to be displayed in a form that + may be reused as input. Other options have the following meanings: + + `-s' + Enable (set) each OPTNAME. + + `-u' + Disable (unset) each OPTNAME. + + `-q' + Suppresses normal output; the return status indicates whether + the OPTNAME is set or unset. If multiple OPTNAME arguments + are given with `-q', the return status is zero if all + OPTNAMES are enabled; non-zero otherwise. + + `-o' + Restricts the values of OPTNAME to be those defined for the + `-o' option to the `set' builtin (*note The Set Builtin::). + + If either `-s' or `-u' is used with no OPTNAME arguments, the + display is limited to those options which are set or unset, + respectively. + + Unless otherwise noted, the `shopt' options are disabled (off) by + default. + + The return status when listing options is zero if all OPTNAMES are + enabled, non-zero otherwise. When setting or unsetting options, + the return status is zero unless an OPTNAME is not a valid shell + option. + + The list of `shopt' options is: + `autocd' + If set, a command name that is the name of a directory is + executed as if it were the argument to the `cd' command. + This option is only used by interactive shells. + + `cdable_vars' + If this is set, an argument to the `cd' builtin command that + is not a directory is assumed to be the name of a variable + whose value is the directory to change to. + + `cdspell' + If set, minor errors in the spelling of a directory component + in a `cd' command will be corrected. The errors checked for + are transposed characters, a missing character, and a + character too many. If a correction is found, the corrected + path is printed, and the command proceeds. This option is + only used by interactive shells. + + `checkhash' + If this is set, Bash checks that a command found in the hash + table exists before trying to execute it. If a hashed + command no longer exists, a normal path search is performed. + + `checkjobs' + If set, Bash lists the status of any stopped and running jobs + before exiting an interactive shell. If any jobs are + running, this causes the exit to be deferred until a second + exit is attempted without an intervening command (*note Job + Control::). The shell always postpones exiting if any jobs + are stopped. + + `checkwinsize' + If set, Bash checks the window size after each command and, + if necessary, updates the values of `LINES' and `COLUMNS'. + + `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. + + `compat31' + If set, Bash changes its behavior to that of version 3.1 with + respect to quoted arguments to the conditional command's =~ + operator. + + `dirspell' + If set, Bash attempts spelling correction on directory names + during word completion if the directory name initially + supplied does not exist. + + `dotglob' + If set, Bash includes filenames beginning with a `.' in the + results of filename expansion. + + `execfail' + If this is set, a non-interactive shell will not exit if it + cannot execute the file specified as an argument to the `exec' + builtin command. An interactive shell does not exit if `exec' + fails. + + `expand_aliases' + If set, aliases are expanded as described below under Aliases, + *note Aliases::. This option is enabled by default for + interactive shells. + + `extdebug' + If set, behavior intended for use by debuggers is enabled: + + 1. The `-F' option to the `declare' builtin (*note Bash + Builtins::) displays the source file name and line + number corresponding to each function name supplied as + an argument. + + 2. If the command run by the `DEBUG' trap returns a + non-zero value, the next command is skipped and not + executed. + + 3. If the command run by the `DEBUG' trap returns a value + of 2, and the shell is executing in a subroutine (a + shell function or a shell script executed by the `.' or + `source' builtins), a call to `return' is simulated. + + 4. `BASH_ARGC' and `BASH_ARGV' are updated as described in + their descriptions (*note Bash Variables::). + + 5. Function tracing is enabled: command substitution, + shell functions, and subshells invoked with `( COMMAND + )' inherit the `DEBUG' and `RETURN' traps. + + 6. Error tracing is enabled: command substitution, shell + functions, and subshells invoked with `( COMMAND )' + inherit the `ERROR' trap. + + `extglob' + If set, the extended pattern matching features described above + (*note Pattern Matching::) are enabled. + + `extquote' + If set, `$'STRING'' and `$"STRING"' quoting is performed + within `${PARAMETER}' expansions enclosed in double quotes. + This option is enabled by default. + + `failglob' + If set, patterns which fail to match filenames during + filename expansion result in an expansion error. + + `force_fignore' + If set, the suffixes specified by the `FIGNORE' shell variable + cause words to be ignored when performing word completion + even if the ignored words are the only possible completions. + *Note Bash Variables::, for a description of `FIGNORE'. This + option is enabled by default. + + `globstar' + If set, the pattern `**' used in a filename expansion context + will match a files and zero or more directories and + subdirectories. If the pattern is followed by a `/', only + directories and subdirectories match. + + `gnu_errfmt' + If set, shell error messages are written in the standard GNU + error message format. + + `histappend' + If set, the history list is appended to the file named by the + value of the `HISTFILE' variable when the shell exits, rather + than overwriting the file. + + `histreedit' + If set, and Readline is being used, a user is given the + opportunity to re-edit a failed history substitution. + + `histverify' + If set, and Readline is being used, the results of history + substitution are not immediately passed to the shell parser. + Instead, the resulting line is loaded into the Readline + editing buffer, allowing further modification. + + `hostcomplete' + If set, and Readline is being used, Bash will attempt to + perform hostname completion when a word containing a `@' is + being completed (*note Commands For Completion::). This + option is enabled by default. + + `huponexit' + If set, Bash will send `SIGHUP' to all jobs when an + interactive login shell exits (*note Signals::). + + `interactive_comments' + Allow a word beginning with `#' to cause that word and all + remaining characters on that line to be ignored in an + interactive shell. This option is enabled by default. + + `lithist' + If enabled, and the `cmdhist' option is enabled, multi-line + commands are saved to the history with embedded newlines + rather than using semicolon separators where possible. + + `login_shell' + The shell sets this option if it is started as a login shell + (*note Invoking Bash::). The value may not be changed. + + `mailwarn' + If set, and a file that Bash is checking for mail has been + accessed since the last time it was checked, the message + `"The mail in MAILFILE has been read"' is displayed. + + `no_empty_cmd_completion' + If set, and Readline is being used, Bash will not attempt to + search the `PATH' for possible completions when completion is + attempted on an empty line. + + `nocaseglob' + If set, Bash matches filenames in a case-insensitive fashion + when performing filename expansion. + + `nocasematch' + If set, Bash matches patterns in a case-insensitive fashion + when performing matching while executing `case' or `[[' + conditional commands. + + `nullglob' + If set, Bash allows filename patterns which match no files to + expand to a null string, rather than themselves. + + `progcomp' + If set, the programmable completion facilities (*note + Programmable Completion::) are enabled. This option is + enabled by default. + + `promptvars' + If set, prompt strings undergo parameter expansion, command + substitution, arithmetic expansion, and quote removal after + being expanded as described below (*note Printing a Prompt::). + This option is enabled by default. + + `restricted_shell' + The shell sets this option if it is started in restricted mode + (*note The Restricted Shell::). The value may not be changed. + This is not reset when the startup files are executed, + allowing the startup files to discover whether or not a shell + is restricted. + + `shift_verbose' + If this is set, the `shift' builtin prints an error message + when the shift count exceeds the number of positional + parameters. + + `sourcepath' + If set, the `source' builtin uses the value of `PATH' to find + the directory containing the file supplied as an argument. + This option is enabled by default. + + `xpg_echo' + If set, the `echo' builtin expands backslash-escape sequences + by default. + + + The return status when listing options is zero if all OPTNAMES are + enabled, non-zero otherwise. When setting or unsetting options, + the return status is zero unless an OPTNAME is not a valid shell + option. + + + +File: bashref.info, Node: Special Builtins, Prev: Modifying Shell Behavior, Up: Shell Builtin Commands + +4.4 Special Builtins +==================== + +For historical reasons, the POSIX standard has classified several +builtin commands as _special_. When Bash is executing in POSIX mode, +the special builtins differ from other builtin commands in three +respects: + + 1. Special builtins are found before shell functions during command + lookup. + + 2. If a special builtin returns an error status, a non-interactive + shell exits. + + 3. Assignment statements preceding the command stay in effect in the + shell environment after the command completes. + + When Bash is not executing in POSIX mode, these builtins behave no +differently than the rest of the Bash builtin commands. The Bash POSIX +mode is described in *note Bash POSIX Mode::. + + These are the POSIX special builtins: + break : . continue eval exec exit export readonly return set + shift trap unset + + +File: bashref.info, Node: Shell Variables, Next: Bash Features, Prev: Shell Builtin Commands, Up: Top + +5 Shell Variables +***************** + +* Menu: + +* Bourne Shell Variables:: Variables which Bash uses in the same way + as the Bourne Shell. +* Bash Variables:: List of variables that exist in Bash. + + This chapter describes the shell variables that Bash uses. Bash +automatically assigns default values to a number of variables. + + +File: bashref.info, Node: Bourne Shell Variables, Next: Bash Variables, Up: Shell Variables + +5.1 Bourne Shell Variables +========================== + +Bash uses certain shell variables in the same way as the Bourne shell. +In some cases, Bash assigns a default value to the variable. + +`CDPATH' + A colon-separated list of directories used as a search path for + the `cd' builtin command. + +`HOME' + The current user's home directory; the default for the `cd' builtin + command. The value of this variable is also used by tilde + expansion (*note Tilde Expansion::). + +`IFS' + A list of characters that separate fields; used when the shell + splits words as part of expansion. + +`MAIL' + If this parameter is set to a filename and the `MAILPATH' variable + is not set, Bash informs the user of the arrival of mail in the + specified file. + +`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 `?'. When used in the text + of the message, `$_' expands to the name of the current mail file. + +`OPTARG' + The value of the last option argument processed by the `getopts' + builtin. + +`OPTIND' + The index of the last option argument processed by the `getopts' + builtin. + +`PATH' + A colon-separated list of directories in which the shell looks for + commands. A zero-length (null) directory name in the value of + `PATH' indicates the current directory. A null directory name may + appear as two adjacent colons, or as an initial or trailing colon. + +`PS1' + The primary prompt string. The default value is `\s-\v\$ '. + *Note Printing a Prompt::, for the complete list of escape + sequences that are expanded before `PS1' is displayed. + +`PS2' + The secondary prompt string. The default value is `> '. + + + +File: bashref.info, Node: Bash Variables, Prev: Bourne Shell Variables, Up: Shell Variables + +5.2 Bash Variables +================== + +These variables are set or used by Bash, but other shells do not +normally treat them specially. + + A few variables used by Bash are described in different chapters: +variables for controlling the job control facilities (*note Job Control +Variables::). + +`BASH' + The full pathname used to execute the current instance of Bash. + +`BASHOPTS' + A colon-separated list of enabled shell options. Each word in the + list is a valid argument for the `-s' option to the `shopt' + builtin command (*note The Shopt Builtin::). The options + appearing in `BASHOPTS' are those reported as `on' by `shopt'. If + this variable is in the environment when Bash starts up, each + shell option in the list will be enabled before reading any + startup files. This variable is readonly. + +`BASHPID' + Expands to the process id of the current Bash process. This + differs from `$$' under certain circumstances, such as subshells + that do not require Bash to be re-initialized. + +`BASH_ALIASES' + An associative array variable whose members correspond to the + internal list of aliases as maintained by the `alias' builtin + (*note Bourne Shell Builtins::). Elements added to this array + appear in the alias list; unsetting array elements cause aliases + to be removed from the alias list. + +`BASH_ARGC' + An array variable whose values are the number of parameters in each + frame of the current bash execution call stack. The number of + parameters to the current subroutine (shell function or script + executed with `.' or `source') is at the top of the stack. When a + subroutine is executed, the number of parameters passed is pushed + onto `BASH_ARGC'. The shell sets `BASH_ARGC' only when in + extended debugging mode (see *note The Shopt Builtin:: for a + description of the `extdebug' option to the `shopt' builtin). + +`BASH_ARGV' + An array variable containing all of the parameters in the current + bash execution call stack. The final parameter of the last + subroutine call is at the top of the stack; the first parameter of + the initial call is at the bottom. When a subroutine is executed, + the parameters supplied are pushed onto `BASH_ARGV'. The shell + sets `BASH_ARGV' only when in extended debugging mode (see *note + The Shopt Builtin:: for a description of the `extdebug' option to + the `shopt' builtin). + +`BASH_CMDS' + An associative array variable whose members correspond to the + internal hash table of commands as maintained by the `hash' builtin + (*note Bourne Shell Builtins::). Elements added to this array + appear in the hash table; unsetting array elements cause commands + to be removed from the hash table. + +`BASH_COMMAND' + The command currently being executed or about to be executed, + unless the shell is executing a command as the result of a trap, + in which case it is the command executing at the time of the trap. + +`BASH_ENV' + If this variable is set when Bash is invoked to execute a shell + script, its value is expanded and used as the name of a startup + file to read before executing the script. *Note Bash Startup + Files::. + +`BASH_EXECUTION_STRING' + The command argument to the `-c' invocation option. + +`BASH_LINENO' + An array variable whose members are the line numbers in source + files corresponding to each member of FUNCNAME. + `${BASH_LINENO[$i]}' is the line number in the source file where + `${FUNCNAME[$i]}' was called (or `${BASH_LINENO[$i-1]}' if + referenced within another shell function). The corresponding + source file name is `${BASH_SOURCE[$i]}'. Use `LINENO' to obtain + the current line number. + +`BASH_REMATCH' + An array variable whose members are assigned by the `=~' binary + operator to the `[[' conditional command (*note Conditional + Constructs::). The element with index 0 is the portion of the + string matching the entire regular expression. The element with + index N is the portion of the string matching the Nth + parenthesized subexpression. This variable is read-only. + +`BASH_SOURCE' + An array variable whose members are the source filenames + corresponding to the elements in the `FUNCNAME' array variable. + +`BASH_SUBSHELL' + Incremented by one each time a subshell or subshell environment is + spawned. The initial value is 0. + +`BASH_VERSINFO' + A readonly array variable (*note Arrays::) whose members hold + version information for this instance of Bash. The values + assigned to the array members are as follows: + + `BASH_VERSINFO[0]' + The major version number (the RELEASE). + + `BASH_VERSINFO[1]' + The minor version number (the VERSION). + + `BASH_VERSINFO[2]' + The patch level. + + `BASH_VERSINFO[3]' + The build version. + + `BASH_VERSINFO[4]' + The release status (e.g., BETA1). + + `BASH_VERSINFO[5]' + The value of `MACHTYPE'. + + +`BASH_VERSION' + The version number of the current instance of Bash. + +`BASH_XTRACEFD' + If set to an integer corresponding to a valid file descriptor, Bash + will write the trace output generated when `set -x' is enabled to + that file descriptor. This allows tracing output to be separated + from diagnostic and error messages. The file descriptor is closed + when `BASH_XTRACEFD' is unset or assigned a new value. Unsetting + `BASH_XTRACEFD' or assigning it the empty string causes the trace + output to be sent to the standard error. Note that setting + `BASH_XTRACEFD' to 2 (the standard error file descriptor) and then + unsetting it will result in the standard error being closed. + +`COLUMNS' + Used by the `select' builtin command to determine the terminal + width when printing selection lists. Automatically set upon + receipt of a `SIGWINCH'. + +`COMP_CWORD' + An index into `${COMP_WORDS}' of the word containing the current + cursor position. This variable is available only in shell + functions invoked by the programmable completion facilities (*note + Programmable Completion::). + +`COMP_LINE' + The current command line. This variable is available only in + shell functions and external commands invoked by the programmable + completion facilities (*note Programmable Completion::). + +`COMP_POINT' + The index of the current cursor position relative to the beginning + of the current command. If the current cursor position is at the + end of the current command, the value of this variable is equal to + `${#COMP_LINE}'. This variable is available only in shell + functions and external commands invoked by the programmable + completion facilities (*note Programmable Completion::). + +`COMP_TYPE' + Set to an integer value corresponding to the type of completion + attempted that caused a completion function to be called: TAB, for + normal completion, `?', for listing completions after successive + tabs, `!', for listing alternatives on partial word completion, + `@', to list completions if the word is not unmodified, or `%', + for menu completion. This variable is available only in shell + functions and external commands invoked by the programmable + completion facilities (*note Programmable Completion::). + +`COMP_KEY' + The key (or final key of a key sequence) used to invoke the current + completion function. + +`COMP_WORDBREAKS' + The set of characters that the Readline library treats as word + separators when performing word completion. If `COMP_WORDBREAKS' + is unset, it loses its special properties, even if it is + subsequently reset. + +`COMP_WORDS' + An array variable consisting of the individual words in the + current command line. The line is split into words as Readline + would split it, using `COMP_WORDBREAKS' as described above. This + variable is available only in shell functions invoked by the + programmable completion facilities (*note Programmable + Completion::). + +`COMPREPLY' + An array variable from which Bash reads the possible completions + generated by a shell function invoked by the programmable + completion facility (*note Programmable Completion::). + +`DIRSTACK' + An array variable containing the current contents of the directory + stack. Directories appear in the stack in the order they are + displayed by the `dirs' builtin. Assigning to members of this + array variable may be used to modify directories already in the + stack, but the `pushd' and `popd' builtins must be used to add and + remove directories. Assignment to this variable will not change + the current directory. If `DIRSTACK' is unset, it loses its + special properties, even if it is subsequently reset. + +`EMACS' + If Bash finds this variable in the environment when the shell + starts with value `t', it assumes that the shell is running in an + emacs shell buffer and disables line editing. + +`EUID' + The numeric effective user id of the current user. This variable + is readonly. + +`FCEDIT' + The editor used as a default by the `-e' option to the `fc' + builtin command. + +`FIGNORE' + A colon-separated list of suffixes to ignore when performing + filename completion. A file name whose suffix matches one of the + entries in `FIGNORE' is excluded from the list of matched file + names. A sample value is `.o:~' + +`FUNCNAME' + An array variable containing the names of all shell functions + currently in the execution call stack. The element with index 0 + is the name of any currently-executing shell function. The + bottom-most element is `"main"'. This variable exists only when a + shell function is executing. Assignments to `FUNCNAME' have no + effect and return an error status. If `FUNCNAME' is unset, it + loses its special properties, even if it is subsequently reset. + +`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 + `GLOBIGNORE', it is removed from the list of matches. + +`GROUPS' + An array variable containing the list of groups of which the + current user is a member. Assignments to `GROUPS' have no effect + and return an error status. If `GROUPS' is unset, it loses its + special properties, even if it is subsequently reset. + +`histchars' + Up to three characters which control history expansion, quick + substitution, and tokenization (*note History Interaction::). The + first character is the HISTORY EXPANSION character, that is, the + character which signifies the start of a history expansion, + normally `!'. The second character is the character which + signifies `quick substitution' when seen as the first character on + a line, normally `^'. The optional third character is the + character which indicates that the remainder of the line is a + comment when found as the first character of a word, usually `#'. + The history comment character causes history substitution to be + skipped for the remaining words on the line. It does not + necessarily cause the shell parser to treat the rest of the line + as a comment. + +`HISTCMD' + The history number, or index in the history list, of the current + command. If `HISTCMD' is unset, it loses its special properties, + even if it is subsequently reset. + +`HISTCONTROL' + A colon-separated list of values controlling how commands are + saved on the history list. If the list of values includes + `ignorespace', lines which begin with a space character are not + saved in the history list. A value of `ignoredups' causes lines + which match the previous history entry to not be saved. A value + of `ignoreboth' is shorthand for `ignorespace' and `ignoredups'. + A value of `erasedups' causes all previous lines matching the + current line to be removed from the history list before that line + is saved. Any value not in the above list is ignored. If + `HISTCONTROL' is unset, or does not include a valid value, all + lines read by the shell parser are saved on the history list, + subject to the value of `HISTIGNORE'. The second and subsequent + lines of a multi-line compound command are not tested, and are + added to the history regardless of the value of `HISTCONTROL'. + +`HISTFILE' + The name of the file to which the command history is saved. The + default value is `~/.bash_history'. + +`HISTFILESIZE' + The maximum number of lines contained in the history file. When + this variable is assigned a value, the history file is truncated, + if necessary, by removing the oldest entries, 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. + +`HISTIGNORE' + A colon-separated list of patterns used to decide which command + lines should be saved on the history list. Each pattern is + anchored at the beginning of the line and must match the complete + line (no implicit `*' is appended). Each pattern is tested + against the line after the checks specified by `HISTCONTROL' are + applied. In addition to the normal shell pattern matching + characters, `&' matches the previous history line. `&' may be + escaped using a backslash; the backslash is removed before + attempting a match. The second and subsequent lines of a + multi-line compound command are not tested, and are added to the + history regardless of the value of `HISTIGNORE'. + + `HISTIGNORE' subsumes the function of `HISTCONTROL'. A pattern of + `&' is identical to `ignoredups', and a pattern of `[ ]*' is + identical to `ignorespace'. Combining these two patterns, + separating them with a colon, provides the functionality of + `ignoreboth'. + +`HISTSIZE' + The maximum number of commands to remember on the history list. + The default value is 500. + +`HISTTIMEFORMAT' + If this variable is set and not null, its value is used as a + format string for STRFTIME to print the time stamp associated with + each history entry displayed by the `history' builtin. If this + variable is set, time stamps are written to the history file so + they may be preserved across shell sessions. This uses the + history comment character to distinguish timestamps from other + history lines. + +`HOSTFILE' + Contains the name of a file in the same format as `/etc/hosts' that + should be read when the shell needs to complete a hostname. The + list of possible hostname completions may be changed while the + shell is running; the next time hostname completion is attempted + after the value is changed, Bash adds the contents of the new file + to the existing list. If `HOSTFILE' is set, but has no value, or + does not name a readable file, Bash attempts to read `/etc/hosts' + to obtain the list of possible hostname completions. When + `HOSTFILE' is unset, the hostname list is cleared. + +`HOSTNAME' + The name of the current host. + +`HOSTTYPE' + A string describing the machine Bash is running on. + +`IGNOREEOF' + Controls the action of the shell on receipt of an `EOF' character + as the sole input. If set, the value denotes the number of + consecutive `EOF' characters that can be read as the first + character on an input line before the shell will exit. If the + variable exists but does not have a numeric value (or has no + value) then the default is 10. If the variable does not exist, + then `EOF' signifies the end of input to the shell. This is only + in effect for interactive shells. + +`INPUTRC' + The name of the Readline initialization file, overriding the + default of `~/.inputrc'. + +`LANG' + Used to determine the locale category for any category not + specifically selected with a variable starting with `LC_'. + +`LC_ALL' + This variable overrides the value of `LANG' and any other `LC_' + variable specifying a locale category. + +`LC_COLLATE' + This variable determines the collation order used when sorting the + results of filename expansion, and determines the behavior of + range expressions, equivalence classes, and collating sequences + within filename expansion and pattern matching (*note Filename + Expansion::). + +`LC_CTYPE' + This variable determines the interpretation of characters and the + behavior of character classes within filename expansion and pattern + matching (*note Filename Expansion::). + +`LC_MESSAGES' + This variable determines the locale used to translate double-quoted + strings preceded by a `$' (*note Locale Translation::). + +`LC_NUMERIC' + This variable determines the locale category used for number + formatting. + +`LINENO' + The line number in the script or shell function currently + executing. + +`LINES' + Used by the `select' builtin command to determine the column length + for printing selection lists. Automatically set upon receipt of a + `SIGWINCH'. + +`MACHTYPE' + A string that fully describes the system type on which Bash is + executing, in the standard GNU CPU-COMPANY-SYSTEM format. + +`MAILCHECK' + How often (in seconds) that the shell should check for mail in the + files specified in the `MAILPATH' or `MAIL' variables. The + default is 60 seconds. When it is time to check for mail, the + shell does so before displaying the primary prompt. If this + variable is unset, or set to a value that is not a number greater + than or equal to zero, the shell disables mail checking. + +`OLDPWD' + The previous working directory as set by the `cd' builtin. + +`OPTERR' + If set to the value 1, Bash displays error messages generated by + the `getopts' builtin command. + +`OSTYPE' + A string describing the operating system Bash is running on. + +`PIPESTATUS' + An array variable (*note Arrays::) containing a list of exit + status values from the processes in the most-recently-executed + foreground pipeline (which may contain only a single command). + +`POSIXLY_CORRECT' + If this variable is in the environment when `bash' starts, the + shell enters POSIX mode (*note Bash POSIX Mode::) before reading + the startup files, as if the `--posix' invocation option had been + supplied. If it is set while the shell is running, `bash' enables + POSIX mode, as if the command + `set -o posix' + had been executed. + +`PPID' + The process ID of the shell's parent process. This variable is + readonly. + +`PROMPT_COMMAND' + If set, the value is interpreted as a command to execute before + the printing of each primary prompt (`$PS1'). + +`PROMPT_DIRTRIM' + If set to a number greater than zero, the value is used as the + number of trailing directory components to retain when expanding + the `\w' and `\W' prompt string escapes (*note Printing a + Prompt::). Characters removed are replaced with an ellipsis. + +`PS3' + The value of this variable is used as the prompt for the `select' + command. If this variable is not set, the `select' command + prompts with `#? ' + +`PS4' + The value is the prompt printed before the command line is echoed + when the `-x' option is set (*note The Set Builtin::). The first + character of `PS4' is replicated multiple times, as necessary, to + indicate multiple levels of indirection. The default is `+ '. + +`PWD' + The current working directory as set by the `cd' builtin. + +`RANDOM' + Each time this parameter is referenced, a random integer between 0 + and 32767 is generated. Assigning a value to this variable seeds + the random number generator. + +`REPLY' + The default variable for the `read' builtin. + +`SECONDS' + This variable expands to the number of seconds since the shell was + started. Assignment to this variable resets the count to the + value assigned, and the expanded value becomes the value assigned + plus the number of seconds since the assignment. + +`SHELL' + The full pathname to the shell is kept in this environment + variable. If it is not set when the shell starts, Bash assigns to + it the full pathname of the current user's login shell. + +`SHELLOPTS' + A colon-separated list of enabled shell options. Each word in the + list is a valid argument for the `-o' option to the `set' builtin + command (*note The Set Builtin::). The options appearing in + `SHELLOPTS' are those reported as `on' by `set -o'. If this + variable is in the environment when Bash starts up, each shell + option in the list will be enabled before reading any startup + files. This variable is readonly. + +`SHLVL' + Incremented by one each time a new instance of Bash is started. + This is intended to be a count of how deeply your Bash shells are + nested. + +`TIMEFORMAT' + The value of this parameter is used as a format string specifying + how the timing information for pipelines prefixed with the `time' + reserved word should be displayed. The `%' character introduces an + escape sequence that is expanded to a time value or other + information. The escape sequences and their meanings are as + follows; the braces denote optional portions. + + `%%' + A literal `%'. + + `%[P][l]R' + The elapsed time in seconds. + + `%[P][l]U' + The number of CPU seconds spent in user mode. + + `%[P][l]S' + The number of CPU seconds spent in system mode. + + `%P' + The CPU percentage, computed as (%U + %S) / %R. + + The optional P is a digit specifying the precision, the number of + fractional digits after a decimal point. A value of 0 causes no + decimal point or fraction to be output. At most three places + after the decimal point may be specified; values of P greater than + 3 are changed to 3. If P is not specified, the value 3 is used. + + The optional `l' specifies a longer format, including minutes, of + the form MMmSS.FFs. The value of P determines whether or not the + fraction is included. + + If this variable is not set, Bash acts as if it had the value + `$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'' + If the value is null, no timing information is displayed. A + trailing newline is added when the format string is displayed. + +`TMOUT' + If set to a value greater than zero, `TMOUT' is treated as the + default timeout for the `read' builtin (*note Bash Builtins::). + The `select' command (*note Conditional Constructs::) terminates + if input does not arrive after `TMOUT' seconds when input is coming + from a terminal. + + In an interactive shell, the value is interpreted as the number of + seconds to wait for input after issuing the primary prompt when + the shell is interactive. Bash terminates after that number of + seconds if input does not arrive. + +`TMPDIR' + If set, Bash uses its value as the name of a directory in which + Bash creates temporary files for the shell's use. + +`UID' + The numeric real user id of the current user. This variable is + readonly. + + + +File: bashref.info, Node: Bash Features, Next: Job Control, Prev: Shell Variables, Up: Top + +6 Bash Features +*************** + +This 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 `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. + + +File: bashref.info, Node: Invoking Bash, Next: Bash Startup Files, Up: Bash Features + +6.1 Invoking Bash +================= + + bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o OPTION] [-O SHOPT_OPTION] [ARGUMENT ...] + bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o OPTION] [-O SHOPT_OPTION] -c STRING [ARGUMENT ...] + bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o OPTION] [-O SHOPT_OPTION] [ARGUMENT ...] + + In addition to the single-character shell command-line options +(*note 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. + +`--debugger' + Arrange for the debugger profile to be executed before the shell + starts. Turns on extended debugging mode (see *note The Shopt + Builtin:: for a description of the `extdebug' option to the `shopt' + builtin) and shell function tracing (see *note The Set Builtin:: + for a description of the `-o functrace' option). + +`--dump-po-strings' + A list of all double-quoted strings preceded by `$' is printed on + the standard output in the GNU `gettext' PO (portable object) file + format. Equivalent to `-D' except for the output format. + +`--dump-strings' + Equivalent to `-D'. + +`--help' + Display a usage message on standard output and exit successfully. + +`--init-file FILENAME' +`--rcfile FILENAME' + Execute commands from FILENAME (instead of `~/.bashrc') in an + interactive shell. + +`--login' + Equivalent to `-l'. + +`--noediting' + Do not use the GNU Readline library (*note Command Line Editing::) + to read command lines when the shell is interactive. + +`--noprofile' + Don't load the system-wide startup file `/etc/profile' or any of + the personal initialization files `~/.bash_profile', + `~/.bash_login', or `~/.profile' when Bash is invoked as a login + shell. + +`--norc' + Don't read the `~/.bashrc' initialization file in an interactive + shell. This is on by default if the shell is invoked as `sh'. + +`--posix' + Change the behavior of Bash where the default operation differs + from the POSIX standard to match the standard. This is intended + to make Bash behave as a strict superset of that standard. *Note + Bash POSIX Mode::, for a description of the Bash POSIX mode. + +`--restricted' + Make the shell a restricted shell (*note The Restricted Shell::). + +`--verbose' + Equivalent to `-v'. Print shell input lines as they're read. + +`--version' + Show version information for this instance of Bash on the standard + output and exit successfully. + + + There are several single-character options that may be supplied at +invocation which are not available with the `set' builtin. + +`-c STRING' + Read and execute commands from STRING after processing the + options, then exit. Any remaining arguments are assigned to the + positional parameters, starting with `$0'. + +`-i' + Force the shell to run interactively. Interactive shells are + described in *note Interactive Shells::. + +`-l' + Make this shell act as if it had been directly invoked by login. + When the shell is interactive, this is equivalent to starting a + login shell with `exec -l bash'. When the shell is not + interactive, the login shell startup files will be executed. + `exec bash -l' or `exec bash --login' will replace the current + shell with a Bash login shell. *Note Bash Startup Files::, for a + description of the special behavior of a login shell. + +`-r' + Make the shell a restricted shell (*note The Restricted Shell::). + +`-s' + If this option is present, or if no arguments remain after option + processing, then commands are read from the standard input. This + option allows the positional parameters to be set when invoking an + interactive shell. + +`-D' + A list of all double-quoted strings preceded by `$' is printed on + the standard output. These are the strings that are subject to + language translation when the current locale is not `C' or `POSIX' + (*note Locale Translation::). This implies the `-n' option; no + commands will be executed. + +`[-+]O [SHOPT_OPTION]' + SHOPT_OPTION is one of the shell options accepted by the `shopt' + builtin (*note The Shopt Builtin::). If SHOPT_OPTION is present, + `-O' sets the value of that option; `+O' unsets it. If + SHOPT_OPTION is not supplied, the names and values of the shell + options accepted by `shopt' are printed on the standard output. + If the invocation option is `+O', the output is displayed in a + format that may be reused as input. + +`--' + A `--' signals the end of options and disables further option + processing. Any arguments after the `--' are treated as filenames + and arguments. + + + A _login_ shell is one whose first character of argument zero is +`-', or one invoked with the `--login' option. + + An _interactive_ shell is one started without non-option arguments, +unless `-s' is specified, without specifying the `-c' option, and whose +input and output are both connected to terminals (as determined by +`isatty(3)'), or one started with the `-i' option. *Note Interactive +Shells::, for more information. + + If arguments remain after option processing, and neither the `-c' +nor the `-s' option has been supplied, the first argument is assumed to +be the name of a file containing shell commands (*note Shell Scripts::). +When Bash is invoked in this fashion, `$0' is set to the name of the +file, and the positional parameters are set to the remaining arguments. +Bash reads and executes commands from this file, then exits. Bash's +exit status is the exit status of the last command executed in the +script. If no commands are executed, the exit status is 0. + + +File: bashref.info, Node: Bash Startup Files, Next: Interactive Shells, Prev: Invoking Bash, Up: Bash Features + +6.2 Bash Startup Files +====================== + +This section describes how Bash executes its startup files. If any of +the files exist but cannot be read, Bash reports an error. Tildes are +expanded in file names as described above under Tilde Expansion (*note +Tilde Expansion::). + + Interactive shells are described in *note Interactive Shells::. + +Invoked as an interactive login shell, or with `--login' +........................................................ + +When Bash is invoked as an interactive login shell, or as a +non-interactive shell with the `--login' option, it first reads and +executes commands from the file `/etc/profile', if that file exists. +After reading that file, it looks for `~/.bash_profile', +`~/.bash_login', and `~/.profile', in that order, and reads and +executes commands from the first one that exists and is readable. The +`--noprofile' option may be used when the shell is started to inhibit +this behavior. + + When a login shell exits, Bash reads and executes commands from the +file `~/.bash_logout', if it exists. + +Invoked as an interactive non-login shell +......................................... + +When an interactive shell that is not a login shell is started, Bash +reads and executes commands from `~/.bashrc', if that file exists. +This may be inhibited by using the `--norc' option. The `--rcfile +FILE' option will force Bash to read and execute commands from FILE +instead of `~/.bashrc'. + + So, typically, your `~/.bash_profile' contains the line + `if [ -f ~/.bashrc ]; then . ~/.bashrc; fi' + after (or before) any login-specific initializations. + +Invoked non-interactively +......................... + +When Bash is started non-interactively, to run a shell script, for +example, it looks for the variable `BASH_ENV' in the environment, +expands its value if it appears there, and uses the expanded value as +the name of a file to read and execute. Bash behaves as if the +following command were executed: + `if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi' + but the value of the `PATH' variable is not used to search for the +file name. + + As noted above, if a non-interactive shell is invoked with the +`--login' option, Bash attempts to read and execute commands from the +login shell startup files. + +Invoked with name `sh' +...................... + +If Bash is invoked with the name `sh', it tries to mimic the startup +behavior of historical versions of `sh' as closely as possible, while +conforming to the POSIX standard as well. + + When invoked as an interactive login shell, or as a non-interactive +shell with the `--login' option, it first attempts to read and execute +commands from `/etc/profile' and `~/.profile', in that order. The +`--noprofile' option may be used to inhibit this behavior. When +invoked as an interactive shell with the name `sh', Bash looks for the +variable `ENV', expands its value if it is defined, and uses the +expanded value as the name of a file to read and execute. Since a +shell invoked as `sh' does not attempt to read and execute commands +from any other startup files, the `--rcfile' option has no effect. A +non-interactive shell invoked with the name `sh' does not attempt to +read any other startup files. + + When invoked as `sh', Bash enters POSIX mode after the startup files +are read. + +Invoked in POSIX mode +..................... + +When Bash is started in POSIX mode, as with the `--posix' command line +option, it follows the POSIX standard for startup files. In this mode, +interactive shells expand the `ENV' variable and commands are read and +executed from the file whose name is the expanded value. No other +startup files are read. + +Invoked by remote shell daemon +.............................. + +Bash attempts to determine when it is being run with its standard input +connected to a a network connection, as if by the remote shell daemon, +usually `rshd', or the secure shell daemon `sshd'. If Bash determines +it is being run in this fashion, it reads and executes commands from +`~/.bashrc', if that file exists and is readable. It will not do this +if invoked as `sh'. The `--norc' option may be used to inhibit this +behavior, and the `--rcfile' option may be used to force another file +to be read, but `rshd' does not generally invoke the shell with those +options or allow them to be specified. + +Invoked with unequal effective and real UID/GIDs +................................................ + +If Bash is started with the effective user (group) id not equal to the +real user (group) id, and the `-p' option is not supplied, no startup +files are read, shell functions are not inherited from the environment, +the `SHELLOPTS', `BASHOPTS', `CDPATH', and `GLOBIGNORE' variables, if +they appear in the environment, are ignored, and the effective user id +is set to the real user id. If the `-p' option is supplied at +invocation, the startup behavior is the same, but the effective user id +is not reset. + + +File: bashref.info, Node: Interactive Shells, Next: Bash Conditional Expressions, Prev: Bash Startup Files, Up: Bash Features + +6.3 Interactive Shells +====================== + +* Menu: + +* What is an Interactive Shell?:: What determines whether a shell is Interactive. +* Is this Shell Interactive?:: How to tell if a shell is interactive. +* Interactive Shell Behavior:: What changes in a interactive shell? + + +File: bashref.info, Node: What is an Interactive Shell?, Next: Is this Shell Interactive?, Up: Interactive Shells + +6.3.1 What is an Interactive Shell? +----------------------------------- + +An interactive shell is one started without non-option arguments, +unless `-s' is specified, without specifying the `-c' option, and whose +input and error output are both connected to terminals (as determined +by `isatty(3)'), or one started with the `-i' option. + + An interactive shell generally reads from and writes to a user's +terminal. + + The `-s' invocation option may be used to set the positional +parameters when an interactive shell is started. + + +File: bashref.info, Node: Is this Shell Interactive?, Next: Interactive Shell Behavior, Prev: What is an Interactive Shell?, Up: Interactive Shells + +6.3.2 Is this Shell Interactive? +-------------------------------- + +To determine within a startup script whether or not Bash is running +interactively, test the value of the `-' special parameter. It +contains `i' when the shell is interactive. For example: + + case "$-" in + *i*) echo This shell is interactive ;; + *) echo This shell is not interactive ;; + esac + + Alternatively, startup scripts may examine the variable `PS1'; it is +unset in non-interactive shells, and set in interactive shells. Thus: + + if [ -z "$PS1" ]; then + echo This shell is not interactive + else + echo This shell is interactive + fi + + +File: bashref.info, Node: Interactive Shell Behavior, Prev: Is this Shell Interactive?, Up: Interactive Shells + +6.3.3 Interactive Shell Behavior +-------------------------------- + +When the shell is running interactively, it changes its behavior in +several ways. + + 1. Startup files are read and executed as described in *note Bash + Startup Files::. + + 2. Job Control (*note Job Control::) is enabled by default. When job + control is in effect, Bash ignores the keyboard-generated job + control signals `SIGTTIN', `SIGTTOU', and `SIGTSTP'. + + 3. Bash expands and displays `PS1' before reading the first line of a + command, and expands and displays `PS2' before reading the second + and subsequent lines of a multi-line command. + + 4. Bash executes the value of the `PROMPT_COMMAND' variable as a + command before printing the primary prompt, `$PS1' (*note Bash + Variables::). + + 5. Readline (*note Command Line Editing::) is used to read commands + from the user's terminal. + + 6. Bash inspects the value of the `ignoreeof' option to `set -o' + instead of exiting immediately when it receives an `EOF' on its + standard input when reading a command (*note The Set Builtin::). + + 7. Command history (*note Bash History Facilities::) and history + expansion (*note History Interaction::) are enabled by default. + Bash will save the command history to the file named by `$HISTFILE' + when an interactive shell exits. + + 8. Alias expansion (*note Aliases::) is performed by default. + + 9. In the absence of any traps, Bash ignores `SIGTERM' (*note + Signals::). + + 10. In the absence of any traps, `SIGINT' is caught and handled + ((*note Signals::). `SIGINT' will interrupt some shell builtins. + + 11. An interactive login shell sends a `SIGHUP' to all jobs on exit if + the `huponexit' shell option has been enabled (*note Signals::). + + 12. The `-n' invocation option is ignored, and `set -n' has no effect + (*note The Set Builtin::). + + 13. Bash will check for mail periodically, depending on the values of + the `MAIL', `MAILPATH', and `MAILCHECK' shell variables (*note + Bash Variables::). + + 14. Expansion errors due to references to unbound shell variables after + `set -u' has been enabled will not cause the shell to exit (*note + The Set Builtin::). + + 15. The shell will not exit on expansion errors caused by VAR being + unset or null in `${VAR:?WORD}' expansions (*note Shell Parameter + Expansion::). + + 16. Redirection errors encountered by shell builtins will not cause the + shell to exit. + + 17. When running in POSIX mode, a special builtin returning an error + status will not cause the shell to exit (*note Bash POSIX Mode::). + + 18. A failed `exec' will not cause the shell to exit (*note Bourne + Shell Builtins::). + + 19. Parser syntax errors will not cause the shell to exit. + + 20. Simple spelling correction for directory arguments to the `cd' + builtin is enabled by default (see the description of the `cdspell' + option to the `shopt' builtin in *note The Shopt Builtin::). + + 21. The shell will check the value of the `TMOUT' variable and exit if + a command is not read within the specified number of seconds after + printing `$PS1' (*note Bash Variables::). + + + +File: bashref.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic, Prev: Interactive Shells, Up: Bash Features + +6.4 Bash Conditional Expressions +================================ + +Conditional expressions are used by the `[[' compound command and the +`test' and `[' builtin commands. + + 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 FILE argument to one of +the primaries is of the form `/dev/fd/N', then file descriptor N is +checked. If the FILE argument to one of the primaries is one of +`/dev/stdin', `/dev/stdout', or `/dev/stderr', file descriptor 0, 1, or +2, respectively, is checked. + + When used with `[[', The `<' and `>' operators sort +lexicographically using the current locale. + + Unless otherwise specified, primaries that operate on files follow +symbolic links and operate on the target of the link, rather than the +link itself. + +`-a FILE' + True if FILE exists. + +`-b FILE' + True if FILE exists and is a block special file. + +`-c FILE' + True if FILE exists and is a character special file. + +`-d FILE' + True if FILE exists and is a directory. + +`-e FILE' + True if FILE exists. + +`-f FILE' + True if FILE exists and is a regular file. + +`-g FILE' + True if FILE exists and its set-group-id bit is set. + +`-h FILE' + True if FILE exists and is a symbolic link. + +`-k FILE' + True if FILE exists and its "sticky" bit is set. + +`-p FILE' + True if FILE exists and is a named pipe (FIFO). + +`-r FILE' + True if FILE exists and is readable. + +`-s FILE' + True if FILE exists and has a size greater than zero. + +`-t FD' + True if file descriptor FD is open and refers to a terminal. + +`-u FILE' + True if FILE exists and its set-user-id bit is set. + +`-w FILE' + True if FILE exists and is writable. + +`-x FILE' + True if FILE exists and is executable. + +`-O FILE' + True if FILE exists and is owned by the effective user id. + +`-G FILE' + True if FILE exists and is owned by the effective group id. + +`-L FILE' + True if FILE exists and is a symbolic link. + +`-S FILE' + True if FILE exists and is a socket. + +`-N FILE' + True if FILE exists and has been modified since it was last read. + +`FILE1 -nt FILE2' + True if FILE1 is newer (according to modification date) than + FILE2, or if FILE1 exists and FILE2 does not. + +`FILE1 -ot FILE2' + True if FILE1 is older than FILE2, or if FILE2 exists and FILE1 + does not. + +`FILE1 -ef FILE2' + True if FILE1 and FILE2 refer to the same device and inode numbers. + +`-o OPTNAME' + True if shell option OPTNAME is enabled. The list of options + appears in the description of the `-o' option to the `set' builtin + (*note The Set Builtin::). + +`-z STRING' + True if the length of STRING is zero. + +`-n STRING' +`STRING' + True if the length of STRING is non-zero. + +`STRING1 == STRING2' +`STRING1 = STRING2' + True if the strings are equal. `=' should be used with the `test' + command for POSIX conformance. + +`STRING1 != STRING2' + True if the strings are not equal. + +`STRING1 < STRING2' + True if STRING1 sorts before STRING2 lexicographically. + +`STRING1 > STRING2' + True if STRING1 sorts after STRING2 lexicographically. + +`ARG1 OP ARG2' + `OP' is one of `-eq', `-ne', `-lt', `-le', `-gt', or `-ge'. These + arithmetic binary operators return true if ARG1 is equal to, not + equal to, less than, less than or equal to, greater than, or + greater than or equal to ARG2, respectively. ARG1 and ARG2 may be + positive or negative integers. + + + +File: bashref.info, Node: Shell Arithmetic, Next: Aliases, Prev: Bash Conditional Expressions, Up: Bash Features + +6.5 Shell Arithmetic +==================== + +The shell allows arithmetic expressions to be evaluated, as one of the +shell expansions or by the `let' and the `-i' option to the `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. + +`ID++ ID--' + variable post-increment and post-decrement + +`++ID --ID' + variable pre-increment and pre-decrement + +`- +' + unary minus and plus + +`! ~' + logical and bitwise negation + +`**' + exponentiation + +`* / %' + multiplication, division, remainder + +`+ -' + addition, subtraction + +`<< >>' + left and right bitwise shifts + +`<= >= < >' + comparison + +`== !=' + equality and inequality + +`&' + bitwise AND + +`^' + bitwise exclusive OR + +`|' + bitwise OR + +`&&' + logical AND + +`||' + logical OR + +`expr ? expr : expr' + conditional operator + +`= *= /= %= += -= <<= >>= &= ^= |=' + assignment + +`expr1 , expr2' + comma + + Shell variables are allowed as operands; parameter expansion is +performed before the expression is evaluated. Within an expression, +shell variables may also be referenced by name without using the +parameter expansion syntax. A shell variable that is null or unset +evaluates to 0 when referenced by name without using the parameter +expansion syntax. The value of a variable is evaluated as an +arithmetic expression when it is referenced, or when a variable which +has been given the INTEGER attribute using `declare -i' is assigned a +value. A null value evaluates to 0. A shell variable need not have +its integer attribute turned on to be used in an expression. + + Constants with a leading 0 are interpreted as octal numbers. A +leading `0x' or `0X' denotes hexadecimal. Otherwise, numbers take the +form [BASE`#']N, where BASE is a decimal number between 2 and 64 +representing the arithmetic base, and N is a number in that base. If +BASE`#' is omitted, then base 10 is used. The digits greater than 9 +are represented by the lowercase letters, the uppercase letters, `@', +and `_', in that order. If BASE is less than or equal to 36, lowercase +and uppercase letters may be used interchangeably to represent numbers +between 10 and 35. + + Operators are evaluated in order of precedence. Sub-expressions in +parentheses are evaluated first and may override the precedence rules +above. + + +File: bashref.info, Node: Aliases, Next: Arrays, Prev: Shell Arithmetic, Up: Bash Features + +6.6 Aliases +=========== + +ALIASES allow a string to be substituted for a word when it is used as +the first word of a simple command. The shell maintains a list of +aliases that may be set and unset with the `alias' and `unalias' +builtin commands. + + The first word of each simple command, if unquoted, is checked to see +if it has an alias. If so, that word is replaced by the text of the +alias. The characters `/', `$', ``', `=' and any of the shell +metacharacters or quoting characters listed above may not appear in an +alias name. The replacement text may contain any valid shell input, +including shell metacharacters. The first word of the replacement text +is tested for aliases, but a word that is identical to an alias being +expanded is not expanded a second time. This means that one may alias +`ls' to `"ls -F"', for instance, and Bash does not try to recursively +expand the replacement text. If the last character of the alias value +is a 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 `alias' command, and removed +with the `unalias' command. + + There is no mechanism for using arguments in the replacement text, +as in `csh'. If arguments are needed, a shell function should be used +(*note Shell Functions::). + + Aliases are not expanded when the shell is not interactive, unless +the `expand_aliases' shell option is set using `shopt' (*note The Shopt +Builtin::). + + The rules concerning the definition and use of aliases are somewhat +confusing. Bash always reads at least one complete line of input +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 `alias' +in compound commands. + + For almost every purpose, shell functions are preferred over aliases. + + +File: bashref.info, Node: Arrays, Next: The Directory Stack, Prev: Aliases, Up: Bash Features + +6.7 Arrays +========== + +Bash provides one-dimensional indexed and associative array variables. +Any variable may be used as an indexed array; the `declare' builtin +will explicitly declare an array. There is no maximum limit on the +size of an array, nor any requirement that members be indexed or +assigned contiguously. Indexed arrays are referenced using integers +(including arithmetic expressions (*note Shell Arithmetic::) and are +zero-based; associative arrays use arbitrary strings. + + An indexed array is created automatically if any variable is +assigned to using the syntax + name[SUBSCRIPT]=VALUE + +The SUBSCRIPT is treated as an arithmetic expression that must evaluate +to a number greater than or equal to zero. To explicitly declare an +array, use + declare -a NAME + The syntax + declare -a NAME[SUBSCRIPT] + is also accepted; the SUBSCRIPT is ignored. + + Associative arrays are created using + declare -A NAME. + + Attributes may be specified for an array variable using the +`declare' and `readonly' builtins. Each attribute applies to all +members of an array. + + Arrays are assigned to using compound assignments of the form + name=(value1 ... valueN) + where each VALUE is of the form `[SUBSCRIPT]='STRING. Indexed array +assignments do not require the bracket and subscript. When assigning +to indexed arrays, if the optional subscript is supplied, that index is +assigned to; otherwise the index of the element assigned is the last +index assigned to by the statement plus one. Indexing starts at zero. + + When assigning to an associative array, the subscript is required. + + This syntax is also accepted by the `declare' builtin. Individual +array elements may be assigned to using the `name['SUBSCRIPT`]='VALUE +syntax introduced above. + + Any element of an array may be referenced using +`${name['SUBSCRIPT`]}'. The braces are required to avoid conflicts +with the shell's filename expansion operators. If the SUBSCRIPT is `@' +or `*', the word expands to all members of the array NAME. These +subscripts differ only when the word appears within double quotes. If +the word is double-quoted, `${name[*]}' expands to a single word with +the value of each array member separated by the first character of the +`IFS' variable, and `${name[@]}' expands each element of NAME to a +separate word. When there are no array members, `${name[@]}' expands +to nothing. If the double-quoted expansion occurs within a word, the +expansion of the first parameter is joined with the beginning part of +the original word, and the expansion of the last parameter is joined +with the last part of the original word. This is analogous to the +expansion of the special parameters `@' and `*'. +`${#name['SUBSCRIPT`]}' expands to the length of `${name['SUBSCRIPT`]}'. +If SUBSCRIPT is `@' or `*', the expansion is the number of elements in +the array. Referencing an array variable without a subscript is +equivalent to referencing with a subscript of 0. + + An array variable is considered set if a subscript has been assigned +a value. The null string is a valid value. + + The `unset' builtin is used to destroy arrays. `unset' +NAME[SUBSCRIPT] destroys the array element at index SUBSCRIPT. Care +must be taken to avoid unwanted side effects caused by filename +expansion. `unset' NAME, where NAME is an array, removes the entire +array. A subscript of `*' or `@' also removes the entire array. + + The `declare', `local', and `readonly' builtins each accept a `-a' +option to specify an indexed array and a `-A' option to specify an +associative array. The `read' builtin accepts a `-a' option to assign +a list of words read from the standard input to an array, and can read +values from the standard input into individual array elements. The +`set' and `declare' builtins display array values in a way that allows +them to be reused as input. + + +File: bashref.info, Node: The Directory Stack, Next: Printing a Prompt, Prev: Arrays, Up: Bash Features + +6.8 The Directory Stack +======================= + +* Menu: + +* Directory Stack Builtins:: Bash builtin commands to manipulate + the directory stack. + + The directory stack is a list of recently-visited directories. The +`pushd' builtin adds directories to the stack as it changes the current +directory, and the `popd' builtin removes specified directories from +the stack and changes the current directory to the directory removed. +The `dirs' builtin displays the contents of the directory stack. + + The contents of the directory stack are also visible as the value of +the `DIRSTACK' shell variable. + + +File: bashref.info, Node: Directory Stack Builtins, Up: The Directory Stack + +6.8.1 Directory Stack Builtins +------------------------------ + +`dirs' + dirs [+N | -N] [-clpv] + Display the list of currently remembered directories. Directories + are added to the list with the `pushd' command; the `popd' command + removes directories from the list. + `+N' + Displays the Nth directory (counting from the left of the + list printed by `dirs' when invoked without options), starting + with zero. + + `-N' + Displays the Nth directory (counting from the right of the + list printed by `dirs' when invoked without options), starting + with zero. + + `-c' + Clears the directory stack by deleting all of the elements. + + `-l' + Produces a longer listing; the default listing format uses a + tilde to denote the home directory. + + `-p' + Causes `dirs' to print the directory stack with one entry per + line. + + `-v' + Causes `dirs' to print the directory stack with one entry per + line, prefixing each entry with its index in the stack. + +`popd' + popd [+N | -N] [-n] + + Remove the top entry from the directory stack, and `cd' to the new + top directory. When no arguments are given, `popd' removes the + top directory from the stack and performs a `cd' to the new top + directory. The elements are numbered from 0 starting at the first + directory listed with `dirs'; i.e., `popd' is equivalent to `popd + +0'. + `+N' + Removes the Nth directory (counting from the left of the list + printed by `dirs'), starting with zero. + + `-N' + Removes the Nth directory (counting from the right of the + list printed by `dirs'), starting with zero. + + `-n' + Suppresses the normal change of directory when removing + directories from the stack, so that only the stack is + manipulated. + +`pushd' + pushd [-n] [+N | -N | DIR ] + + Save the current directory on the top of the directory stack and + then `cd' to DIR. With no arguments, `pushd' exchanges the top + two directories. + + `-n' + Suppresses the normal change of directory when adding + directories to the stack, so that only the stack is + manipulated. + + `+N' + Brings the Nth directory (counting from the left of the list + printed by `dirs', starting with zero) to the top of the list + by rotating the stack. + + `-N' + Brings the Nth directory (counting from the right of the list + printed by `dirs', starting with zero) to the top of the list + by rotating the stack. + + `DIR' + Makes the current working directory be the top of the stack, + and then executes the equivalent of ``cd' DIR'. `cd's to DIR. + + + +File: bashref.info, Node: Printing a Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features + +6.9 Controlling the Prompt +========================== + +The value of the variable `PROMPT_COMMAND' is examined just before Bash +prints each primary prompt. If `PROMPT_COMMAND' is set and has a +non-null value, then the value is executed just as if it had been typed +on the command line. + + In addition, the following table describes the special characters +which can appear in the prompt variables: + +`\a' + A bell character. + +`\d' + The date, in "Weekday Month Date" format (e.g., "Tue May 26"). + +`\D{FORMAT}' + The FORMAT is passed to `strftime'(3) and the result is inserted + into the prompt string; an empty FORMAT results in a + locale-specific time representation. The braces are required. + +`\e' + An escape character. + +`\h' + The hostname, up to the first `.'. + +`\H' + The hostname. + +`\j' + The number of jobs currently managed by the shell. + +`\l' + The basename of the shell's terminal device name. + +`\n' + A newline. + +`\r' + A carriage return. + +`\s' + The name of the shell, the basename of `$0' (the portion following + the final slash). + +`\t' + The time, in 24-hour HH:MM:SS format. + +`\T' + The time, in 12-hour HH:MM:SS format. + +`\@' + The time, in 12-hour am/pm format. + +`\A' + The time, in 24-hour HH:MM format. + +`\u' + The username of the current user. + +`\v' + The version of Bash (e.g., 2.00) + +`\V' + The release of Bash, version + patchlevel (e.g., 2.00.0) + +`\w' + The current working directory, with `$HOME' abbreviated with a + tilde (uses the `$PROMPT_DIRTRIM' variable). + +`\W' + The basename of `$PWD', with `$HOME' abbreviated with a tilde. + +`\!' + The history number of this command. + +`\#' + The command number of this command. + +`\$' + If the effective uid is 0, `#', otherwise `$'. + +`\NNN' + The character whose ASCII code is the octal value NNN. + +`\\' + A backslash. + +`\[' + Begin a sequence of non-printing characters. This could be used to + embed a terminal control sequence into the prompt. + +`\]' + End a sequence of non-printing characters. + + The command number and the history number are usually different: the +history number of a command is its position in the history list, which +may include commands restored from the history file (*note Bash History +Facilities::), while the command number is the position in the sequence +of commands executed during the current shell session. + + After the string is decoded, it is expanded via parameter expansion, +command substitution, arithmetic expansion, and quote removal, subject +to the value of the `promptvars' shell option (*note Bash Builtins::). + + +File: bashref.info, Node: The Restricted Shell, Next: Bash POSIX Mode, Prev: Printing a Prompt, Up: Bash Features + +6.10 The Restricted Shell +========================= + +If Bash is started with the name `rbash', or the `--restricted' or `-r' +option is supplied at invocation, the shell becomes restricted. A +restricted shell is used to set up an environment more controlled than +the standard shell. A restricted shell behaves identically to `bash' +with the exception that the following are disallowed or not performed: + + * Changing directories with the `cd' builtin. + + * Setting or unsetting the values of the `SHELL', `PATH', `ENV', or + `BASH_ENV' variables. + + * Specifying command names containing slashes. + + * Specifying a filename containing a slash as an argument to the `.' + builtin command. + + * Specifying a filename containing a slash as an argument to the `-p' + option to the `hash' builtin command. + + * Importing function definitions from the shell environment at + startup. + + * Parsing the value of `SHELLOPTS' from the shell environment at + startup. + + * Redirecting output using the `>', `>|', `<>', `>&', `&>', and `>>' + redirection operators. + + * Using the `exec' builtin to replace the shell with another command. + + * Adding or deleting builtin commands with the `-f' and `-d' options + to the `enable' builtin. + + * Using the `enable' builtin command to enable disabled shell + builtins. + + * Specifying the `-p' option to the `command' builtin. + + * Turning off restricted mode with `set +r' or `set +o restricted'. + + These restrictions are enforced after any startup files are read. + + When a command that is found to be a shell script is executed (*note +Shell Scripts::), `rbash' turns off any restrictions in the shell +spawned to execute the script. + + +File: bashref.info, Node: Bash POSIX Mode, Prev: The Restricted Shell, Up: Bash Features + +6.11 Bash POSIX Mode +==================== + +Starting Bash with the `--posix' command-line option or executing `set +-o posix' while Bash is running will cause Bash to conform more closely +to the POSIX standard by changing the behavior to match that specified +by POSIX in areas where the Bash default differs. + + When invoked as `sh', Bash enters POSIX mode after reading the +startup files. + + The following list is what's changed when `POSIX mode' is in effect: + + 1. When a command in the hash table no longer exists, Bash will + re-search `$PATH' to find the new location. This is also + available with `shopt -s checkhash'. + + 2. The message printed by the job control code and builtins when a job + exits with a non-zero status is `Done(status)'. + + 3. The message printed by the job control code and builtins when a job + is stopped is `Stopped(SIGNAME)', where SIGNAME is, for example, + `SIGTSTP'. + + 4. The `bg' builtin uses the required format to describe each job + placed in the background, which does not include an indication of + whether the job is the current or previous job. + + 5. Reserved words appearing in a context where reserved words are + recognized do not undergo alias expansion. + + 6. The POSIX `PS1' and `PS2' expansions of `!' to the history number + and `!!' to `!' are enabled, and parameter expansion is performed + on the values of `PS1' and `PS2' regardless of the setting of the + `promptvars' option. + + 7. The POSIX startup files are executed (`$ENV') rather than the + normal Bash files. + + 8. Tilde expansion is only performed on assignments preceding a + command name, rather than on all assignment statements on the line. + + 9. The default history file is `~/.sh_history' (this is the default + value of `$HISTFILE'). + + 10. The output of `kill -l' prints all the signal names on a single + line, separated by spaces, without the `SIG' prefix. + + 11. The `kill' builtin does not accept signal names with a `SIG' + prefix. + + 12. Non-interactive shells exit if FILENAME in `.' FILENAME is not + found. + + 13. Non-interactive shells exit if a syntax error in an arithmetic + expansion results in an invalid expression. + + 14. Redirection operators do not perform filename expansion on the word + in the redirection unless the shell is interactive. + + 15. Redirection operators do not perform word splitting on the word in + the redirection. + + 16. Function names must be valid shell `name's. That is, they may not + contain characters other than letters, digits, and underscores, and + may not start with a digit. Declaring a function with an invalid + name causes a fatal syntax error in non-interactive shells. + + 17. POSIX special builtins are found before shell functions during + command lookup. + + 18. If a POSIX special builtin returns an error status, a + non-interactive shell exits. The fatal errors are those listed in + the POSIX standard, and include things like passing incorrect + options, redirection errors, variable assignment errors for + assignments preceding the command name, and so on. + + 19. If `CDPATH' is set, the `cd' builtin will not implicitly append + the current directory to it. This means that `cd' will fail if no + valid directory name can be constructed from any of the entries in + `$CDPATH', even if the a directory with the same name as the name + given as an argument to `cd' exists in the current directory. + + 20. 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. + + 21. A non-interactive shell exits with an error status if the iteration + variable in a `for' statement or the selection variable in a + `select' statement is a readonly variable. + + 22. Process substitution is not available. + + 23. Assignment statements preceding POSIX special builtins persist in + the shell environment after the builtin completes. + + 24. Assignment statements preceding shell function calls persist in the + shell environment after the function returns, as if a POSIX + special builtin command had been executed. + + 25. The `export' and `readonly' builtin commands display their output + in the format required by POSIX. + + 26. The `trap' builtin displays signal names without the leading `SIG'. + + 27. The `trap' builtin doesn't check the first argument for a possible + signal specification and revert the signal handling to the original + disposition if it is, unless that argument consists solely of + digits and is a valid signal number. If users want to reset the + handler for a given signal to the original disposition, they + should use `-' as the first argument. + + 28. The `.' and `source' builtins do not search the current directory + for the filename argument if it is not found by searching `PATH'. + + 29. Subshells spawned to execute command substitutions inherit the + value of the `-e' option from the parent shell. When not in POSIX + mode, Bash clears the `-e' option in such subshells. + + 30. Alias expansion is always enabled, even in non-interactive shells. + + 31. When the `alias' builtin displays alias definitions, it does not + display them with a leading `alias ' unless the `-p' option is + supplied. + + 32. When the `set' builtin is invoked without options, it does not + display shell function names and definitions. + + 33. When the `set' builtin is invoked without options, it displays + variable values without quotes, unless they contain shell + metacharacters, even if the result contains nonprinting characters. + + 34. When the `cd' builtin is invoked in LOGICAL mode, and the pathname + constructed from `$PWD' and the directory name supplied as an + argument does not refer to an existing directory, `cd' will fail + instead of falling back to PHYSICAL mode. + + 35. When the `pwd' builtin is supplied the `-P' option, it resets + `$PWD' to a pathname containing no symlinks. + + 36. The `pwd' builtin verifies that the value it prints is the same as + the current directory, even if it is not asked to check the file + system with the `-P' option. + + 37. When listing the history, the `fc' builtin does not include an + indication of whether or not a history entry has been modified. + + 38. The default editor used by `fc' is `ed'. + + 39. The `type' and `command' builtins will not report a non-executable + file as having been found, though the shell will attempt to + execute such a file if it is the only so-named file found in + `$PATH'. + + 40. The `vi' editing mode will invoke the `vi' editor directly when + the `v' command is run, instead of checking `$VISUAL' and + `$EDITOR'. + + 41. When the `xpg_echo' option is enabled, Bash does not attempt to + interpret any arguments to `echo' as options. Each argument is + displayed, after escape characters are converted. + + 42. The `ulimit' builtin uses a block size of 512 bytes for the `-c' + and `-f' options. + + 43. The arrival of `SIGCHLD' when a trap is set on `SIGCHLD' does not + interrupt the `wait' builtin and cause it to return immediately. + The trap command is run once for each child that exits. + + + There is other POSIX behavior that Bash does not implement by +default even when in POSIX mode. Specifically: + + 1. The `fc' builtin checks `$EDITOR' as a program to edit history + entries if `FCEDIT' is unset, rather than defaulting directly to + `ed'. `fc' uses `ed' if `EDITOR' is unset. + + 2. As noted above, Bash requires the `xpg_echo' option to be enabled + for the `echo' builtin to be fully conformant. + + + Bash can be configured to be POSIX-conformant by default, by +specifying the `--enable-strict-posix-default' to `configure' when +building (*note Optional Features::). + + +File: bashref.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top + +7 Job Control +************* + +This chapter discusses what job control is, how it works, and how Bash +allows you to access its facilities. + +* Menu: + +* Job Control Basics:: How job control works. +* Job Control Builtins:: Bash builtin commands used to interact + with job control. +* Job Control Variables:: Variables Bash uses to customize job + control. + + +File: bashref.info, Node: Job Control Basics, Next: Job Control Builtins, Up: Job Control + +7.1 Job Control Basics +====================== + +Job control refers to the ability to selectively stop (suspend) the +execution of processes and continue (resume) their execution at a later +point. A user typically employs this facility via an interactive +interface supplied jointly by the operating system kernel's terminal +driver and Bash. + + The shell associates a JOB with each pipeline. It keeps a table of +currently executing jobs, which may be listed with the `jobs' command. +When Bash starts a job asynchronously, it prints a line that looks like: + [1] 25647 + indicating that this job is job number 1 and that the process ID of +the last process in the pipeline associated with this job is 25647. +All of the processes in a single pipeline are members of the same job. +Bash uses the JOB abstraction as the basis for job control. + + To facilitate the implementation of the user interface to job +control, the operating system maintains the notion of a current terminal +process group ID. Members of this process group (processes whose +process group ID is equal to the current terminal process group ID) +receive keyboard-generated signals such as `SIGINT'. These processes +are said to be in the foreground. Background processes are those whose +process group ID differs from the terminal's; such processes are immune +to keyboard-generated signals. Only foreground processes are allowed +to read from or, if the user so specifies with `stty tostop', write to +the terminal. Background processes which attempt to read from (write +to when `stty tostop' is in effect) the terminal are sent a `SIGTTIN' +(`SIGTTOU') signal by the kernel's terminal driver, which, unless +caught, suspends the process. + + If the operating system on which Bash is running supports job +control, Bash contains facilities to use it. Typing the SUSPEND +character (typically `^Z', Control-Z) while a process is running causes +that process to be stopped and returns control to Bash. Typing the +DELAYED SUSPEND character (typically `^Y', Control-Y) causes the +process to be stopped when it attempts to read input from the terminal, +and control to be returned to Bash. The user then manipulates the +state of this job, using the `bg' command to continue it in the +background, the `fg' command to continue it in the foreground, or the +`kill' command to kill it. A `^Z' takes effect immediately, and has +the additional side effect of causing pending output and typeahead to +be discarded. + + There are a number of ways to refer to a job in the shell. The +character `%' introduces a job specification (JOBSPEC). + + Job number `n' may be referred to as `%n'. The symbols `%%' and +`%+' refer to the shell's notion of the current job, which is the last +job stopped while it was in the foreground or started in the background. +A single `%' (with no accompanying job specification) also refers to +the current job. The previous job may be referenced using `%-'. If +there is only a single job, `%+' and `%-' can both be used to refer to +that job. In output pertaining to jobs (e.g., the output of the `jobs' +command), the current job is always flagged with a `+', and the +previous job with a `-'. + + A job may also be referred to using a prefix of the name used to +start it, or using a substring that appears in its command line. For +example, `%ce' refers to a stopped `ce' job. Using `%?ce', on the other +hand, refers to any job containing the string `ce' in its command line. +If the prefix or substring matches more than one job, Bash reports an +error. + + Simply naming a job can be used to bring it into the foreground: +`%1' is a synonym for `fg %1', bringing job 1 from the background into +the foreground. Similarly, `%1 &' resumes job 1 in the background, +equivalent to `bg %1' + + The shell learns immediately whenever a job changes state. +Normally, Bash waits until it is about to print a prompt before +reporting changes in a job's status so as to not interrupt any other +output. If the `-b' option to the `set' builtin is enabled, Bash +reports such changes immediately (*note The Set Builtin::). Any trap +on `SIGCHLD' is executed for each child process that exits. + + If an attempt to exit Bash is made while jobs are stopped, (or +running, if the `checkjobs' option is enabled - see *note The Shopt +Builtin::), the shell prints a warning message, and if the `checkjobs' +option is enabled, lists the jobs and their statuses. The `jobs' +command may then be used to inspect their status. If a second attempt +to exit is made without an intervening command, Bash does not print +another warning, and any stopped jobs are terminated. + + +File: bashref.info, Node: Job Control Builtins, Next: Job Control Variables, Prev: Job Control Basics, Up: Job Control + +7.2 Job Control Builtins +======================== + +`bg' + bg [JOBSPEC ...] + Resume each suspended job JOBSPEC in the background, as if it had + been started with `&'. If JOBSPEC is not supplied, the current + job is used. The return status is zero unless it is run when job + control is not enabled, or, when run with job control enabled, any + JOBSPEC was not found or specifies a job that was started without + job control. + +`fg' + fg [JOBSPEC] + Resume the job JOBSPEC in the foreground and make it the current + job. If JOBSPEC is not supplied, the current job is used. The + return status is that of the command placed into the foreground, + or non-zero if run when job control is disabled or, when run with + job control enabled, JOBSPEC does not specify a valid job or + JOBSPEC specifies a job that was started without job control. + +`jobs' + jobs [-lnprs] [JOBSPEC] + jobs -x COMMAND [ARGUMENTS] + + The first form lists the active jobs. The options have the + following meanings: + + `-l' + List process IDs in addition to the normal information. + + `-n' + Display information only about jobs that have changed status + since the user was last notified of their status. + + `-p' + List only the process ID of the job's process group leader. + + `-r' + Restrict output to running jobs. + + `-s' + Restrict output to stopped jobs. + + If JOBSPEC is given, output is restricted to information about + that job. If JOBSPEC is not supplied, the status of all jobs is + listed. + + If the `-x' option is supplied, `jobs' replaces any JOBSPEC found + in COMMAND or ARGUMENTS with the corresponding process group ID, + and executes COMMAND, passing it ARGUMENTs, returning its exit + status. + +`kill' + kill [-s SIGSPEC] [-n SIGNUM] [-SIGSPEC] JOBSPEC or PID + kill -l [EXIT_STATUS] + Send a signal specified by SIGSPEC or SIGNUM to the process named + by job specification JOBSPEC or process ID PID. SIGSPEC is either + a case-insensitive signal name such as `SIGINT' (with or without + the `SIG' prefix) or a signal number; SIGNUM is a signal number. + If SIGSPEC and SIGNUM are not present, `SIGTERM' is used. The + `-l' option lists the signal names. If any arguments are supplied + when `-l' is given, the names of the signals corresponding to the + arguments are listed, and the return status is zero. EXIT_STATUS + is a number specifying a signal number or the exit status of a + process terminated by a signal. The return status is zero if at + least one signal was successfully sent, or non-zero if an error + occurs or an invalid option is encountered. + +`wait' + wait [JOBSPEC or PID ...] + Wait until the child process specified by each process ID PID or + job specification JOBSPEC exits and return the exit status of the + last command waited for. If a job spec is given, all processes in + the job are waited for. If no arguments are given, all currently + active child processes are waited for, and the return status is + zero. If neither JOBSPEC nor PID specifies an active child process + of the shell, the return status is 127. + +`disown' + disown [-ar] [-h] [JOBSPEC ...] + Without options, each JOBSPEC is removed from the table of active + jobs. If the `-h' option is given, the job is not removed from + the table, but is marked so that `SIGHUP' is not sent to the job + if the shell receives a `SIGHUP'. If JOBSPEC is not present, and + neither the `-a' nor `-r' option is supplied, the current job is + used. If no JOBSPEC is supplied, the `-a' option means to remove + or mark all jobs; the `-r' option without a JOBSPEC argument + restricts operation to running jobs. + +`suspend' + suspend [-f] + Suspend the execution of this shell until it receives a `SIGCONT' + signal. A login shell cannot be suspended; the `-f' option can be + used to override this and force the suspension. + + + When job control is not active, the `kill' and `wait' builtins do +not accept JOBSPEC arguments. They must be supplied process IDs. + + +File: bashref.info, Node: Job Control Variables, Prev: Job Control Builtins, Up: Job Control + +7.3 Job Control Variables +========================= + +`auto_resume' + This variable controls how the shell interacts with the user and + job control. If this variable exists then single word simple + commands without redirections are treated as candidates for + resumption of an existing job. There is no ambiguity allowed; if + there is more than one job beginning with the string typed, then + the most recently accessed job will be selected. The name of a + stopped job, in this context, is the command line used to start + it. If this variable is set to the value `exact', the string + supplied must match the name of a stopped job exactly; if set to + `substring', the string supplied needs to match a substring of the + name of a stopped job. The `substring' value provides + functionality analogous to the `%?' job ID (*note Job Control + Basics::). If set to any other value, the supplied string must be + a prefix of a stopped job's name; this provides functionality + analogous to the `%' job ID. + + + +File: bashref.info, Node: Command Line Editing, Next: Using History Interactively, Prev: Job Control, Up: Top + +8 Command Line Editing +********************** + +This chapter describes the basic features of the GNU command line +editing interface. Command line editing is provided by the Readline +library, which is used by several different programs, including Bash. +Command line editing is enabled by default when using an interactive +shell, unless the `--noediting' option is supplied at shell invocation. +Line editing is also used when using the `-e' option to the `read' +builtin command (*note Bash Builtins::). By default, the line editing +commands are similar to those of emacs. A vi-style line editing +interface is also available. Line editing can be enabled at any time +using the `-o emacs' or `-o vi' options to the `set' builtin command +(*note The Set Builtin::), or disabled using the `+o emacs' or `+o vi' +options to `set'. + +* Menu: + +* Introduction and Notation:: Notation used in this text. +* Readline Interaction:: The minimum set of commands for editing a line. +* Readline Init File:: Customizing Readline from a user's view. +* Bindable Readline Commands:: A description of most of the Readline commands + available for binding +* Readline vi Mode:: A short description of how to make Readline + behave like the vi editor. + +* Programmable Completion:: How to specify the possible completions for + a specific command. +* Programmable Completion Builtins:: Builtin commands to specify how to + complete arguments for a particular command. + + +File: bashref.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing + +8.1 Introduction to Line Editing +================================ + +The following paragraphs describe the notation used to represent +keystrokes. + + The text `C-k' is read as `Control-K' and describes the character +produced when the key is pressed while the Control key is depressed. + + The text `M-k' is read as `Meta-K' and describes the character +produced when the Meta key (if you have one) is depressed, and the +key is pressed. The Meta key is labeled on many keyboards. On +keyboards with two keys labeled (usually to either side of the +space bar), the on the left side is generally set to work as a +Meta key. The key on the right may also be configured to work as +a Meta key or may be configured as some other modifier, such as a +Compose key for typing accented characters. + + If you do not have a Meta or key, or another key working as a +Meta key, the identical keystroke can be generated by typing +_first_, and then typing . Either process is known as "metafying" +the key. + + The text `M-C-k' is read as `Meta-Control-k' and describes the +character produced by "metafying" `C-k'. + + In addition, several keys have their own names. Specifically, +, , , , , and all stand for themselves +when seen in this text, or in an init file (*note Readline Init File::). +If your keyboard lacks a key, typing will produce the +desired character. The key may be labeled or on +some keyboards. + + +File: bashref.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing + +8.2 Readline Interaction +======================== + +Often during an interactive session you type in a long line of text, +only to notice that the first word on the line is misspelled. The +Readline library gives you a set of commands for manipulating the text +as you type it in, allowing you to just fix your typo, and not forcing +you to retype the majority of the line. Using these editing commands, +you move the cursor to the place that needs correction, and delete or +insert the text of the corrections. Then, when you are satisfied with +the line, you simply press . You do not have to be at the end of +the line to press ; the entire line is accepted regardless of the +location of the cursor within the line. + +* Menu: + +* Readline Bare Essentials:: The least you need to know about Readline. +* Readline Movement Commands:: Moving about the input line. +* Readline Killing Commands:: How to delete text, and how to get it back! +* Readline Arguments:: Giving numeric arguments to commands. +* Searching:: Searching through previous lines. + + +File: bashref.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction + +8.2.1 Readline Bare Essentials +------------------------------ + +In order to enter characters into the line, simply type them. The typed +character appears where the cursor was, and then the cursor moves one +space to the right. If you mistype a character, you can use your erase +character to back up and delete the mistyped character. + + Sometimes you may mistype a character, and not notice the error +until you have typed several other characters. In that case, you can +type `C-b' to move the cursor to the left, and then correct your +mistake. Afterwards, you can move the cursor to the right with `C-f'. + + When you add text in the middle of a line, you will notice that +characters to the right of the cursor are `pushed over' to make room +for the text that you have inserted. Likewise, when you delete text +behind the cursor, characters to the right of the cursor are `pulled +back' to fill in the blank space created by the removal of the text. A +list of the bare essentials for editing the text of an input line +follows. + +`C-b' + Move back one character. + +`C-f' + Move forward one character. + + or + Delete the character to the left of the cursor. + +`C-d' + Delete the character underneath the cursor. + +Printing characters + Insert the character into the line at the cursor. + +`C-_' or `C-x C-u' + Undo the last editing command. You can undo all the way back to an + empty line. + +(Depending on your configuration, the key be set to delete +the character to the left of the cursor and the key set to delete +the character underneath the cursor, like `C-d', rather than the +character to the left of the cursor.) + + +File: bashref.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction + +8.2.2 Readline Movement Commands +-------------------------------- + +The above table describes the most basic keystrokes that you need in +order to do editing of the input line. For your convenience, many +other commands have been added in addition to `C-b', `C-f', `C-d', and +. Here are some commands for moving more rapidly about the line. + +`C-a' + Move to the start of the line. + +`C-e' + Move to the end of the line. + +`M-f' + Move forward a word, where a word is composed of letters and + digits. + +`M-b' + Move backward a word. + +`C-l' + Clear the screen, reprinting the current line at the top. + + Notice how `C-f' moves forward a character, while `M-f' moves +forward a word. It is a loose convention that control keystrokes +operate on characters while meta keystrokes operate on words. + + +File: bashref.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction + +8.2.3 Readline Killing Commands +------------------------------- + +"Killing" text means to delete the text from the line, but to save it +away for later use, usually by "yanking" (re-inserting) it back into +the line. (`Cut' and `paste' are more recent jargon for `kill' and +`yank'.) + + If the description for a command says that it `kills' text, then you +can be sure that you can get the text back in a different (or the same) +place later. + + When you use a kill command, the text is saved in a "kill-ring". +Any number of consecutive kills save all of the killed text together, so +that when you yank it back, you get it all. The kill ring is not line +specific; the text that you killed on a previously typed line is +available to be yanked back later, when you are typing another line. + + Here is the list of commands for killing text. + +`C-k' + Kill the text from the current cursor position to the end of the + line. + +`M-d' + Kill from the cursor to the end of the current word, or, if between + words, to the end of the next word. Word boundaries are the same + as those used by `M-f'. + +`M-' + Kill from the cursor the start of the current word, or, if between + words, to the start of the previous word. Word boundaries are the + same as those used by `M-b'. + +`C-w' + Kill from the cursor to the previous whitespace. This is + different than `M-' because the word boundaries differ. + + + Here is how to "yank" the text back into the line. Yanking means to +copy the most-recently-killed text from the kill buffer. + +`C-y' + Yank the most recently killed text back into the buffer at the + cursor. + +`M-y' + Rotate the kill-ring, and yank the new top. You can only do this + if the prior command is `C-y' or `M-y'. + + +File: bashref.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction + +8.2.4 Readline Arguments +------------------------ + +You can pass numeric arguments to Readline commands. Sometimes the +argument acts as a repeat count, other times it is the sign of the +argument that is significant. If you pass a negative argument to a +command which normally acts in a forward direction, that command will +act in a backward direction. For example, to kill text back to the +start of the line, you might type `M-- C-k'. + + The general way to pass numeric arguments to a command is to type +meta digits before the command. If the first `digit' typed is a minus +sign (`-'), then the sign of the argument will be negative. Once you +have typed one meta digit to get the argument started, you can type the +remainder of the digits, and then the command. For example, to give +the `C-d' command an argument of 10, you could type `M-1 0 C-d', which +will delete the next ten characters on the input line. + + +File: bashref.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction + +8.2.5 Searching for Commands in the History +------------------------------------------- + +Readline provides commands for searching through the command history +(*note Bash History Facilities::) for lines containing a specified +string. There are two search modes: "incremental" and +"non-incremental". + + Incremental searches begin before the user has finished typing the +search string. As each character of the search string is typed, +Readline displays the next entry from the history matching the string +typed so far. An incremental search requires only as many characters +as needed to find the desired history entry. To search backward in the +history for a particular string, type `C-r'. Typing `C-s' searches +forward through the history. The characters present in the value of +the `isearch-terminators' variable are used to terminate an incremental +search. If that variable has not been assigned a value, the and +`C-J' characters will terminate an incremental search. `C-g' will +abort an incremental search and restore the original line. When the +search is terminated, the history entry containing the search string +becomes the current line. + + To find other matching entries in the history list, type `C-r' or +`C-s' as appropriate. This will search backward or forward in the +history for the next entry matching the search string typed so far. +Any other key sequence bound to a Readline command will terminate the +search and execute that command. For instance, a will terminate +the search and accept the line, thereby executing the command from the +history list. A movement command will terminate the search, make the +last line found the current line, and begin editing. + + Readline remembers the last incremental search string. If two +`C-r's are typed without any intervening characters defining a new +search string, any remembered search string is used. + + Non-incremental searches read the entire search string before +starting to search for matching history lines. The search string may be +typed by the user or be part of the contents of the current line. + + +File: bashref.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing + +8.3 Readline Init File +====================== + +Although the Readline library comes with a set of Emacs-like +keybindings installed by default, it is possible to use a different set +of keybindings. Any user can customize programs that use Readline by +putting commands in an "inputrc" file, conventionally in his home +directory. The name of this file is taken from the value of the shell +variable `INPUTRC'. If that variable is unset, the default is +`~/.inputrc'. If that file does not exist or cannot be read, the +ultimate default is `/etc/inputrc'. + + When a program which uses the Readline library starts up, the init +file is read, and the key bindings are set. + + In addition, the `C-x C-r' command re-reads this init file, thus +incorporating any changes that you might have made to it. + +* Menu: + +* Readline Init File Syntax:: Syntax for the commands in the inputrc file. + +* Conditional Init Constructs:: Conditional key bindings in the inputrc file. + +* Sample Init File:: An example inputrc file. + + +File: bashref.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File + +8.3.1 Readline Init File Syntax +------------------------------- + +There are only a few basic constructs allowed in the Readline init +file. Blank lines are ignored. Lines beginning with a `#' are +comments. Lines beginning with a `$' indicate conditional constructs +(*note Conditional Init Constructs::). Other lines denote variable +settings and key bindings. + +Variable Settings + You can modify the run-time behavior of Readline by altering the + values of variables in Readline using the `set' command within the + init file. The syntax is simple: + + set VARIABLE VALUE + + Here, for example, is how to change from the default Emacs-like + key binding to use `vi' line editing commands: + + set editing-mode vi + + Variable names and values, where appropriate, are recognized + without regard to case. Unrecognized variable names are ignored. + + Boolean variables (those that can be set to on or off) are set to + on if the value is null or empty, ON (case-insensitive), or 1. + Any other value results in the variable being set to off. + + The `bind -V' command lists the current Readline variable names + and values. *Note Bash Builtins::. + + A great deal of run-time behavior is changeable with the following + variables. + + `bell-style' + Controls what happens when Readline wants to ring the + terminal bell. If set to `none', Readline never rings the + bell. If set to `visible', Readline uses a visible bell if + one is available. If set to `audible' (the default), + Readline attempts to ring the terminal's bell. + + `bind-tty-special-chars' + If set to `on', Readline attempts to bind the control + characters treated specially by the kernel's terminal driver + to their Readline equivalents. + + `comment-begin' + The string to insert at the beginning of the line when the + `insert-comment' command is executed. The default value is + `"#"'. + + `completion-ignore-case' + If set to `on', Readline performs filename matching and + completion in a case-insensitive fashion. The default value + is `off'. + + `completion-prefix-display-length' + The length in characters of the common prefix of a list of + possible completions that is displayed without modification. + When set to a value greater than zero, common prefixes longer + than this value are replaced with an ellipsis when displaying + possible completions. + + `completion-query-items' + The number of possible completions that determines when the + user is asked whether the list of possibilities should be + displayed. If the number of possible completions is greater + than this value, Readline will ask the user whether or not he + wishes to view them; otherwise, they are simply listed. This + variable must be set to an integer value greater than or + equal to 0. A negative value means Readline should never ask. + The default limit is `100'. + + `convert-meta' + If set to `on', Readline will convert characters with the + eighth bit set to an ASCII key sequence by stripping the + eighth bit and prefixing an character, converting them + to a meta-prefixed key sequence. The default value is `on'. + + `disable-completion' + If set to `On', Readline will inhibit word completion. + Completion characters will be inserted into the line as if + they had been mapped to `self-insert'. The default is `off'. + + `editing-mode' + The `editing-mode' variable controls which default set of key + bindings is used. By default, Readline starts up in Emacs + editing mode, where the keystrokes are most similar to Emacs. + This variable can be set to either `emacs' or `vi'. + + `echo-control-characters' + When set to `on', on operating systems that indicate they + support it, readline echoes a character corresponding to a + signal generated from the keyboard. The default is `on'. + + `enable-keypad' + When set to `on', Readline will try to enable the application + keypad when it is called. Some systems need this to enable + the arrow keys. The default is `off'. + + `enable-meta-key' + When set to `on', Readline will try to enable any meta + modifier key the terminal claims to support when it is + called. On many terminals, the meta key is used to send + eight-bit characters. The default is `on'. + + `expand-tilde' + If set to `on', tilde expansion is performed when Readline + attempts word completion. The default is `off'. + + `history-preserve-point' + If set to `on', the history code attempts to place the point + (the current cursor position) at the same location on each + history line retrieved with `previous-history' or + `next-history'. The default is `off'. + + `history-size' + Set the maximum number of history entries saved in the + history list. If set to zero, the number of entries in the + history list is not limited. + + `horizontal-scroll-mode' + This variable can be set to either `on' or `off'. Setting it + to `on' means that the text of the lines being edited will + scroll horizontally on a single screen line when they are + longer than the width of the screen, instead of wrapping onto + a new screen line. By default, this variable is set to `off'. + + `input-meta' + If set to `on', Readline will enable eight-bit input (it will + not clear the eighth bit in the characters it reads), + regardless of what the terminal claims it can support. The + default value is `off'. The name `meta-flag' is a synonym + for this variable. + + `isearch-terminators' + The string of characters that should terminate an incremental + search without subsequently executing the character as a + command (*note Searching::). If this variable has not been + given a value, the characters and `C-J' will terminate + an incremental search. + + `keymap' + Sets Readline's idea of the current keymap for key binding + commands. Acceptable `keymap' names are `emacs', + `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move', + `vi-command', and `vi-insert'. `vi' is equivalent to + `vi-command'; `emacs' is equivalent to `emacs-standard'. The + default value is `emacs'. The value of the `editing-mode' + variable also affects the default keymap. + + `mark-directories' + If set to `on', completed directory names have a slash + appended. The default is `on'. + + `mark-modified-lines' + This variable, when set to `on', causes Readline to display an + asterisk (`*') at the start of history lines which have been + modified. This variable is `off' by default. + + `mark-symlinked-directories' + If set to `on', completed names which are symbolic links to + directories have a slash appended (subject to the value of + `mark-directories'). The default is `off'. + + `match-hidden-files' + This variable, when set to `on', causes Readline to match + files whose names begin with a `.' (hidden files) when + performing filename completion, unless the leading `.' is + supplied by the user in the filename to be completed. This + variable is `on' by default. + + `output-meta' + If set to `on', Readline will display characters with the + eighth bit set directly rather than as a meta-prefixed escape + sequence. The default is `off'. + + `page-completions' + If set to `on', Readline uses an internal `more'-like pager + to display a screenful of possible completions at a time. + This variable is `on' by default. + + `print-completions-horizontally' + If set to `on', Readline will display completions with matches + sorted horizontally in alphabetical order, rather than down + the screen. The default is `off'. + + `revert-all-at-newline' + If set to `on', Readline will undo all changes to history + lines before returning when `accept-line' is executed. By + default, history lines may be modified and retain individual + undo lists across calls to `readline'. The default is `off'. + + `show-all-if-ambiguous' + This alters the default behavior of the completion functions. + If set to `on', words which have more than one possible + completion cause the matches to be listed immediately instead + of ringing the bell. The default value is `off'. + + `show-all-if-unmodified' + This alters the default behavior of the completion functions + in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to + `on', words which have more than one possible completion + without any possible partial completion (the possible + completions don't share a common prefix) cause the matches to + be listed immediately instead of ringing the bell. The + default value is `off'. + + `skip-completed-text' + If set to `on', this alters the default completion behavior + when inserting a single match into the line. It's only + active when performing completion in the middle of a word. + If enabled, readline does not insert characters from the + completion that match characters after point in the word + being completed, so portions of the word following the cursor + are not duplicated. For instance, if this is enabled, + attempting completion when the cursor is after the `e' in + `Makefile' will result in `Makefile' rather than + `Makefilefile', assuming there is a single possible + completion. The default value is `off'. + + `visible-stats' + If set to `on', a character denoting a file's type is + appended to the filename when listing possible completions. + The default is `off'. + + +Key Bindings + The syntax for controlling key bindings in the init file is + simple. First you need to find the name of the command that you + want to change. The following sections contain tables of the + command name, the default keybinding, if any, and a short + description of what the command does. + + Once you know the name of the command, simply place on a line in + the init file the name of the key you wish to bind the command to, + a colon, and then the name of the command. There can be no space + between the key name and the colon - that will be interpreted as + part of the key name. The name of the key can be expressed in + different ways, depending on what you find most comfortable. + + In addition to command names, readline allows keys to be bound to + a string that is inserted when the key is pressed (a MACRO). + + The `bind -p' command displays Readline function names and + bindings in a format that can put directly into an initialization + file. *Note Bash Builtins::. + + KEYNAME: FUNCTION-NAME or MACRO + KEYNAME is the name of a key spelled out in English. For + example: + Control-u: universal-argument + Meta-Rubout: backward-kill-word + Control-o: "> output" + + In the above example, `C-u' is bound to the function + `universal-argument', `M-DEL' is bound to the function + `backward-kill-word', and `C-o' is bound to run the macro + expressed on the right hand side (that is, to insert the text + `> output' into the line). + + A number of symbolic character names are recognized while + processing this key binding syntax: DEL, ESC, ESCAPE, LFD, + NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. + + "KEYSEQ": FUNCTION-NAME or MACRO + KEYSEQ differs from KEYNAME above in that strings denoting an + entire key sequence can be specified, by placing the key + sequence in double quotes. Some GNU Emacs style key escapes + can be used, as in the following example, but the special + character names are not recognized. + + "\C-u": universal-argument + "\C-x\C-r": re-read-init-file + "\e[11~": "Function Key 1" + + In the above example, `C-u' is again bound to the function + `universal-argument' (just as it was in the first example), + `C-x C-r' is bound to the function `re-read-init-file', and + ` <[> <1> <1> <~>' is bound to insert the text `Function + Key 1'. + + + The following GNU Emacs style escape sequences are available when + specifying key sequences: + + `\C-' + control prefix + + `\M-' + meta prefix + + `\e' + an escape character + + `\\' + backslash + + `\"' + <">, a double quotation mark + + `\'' + <'>, a single quote or apostrophe + + In addition to the GNU Emacs style escape sequences, a second set + of backslash escapes is available: + + `\a' + alert (bell) + + `\b' + backspace + + `\d' + delete + + `\f' + form feed + + `\n' + newline + + `\r' + carriage return + + `\t' + horizontal tab + + `\v' + vertical tab + + `\NNN' + the eight-bit character whose value is the octal value NNN + (one to three digits) + + `\xHH' + the eight-bit character whose value is the hexadecimal value + HH (one or two hex digits) + + When entering the text of a macro, single or double quotes must be + used to indicate a macro definition. Unquoted text is assumed to + be a function name. In the macro body, the backslash escapes + described above are expanded. Backslash will quote any other + character in the macro text, including `"' and `''. For example, + the following binding will make `C-x \' insert a single `\' into + the line: + "\C-x\\": "\\" + + + +File: bashref.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File + +8.3.2 Conditional Init Constructs +--------------------------------- + +Readline implements a facility similar in spirit to the conditional +compilation features of the C preprocessor which allows key bindings +and variable settings to be performed as the result of tests. There +are four parser directives used. + +`$if' + The `$if' construct allows bindings to be made based on the + editing mode, the terminal being used, or the application using + Readline. The text of the test extends to the end of the line; no + characters are required to isolate it. + + `mode' + The `mode=' form of the `$if' directive is used to test + whether Readline is in `emacs' or `vi' mode. This may be + used in conjunction with the `set keymap' command, for + instance, to set bindings in the `emacs-standard' and + `emacs-ctlx' keymaps only if Readline is starting out in + `emacs' mode. + + `term' + The `term=' form may be used to include terminal-specific key + bindings, perhaps to bind the key sequences output by the + terminal's function keys. The word on the right side of the + `=' is tested against both the full name of the terminal and + the portion of the terminal name before the first `-'. This + allows `sun' to match both `sun' and `sun-cmd', for instance. + + `application' + The APPLICATION construct is used to include + application-specific settings. Each program using the + Readline library sets the APPLICATION NAME, and you can test + for a particular value. This could be used to bind key + sequences to functions useful for a specific program. For + instance, the following command adds a key sequence that + quotes the current or previous word in Bash: + $if Bash + # Quote the current or previous word + "\C-xq": "\eb\"\ef\"" + $endif + +`$endif' + This command, as seen in the previous example, terminates an `$if' + command. + +`$else' + Commands in this branch of the `$if' directive are executed if the + test fails. + +`$include' + This directive takes a single filename as an argument and reads + commands and bindings from that file. For example, the following + directive reads from `/etc/inputrc': + $include /etc/inputrc + + +File: bashref.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File + +8.3.3 Sample Init File +---------------------- + +Here is an example of an INPUTRC file. This illustrates key binding, +variable assignment, and conditional syntax. + + + # This file controls the behaviour of line input editing for + # programs that use the GNU Readline library. Existing + # programs include FTP, Bash, and GDB. + # + # You can re-read the inputrc file with C-x C-r. + # Lines beginning with '#' are comments. + # + # First, include any systemwide bindings and variable + # assignments from /etc/Inputrc + $include /etc/Inputrc + + # + # Set various bindings for emacs mode. + + set editing-mode emacs + + $if mode=emacs + + Meta-Control-h: backward-kill-word Text after the function name is ignored + + # + # Arrow keys in keypad mode + # + #"\M-OD": backward-char + #"\M-OC": forward-char + #"\M-OA": previous-history + #"\M-OB": next-history + # + # Arrow keys in ANSI mode + # + "\M-[D": backward-char + "\M-[C": forward-char + "\M-[A": previous-history + "\M-[B": next-history + # + # Arrow keys in 8 bit keypad mode + # + #"\M-\C-OD": backward-char + #"\M-\C-OC": forward-char + #"\M-\C-OA": previous-history + #"\M-\C-OB": next-history + # + # Arrow keys in 8 bit ANSI mode + # + #"\M-\C-[D": backward-char + #"\M-\C-[C": forward-char + #"\M-\C-[A": previous-history + #"\M-\C-[B": next-history + + C-q: quoted-insert + + $endif + + # An old-style binding. This happens to be the default. + TAB: complete + + # Macros that are convenient for shell interaction + $if Bash + # edit the path + "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" + # prepare to type a quoted word -- + # insert open and close double quotes + # and move to just after the open quote + "\C-x\"": "\"\"\C-b" + # insert a backslash (testing backslash escapes + # in sequences and macros) + "\C-x\\": "\\" + # Quote the current or previous word + "\C-xq": "\eb\"\ef\"" + # Add a binding to refresh the line, which is unbound + "\C-xr": redraw-current-line + # Edit variable on current line. + "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" + $endif + + # use a visible bell if one is available + set bell-style visible + + # don't strip characters to 7 bits when reading + set input-meta on + + # allow iso-latin1 characters to be inserted rather + # than converted to prefix-meta sequences + set convert-meta off + + # display characters with the eighth bit set directly + # rather than as meta-prefixed characters + set output-meta on + + # if there are more than 150 possible completions for + # a word, ask the user if he wants to see all of them + set completion-query-items 150 + + # For FTP + $if Ftp + "\C-xg": "get \M-?" + "\C-xt": "put \M-?" + "\M-.": yank-last-arg + $endif + + +File: bashref.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing + +8.4 Bindable Readline Commands +============================== + +* Menu: + +* Commands For Moving:: Moving about the line. +* Commands For History:: Getting at previous lines. +* Commands For Text:: Commands for changing text. +* Commands For Killing:: Commands for killing and yanking. +* Numeric Arguments:: Specifying numeric arguments, repeat counts. +* Commands For Completion:: Getting Readline to do the typing for you. +* Keyboard Macros:: Saving and re-executing typed characters +* Miscellaneous Commands:: Other miscellaneous commands. + + This section describes Readline commands that may be bound to key +sequences. You can list your key bindings by executing `bind -P' or, +for a more terse format, suitable for an INPUTRC file, `bind -p'. +(*Note Bash Builtins::.) Command names without an accompanying key +sequence are unbound by default. + + In the following descriptions, "point" refers to the current cursor +position, and "mark" refers to a cursor position saved by the +`set-mark' command. The text between the point and mark is referred to +as the "region". + + +File: bashref.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands + +8.4.1 Commands For Moving +------------------------- + +`beginning-of-line (C-a)' + Move to the start of the current line. + +`end-of-line (C-e)' + Move to the end of the line. + +`forward-char (C-f)' + Move forward a character. + +`backward-char (C-b)' + Move back a character. + +`forward-word (M-f)' + Move forward to the end of the next word. Words are composed of + letters and digits. + +`backward-word (M-b)' + Move back to the start of the current or previous word. Words are + composed of letters and digits. + +`shell-forward-word ()' + Move forward to the end of the next word. Words are delimited by + non-quoted shell metacharacters. + +`shell-backward-word ()' + Move back to the start of the current or previous word. Words are + delimited by non-quoted shell metacharacters. + +`clear-screen (C-l)' + Clear the screen and redraw the current line, leaving the current + line at the top of the screen. + +`redraw-current-line ()' + Refresh the current line. By default, this is unbound. + + + +File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands + +8.4.2 Commands For Manipulating The History +------------------------------------------- + +`accept-line (Newline or Return)' + Accept the line regardless of where the cursor is. If this line is + non-empty, add it to the history list according to the setting of + the `HISTCONTROL' and `HISTIGNORE' variables. If this line is a + modified history line, then restore the history line to its + original state. + +`previous-history (C-p)' + Move `back' through the history list, fetching the previous + command. + +`next-history (C-n)' + Move `forward' through the history list, fetching the next command. + +`beginning-of-history (M-<)' + Move to the first line in the history. + +`end-of-history (M->)' + Move to the end of the input history, i.e., the line currently + being entered. + +`reverse-search-history (C-r)' + Search backward starting at the current line and moving `up' + through the history as necessary. This is an incremental search. + +`forward-search-history (C-s)' + Search forward starting at the current line and moving `down' + through the the history as necessary. This is an incremental + search. + +`non-incremental-reverse-search-history (M-p)' + Search backward starting at the current line and moving `up' + through the history as necessary using a non-incremental search + for a string supplied by the user. + +`non-incremental-forward-search-history (M-n)' + Search forward starting at the current line and moving `down' + through the the history as necessary using a non-incremental search + for a string supplied by the user. + +`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. By default, this command is unbound. + +`history-search-backward ()' + Search backward through the history for the string of characters + between the start of the current line and the point. This is a + non-incremental search. By default, this command is unbound. + +`yank-nth-arg (M-C-y)' + Insert the first argument to the previous command (usually the + second word on the previous line) at point. With an argument N, + insert the Nth word from the previous command (the words in the + previous command begin with word 0). A negative argument inserts + the Nth word from the end of the previous command. Once the + argument N is computed, the argument is extracted as if the `!N' + history expansion had been specified. + +`yank-last-arg (M-. or M-_)' + Insert last argument to the previous command (the last word of the + previous history entry). With an argument, behave exactly like + `yank-nth-arg'. Successive calls to `yank-last-arg' move back + through the history list, inserting the last argument of each line + in turn. The history expansion facilities are used to extract the + last argument, as if the `!$' history expansion had been specified. + + + +File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands + +8.4.3 Commands For Changing Text +-------------------------------- + +`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 `delete-char', then return EOF. + +`backward-delete-char (Rubout)' + Delete the character behind the cursor. A numeric argument means + to kill the characters instead of deleting them. + +`forward-backward-delete-char ()' + Delete the character under the cursor, unless the cursor is at the + end of the line, in which case the character behind the cursor is + deleted. By default, this is not bound to a key. + +`quoted-insert (C-q or C-v)' + Add the next character typed to the line verbatim. This is how to + insert key sequences like `C-q', for example. + +`self-insert (a, b, A, 1, !, ...)' + Insert yourself. + +`transpose-chars (C-t)' + Drag the character before the cursor forward over the character at + the cursor, moving the cursor forward as well. If the insertion + point is at the end of the line, then this transposes the last two + characters of the line. Negative arguments have no effect. + +`transpose-words (M-t)' + Drag the word before point past the word after point, moving point + past that word as well. If the insertion point is at the end of + the line, this transposes the last two words on the line. + +`upcase-word (M-u)' + Uppercase the current (or following) word. With a negative + argument, uppercase the previous word, but do not move the cursor. + +`downcase-word (M-l)' + Lowercase the current (or following) word. With a negative + argument, lowercase the previous word, but do not move the cursor. + +`capitalize-word (M-c)' + Capitalize the current (or following) word. With a negative + argument, capitalize the previous word, but do not move the cursor. + +`overwrite-mode ()' + Toggle overwrite mode. With an explicit positive numeric argument, + switches to overwrite mode. With an explicit non-positive numeric + argument, switches to insert mode. This command affects only + `emacs' mode; `vi' mode does overwrite differently. Each call to + `readline()' starts in insert mode. + + In overwrite mode, characters bound to `self-insert' replace the + text at point rather than pushing the text to the right. + Characters bound to `backward-delete-char' replace the character + before point with a space. + + By default, this command is unbound. + + + +File: bashref.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands + +8.4.4 Killing And Yanking +------------------------- + +`kill-line (C-k)' + Kill the text from point to the end of the line. + +`backward-kill-line (C-x Rubout)' + Kill backward to the beginning of the line. + +`unix-line-discard (C-u)' + Kill backward from the cursor to the beginning of the current line. + +`kill-whole-line ()' + Kill all characters on the current line, no matter where point is. + By default, this is unbound. + +`kill-word (M-d)' + Kill from point to the end of the current word, or if between + words, to the end of the next word. Word boundaries are the same + as `forward-word'. + +`backward-kill-word (M-)' + Kill the word behind point. Word boundaries are the same as + `backward-word'. + +`shell-kill-word ()' + Kill from point to the end of the current word, or if between + words, to the end of the next word. Word boundaries are the same + as `shell-forward-word'. + +`backward-kill-word ()' + Kill the word behind point. Word boundaries are the same as + `shell-backward-word'. + +`unix-word-rubout (C-w)' + Kill the word behind point, using white space as a word boundary. + The killed text is saved on the kill-ring. + +`unix-filename-rubout ()' + Kill the word behind point, using white space and the slash + character as the word boundaries. The killed text is saved on the + kill-ring. + +`delete-horizontal-space ()' + Delete all spaces and tabs around point. By default, this is + unbound. + +`kill-region ()' + Kill the text in the current region. By default, this command is + unbound. + +`copy-region-as-kill ()' + Copy the text in the region to the kill buffer, so it can be yanked + right away. By default, this command is unbound. + +`copy-backward-word ()' + Copy the word before point to the kill buffer. The word + boundaries are the same as `backward-word'. By default, this + command is unbound. + +`copy-forward-word ()' + Copy the word following point to the kill buffer. The word + boundaries are the same as `forward-word'. By default, this + command is unbound. + +`yank (C-y)' + Yank the top of the kill ring into the buffer at point. + +`yank-pop (M-y)' + Rotate the kill-ring, and yank the new top. You can only do this + if the prior command is `yank' or `yank-pop'. + + +File: bashref.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands + +8.4.5 Specifying Numeric Arguments +---------------------------------- + +`digit-argument (M-0, M-1, ... M--)' + Add this digit to the argument already accumulating, or start a new + argument. `M--' starts a negative argument. + +`universal-argument ()' + This is another way to specify an argument. If this command is + followed by one or more digits, optionally with a leading minus + sign, those digits define the argument. If the command is + followed by digits, executing `universal-argument' again ends the + numeric argument, but is otherwise ignored. As a special case, if + this command is immediately followed by a character that is + neither a digit 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. By default, this is not bound to a key. + + +File: bashref.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands + +8.4.6 Letting Readline Type For You +----------------------------------- + +`complete ()' + Attempt to perform completion on the text before point. The + actual completion performed is application-specific. Bash + attempts completion treating the text as a variable (if the text + begins with `$'), username (if the text begins with `~'), hostname + (if the text begins with `@'), or command (including aliases and + functions) in turn. If none of these produces a match, filename + completion is attempted. + +`possible-completions (M-?)' + List the possible completions of the text before point. + +`insert-completions (M-*)' + Insert all completions of the text before point that would have + been generated by `possible-completions'. + +`menu-complete ()' + Similar to `complete', but replaces the word to be completed with + a single match from the list of possible completions. Repeated + execution of `menu-complete' steps through the list of possible + completions, inserting each match in turn. At the end of the list + of completions, the bell is rung (subject to the setting of + `bell-style') and the original text is restored. An argument of N + moves N positions forward in the list of matches; a negative + argument may be used to move backward through the list. This + command is intended to be bound to , but is unbound by + default. + +`menu-complete-backward ()' + Identical to `menu-complete', but moves backward through the list + of possible completions, as if `menu-complete' had been given a + negative argument. + +`delete-char-or-list ()' + Deletes the character under the cursor if not at the beginning or + end of the line (like `delete-char'). If at the end of the line, + behaves identically to `possible-completions'. This command is + unbound by default. + +`complete-filename (M-/)' + Attempt filename completion on the text before point. + +`possible-filename-completions (C-x /)' + List the possible completions of the text before point, treating + it as a filename. + +`complete-username (M-~)' + Attempt completion on the text before point, treating it as a + username. + +`possible-username-completions (C-x ~)' + List the possible completions of the text before point, treating + it as a username. + +`complete-variable (M-$)' + Attempt completion on the text before point, treating it as a + shell variable. + +`possible-variable-completions (C-x $)' + List the possible completions of the text before point, treating + it as a shell variable. + +`complete-hostname (M-@)' + Attempt completion on the text before point, treating it as a + hostname. + +`possible-hostname-completions (C-x @)' + List the possible completions of the text before point, treating + it as a hostname. + +`complete-command (M-!)' + Attempt completion on the text before point, treating it as a + command name. Command completion attempts to match the text + against aliases, reserved words, shell functions, shell builtins, + and finally executable filenames, in that order. + +`possible-command-completions (C-x !)' + List the possible completions of the text before point, treating + it as a command name. + +`dynamic-complete-history (M-)' + Attempt completion on the text before point, comparing the text + against lines from the history list for possible completion + matches. + +`dabbrev-expand ()' + Attempt menu completion on the text before point, comparing the + text against lines from the history list for possible completion + matches. + +`complete-into-braces (M-{)' + Perform filename completion and insert the list of possible + completions enclosed within braces so the list is available to the + shell (*note Brace Expansion::). + + + +File: bashref.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands + +8.4.7 Keyboard Macros +--------------------- + +`start-kbd-macro (C-x ()' + Begin saving the characters typed into the current keyboard macro. + +`end-kbd-macro (C-x ))' + Stop saving the characters typed into the current keyboard macro + and save the definition. + +`call-last-kbd-macro (C-x e)' + Re-execute the last keyboard macro defined, by making the + characters in the macro appear as if typed at the keyboard. + + + +File: bashref.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands + +8.4.8 Some Miscellaneous Commands +--------------------------------- + +`re-read-init-file (C-x C-r)' + Read in the contents of the INPUTRC file, and incorporate any + bindings or variable assignments found there. + +`abort (C-g)' + Abort the current editing command and ring the terminal's bell + (subject to the setting of `bell-style'). + +`do-uppercase-version (M-a, M-b, M-X, ...)' + If the metafied character X is lowercase, run the command that is + bound to the corresponding uppercase character. + +`prefix-meta ()' + Metafy the next character typed. This is for keyboards without a + meta key. Typing ` f' is equivalent to typing `M-f'. + +`undo (C-_ or C-x C-u)' + Incremental undo, separately remembered for each line. + +`revert-line (M-r)' + Undo all changes made to this line. This is like executing the + `undo' command enough times to get back to the beginning. + +`tilde-expand (M-&)' + Perform tilde expansion on the current word. + +`set-mark (C-@)' + Set the mark to the point. If a numeric argument is supplied, the + mark is set to that position. + +`exchange-point-and-mark (C-x C-x)' + Swap the point with the mark. The current cursor position is set + to the saved position, and the old cursor position is saved as the + mark. + +`character-search (C-])' + A character is read and point is moved to the next occurrence of + that character. A negative count searches for previous + occurrences. + +`character-search-backward (M-C-])' + A character is read and point is moved to the previous occurrence + of that character. A negative count searches for subsequent + occurrences. + +`skip-csi-sequence ()' + Read enough characters to consume a multi-key sequence such as + those defined for keys like Home and End. Such sequences begin + with a Control Sequence Indicator (CSI), usually ESC-[. If this + sequence is bound to "\e[", keys producing such sequences will + have no effect unless explicitly bound to a readline command, + instead of inserting stray characters into the editing buffer. + This is unbound by default, but usually bound to ESC-[. + +`insert-comment (M-#)' + Without a numeric argument, the value of the `comment-begin' + variable is inserted at the beginning of the current line. If a + numeric argument is supplied, this command acts as a toggle: if + the characters at the beginning of the line do not match the value + of `comment-begin', the value is inserted, otherwise the + characters in `comment-begin' are deleted from the beginning of + the line. In either case, the line is accepted as if a newline + had been typed. The default value of `comment-begin' causes this + command to make the current line a shell comment. If a numeric + argument causes the comment character to be removed, the line will + be executed by the shell. + +`dump-functions ()' + Print all of the functions and their key bindings to the Readline + output stream. If a numeric argument is supplied, the output is + formatted in such a way that it can be made part of an INPUTRC + file. This command is unbound by default. + +`dump-variables ()' + Print all of the settable variables and their values to the + Readline output stream. If a numeric argument is supplied, the + output is formatted in such a way that it can be made part of an + INPUTRC file. This command is unbound by default. + +`dump-macros ()' + Print all of the Readline key sequences bound to macros and the + strings they output. If a numeric argument is supplied, the + output is formatted in such a way that it can be made part of an + INPUTRC file. This command is unbound by default. + +`glob-complete-word (M-g)' + The word before point is treated as a pattern for pathname + expansion, with an asterisk implicitly appended. This pattern is + used to generate a list of matching file names for possible + completions. + +`glob-expand-word (C-x *)' + The word before point is treated as a pattern for pathname + expansion, and the list of matching file names is inserted, + replacing the word. If a numeric argument is supplied, a `*' is + appended before pathname expansion. + +`glob-list-expansions (C-x g)' + The list of expansions that would have been generated by + `glob-expand-word' is displayed, and the line is redrawn. If a + numeric argument is supplied, a `*' is appended before pathname + expansion. + +`display-shell-version (C-x C-v)' + Display version information about the current instance of Bash. + +`shell-expand-line (M-C-e)' + Expand the line as the shell does. This performs alias and + history expansion as well as all of the shell word expansions + (*note Shell Expansions::). + +`history-expand-line (M-^)' + Perform history expansion on the current line. + +`magic-space ()' + Perform history expansion on the current line and insert a space + (*note History Interaction::). + +`alias-expand-line ()' + Perform alias expansion on the current line (*note Aliases::). + +`history-and-alias-expand-line ()' + Perform history and alias expansion on the current line. + +`insert-last-argument (M-. or M-_)' + A synonym for `yank-last-arg'. + +`operate-and-get-next (C-o)' + Accept the current line for execution and fetch the next line + relative to the current line from the history for editing. Any + argument is ignored. + +`edit-and-execute-command (C-xC-e)' + Invoke an editor on the current command line, and execute the + result as shell commands. Bash attempts to invoke `$VISUAL', + `$EDITOR', and `emacs' as the editor, in that order. + + + +File: bashref.info, Node: Readline vi Mode, Next: Programmable Completion, Prev: Bindable Readline Commands, Up: Command Line Editing + +8.5 Readline vi Mode +==================== + +While the Readline library does not have a full set of `vi' editing +functions, it does contain enough to allow simple editing of the line. +The Readline `vi' mode behaves as specified in the POSIX 1003.2 +standard. + + In order to switch interactively between `emacs' and `vi' editing +modes, use the `set -o emacs' and `set -o vi' commands (*note The Set +Builtin::). The Readline default is `emacs' mode. + + When you enter a line in `vi' mode, you are already placed in +`insertion' mode, as if you had typed an `i'. Pressing switches +you into `command' mode, where you can edit the text of the line with +the standard `vi' movement keys, move to previous history lines with +`k' and subsequent lines with `j', and so forth. + + +File: bashref.info, Node: Programmable Completion, Next: Programmable Completion Builtins, Prev: Readline vi Mode, Up: Command Line Editing + +8.6 Programmable Completion +=========================== + +When word completion is attempted for an argument to a command for +which a completion specification (a COMPSPEC) has been defined using +the `complete' builtin (*note Programmable Completion Builtins::), the +programmable completion facilities are invoked. + + First, the command name is identified. If a compspec has been +defined for that command, the compspec is used to generate the list of +possible completions for the word. If the command word is the empty +string (completion attempted at the beginning of an empty line), any +compspec defined with the `-E' option to `complete' is used. If the +command word is a full pathname, a compspec for the full pathname is +searched for first. If no compspec is found for the full pathname, an +attempt is made to find a compspec for the portion following the final +slash. If those searches do not result in a compspec, any compspec +defined with the `-D' option to `complete' is used as the default. + + Once a compspec has been found, it is used to generate the list of +matching words. If a compspec is not found, the default Bash completion +described above (*note Commands For Completion::) is performed. + + First, the actions specified by the compspec are used. Only matches +which are prefixed by the word being completed are returned. When the +`-f' or `-d' option is used for filename or directory name completion, +the shell variable `FIGNORE' is used to filter the matches. *Note Bash +Variables::, for a description of `FIGNORE'. + + Any completions specified by a filename expansion pattern to the +`-G' option are generated next. The words generated by the pattern +need not match the word being completed. The `GLOBIGNORE' shell +variable is not used to filter the matches, but the `FIGNORE' shell +variable is used. + + Next, the string specified as the argument to the `-W' option is +considered. The string is first split using the characters in the `IFS' +special variable as delimiters. Shell quoting is honored. Each word +is then expanded using brace expansion, tilde expansion, parameter and +variable expansion, command substitution, and arithmetic expansion, as +described above (*note Shell Expansions::). The results are split +using the rules described above (*note Word Splitting::). The results +of the expansion are prefix-matched against the word being completed, +and the matching words become the possible completions. + + After these matches have been generated, any shell function or +command specified with the `-F' and `-C' options is invoked. When the +command or function is invoked, the `COMP_LINE', `COMP_POINT', +`COMP_KEY', and `COMP_TYPE' variables are assigned values as described +above (*note Bash Variables::). If a shell function is being invoked, +the `COMP_WORDS' and `COMP_CWORD' variables are also set. When the +function or command is invoked, the first argument 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. + + Any function specified with `-F' is invoked first. The function may +use any of the shell facilities, including the `compgen' and `compopt' +builtins described below (*note Programmable Completion Builtins::), to +generate the matches. It must put the possible completions in the +`COMPREPLY' array variable. + + Next, any command specified with the `-C' option is invoked in an +environment equivalent to command substitution. It should print a list +of completions, one per line, to the standard output. Backslash may be +used to escape a newline, if necessary. + + After all of the possible completions are generated, any filter +specified with the `-X' option is applied to the list. The filter is a +pattern as used for pathname expansion; a `&' in the pattern is +replaced with the text of the word being completed. A literal `&' may +be escaped with a backslash; the backslash is removed before attempting +a match. Any completion that matches the pattern will be removed from +the list. A leading `!' negates the pattern; in this case any +completion not matching the pattern will be removed. + + Finally, any prefix and suffix specified with the `-P' and `-S' +options are added to each member of the completion list, and the result +is returned to the Readline completion code as the list of possible +completions. + + If the previously-applied actions do not generate any matches, and +the `-o dirnames' option was supplied to `complete' when the compspec +was defined, directory name completion is attempted. + + If the `-o plusdirs' option was supplied to `complete' when the +compspec was defined, directory name completion is attempted and any +matches are added to the results of the other actions. + + By default, if a compspec is found, whatever it generates is +returned to the completion code as the full set of possible completions. +The default Bash completions are not attempted, and the Readline default +of filename completion is disabled. If the `-o bashdefault' option was +supplied to `complete' when the compspec was defined, the default Bash +completions are attempted if the compspec generates no matches. If the +`-o default' option was supplied to `complete' when the compspec was +defined, Readline's default completion will be performed if the +compspec (and, if attempted, the default Bash completions) generate no +matches. + + When a compspec indicates that directory name completion is desired, +the programmable completion functions force Readline to append a slash +to completed names which are symbolic links to directories, subject to +the value of the MARK-DIRECTORIES Readline variable, regardless of the +setting of the MARK-SYMLINKED-DIRECTORIES Readline variable. + + There is some support for dynamically modifying completions. This is +most useful when used in combination with a default completion specified +with `-D'. It's possible for shell functions executed as completion +handlers to indicate that completion should be retried by returning an +exit status of 124. If a shell function returns 124, and changes the +compspec associated with the command on which completion is being +attempted (supplied as the first argument when the function is +executed), programmable completion restarts from the beginning, with an +attempt to find a compspec for that command. This allows a set of +completions to be built dynamically as completion is attempted, rather +than being loaded all at once. + + For instance, assuming that there is a library of compspecs, each +kept in a file corresponding to the name of the command, the following +default completion function would load completions dynamically: + + _completion_loader() + { + . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 + } + complete -D -F _completion_loader + + +File: bashref.info, Node: Programmable Completion Builtins, Prev: Programmable Completion, Up: Command Line Editing + +8.7 Programmable Completion Builtins +==================================== + +Two builtin commands are available to manipulate the programmable +completion facilities. + +`compgen' + `compgen [OPTION] [WORD]' + + Generate possible completion matches for WORD according to the + OPTIONs, which may be any option accepted by the `complete' + builtin with the exception of `-p' and `-r', and write the matches + to the standard output. When using the `-F' or `-C' options, the + various shell variables set by the programmable completion + facilities, while available, will not have useful values. + + The matches will be generated in the same way as if the + programmable completion code had generated them directly from a + completion specification with the same flags. If WORD is + specified, only those completions matching WORD will be displayed. + + The return value is true unless an invalid option is supplied, or + no matches were generated. + +`complete' + `complete [-abcdefgjksuv] [-o COMP-OPTION] [-DE] [-A ACTION] [-G GLOBPAT] [-W WORDLIST] + [-F FUNCTION] [-C COMMAND] [-X FILTERPAT] + [-P PREFIX] [-S SUFFIX] NAME [NAME ...]' + `complete -pr [-DE] [NAME ...]' + + Specify how arguments to each NAME should be completed. If the + `-p' option is supplied, or if no options are supplied, existing + completion specifications are printed in a way that allows them to + be reused as input. The `-r' option removes a completion + specification for each NAME, or, if no NAMEs are supplied, all + completion specifications. The `-D' option indicates that the + remaining options and actions should apply to the "default" + command completion; that is, completion attempted on a command for + which no completion has previously been defined. The `-E' option + indicates that the remaining options and actions should apply to + "empty" command completion; that is, completion attempted on a + blank line. + + The process of applying these completion specifications when word + completion is attempted is described above (*note Programmable + Completion::). The `-D' option takes precedence over `-E'. + + Other options, if specified, have the following meanings. The + arguments to the `-G', `-W', and `-X' options (and, if necessary, + the `-P' and `-S' options) should be quoted to protect them from + expansion before the `complete' builtin is invoked. + + `-o COMP-OPTION' + The COMP-OPTION controls several aspects of the compspec's + behavior beyond the simple generation of completions. + COMP-OPTION may be one of: + + `bashdefault' + Perform the rest of the default Bash completions if the + compspec generates no matches. + + `default' + Use Readline's default filename completion if the + compspec generates no matches. + + `dirnames' + Perform directory name completion if the compspec + generates no matches. + + `filenames' + Tell Readline that the compspec generates filenames, so + it can perform any filename-specific processing (like + adding a slash to directory names quoting special + characters, or suppressing trailing spaces). This + option is intended to be used with shell functions + specified with `-F'. + + `nospace' + Tell Readline not to append a space (the default) to + words completed at the end of the line. + + `plusdirs' + After any matches defined by the compspec are generated, + directory name completion is attempted and any matches + are added to the results of the other actions. + + + `-A ACTION' + The ACTION may be one of the following to generate a list of + possible completions: + + `alias' + Alias names. May also be specified as `-a'. + + `arrayvar' + Array variable names. + + `binding' + Readline key binding names (*note Bindable Readline + Commands::). + + `builtin' + Names of shell builtin commands. May also be specified + as `-b'. + + `command' + Command names. May also be specified as `-c'. + + `directory' + Directory names. May also be specified as `-d'. + + `disabled' + Names of disabled shell builtins. + + `enabled' + Names of enabled shell builtins. + + `export' + Names of exported shell variables. May also be + specified as `-e'. + + `file' + File names. May also be specified as `-f'. + + `function' + Names of shell functions. + + `group' + Group names. May also be specified as `-g'. + + `helptopic' + Help topics as accepted by the `help' builtin (*note + Bash Builtins::). + + `hostname' + Hostnames, as taken from the file specified by the + `HOSTFILE' shell variable (*note Bash Variables::). + + `job' + Job names, if job control is active. May also be + specified as `-j'. + + `keyword' + Shell reserved words. May also be specified as `-k'. + + `running' + Names of running jobs, if job control is active. + + `service' + Service names. May also be specified as `-s'. + + `setopt' + Valid arguments for the `-o' option to the `set' builtin + (*note The Set Builtin::). + + `shopt' + Shell option names as accepted by the `shopt' builtin + (*note Bash Builtins::). + + `signal' + Signal names. + + `stopped' + Names of stopped jobs, if job control is active. + + `user' + User names. May also be specified as `-u'. + + `variable' + Names of all shell variables. May also be specified as + `-v'. + + `-G GLOBPAT' + The filename expansion pattern GLOBPAT is expanded to generate + the possible completions. + + `-W WORDLIST' + The WORDLIST is split using the characters in the `IFS' + special variable as delimiters, and each resultant word is + expanded. The possible completions are the members of the + resultant list which match the word being completed. + + `-C COMMAND' + COMMAND is executed in a subshell environment, and its output + is used as the possible completions. + + `-F FUNCTION' + The shell function FUNCTION is executed in the current shell + environment. When it finishes, the possible completions are + retrieved from the value of the `COMPREPLY' array variable. + + `-X FILTERPAT' + FILTERPAT is a pattern as used for filename expansion. It is + applied to the list of possible completions generated by the + preceding options and arguments, and each completion matching + FILTERPAT is removed from the list. A leading `!' in + FILTERPAT negates the pattern; in this case, any completion + not matching FILTERPAT is removed. + + `-P PREFIX' + PREFIX is added at the beginning of each possible completion + after all other options have been applied. + + `-S SUFFIX' + SUFFIX is appended to each possible completion after all + other options have been applied. + + The return value is true unless an invalid option is supplied, an + option other than `-p' or `-r' is supplied without a NAME + argument, an attempt is made to remove a completion specification + for a NAME for which no specification exists, or an error occurs + adding a completion specification. + +`compopt' + `compopt' [-o OPTION] [-DE] [+o OPTION] [NAME] + Modify completion options for each NAME according to the OPTIONs, + or for the currently-execution completion if no NAMEs are supplied. + If no OPTIONs are given, display the completion options for each + NAME or the current completion. The possible values of OPTION are + those valid for the `complete' builtin described above. The `-D' + option indicates that the remaining options should apply to the + "default" command completion; that is, completion attempted on a + command for which no completion has previously been defined. The + `-E' option indicates that the remaining options should apply to + "empty" command completion; that is, completion attempted on a + blank line. + + The `-D' option takes precedence over `-E'. + + The return value is true unless an invalid option is supplied, an + attempt is made to modify the options for a NAME for which no + completion specification exists, or an output error occurs. + + + +File: bashref.info, Node: Using History Interactively, Next: Installing Bash, Prev: Command Line Editing, Up: Top + +9 Using History Interactively +***************************** + +This chapter describes how to use the GNU History Library +interactively, from a user's standpoint. It should be considered a +user's guide. For information on using the GNU History Library in +other programs, see the GNU Readline Library Manual. + +* Menu: + +* Bash History Facilities:: How Bash lets you manipulate your command + history. +* Bash History Builtins:: The Bash builtin commands that manipulate + the command history. +* History Interaction:: What it feels like using History as a user. + + +File: bashref.info, Node: Bash History Facilities, Next: Bash History Builtins, Up: Using History Interactively + +9.1 Bash History Facilities +=========================== + +When the `-o history' option to the `set' builtin is enabled (*note The +Set Builtin::), the shell provides access to the "command history", the +list of commands previously typed. The value of the `HISTSIZE' shell +variable is used as the number of commands to save in a history list. +The text of the last `$HISTSIZE' commands (default 500) is saved. The +shell stores each command in the history list prior to parameter and +variable expansion but after history expansion is performed, subject to +the values of the shell variables `HISTIGNORE' and `HISTCONTROL'. + + When the shell starts up, the history is initialized from the file +named by the `HISTFILE' variable (default `~/.bash_history'). The file +named by the value of `HISTFILE' is truncated, if necessary, to contain +no more than the number of lines specified by the value of the +`HISTFILESIZE' variable. When an interactive shell exits, the last +`$HISTSIZE' lines are copied from the history list to the file named by +`$HISTFILE'. If the `histappend' shell option is set (*note Bash +Builtins::), the lines are appended to the history file, otherwise the +history file is overwritten. If `HISTFILE' is unset, or if the history +file is unwritable, the history is not saved. After saving the +history, the history file is truncated to contain no more than +`$HISTFILESIZE' lines. If `HISTFILESIZE' is not set, no truncation is +performed. + + If the `HISTTIMEFORMAT' is set, the time stamp information +associated with each history entry is written to the history file, +marked with the history comment character. When the history file is +read, lines beginning with the history comment character followed +immediately by a digit are interpreted as timestamps for the previous +history line. + + The builtin command `fc' may be used to list or edit and re-execute +a portion of the history list. The `history' builtin may be used to +display or modify the history list and manipulate the history file. +When using command-line editing, search commands are available in each +editing mode that provide access to the history list (*note Commands +For History::). + + The shell allows control over which commands are saved on the history +list. The `HISTCONTROL' and `HISTIGNORE' variables may be set to cause +the shell to save only a subset of the commands entered. The `cmdhist' +shell option, if enabled, causes the shell to attempt to save each line +of a multi-line command in the same history entry, adding semicolons +where necessary to preserve syntactic correctness. The `lithist' shell +option causes the shell to save the command with embedded newlines +instead of semicolons. The `shopt' builtin is used to set these +options. *Note Bash Builtins::, for a description of `shopt'. + + +File: bashref.info, Node: Bash History Builtins, Next: History Interaction, Prev: Bash History Facilities, Up: Using History Interactively + +9.2 Bash History Builtins +========================= + +Bash provides two builtin commands which manipulate the history list +and history file. + +`fc' + `fc [-e ENAME] [-lnr] [FIRST] [LAST]' + `fc -s [PAT=REP] [COMMAND]' + + Fix Command. In the first form, a range of commands from FIRST to + LAST is selected from the history list. Both FIRST and LAST may + be specified as a string (to locate the most recent command + beginning with that string) or as a number (an index into the + history list, where a negative number is used as an offset from the + current command number). If LAST is not specified it is set to + FIRST. If FIRST is not specified it is set to the previous + command for editing and -16 for listing. If the `-l' flag is + given, the commands are listed on standard output. The `-n' flag + suppresses the command numbers when listing. The `-r' flag + reverses the order of the listing. Otherwise, the editor given by + ENAME is invoked on a file containing those commands. If ENAME is + not given, the value of the following variable expansion is used: + `${FCEDIT:-${EDITOR:-vi}}'. This says to use the value of the + `FCEDIT' variable if set, or the value of the `EDITOR' variable if + that is set, or `vi' if neither is set. When editing is complete, + the edited commands are echoed and executed. + + In the second form, COMMAND is re-executed after each instance of + PAT in the selected command is replaced by REP. + + A useful alias to use with the `fc' command is `r='fc -s'', so + that typing `r cc' runs the last command beginning with `cc' and + typing `r' re-executes the last command (*note Aliases::). + +`history' + history [N] + history -c + history -d OFFSET + history [-anrw] [FILENAME] + history -ps ARG + + With no options, display the history list with line numbers. + Lines prefixed with a `*' have been modified. An argument of N + lists only the last N lines. If the shell variable + `HISTTIMEFORMAT' is set and not null, it is used as a format + string for STRFTIME to display the time stamp associated with each + displayed history entry. No intervening blank is printed between + the formatted time stamp and the history line. + + Options, if supplied, have the following meanings: + + `-c' + Clear the history list. This may be combined with the other + options to replace the history list completely. + + `-d OFFSET' + Delete the history entry at position OFFSET. OFFSET should + be specified as it appears when the history is displayed. + + `-a' + Append the new history lines (history lines entered since the + beginning of the current Bash session) to the history file. + + `-n' + Append the history lines not already read from the history + file to the current history list. These are lines appended + to the history file since the beginning of the current Bash + session. + + `-r' + Read the current history file and append its contents to the + history list. + + `-w' + Write out the current history to the history file. + + `-p' + Perform history substitution on the ARGs and display the + result on the standard output, without storing the results in + the history list. + + `-s' + The ARGs are added to the end of the history list as a single + entry. + + + When any of the `-w', `-r', `-a', or `-n' options is used, if + FILENAME is given, then it is used as the history file. If not, + then the value of the `HISTFILE' variable is used. + + + +File: bashref.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively + +9.3 History Expansion +===================== + +The History library provides a history expansion feature that is similar +to the history expansion provided by `csh'. This section describes the +syntax used to manipulate the history information. + + History expansions introduce words from the history list into the +input stream, making it easy to repeat commands, insert the arguments +to a previous command into the current input line, or fix errors in +previous commands quickly. + + History expansion takes place in two parts. The first is to +determine which line from the history list should be used during +substitution. The second is to select portions of that line for +inclusion into the current one. The line selected from the history is +called the "event", and the portions of that line that are acted upon +are called "words". Various "modifiers" are available to manipulate +the selected words. The line is broken into words in the same fashion +that Bash does, so that several words surrounded by quotes are +considered one word. History expansions are introduced by the +appearance of the history expansion character, which is `!' by default. +Only `\' and `'' may be used to escape the history expansion character. + + Several shell options settable with the `shopt' builtin (*note Bash +Builtins::) may be used to tailor the behavior of history expansion. +If the `histverify' shell option is enabled, and Readline is being +used, history substitutions are not immediately passed to the shell +parser. Instead, the expanded line is reloaded into the Readline +editing buffer for further modification. If Readline is being used, +and the `histreedit' shell option is enabled, a failed history +expansion will be reloaded into the Readline editing buffer for +correction. The `-p' option to the `history' builtin command may be +used to see what a history expansion will do before using it. The `-s' +option to the `history' builtin may be used to add commands to the end +of the history list without actually executing them, so that they are +available for subsequent recall. This is most useful in conjunction +with Readline. + + The shell allows control of the various characters used by the +history expansion mechanism with the `histchars' variable, as explained +above (*note Bash Variables::). The shell uses the history comment +character to mark history timestamps when writing the history file. + +* Menu: + +* Event Designators:: How to specify which history line to use. +* Word Designators:: Specifying which words are of interest. +* Modifiers:: Modifying the results of substitution. + + +File: bashref.info, Node: Event Designators, Next: Word Designators, Up: History Interaction + +9.3.1 Event Designators +----------------------- + +An event designator is a reference to a command line entry in the +history list. + +`!' + Start a history substitution, except when followed by a space, tab, + the end of the line, `=' or `(' (when the `extglob' shell option + is enabled using the `shopt' builtin). + +`!N' + Refer to command line N. + +`!-N' + Refer to the command N lines back. + +`!!' + Refer to the previous command. This is a synonym for `!-1'. + +`!STRING' + Refer to the most recent command starting with STRING. + +`!?STRING[?]' + Refer to the most recent command containing STRING. The trailing + `?' may be omitted if the STRING is followed immediately by a + newline. + +`^STRING1^STRING2^' + Quick Substitution. Repeat the last command, replacing STRING1 + with STRING2. Equivalent to `!!:s/STRING1/STRING2/'. + +`!#' + The entire command line typed so far. + + + +File: bashref.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction + +9.3.2 Word Designators +---------------------- + +Word designators are used to select desired words from the event. A +`:' separates the event specification from the word designator. It may +be omitted if the word designator begins with a `^', `$', `*', `-', or +`%'. Words are numbered from the beginning of the line, with the first +word being denoted by 0 (zero). Words are inserted into the current +line separated by single spaces. + + For example, + +`!!' + designates the preceding command. When you type this, the + preceding command is repeated in toto. + +`!!:$' + designates the last argument of the preceding command. This may be + shortened to `!$'. + +`!fi:2' + designates the second argument of the most recent command starting + with the letters `fi'. + + Here are the word designators: + +`0 (zero)' + The `0'th word. For many applications, this is the command word. + +`N' + The Nth word. + +`^' + The first argument; that is, word 1. + +`$' + The last argument. + +`%' + The word matched by the most recent `?STRING?' search. + +`X-Y' + A range of words; `-Y' abbreviates `0-Y'. + +`*' + All of the words, except the `0'th. This is a synonym for `1-$'. + It is not an error to use `*' if there is just one word in the + event; the empty string is returned in that case. + +`X*' + Abbreviates `X-$' + +`X-' + Abbreviates `X-$' like `X*', but omits the last word. + + + If a word designator is supplied without an event specification, the +previous command is used as the event. + + +File: bashref.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction + +9.3.3 Modifiers +--------------- + +After the optional word designator, you can add a sequence of one or +more of the following modifiers, each preceded by a `:'. + +`h' + Remove a trailing pathname component, leaving only the head. + +`t' + Remove all leading pathname components, leaving the tail. + +`r' + Remove a trailing suffix of the form `.SUFFIX', leaving the + basename. + +`e' + Remove all but the trailing suffix. + +`p' + Print the new command but do not execute it. + +`q' + Quote the substituted words, escaping further substitutions. + +`x' + Quote the substituted words as with `q', but break into words at + spaces, tabs, and newlines. + +`s/OLD/NEW/' + Substitute NEW for the first occurrence of OLD in the event line. + Any delimiter may be used in place of `/'. The delimiter may be + quoted in OLD and NEW with a single backslash. If `&' appears in + NEW, it is replaced by OLD. A single backslash will quote the + `&'. The final delimiter is optional if it is the last character + on the input line. + +`&' + Repeat the previous substitution. + +`g' +`a' + Cause changes to be applied over the entire event line. Used in + conjunction with `s', as in `gs/OLD/NEW/', or with `&'. + +`G' + Apply the following `s' modifier once to each word in the event. + + + +File: bashref.info, Node: Installing Bash, Next: Reporting Bugs, Prev: Using History Interactively, Up: Top + +10 Installing Bash +****************** + +This chapter provides basic instructions for installing Bash on the +various supported platforms. The distribution supports the GNU +operating systems, nearly every version of Unix, and several non-Unix +systems such as BeOS and Interix. Other independent ports exist for +MS-DOS, OS/2, and Windows platforms. + +* Menu: + +* Basic Installation:: Installation instructions. +* Compilers and Options:: How to set special options for various + systems. +* Compiling For Multiple Architectures:: How to compile Bash for more + than one kind of system from + the same source tree. +* Installation Names:: How to set the various paths used by the installation. +* Specifying the System Type:: How to configure Bash for a particular system. +* Sharing Defaults:: How to share default configuration values among GNU + programs. +* Operation Controls:: Options recognized by the configuration program. +* Optional Features:: How to enable and disable optional features when + building Bash. + + +File: bashref.info, Node: Basic Installation, Next: Compilers and Options, Up: Installing Bash + +10.1 Basic Installation +======================= + +These are installation instructions for Bash. + + The simplest way to compile Bash is: + + 1. `cd' to the directory containing the source code and type + `./configure' to configure Bash for your system. If you're using + `csh' on an old version of System V, you might need to type `sh + ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes some time. While running, it prints + messages telling which features it is checking for. + + 2. Type `make' to compile Bash and build the `bashbug' bug reporting + script. + + 3. Optionally, type `make tests' to run the Bash test suite. + + 4. Type `make install' to install `bash' and `bashbug'. This will + also install the manual pages and Info file. + + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package +(the top directory, the `builtins', `doc', and `support' directories, +each directory under `lib', and several others). It also creates a +`config.h' file containing system-dependent definitions. Finally, it +creates a shell script named `config.status' that you can run in the +future to recreate the current configuration, a file `config.cache' +that saves the results of its tests to speed up reconfiguring, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). If at some point `config.cache' contains +results you don't want to keep, you may remove or edit it. + + To find out more about the options and arguments that the +`configure' script understands, type + + bash-2.04$ ./configure --help + +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 `configure' could check whether or not to do them, and +mail diffs or instructions to so they can be +considered for the next release. + + The file `configure.in' is used to create `configure' by a program +called Autoconf. You only need `configure.in' if you want to change it +or regenerate `configure' using a newer version of Autoconf. If you do +this, make sure you are using Autoconf version 2.50 or newer. + + You can remove the program binaries and object files from the source +code directory by typing `make clean'. To also remove the files that +`configure' created (so you can compile Bash for a different kind of +computer), type `make distclean'. + + +File: bashref.info, Node: Compilers and Options, Next: Compiling For Multiple Architectures, Prev: Basic Installation, Up: Installing Bash + +10.2 Compilers and Options +========================== + +Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + + On systems that have the `env' program, you can do it like this: + + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + + The configuration process uses GCC to build Bash if it is available. + + +File: bashref.info, Node: Compiling For Multiple Architectures, Next: Installation Names, Prev: Compilers and Options, Up: Installing Bash + +10.3 Compiling For Multiple Architectures +========================================= + +You can compile Bash for more than one kind of computer at the same +time, by placing the object files for each architecture in their own +directory. To do this, you must use a version of `make' that supports +the `VPATH' variable, such as GNU `make'. `cd' to the directory where +you want the object files and executables to go and run the `configure' +script from the source directory. You may need to supply the +`--srcdir=PATH' argument to tell `configure' where the source files +are. `configure' automatically checks for the source code in the +directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you can compile Bash for one architecture at a time in the +source code directory. After you have installed Bash for one +architecture, use `make distclean' before reconfiguring for another +architecture. + + Alternatively, if your system supports symbolic links, you can use +the `support/mkclone' script to create a build tree which has symbolic +links back to each file in the source directory. Here's an example +that creates a build directory in the current directory from a source +directory `/usr/gnu/src/bash-2.0': + + bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 . + +The `mkclone' script requires Bash, so you must have already built Bash +for at least one architecture before you can create build directories +for other architectures. + + +File: bashref.info, Node: Installation Names, Next: Specifying the System Type, Prev: Compiling For Multiple Architectures, Up: Installing Bash + +10.4 Installation Names +======================= + +By default, `make install' will install into `/usr/local/bin', +`/usr/local/man', etc. You can specify an installation prefix other +than `/usr/local' by giving `configure' the option `--prefix=PATH', or +by specifying a value for the `DESTDIR' `make' variable when running +`make install'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', `make install' will +use PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + +File: bashref.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash + +10.5 Specifying the System Type +=============================== + +There may be some features `configure' can not figure out +automatically, but need to determine by the type of host Bash will run +on. Usually `configure' can figure that out, but if it prints a +message saying it can not guess the host type, give it the +`--host=TYPE' option. `TYPE' can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: +`CPU-COMPANY-SYSTEM' (e.g., `i386-unknown-freebsd4.2'). + + See the file `support/config.sub' for the possible values of each +field. + + +File: bashref.info, Node: Sharing Defaults, Next: Operation Controls, Prev: Specifying the System Type, Up: Installing Bash + +10.6 Sharing Defaults +===================== + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. `configure' +looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: the Bash `configure' looks for a site script, but not all +`configure' scripts do. + + +File: bashref.info, Node: Operation Controls, Next: Optional Features, Prev: Sharing Defaults, Up: Installing Bash + +10.7 Operation Controls +======================= + +`configure' recognizes the following options to control how it operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the Bash source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + + `configure' also accepts some other, not widely used, boilerplate +options. `configure --help' prints the complete list. + + +File: bashref.info, Node: Optional Features, Prev: Operation Controls, Up: Installing Bash + +10.8 Optional Features +====================== + +The Bash `configure' has a number of `--enable-FEATURE' options, where +FEATURE indicates an optional part of Bash. There are also several +`--with-PACKAGE' options, where PACKAGE is something like `bash-malloc' +or `purify'. To turn off the default use of a package, use +`--without-PACKAGE'. To configure Bash without a feature that is +enabled by default, use `--disable-FEATURE'. + + Here is a complete list of the `--enable-' and `--with-' options +that the Bash `configure' recognizes. + +`--with-afs' + Define if you are using the Andrew File System from Transarc. + +`--with-bash-malloc' + Use the Bash version of `malloc' in the directory `lib/malloc'. + This is not the same `malloc' that appears in GNU libc, but an + older version originally derived from the 4.2 BSD `malloc'. This + `malloc' is very fast, but wastes some space on each allocation. + This option is enabled by default. The `NOTES' file contains a + list of systems for which this should be turned off, and + `configure' disables this option automatically for a number of + systems. + +`--with-curses' + Use the curses library instead of the termcap library. This should + be supplied if your system has an inadequate or incomplete termcap + database. + +`--with-gnu-malloc' + A synonym for `--with-bash-malloc'. + +`--with-installed-readline[=PREFIX]' + Define this to make Bash link with a locally-installed version of + Readline rather than the version in `lib/readline'. This works + only with Readline 5.0 and later versions. If PREFIX is `yes' or + not supplied, `configure' uses the values of the make variables + `includedir' and `libdir', which are subdirectories of `prefix' by + default, to find the installed version of Readline if it is not in + the standard system include and library directories. If PREFIX is + `no', Bash links with the version in `lib/readline'. If PREFIX is + set to any other value, `configure' treats it as a directory + pathname and looks for the installed version of Readline in + subdirectories of that directory (include files in + PREFIX/`include' and the library in PREFIX/`lib'). + +`--with-purify' + Define this to use the Purify memory allocation checker from + Rational Software. + +`--enable-minimal-config' + This produces a shell with minimal features, close to the + historical Bourne shell. + + There are several `--enable-' options that alter how Bash is +compiled and linked, rather than changing run-time features. + +`--enable-largefile' + Enable support for large files + (http://www.sas.com/standards/large_file/x_open.20Mar96.html) if + the operating system requires special compiler options to build + programs which can access large files. This is enabled by + default, if the operating system provides large file support. + +`--enable-profiling' + This builds a Bash binary that produces profiling information to be + processed by `gprof' each time it is executed. + +`--enable-static-link' + This causes Bash to be linked statically, if `gcc' is being used. + This could be used to build a version to use as root's shell. + + The `minimal-config' option can be used to disable all of the +following options, but it is processed first, so individual options may +be enabled using `enable-FEATURE'. + + All of the following options except for `disabled-builtins' and +`xpg-echo-default' are enabled by default, unless the operating system +does not provide the necessary support. + +`--enable-alias' + Allow alias expansion and include the `alias' and `unalias' + builtins (*note Aliases::). + +`--enable-arith-for-command' + Include support for the alternate form of the `for' command that + behaves like the C language `for' statement (*note Looping + Constructs::). + +`--enable-array-variables' + Include support for one-dimensional array shell variables (*note + Arrays::). + +`--enable-bang-history' + Include support for `csh'-like history substitution (*note History + Interaction::). + +`--enable-brace-expansion' + Include `csh'-like brace expansion ( `b{a,b}c' ==> `bac bbc' ). + See *note Brace Expansion::, for a complete description. + +`--enable-casemod-attributes' + Include support for case-modifying attributes in the `declare' + builtin and assignment statements. Variables with the UPPERCASE + attribute, for example, will have their values converted to + uppercase upon assignment. + +`--enable-casemod-expansion' + Include support for case-modifying word expansions. + +`--enable-command-timing' + Include support for recognizing `time' as a reserved word and for + displaying timing statistics for the pipeline following `time' + (*note Pipelines::). This allows pipelines as well as shell + builtins and functions to be timed. + +`--enable-cond-command' + Include support for the `[[' conditional command. (*note + Conditional Constructs::). + +`--enable-cond-regexp' + Include support for matching POSIX regular expressions using the + `=~' binary operator in the `[[' conditional command. (*note + Conditional Constructs::). + +`--enable-coprocesses' + Include support for coprocesses and the `coproc' reserved word + (*note Pipelines::). + +`--enable-debugger' + Include support for the bash debugger (distributed separately). + +`--enable-directory-stack' + Include support for a `csh'-like directory stack and the `pushd', + `popd', and `dirs' builtins (*note The Directory Stack::). + +`--enable-disabled-builtins' + Allow builtin commands to be invoked via `builtin xxx' even after + `xxx' has been disabled using `enable -n xxx'. See *note Bash + Builtins::, for details of the `builtin' and `enable' builtin + commands. + +`--enable-dparen-arithmetic' + Include support for the `((...))' command (*note Conditional + Constructs::). + +`--enable-extended-glob' + Include support for the extended pattern matching features + described above under *note Pattern Matching::. + +`--enable-extended-glob-default' + Set the default value of the EXTGLOB shell option described above + under *note The Shopt Builtin:: to be enabled. + +`--enable-help-builtin' + Include the `help' builtin, which displays help on shell builtins + and variables (*note Bash Builtins::). + +`--enable-history' + Include command history and the `fc' and `history' builtin + commands (*note Bash History Facilities::). + +`--enable-job-control' + This enables the job control features (*note Job Control::), if + the operating system supports them. + +`--enable-multibyte' + This enables support for multibyte characters if the operating + system provides the necessary support. + +`--enable-net-redirections' + This enables the special handling of filenames of the form + `/dev/tcp/HOST/PORT' and `/dev/udp/HOST/PORT' when used in + redirections (*note Redirections::). + +`--enable-process-substitution' + This enables process substitution (*note Process Substitution::) if + the operating system provides the necessary support. + +`--enable-progcomp' + Enable the programmable completion facilities (*note Programmable + Completion::). If Readline is not enabled, this option has no + effect. + +`--enable-prompt-string-decoding' + Turn on the interpretation of a number of backslash-escaped + characters in the `$PS1', `$PS2', `$PS3', and `$PS4' prompt + strings. See *note Printing a Prompt::, for a complete list of + prompt string escape sequences. + +`--enable-readline' + Include support for command-line editing and history with the Bash + version of the Readline library (*note Command Line Editing::). + +`--enable-restricted' + Include support for a "restricted shell". If this is enabled, + Bash, when called as `rbash', enters a restricted mode. See *note + The Restricted Shell::, for a description of restricted mode. + +`--enable-select' + Include the `select' builtin, which allows the generation of simple + menus (*note Conditional Constructs::). + +`--enable-separate-helpfiles' + Use external files for the documentation displayed by the `help' + builtin instead of storing the text internally. + +`--enable-single-help-strings' + Store the text displayed by the `help' builtin as a single string + for each help topic. This aids in translating the text to + different languages. You may need to disable this if your + compiler cannot handle very long string literals. + +`--enable-strict-posix-default' + Make Bash POSIX-conformant by default (*note Bash POSIX Mode::). + +`--enable-usg-echo-default' + A synonym for `--enable-xpg-echo-default'. + +`--enable-xpg-echo-default' + Make the `echo' builtin expand backslash-escaped characters by + default, without requiring the `-e' option. This sets the default + value of the `xpg_echo' shell option to `on', which makes the Bash + `echo' behave more like the version specified in the Single Unix + Specification, version 3. *Note Bash Builtins::, for a + description of the escape sequences that `echo' recognizes. + + + The file `config-top.h' contains C Preprocessor `#define' statements +for options which are not settable from `configure'. Some of these are +not meant to be changed; beware of the consequences if you do. Read +the comments associated with each definition for more information about +its effect. + + +File: bashref.info, Node: Reporting Bugs, Next: Major Differences From The Bourne Shell, Prev: Installing Bash, Up: Top + +Appendix A Reporting Bugs +************************* + +Please report all bugs you find in Bash. But first, you should make +sure that it really is a bug, and that it appears in the latest version +of Bash. The latest version of Bash is always available for FTP from +`ftp://ftp.gnu.org/pub/gnu/bash/'. + + Once you have determined that a bug actually exists, use the +`bashbug' command to submit a bug report. If you have a fix, you are +encouraged to mail that as well! Suggestions and `philosophical' bug +reports may be mailed to or posted to the Usenet +newsgroup `gnu.bash.bug'. + + All bug reports should include: + * The version number of Bash. + + * The hardware and operating system. + + * The compiler used to compile Bash. + + * A description of the bug behaviour. + + * A short script or `recipe' which exercises the bug and may be used + to reproduce it. + +`bashbug' inserts the first three items automatically into the template +it provides for filing a bug report. + + Please send all reports concerning this manual to +. + + +File: bashref.info, Node: Major Differences From The Bourne Shell, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top + +Appendix B Major Differences From The Bourne Shell +************************************************** + +Bash implements essentially the same grammar, parameter and variable +expansion, redirection, and quoting as the Bourne Shell. Bash uses the +POSIX standard as the specification of how these features are to be +implemented. There are some differences between the traditional Bourne +shell and Bash; this section quickly details the differences of +significance. A number of these differences are explained in greater +depth in previous sections. This section uses the version of `sh' +included in SVR4.2 (the last version of the historical Bourne shell) as +the baseline reference. + + * Bash is POSIX-conformant, even where the POSIX specification + differs from traditional `sh' behavior (*note Bash POSIX Mode::). + + * Bash has multi-character invocation options (*note Invoking + Bash::). + + * Bash has command-line editing (*note Command Line Editing::) and + the `bind' builtin. + + * Bash provides a programmable word completion mechanism (*note + Programmable Completion::), and builtin commands `complete', + `compgen', and `compopt', to manipulate it. + + * Bash has command history (*note Bash History Facilities::) and the + `history' and `fc' builtins to manipulate it. The Bash history + list maintains timestamp information and uses the value of the + `HISTTIMEFORMAT' variable to display it. + + * Bash implements `csh'-like history expansion (*note History + Interaction::). + + * Bash has one-dimensional array variables (*note Arrays::), and the + appropriate variable expansions and assignment syntax to use them. + Several of the Bash builtins take options to act on arrays. Bash + provides a number of built-in array variables. + + * The `$'...'' quoting syntax, which expands ANSI-C + backslash-escaped characters in the text between the single quotes, + is supported (*note ANSI-C Quoting::). + + * Bash supports the `$"..."' quoting syntax to do locale-specific + translation of the characters between the double quotes. The + `-D', `--dump-strings', and `--dump-po-strings' invocation options + list the translatable strings found in a script (*note Locale + Translation::). + + * Bash implements the `!' keyword to negate the return value of a + pipeline (*note Pipelines::). Very useful when an `if' statement + needs to act only if a test fails. The Bash `-o pipefail' option + to `set' will cause a pipeline to return a failure status if any + command fails. + + * Bash has the `time' reserved word and command timing (*note + Pipelines::). The display of the timing statistics may be + controlled with the `TIMEFORMAT' variable. + + * Bash implements the `for (( EXPR1 ; EXPR2 ; EXPR3 ))' arithmetic + for command, similar to the C language (*note Looping + Constructs::). + + * Bash includes the `select' compound command, which allows the + generation of simple menus (*note Conditional Constructs::). + + * Bash includes the `[[' compound command, which makes conditional + testing part of the shell grammar (*note Conditional + Constructs::), including optional regular expression matching. + + * Bash provides optional case-insensitive matching for the `case' and + `[[' constructs. + + * Bash includes brace expansion (*note Brace Expansion::) and tilde + expansion (*note Tilde Expansion::). + + * Bash implements command aliases and the `alias' and `unalias' + builtins (*note Aliases::). + + * Bash provides shell arithmetic, the `((' compound command (*note + Conditional Constructs::), and arithmetic expansion (*note Shell + Arithmetic::). + + * Variables present in the shell's initial environment are + automatically exported to child processes. The Bourne shell does + not normally do this unless the variables are explicitly marked + using the `export' command. + + * Bash supports the `+=' assignment operator, which appends to the + value of the variable named on the left hand side. + + * Bash includes the POSIX pattern removal `%', `#', `%%' and `##' + expansions to remove leading or trailing substrings from variable + values (*note Shell Parameter Expansion::). + + * The expansion `${#xx}', which returns the length of `${xx}', is + supported (*note Shell Parameter Expansion::). + + * The expansion `${var:'OFFSET`[:'LENGTH`]}', which expands to the + substring of `var''s value of length LENGTH, beginning at OFFSET, + is present (*note Shell Parameter Expansion::). + + * The expansion `${var/[/]'PATTERN`[/'REPLACEMENT`]}', which matches + PATTERN and replaces it with REPLACEMENT in the value of `var', is + available (*note Shell Parameter Expansion::). + + * The expansion `${!PREFIX}*' expansion, which expands to the names + of all shell variables whose names begin with PREFIX, is available + (*note Shell Parameter Expansion::). + + * Bash has INDIRECT variable expansion using `${!word}' (*note Shell + Parameter Expansion::). + + * Bash can expand positional parameters beyond `$9' using `${NUM}'. + + * The POSIX `$()' form of command substitution is implemented (*note + Command Substitution::), and preferred to the Bourne shell's ```' + (which is also implemented for backwards compatibility). + + * Bash has process substitution (*note Process Substitution::). + + * Bash automatically assigns variables that provide information + about the current user (`UID', `EUID', and `GROUPS'), the current + host (`HOSTTYPE', `OSTYPE', `MACHTYPE', and `HOSTNAME'), and the + instance of Bash that is running (`BASH', `BASH_VERSION', and + `BASH_VERSINFO'). *Note Bash Variables::, for details. + + * The `IFS' variable is used to split only the results of expansion, + not all words (*note Word Splitting::). This closes a + longstanding shell security hole. + + * Bash implements the full set of POSIX filename expansion operators, + including CHARACTER CLASSES, EQUIVALENCE CLASSES, and COLLATING + SYMBOLS (*note Filename Expansion::). + + * Bash implements extended pattern matching features when the + `extglob' shell option is enabled (*note Pattern Matching::). + + * It is possible to have a variable and a function with the same + name; `sh' does not separate the two name spaces. + + * Bash functions are permitted to have local variables using the + `local' builtin, and thus useful recursive functions may be written + (*note Bash Builtins::). + + * Variable assignments preceding commands affect only that command, + even builtins and functions (*note Environment::). In `sh', all + variable assignments preceding commands are global unless the + command is executed from the file system. + + * Bash performs filename expansion on filenames specified as operands + to input and output redirection operators (*note Redirections::). + + * Bash contains the `<>' redirection operator, allowing a file to be + opened for both reading and writing, and the `&>' redirection + operator, for directing standard output and standard error to the + same file (*note Redirections::). + + * Bash includes the `<<<' redirection operator, allowing a string to + be used as the standard input to a command. + + * Bash implements the `[n]<&WORD' and `[n]>&WORD' redirection + operators, which move one file descriptor to another. + + * Bash treats a number of filenames specially when they are used in + redirection operators (*note Redirections::). + + * Bash can open network connections to arbitrary machines and + services with the redirection operators (*note Redirections::). + + * The `noclobber' option is available to avoid overwriting existing + files with output redirection (*note The Set Builtin::). The `>|' + redirection operator may be used to override `noclobber'. + + * The Bash `cd' and `pwd' builtins (*note Bourne Shell Builtins::) + each take `-L' and `-P' options to switch between logical and + physical modes. + + * Bash allows a function to override a builtin with the same name, + and provides access to that builtin's functionality within the + function via the `builtin' and `command' builtins (*note Bash + Builtins::). + + * The `command' builtin allows selective disabling of functions when + command lookup is performed (*note Bash Builtins::). + + * Individual builtins may be enabled or disabled using the `enable' + builtin (*note Bash Builtins::). + + * The Bash `exec' builtin takes additional options that allow users + to control the contents of the environment passed to the executed + command, and what the zeroth argument to the command is to be + (*note Bourne Shell Builtins::). + + * Shell functions may be exported to children via the environment + using `export -f' (*note Shell Functions::). + + * The Bash `export', `readonly', and `declare' builtins can take a + `-f' option to act on shell functions, a `-p' option to display + variables with various attributes set in a format that can be used + as shell input, a `-n' option to remove various variable + attributes, and `name=value' arguments to set variable attributes + and values simultaneously. + + * The Bash `hash' builtin allows a name to be associated with an + arbitrary filename, even when that filename cannot be found by + searching the `$PATH', using `hash -p' (*note Bourne Shell + Builtins::). + + * Bash includes a `help' builtin for quick reference to shell + facilities (*note Bash Builtins::). + + * The `printf' builtin is available to display formatted output + (*note Bash Builtins::). + + * The Bash `read' builtin (*note Bash Builtins::) will read a line + ending in `\' with the `-r' option, and will use the `REPLY' + variable as a default if no non-option arguments are supplied. + The Bash `read' builtin also accepts a prompt string with the `-p' + option and will use Readline to obtain the line when given the + `-e' option. The `read' builtin also has additional options to + control input: the `-s' option will turn off echoing of input + characters as they are read, the `-t' option will allow `read' to + time out if input does not arrive within a specified number of + seconds, the `-n' option will allow reading only a specified + number of characters rather than a full line, and the `-d' option + will read until a particular character rather than newline. + + * The `return' builtin may be used to abort execution of scripts + executed with the `.' or `source' builtins (*note Bourne Shell + Builtins::). + + * Bash includes the `shopt' builtin, for finer control of shell + optional capabilities (*note The Shopt Builtin::), and allows + these options to be set and unset at shell invocation (*note + Invoking Bash::). + + * Bash has much more optional behavior controllable with the `set' + builtin (*note The Set Builtin::). + + * The `-x' (`xtrace') option displays commands other than simple + commands when performing an execution trace (*note The Set + Builtin::). + + * The `test' builtin (*note Bourne Shell Builtins::) is slightly + different, as it implements the POSIX algorithm, which specifies + the behavior based on the number of arguments. + + * Bash includes the `caller' builtin, which displays the context of + any active subroutine call (a shell function or a script executed + with the `.' or `source' builtins). This supports the bash + debugger. + + * The `trap' builtin (*note Bourne Shell Builtins::) allows a + `DEBUG' pseudo-signal specification, similar to `EXIT'. Commands + specified with a `DEBUG' trap are executed before every simple + command, `for' command, `case' command, `select' command, every + arithmetic `for' command, and before the first command executes in + a shell function. The `DEBUG' trap is not inherited by shell + functions unless the function has been given the `trace' attribute + or the `functrace' option has been enabled using the `shopt' + builtin. The `extdebug' shell option has additional effects on the + `DEBUG' trap. + + The `trap' builtin (*note Bourne Shell Builtins::) allows an `ERR' + pseudo-signal specification, similar to `EXIT' and `DEBUG'. + Commands specified with an `ERR' trap are executed after a simple + command fails, with a few exceptions. The `ERR' trap is not + inherited by shell functions unless the `-o errtrace' option to + the `set' builtin is enabled. + + The `trap' builtin (*note Bourne Shell Builtins::) allows a + `RETURN' pseudo-signal specification, similar to `EXIT' and + `DEBUG'. Commands specified with an `RETURN' trap are executed + before execution resumes after a shell function or a shell script + executed with `.' or `source' returns. The `RETURN' trap is not + inherited by shell functions unless the function has been given + the `trace' attribute or the `functrace' option has been enabled + using the `shopt' builtin. + + * The Bash `type' builtin is more extensive and gives more + information about the names it finds (*note Bash Builtins::). + + * The Bash `umask' builtin permits a `-p' option to cause the output + to be displayed in the form of a `umask' command that may be + reused as input (*note Bourne Shell Builtins::). + + * Bash implements a `csh'-like directory stack, and provides the + `pushd', `popd', and `dirs' builtins to manipulate it (*note The + Directory Stack::). Bash also makes the directory stack visible + as the value of the `DIRSTACK' shell variable. + + * Bash interprets special backslash-escaped characters in the prompt + strings when interactive (*note Printing a Prompt::). + + * The Bash restricted mode is more useful (*note The Restricted + Shell::); the SVR4.2 shell restricted mode is too limited. + + * The `disown' builtin can remove a job from the internal shell job + table (*note Job Control Builtins::) or suppress the sending of + `SIGHUP' to a job when the shell exits as the result of a `SIGHUP'. + + * Bash includes a number of features to support a separate debugger + for shell scripts. + + * The SVR4.2 shell has two privilege-related builtins (`mldmode' and + `priv') not present in Bash. + + * Bash does not have the `stop' or `newgrp' builtins. + + * Bash does not use the `SHACCT' variable or perform shell + accounting. + + * The SVR4.2 `sh' uses a `TIMEOUT' variable like Bash uses `TMOUT'. + + +More features unique to Bash may be found in *note Bash Features::. + +B.1 Implementation Differences From The SVR4.2 Shell +==================================================== + +Since Bash is a completely new implementation, it does not suffer from +many of the limitations of the SVR4.2 shell. For instance: + + * Bash does not fork a subshell when redirecting into or out of a + shell control structure such as an `if' or `while' statement. + + * Bash does not allow unbalanced quotes. The SVR4.2 shell will + silently insert a needed closing quote at `EOF' under certain + circumstances. This can be the cause of some hard-to-find errors. + + * The SVR4.2 shell uses a baroque memory management scheme based on + trapping `SIGSEGV'. If the shell is started from a process with + `SIGSEGV' blocked (e.g., by using the `system()' C library + function call), it misbehaves badly. + + * In a questionable attempt at security, the SVR4.2 shell, when + invoked without the `-p' option, will alter its real and effective + UID and GID if they are less than some magic threshold value, + commonly 100. This can lead to unexpected results. + + * The SVR4.2 shell does not allow users to trap `SIGSEGV', + `SIGALRM', or `SIGCHLD'. + + * The SVR4.2 shell does not allow the `IFS', `MAILCHECK', `PATH', + `PS1', or `PS2' variables to be unset. + + * The SVR4.2 shell treats `^' as the undocumented equivalent of `|'. + + * Bash allows multiple option arguments when it is invoked (`-x -v'); + the SVR4.2 shell allows only one option argument (`-xv'). In + fact, some versions of the shell dump core if the second argument + begins with a `-'. + + * The SVR4.2 shell exits a script if any builtin fails; Bash exits a + script only if one of the POSIX special builtins fails, and only + for certain failures, as enumerated in the POSIX standard. + + * The SVR4.2 shell behaves differently when invoked as `jsh' (it + turns on job control). + + +File: bashref.info, Node: GNU Free Documentation License, Next: Indexes, Prev: Major Differences From The Bourne Shell, Up: Top + +Appendix C GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: bashref.info, Node: Indexes, Prev: GNU Free Documentation License, Up: Top + +Appendix D Indexes +****************** + +* Menu: + +* Builtin Index:: Index of Bash builtin commands. +* Reserved Word Index:: Index of Bash reserved words. +* Variable Index:: Quick reference helps you find the + variable you want. +* Function Index:: Index of bindable Readline functions. +* Concept Index:: General index for concepts described in + this manual. + + +File: bashref.info, Node: Builtin Index, Next: Reserved Word Index, Up: Indexes + +D.1 Index of Shell Builtin Commands +=================================== + +[index] +* Menu: + +* .: Bourne Shell Builtins. + (line 16) +* :: Bourne Shell Builtins. + (line 11) +* [: Bourne Shell Builtins. + (line 213) +* alias: Bash Builtins. (line 11) +* bg: Job Control Builtins. + (line 7) +* bind: Bash Builtins. (line 21) +* break: Bourne Shell Builtins. + (line 29) +* builtin: Bash Builtins. (line 98) +* caller: Bash Builtins. (line 106) +* cd: Bourne Shell Builtins. + (line 36) +* command: Bash Builtins. (line 123) +* compgen: Programmable Completion Builtins. + (line 10) +* complete: Programmable Completion Builtins. + (line 28) +* compopt: Programmable Completion Builtins. + (line 217) +* continue: Bourne Shell Builtins. + (line 55) +* declare: Bash Builtins. (line 142) +* dirs: Directory Stack Builtins. + (line 7) +* disown: Job Control Builtins. + (line 83) +* echo: Bash Builtins. (line 221) +* enable: Bash Builtins. (line 273) +* eval: Bourne Shell Builtins. + (line 63) +* exec: Bourne Shell Builtins. + (line 70) +* exit: Bourne Shell Builtins. + (line 82) +* export: Bourne Shell Builtins. + (line 88) +* fc: Bash History Builtins. + (line 10) +* fg: Job Control Builtins. + (line 16) +* getopts: Bourne Shell Builtins. + (line 103) +* hash: Bourne Shell Builtins. + (line 145) +* help: Bash Builtins. (line 301) +* history: Bash History Builtins. + (line 39) +* jobs: Job Control Builtins. + (line 25) +* kill: Job Control Builtins. + (line 57) +* let: Bash Builtins. (line 321) +* local: Bash Builtins. (line 328) +* logout: Bash Builtins. (line 338) +* mapfile: Bash Builtins. (line 342) +* popd: Directory Stack Builtins. + (line 37) +* printf: Bash Builtins. (line 388) +* pushd: Directory Stack Builtins. + (line 58) +* pwd: Bourne Shell Builtins. + (line 163) +* read: Bash Builtins. (line 413) +* readarray: Bash Builtins. (line 493) +* readonly: Bourne Shell Builtins. + (line 172) +* return: Bourne Shell Builtins. + (line 188) +* set: The Set Builtin. (line 11) +* shift: Bourne Shell Builtins. + (line 201) +* shopt: The Shopt Builtin. (line 9) +* source: Bash Builtins. (line 501) +* suspend: Job Control Builtins. + (line 94) +* test: Bourne Shell Builtins. + (line 213) +* times: Bourne Shell Builtins. + (line 281) +* trap: Bourne Shell Builtins. + (line 286) +* type: Bash Builtins. (line 505) +* typeset: Bash Builtins. (line 536) +* ulimit: Bash Builtins. (line 542) +* umask: Bourne Shell Builtins. + (line 332) +* unalias: Bash Builtins. (line 630) +* unset: Bourne Shell Builtins. + (line 349) +* wait: Job Control Builtins. + (line 73) + + +File: bashref.info, Node: Reserved Word Index, Next: Variable Index, Prev: Builtin Index, Up: Indexes + +D.2 Index of Shell Reserved Words +================================= + +[index] +* Menu: + +* !: Pipelines. (line 9) +* [[: Conditional Constructs. + (line 117) +* ]]: Conditional Constructs. + (line 117) +* case: Conditional Constructs. + (line 28) +* do: Looping Constructs. (line 12) +* done: Looping Constructs. (line 12) +* elif: Conditional Constructs. + (line 7) +* else: Conditional Constructs. + (line 7) +* esac: Conditional Constructs. + (line 28) +* fi: Conditional Constructs. + (line 7) +* for: Looping Constructs. (line 29) +* function: Shell Functions. (line 13) +* if: Conditional Constructs. + (line 7) +* in: Conditional Constructs. + (line 28) +* select: Conditional Constructs. + (line 76) +* then: Conditional Constructs. + (line 7) +* time: Pipelines. (line 9) +* until: Looping Constructs. (line 12) +* while: Looping Constructs. (line 20) +* {: Command Grouping. (line 21) +* }: Command Grouping. (line 21) + + +File: bashref.info, Node: Variable Index, Next: Function Index, Prev: Reserved Word Index, Up: Indexes + +D.3 Parameter and Variable Index +================================ + +[index] +* Menu: + +* !: Special Parameters. (line 46) +* #: Special Parameters. (line 30) +* $: Special Parameters. (line 42) +* *: Special Parameters. (line 9) +* -: Special Parameters. (line 37) +* 0: Special Parameters. (line 50) +* ?: Special Parameters. (line 33) +* @: Special Parameters. (line 19) +* _: Special Parameters. (line 59) +* auto_resume: Job Control Variables. + (line 6) +* BASH: Bash Variables. (line 13) +* BASH_ALIASES: Bash Variables. (line 30) +* BASH_ARGC: Bash Variables. (line 37) +* BASH_ARGV: Bash Variables. (line 47) +* BASH_CMDS: Bash Variables. (line 57) +* BASH_COMMAND: Bash Variables. (line 64) +* BASH_ENV: Bash Variables. (line 69) +* BASH_EXECUTION_STRING: Bash Variables. (line 75) +* BASH_LINENO: Bash Variables. (line 78) +* BASH_REMATCH: Bash Variables. (line 87) +* BASH_SOURCE: Bash Variables. (line 95) +* BASH_SUBSHELL: Bash Variables. (line 99) +* BASH_VERSINFO: Bash Variables. (line 103) +* BASH_VERSION: Bash Variables. (line 127) +* BASH_XTRACEFD: Bash Variables. (line 130) +* BASHOPTS: Bash Variables. (line 16) +* BASHPID: Bash Variables. (line 25) +* bell-style: Readline Init File Syntax. + (line 38) +* bind-tty-special-chars: Readline Init File Syntax. + (line 45) +* CDPATH: Bourne Shell Variables. + (line 9) +* COLUMNS: Bash Variables. (line 141) +* comment-begin: Readline Init File Syntax. + (line 50) +* COMP_CWORD: Bash Variables. (line 146) +* COMP_KEY: Bash Variables. (line 175) +* COMP_LINE: Bash Variables. (line 152) +* COMP_POINT: Bash Variables. (line 157) +* COMP_TYPE: Bash Variables. (line 165) +* COMP_WORDBREAKS: Bash Variables. (line 179) +* COMP_WORDS: Bash Variables. (line 185) +* completion-prefix-display-length: Readline Init File Syntax. + (line 60) +* completion-query-items: Readline Init File Syntax. + (line 67) +* COMPREPLY: Bash Variables. (line 193) +* convert-meta: Readline Init File Syntax. + (line 77) +* DIRSTACK: Bash Variables. (line 198) +* disable-completion: Readline Init File Syntax. + (line 83) +* editing-mode: Readline Init File Syntax. + (line 88) +* EMACS: Bash Variables. (line 208) +* enable-keypad: Readline Init File Syntax. + (line 99) +* EUID: Bash Variables. (line 213) +* expand-tilde: Readline Init File Syntax. + (line 110) +* FCEDIT: Bash Variables. (line 217) +* FIGNORE: Bash Variables. (line 221) +* FUNCNAME: Bash Variables. (line 227) +* GLOBIGNORE: Bash Variables. (line 236) +* GROUPS: Bash Variables. (line 242) +* histchars: Bash Variables. (line 248) +* HISTCMD: Bash Variables. (line 263) +* HISTCONTROL: Bash Variables. (line 268) +* HISTFILE: Bash Variables. (line 284) +* HISTFILESIZE: Bash Variables. (line 288) +* HISTIGNORE: Bash Variables. (line 296) +* history-preserve-point: Readline Init File Syntax. + (line 114) +* history-size: Readline Init File Syntax. + (line 120) +* HISTSIZE: Bash Variables. (line 315) +* HISTTIMEFORMAT: Bash Variables. (line 319) +* HOME: Bourne Shell Variables. + (line 13) +* horizontal-scroll-mode: Readline Init File Syntax. + (line 125) +* HOSTFILE: Bash Variables. (line 328) +* HOSTNAME: Bash Variables. (line 339) +* HOSTTYPE: Bash Variables. (line 342) +* IFS: Bourne Shell Variables. + (line 18) +* IGNOREEOF: Bash Variables. (line 345) +* input-meta: Readline Init File Syntax. + (line 132) +* INPUTRC: Bash Variables. (line 355) +* isearch-terminators: Readline Init File Syntax. + (line 139) +* keymap: Readline Init File Syntax. + (line 146) +* LANG: Bash Variables. (line 359) +* LC_ALL: Bash Variables. (line 363) +* LC_COLLATE: Bash Variables. (line 367) +* LC_CTYPE: Bash Variables. (line 374) +* LC_MESSAGES <1>: Locale Translation. (line 11) +* LC_MESSAGES: Bash Variables. (line 379) +* LC_NUMERIC: Bash Variables. (line 383) +* LINENO: Bash Variables. (line 387) +* LINES: Bash Variables. (line 391) +* MACHTYPE: Bash Variables. (line 396) +* MAIL: Bourne Shell Variables. + (line 22) +* MAILCHECK: Bash Variables. (line 400) +* MAILPATH: Bourne Shell Variables. + (line 27) +* mark-modified-lines: Readline Init File Syntax. + (line 159) +* mark-symlinked-directories: Readline Init File Syntax. + (line 164) +* match-hidden-files: Readline Init File Syntax. + (line 169) +* meta-flag: Readline Init File Syntax. + (line 132) +* OLDPWD: Bash Variables. (line 408) +* OPTARG: Bourne Shell Variables. + (line 34) +* OPTERR: Bash Variables. (line 411) +* OPTIND: Bourne Shell Variables. + (line 38) +* OSTYPE: Bash Variables. (line 415) +* output-meta: Readline Init File Syntax. + (line 176) +* page-completions: Readline Init File Syntax. + (line 181) +* PATH: Bourne Shell Variables. + (line 42) +* PIPESTATUS: Bash Variables. (line 418) +* POSIXLY_CORRECT: Bash Variables. (line 423) +* PPID: Bash Variables. (line 432) +* PROMPT_COMMAND: Bash Variables. (line 436) +* PROMPT_DIRTRIM: Bash Variables. (line 440) +* PS1: Bourne Shell Variables. + (line 48) +* PS2: Bourne Shell Variables. + (line 53) +* PS3: Bash Variables. (line 446) +* PS4: Bash Variables. (line 451) +* PWD: Bash Variables. (line 457) +* RANDOM: Bash Variables. (line 460) +* REPLY: Bash Variables. (line 465) +* revert-all-at-newline: Readline Init File Syntax. + (line 191) +* SECONDS: Bash Variables. (line 468) +* SHELL: Bash Variables. (line 474) +* SHELLOPTS: Bash Variables. (line 479) +* SHLVL: Bash Variables. (line 488) +* show-all-if-ambiguous: Readline Init File Syntax. + (line 197) +* show-all-if-unmodified: Readline Init File Syntax. + (line 203) +* skip-completed-text: Readline Init File Syntax. + (line 212) +* TEXTDOMAIN: Locale Translation. (line 11) +* TEXTDOMAINDIR: Locale Translation. (line 11) +* TIMEFORMAT: Bash Variables. (line 493) +* TMOUT: Bash Variables. (line 531) +* TMPDIR: Bash Variables. (line 543) +* UID: Bash Variables. (line 547) +* visible-stats: Readline Init File Syntax. + (line 225) + + +File: bashref.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes + +D.4 Function Index +================== + +[index] +* Menu: + +* abort (C-g): Miscellaneous Commands. + (line 10) +* accept-line (Newline or Return): Commands For History. (line 6) +* backward-char (C-b): Commands For Moving. (line 15) +* backward-delete-char (Rubout): Commands For Text. (line 11) +* backward-kill-line (C-x Rubout): Commands For Killing. (line 9) +* backward-kill-word (M-): Commands For Killing. (line 24) +* backward-word (M-b): Commands For Moving. (line 22) +* beginning-of-history (M-<): Commands For History. (line 20) +* beginning-of-line (C-a): Commands For Moving. (line 6) +* call-last-kbd-macro (C-x e): Keyboard Macros. (line 13) +* capitalize-word (M-c): Commands For Text. (line 46) +* character-search (C-]): Miscellaneous Commands. + (line 41) +* character-search-backward (M-C-]): Miscellaneous Commands. + (line 46) +* clear-screen (C-l): Commands For Moving. (line 34) +* complete (): Commands For Completion. + (line 6) +* copy-backward-word (): Commands For Killing. (line 58) +* copy-forward-word (): Commands For Killing. (line 63) +* copy-region-as-kill (): Commands For Killing. (line 54) +* delete-char (C-d): Commands For Text. (line 6) +* delete-char-or-list (): Commands For Completion. + (line 39) +* delete-horizontal-space (): Commands For Killing. (line 46) +* digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6) +* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. + (line 14) +* downcase-word (M-l): Commands For Text. (line 42) +* dump-functions (): Miscellaneous Commands. + (line 73) +* dump-macros (): Miscellaneous Commands. + (line 85) +* dump-variables (): Miscellaneous Commands. + (line 79) +* end-kbd-macro (C-x )): Keyboard Macros. (line 9) +* end-of-history (M->): Commands For History. (line 23) +* end-of-line (C-e): Commands For Moving. (line 9) +* exchange-point-and-mark (C-x C-x): Miscellaneous Commands. + (line 36) +* forward-backward-delete-char (): Commands For Text. (line 15) +* forward-char (C-f): Commands For Moving. (line 12) +* forward-search-history (C-s): Commands For History. (line 31) +* forward-word (M-f): Commands For Moving. (line 18) +* history-search-backward (): Commands For History. (line 51) +* history-search-forward (): Commands For History. (line 46) +* insert-comment (M-#): Miscellaneous Commands. + (line 60) +* insert-completions (M-*): Commands For Completion. + (line 18) +* kill-line (C-k): Commands For Killing. (line 6) +* kill-region (): Commands For Killing. (line 50) +* kill-whole-line (): Commands For Killing. (line 15) +* kill-word (M-d): Commands For Killing. (line 19) +* menu-complete (): Commands For Completion. + (line 22) +* menu-complete-backward (): Commands For Completion. + (line 34) +* next-history (C-n): Commands For History. (line 17) +* non-incremental-forward-search-history (M-n): Commands For History. + (line 41) +* non-incremental-reverse-search-history (M-p): Commands For History. + (line 36) +* overwrite-mode (): Commands For Text. (line 50) +* possible-completions (M-?): Commands For Completion. + (line 15) +* prefix-meta (): Miscellaneous Commands. + (line 18) +* previous-history (C-p): Commands For History. (line 13) +* quoted-insert (C-q or C-v): Commands For Text. (line 20) +* re-read-init-file (C-x C-r): Miscellaneous Commands. + (line 6) +* redraw-current-line (): Commands For Moving. (line 38) +* reverse-search-history (C-r): Commands For History. (line 27) +* revert-line (M-r): Miscellaneous Commands. + (line 25) +* self-insert (a, b, A, 1, !, ...): Commands For Text. (line 24) +* set-mark (C-@): Miscellaneous Commands. + (line 32) +* skip-csi-sequence (): Miscellaneous Commands. + (line 51) +* start-kbd-macro (C-x (): Keyboard Macros. (line 6) +* transpose-chars (C-t): Commands For Text. (line 27) +* transpose-words (M-t): Commands For Text. (line 33) +* undo (C-_ or C-x C-u): Miscellaneous Commands. + (line 22) +* universal-argument (): Numeric Arguments. (line 10) +* unix-filename-rubout (): Commands For Killing. (line 41) +* unix-line-discard (C-u): Commands For Killing. (line 12) +* unix-word-rubout (C-w): Commands For Killing. (line 37) +* upcase-word (M-u): Commands For Text. (line 38) +* yank (C-y): Commands For Killing. (line 68) +* yank-last-arg (M-. or M-_): Commands For History. (line 65) +* yank-nth-arg (M-C-y): Commands For History. (line 56) +* yank-pop (M-y): Commands For Killing. (line 71) + + +File: bashref.info, Node: Concept Index, Prev: Function Index, Up: Indexes + +D.5 Concept Index +================= + +[index] +* Menu: + +* alias expansion: Aliases. (line 6) +* arithmetic evaluation: Shell Arithmetic. (line 6) +* arithmetic expansion: Arithmetic Expansion. + (line 6) +* arithmetic, shell: Shell Arithmetic. (line 6) +* arrays: Arrays. (line 6) +* background: Job Control Basics. (line 6) +* Bash configuration: Basic Installation. (line 6) +* Bash installation: Basic Installation. (line 6) +* Bourne shell: Basic Shell Features. + (line 6) +* brace expansion: Brace Expansion. (line 6) +* builtin: Definitions. (line 17) +* command editing: Readline Bare Essentials. + (line 6) +* command execution: Command Search and Execution. + (line 6) +* command expansion: Simple Command Expansion. + (line 6) +* command history: Bash History Facilities. + (line 6) +* command search: Command Search and Execution. + (line 6) +* command substitution: Command Substitution. + (line 6) +* command timing: Pipelines. (line 9) +* commands, compound: Compound Commands. (line 6) +* commands, conditional: Conditional Constructs. + (line 6) +* commands, grouping: Command Grouping. (line 6) +* commands, lists: Lists. (line 6) +* commands, looping: Looping Constructs. (line 6) +* commands, pipelines: Pipelines. (line 6) +* commands, shell: Shell Commands. (line 6) +* commands, simple: Simple Commands. (line 6) +* comments, shell: Comments. (line 6) +* completion builtins: Programmable Completion Builtins. + (line 6) +* configuration: Basic Installation. (line 6) +* control operator: Definitions. (line 21) +* coprocess: Coprocesses. (line 6) +* directory stack: The Directory Stack. (line 6) +* editing command lines: Readline Bare Essentials. + (line 6) +* environment: Environment. (line 6) +* evaluation, arithmetic: Shell Arithmetic. (line 6) +* event designators: Event Designators. (line 6) +* execution environment: Command Execution Environment. + (line 6) +* exit status <1>: Exit Status. (line 6) +* exit status: Definitions. (line 26) +* expansion: Shell Expansions. (line 6) +* expansion, arithmetic: Arithmetic Expansion. + (line 6) +* expansion, brace: Brace Expansion. (line 6) +* expansion, filename: Filename Expansion. (line 9) +* expansion, parameter: Shell Parameter Expansion. + (line 6) +* expansion, pathname: Filename Expansion. (line 9) +* expansion, tilde: Tilde Expansion. (line 6) +* expressions, arithmetic: Shell Arithmetic. (line 6) +* expressions, conditional: Bash Conditional Expressions. + (line 6) +* field: Definitions. (line 30) +* filename: Definitions. (line 35) +* filename expansion: Filename Expansion. (line 9) +* foreground: Job Control Basics. (line 6) +* functions, shell: Shell Functions. (line 6) +* history builtins: Bash History Builtins. + (line 6) +* history events: Event Designators. (line 7) +* history expansion: History Interaction. (line 6) +* history list: Bash History Facilities. + (line 6) +* History, how to use: Programmable Completion Builtins. + (line 237) +* identifier: Definitions. (line 51) +* initialization file, readline: Readline Init File. (line 6) +* installation: Basic Installation. (line 6) +* interaction, readline: Readline Interaction. + (line 6) +* interactive shell <1>: Interactive Shells. (line 6) +* interactive shell: Invoking Bash. (line 127) +* internationalization: Locale Translation. (line 6) +* job: Definitions. (line 38) +* job control <1>: Job Control Basics. (line 6) +* job control: Definitions. (line 42) +* kill ring: Readline Killing Commands. + (line 19) +* killing text: Readline Killing Commands. + (line 6) +* localization: Locale Translation. (line 6) +* login shell: Invoking Bash. (line 124) +* matching, pattern: Pattern Matching. (line 6) +* metacharacter: Definitions. (line 46) +* name: Definitions. (line 51) +* native languages: Locale Translation. (line 6) +* notation, readline: Readline Bare Essentials. + (line 6) +* operator, shell: Definitions. (line 57) +* parameter expansion: Shell Parameter Expansion. + (line 6) +* parameters: Shell Parameters. (line 6) +* parameters, positional: Positional Parameters. + (line 6) +* parameters, special: Special Parameters. (line 6) +* pathname expansion: Filename Expansion. (line 9) +* pattern matching: Pattern Matching. (line 6) +* pipeline: Pipelines. (line 6) +* POSIX: Definitions. (line 9) +* POSIX Mode: Bash POSIX Mode. (line 6) +* process group: Definitions. (line 62) +* process group ID: Definitions. (line 66) +* process substitution: Process Substitution. + (line 6) +* programmable completion: Programmable Completion. + (line 6) +* prompting: Printing a Prompt. (line 6) +* quoting: Quoting. (line 6) +* quoting, ANSI: ANSI-C Quoting. (line 6) +* Readline, how to use: Job Control Variables. + (line 24) +* redirection: Redirections. (line 6) +* reserved word: Definitions. (line 70) +* restricted shell: The Restricted Shell. + (line 6) +* return status: Definitions. (line 75) +* shell arithmetic: Shell Arithmetic. (line 6) +* shell function: Shell Functions. (line 6) +* shell script: Shell Scripts. (line 6) +* shell variable: Shell Parameters. (line 6) +* shell, interactive: Interactive Shells. (line 6) +* signal: Definitions. (line 78) +* signal handling: Signals. (line 6) +* special builtin <1>: Special Builtins. (line 6) +* special builtin: Definitions. (line 82) +* startup files: Bash Startup Files. (line 6) +* suspending jobs: Job Control Basics. (line 6) +* tilde expansion: Tilde Expansion. (line 6) +* token: Definitions. (line 86) +* translation, native languages: Locale Translation. (line 6) +* variable, shell: Shell Parameters. (line 6) +* variables, readline: Readline Init File Syntax. + (line 37) +* word: Definitions. (line 90) +* word splitting: Word Splitting. (line 6) +* yanking text: Readline Killing Commands. + (line 6) + + + +Tag Table: +Node: Top1346 +Node: Introduction3185 +Node: What is Bash?3413 +Node: What is a shell?4526 +Node: Definitions7066 +Node: Basic Shell Features9984 +Node: Shell Syntax11203 +Node: Shell Operation12233 +Node: Quoting13527 +Node: Escape Character14830 +Node: Single Quotes15315 +Node: Double Quotes15663 +Node: ANSI-C Quoting16788 +Node: Locale Translation17773 +Node: Comments18669 +Node: Shell Commands19287 +Node: Simple Commands20111 +Node: Pipelines20742 +Node: Lists22998 +Node: Compound Commands24727 +Node: Looping Constructs25531 +Node: Conditional Constructs27986 +Node: Command Grouping36099 +Node: Coprocesses37578 +Node: Shell Functions39222 +Node: Shell Parameters43776 +Node: Positional Parameters46192 +Node: Special Parameters47092 +Node: Shell Expansions50056 +Node: Brace Expansion51981 +Node: Tilde Expansion54736 +Node: Shell Parameter Expansion57087 +Node: Command Substitution65988 +Node: Arithmetic Expansion67321 +Node: Process Substitution68171 +Node: Word Splitting69221 +Node: Filename Expansion70844 +Node: Pattern Matching72983 +Node: Quote Removal76622 +Node: Redirections76917 +Node: Executing Commands85442 +Node: Simple Command Expansion86112 +Node: Command Search and Execution88042 +Node: Command Execution Environment90379 +Node: Environment93365 +Node: Exit Status95025 +Node: Signals96646 +Node: Shell Scripts98614 +Node: Shell Builtin Commands101132 +Node: Bourne Shell Builtins103160 +Node: Bash Builtins120536 +Node: Modifying Shell Behavior145364 +Node: The Set Builtin145709 +Node: The Shopt Builtin155233 +Node: Special Builtins166095 +Node: Shell Variables167074 +Node: Bourne Shell Variables167514 +Node: Bash Variables169495 +Node: Bash Features192981 +Node: Invoking Bash193864 +Node: Bash Startup Files199673 +Node: Interactive Shells204685 +Node: What is an Interactive Shell?205095 +Node: Is this Shell Interactive?205744 +Node: Interactive Shell Behavior206559 +Node: Bash Conditional Expressions209839 +Node: Shell Arithmetic213488 +Node: Aliases216234 +Node: Arrays218806 +Node: The Directory Stack222764 +Node: Directory Stack Builtins223478 +Node: Printing a Prompt226370 +Node: The Restricted Shell229122 +Node: Bash POSIX Mode230954 +Node: Job Control239011 +Node: Job Control Basics239471 +Node: Job Control Builtins244188 +Node: Job Control Variables248552 +Node: Command Line Editing249710 +Node: Introduction and Notation251277 +Node: Readline Interaction252899 +Node: Readline Bare Essentials254090 +Node: Readline Movement Commands255879 +Node: Readline Killing Commands256844 +Node: Readline Arguments258764 +Node: Searching259808 +Node: Readline Init File261994 +Node: Readline Init File Syntax263141 +Node: Conditional Init Constructs277628 +Node: Sample Init File280161 +Node: Bindable Readline Commands283278 +Node: Commands For Moving284485 +Node: Commands For History285629 +Node: Commands For Text288784 +Node: Commands For Killing291457 +Node: Numeric Arguments293908 +Node: Commands For Completion295047 +Node: Keyboard Macros299007 +Node: Miscellaneous Commands299578 +Node: Readline vi Mode305384 +Node: Programmable Completion306298 +Node: Programmable Completion Builtins313504 +Node: Using History Interactively322640 +Node: Bash History Facilities323324 +Node: Bash History Builtins326238 +Node: History Interaction330095 +Node: Event Designators332800 +Node: Word Designators333815 +Node: Modifiers335454 +Node: Installing Bash336858 +Node: Basic Installation337995 +Node: Compilers and Options340687 +Node: Compiling For Multiple Architectures341428 +Node: Installation Names343092 +Node: Specifying the System Type343910 +Node: Sharing Defaults344626 +Node: Operation Controls345299 +Node: Optional Features346257 +Node: Reporting Bugs355816 +Node: Major Differences From The Bourne Shell357017 +Node: GNU Free Documentation License373704 +Node: Indexes398900 +Node: Builtin Index399354 +Node: Reserved Word Index406181 +Node: Variable Index408629 +Node: Function Index420722 +Node: Concept Index427731 + +End Tag Table diff --git a/doc/bashref.pdf b/doc/bashref.pdf new file mode 100644 index 0000000..61b2472 Binary files /dev/null and b/doc/bashref.pdf differ diff --git a/doc/bashref.ps b/doc/bashref.ps new file mode 100644 index 0000000..8eb5d43 --- /dev/null +++ b/doc/bashref.ps @@ -0,0 +1,16298 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software +%%Title: bashref.dvi +%%Pages: 164 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentFonts: CMBX12 CMR10 CMTT10 CMSL10 CMSY10 CMMI12 CMMI10 CMCSC10 +%%+ CMTI10 CMSLTT10 CMTT12 CMTT9 CMMI9 CMR9 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2009.12.29:1559 +%%BeginProcSet: tex.pro 0 0 +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p +delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} +B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ +p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S +rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +%%BeginProcSet: texps.pro 0 0 +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginFont: 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 45 /hyphen put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 108 /l put +dup 110 /n put +dup 111 /o put +dup 115 /s put +dup 123 /braceleft put +dup 125 /braceright put +readonly def +/FontBBox{-1 -234 524 695}readonly 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 12 /fi put +dup 44 /comma put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 65 /A put +dup 66 /B put +dup 68 /D put +dup 72 /H put +dup 73 /I put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 88 /X put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +readonly def +/FontBBox{-39 -250 1036 750}readonly 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 +2614114FCB2EAD5C07129169D177068A05D123FA94A1BA4CB69D6866DE72B305 +542D8C5FC997943D3A74BCC67CE5838933B4DD72CFF5EF285AF1A3678FA1E276 +B880602235D8D3633777078D9CF03CED0145A2C98A90DF1DEB7AE8FF96D370F4 +DB15045DED7BC8EBFDECABDFF6FBBF244A31A576203FE1A8292E91A9D1FBE931 +051570D4224B4A0A6A229B322E8C312E422AE6B50B05DA2BD42B784B5F64AF81 +89010C01067C52625CFC6BE9A6D383C0A4117C3E7B5A6102B4E499DA1091F10E +98790162606EC258F6A203691A8838758D5E915A78B191C56072663CB37CD138 +8CD0866D26682029FE24391284179BE85A1086C6C307756D7FF138284B662FBE +A86B5216EF695048AE526910BFE88DDB8D651D585B5B8D7A1E457A284979BCCB +7A38585791293443055C7C79EFC140E6725DCD4CC66866178331939ED55262F0 +68A85757C07FB3E661324FCCFB3C394164BDEE5AB9E19F48D4F8264BD153B0F3 +BDBB617BD78B95096AB3E1790675C1A4E553516EAE0BA4ECF3703EF646E9F4E0 +AE9B346936CCE23F44F821AB12DA11D312D33830F07A000529D3A2A0866F67BD +D1E50FAE5C1539EA730EE72EA642A060F1352CE7D8DF27CFDD1D007FEB36070B +0C807A2EECE49A3DE849DA9CEAD0487A2EAC929C92270EA13C1A03196937B747 +3DD88B5E47CE93D8B07F6DBFE375B6AFA033692C61CF03A842E358ADA933C697 +D26914CCC7505CAB2973E488A195DB54F82412E0AFF344B116763FBC730747F5 +24EBCC4FECAF9450ADFCFE7AFCEBB795C39599A5C38392F8376EC4BA39C42EC9 +C35EE3324D35A6C4902FFC9266A12B6F9B2F2FD6C25B54B86286C96942DF91DF +770D4A1CA99D2D08079EFD8C5969FB473FD832646105CA6DD00EC559BE8EBB14 +04667BA9EF9370D1787D94A108ECF9E5FD2B1E86C0417147BB31020C9F6AB571 +63853F5718ABA2B0E8B5DBB1CF13A31E3EFC464631B3027DB4001EC0BEBE50AB +24ADDEA0BE07A3D0A9656E5E7A235B7C23BC77A99D18B3962B095FCFAECC3189 +7A4FB593ABE57BC0587E1DD883C1C7708AE98B2BA288CF4DE3E759A046D1A4D2 +3AC2ED1D728FCFB52AC7092C24AA1A2BC0901C9875A3D547BE00AF69F96DFE6E +E2465104579A8E72D62CA221DC32E0F8B7670250C6797E7A8D320F8FAF3CAF55 +06A48B1388A1890485E17DBD705F0EC72469733343A3CB0B5000EB286D86FD35 +089CEC45CE92E5F7E86D10EF6EA41B8B2E0ECCC9580A4D6EEEB1A632B421ABBF +67946E1DB896C5093F733DC91B39F5426807647B5B0436468609DA0BAB8BE701 +FC10CFBD1C9D02810FE22F3E6FC4575D7A576FBB2CB4039E785C9180101386DB +4AB343DE4E705B6E5BC821E0F0CF7D3B021C558E61D68B98A9C89218E19CCE3B +80FF99E8C213C796FD3CF43476832FDAEEA71CDC2C8C475D18745332B845DC96 +1AF7E38FEC1E0C12A785718405BF5AE70780161A7B39278956B1C073DA090220 +87873DB2F2C84DF46EEF6D169E9243AC8CDF7AE56BD45F92EB921B216C3A182B +0BACE2FF94B8CD6A0D089F58E96CAB516637A5BB4CA22FDC56503C947CB0BDB9 +E57204111C8A60FF1354604EDC13AF4062E53848BE4B82799CDB525E494170EF +3131F3B1EF71F9018ABEB33B64EEE7640B3DCC7A1519C7EE1B88971676CDDA06 +8E7E54F8DE8485873F3297097C7A7BDBAB6BE876080C75E953CD2B875C541138 +59E72622A8719A1640FE2524889C19B80514BBE1EC2C8164E687624F49B890F8 +6D74A758BC66F9F269FEF1AE396F7EA885F739D4156F917B3C072BD68CE5A5D9 +92A8569884F5344DD92B7DB405990E6CB885BD9A4970BAA28FC168066DC943FC +F3B9EDCE7E78B857E76B1B4C3200FCAC0298E2B8DF7105BD6458DB913EB76136 +FF9F6B7C940FC435F3E803A9603D24D97A683FF9C6DF75B29D10378AB7AAE5DA +5F531DA50A1CA6837C88B16683D626AC7D22EBB06B09A72A893EE52BCD9BE1AE +F53FD9B40FEF8E75EACCA630701C9BD333F2C4ADFDB69383A4B9791E65FC0A4C +FEF2001704072FFF68DD6CE5252E0C35DB2E3C68D0B4BF6B31C175B77C1B2DB1 +D3BCA2C544E9B4CB843CA268E024CEF1420DD215C4F74FCDB39FFECA898ECA3F +999693191EEE8A29B54F519177763F5580F59F82F427A776406A00A44E748A1F +E5E0D292A763CAE8F278792822C41F0BBB828B18CF312EE0F8A4A09005AC1022 +6A40D186FB40A2BD6A8EDBFDC9D09D4A591BFC7A75E709E91C08CF379FC48B09 +BE319E09D18D18EAB2E4A4A9F3B2F8DBD064D836041AAC60BA5318417E65B130 +79724639EDE691DE718600EA592E08B2E6171A2B6BABCB867EE1B96B545AC399 +1A904D67B9127317BE9C5FB65887A22A356844857795C46A9AE4F81EF4686314 +B642FC7C3730DD3AEA4FC3A0443E8584C4A7A725A0FF1ED837729EC244163846 +C172F50122C0AF2D8813C20048CA2C94932D35C4C8DC04C39B4C36E81316F137 +50C2F675678BA9BD8B2CB9C4F2A38554BC54E85FD27CEAC8B555A3749C05C0FF +E067ED27A933FE2081EE405C1A923D1A9334B4E8357430C4F637B90B6CEDC216 +B7F6892493686733268A8FDDA644DB79E8E5713C5F7C7A50DE64C40AEAE7DC54 +6CFACBB0C0F46A953899489787CFFD8C7FA1EC161F4B2EF2D2C0B704654C3225 +4FF4A4874E34B32E4F82E1ECED0BBDCAF0DADD3DCF20549E6A40345F5C442E32 +A191BDEF9431589D3778CE7083849F4983953686BB56D13FB8A6C1E9CA76BFED +4F89CE11C81E551D994ABF775D2B60639F0A2A67C4DAF416A71821C1E3AB37A9 +A4353C908A9DB90712EAD91E66A909A18125E6B25CCACBD7298A9A0D3A787BBC +FDD94B012AF32AB92ECF0041ECA76D445E00B92C3314B510BB4AA0050CB0DB88 +1C62F1103E1D55E4878ECA9400B92B139A31E7BBDB0642175D0B407F9FCDA194 +C9CDB455870EA50F2890A9284EB97A010832AAF9B7CD0A686C27F3EE3A23AFB1 +F8A53AFF67550FAE4AF01F7FF4E43C8F70CE90F0E011EA960EBEFC24D4FD63B0 +58C3377E262D09848D159B48E55C975C926E0E3B9A31E9A54869675593E0C822 +D54AB77B23F5A3EA77C844EAF690D887BA3142B7B947180EF1B02F5DE124E66E +EA1221BE552672EF39A35F64C73ED1E4CEDB9BB34D2909E878377F0D9CB5F189 +FE76F098DB219D29B3933D446D67A7D9C3F6841ED9CC89BF31573FFDD1D796F8 +DDAE883524C758EBF7BE4EE6E659DDB4459E7844FB36B390A59EBC8E808D954D +69A2595CF84112ED51613961F98AB24F0E343E88882CEC9B8EFA07AAE1352590 +F6C42DF3EE257D32C6066495B9D45E15F1EDE670303FF6B32D5F7A796474DCBB +70BA1ECE7E6DC941883B37B7FCB918781F834F19A13A3CDF96101A1BE14A8040 +1C4EA70314CFDEBF0EDD6805C730F83DF7F637C057E2180C3D2B40811B0B79F8 +C30D4DFDCCFEDC943CB6FA25E862A0220C064AB3F8310047DBF33DFABD94B6E3 +0D5B49A8254AE26DE08DA4ED08A4D7BB2B8A55E4BFB8716B73FEC259D6BEEE26 +BB60AED6332A87E45897F51C7A12B03B9A36BEC38518BFC382DA4D41E1F5AE6D +6E4B77DC99D23E18F2255EE43E594D350D7AE8C83A402041E42718EDA46AFA98 +857879E51E5DAF09848D852FD6827310EEFFDF1CD784B73EEC932C54EAC836E0 +70618B66801630EDB278E4508EF63C9831F0A4D8DB7CCB39728AD4A5044FDE07 +E2768FDC60191A7C70CBE976EE4C1BAEC6FF07DBE4614CF0CC1239C266269064 +BA7A950E4E8FE1F75191438B2C3DC018B94BC673EA0DC79BC52DE624B3DE39E7 +581BC8DAABFD865697BECA2007BE57E026BDA607B48D90804206BE5147D94F92 +CFD28198136B07829DDDA89DC06A4A738448882BEE3A961C4CEB245250416A5E +057FE491568CDB970B580B922F7121D76B517CBF310CC3C6BDC79B156B33F96F +DD649953DADD5A7666A91EE7614F7EB5D3F40C68C7A3E74C21C8AD3DA764D8AC +C9289A5A5CF4E6BD220090A8CD749BE50D2C0135B1FF443E41A7F037E3136DE2 +6AD9DD4D840E2265D6EFC1862738D11D11CB0498111EAD036F9A920B8079EA13 +1DA60D4487DFBAEA127D9330305019BAC3D62CB449458B3728C37B5970CD7FCF +2CEF653CB1A37B8E16149A796F5F1515C2D505CAA449CF1571D2403A66808534 +37E8EA975F71FBF84FAF9D2A6E19778D4F0A21DC35DC73CC6851EFB55C04F832 +98816C20F8A7AF1E7BD898BC92E5B17E0C2560BFF448FF4F0C61B9B619AA9344 +957BA4DF012AA7CB844F6A2045B35E002755949748483545CDE6BA268F45CF93 +9A4BB9847D73CD53C0C54D27678A3C6BE478928AE3F7FEA9CA415CDF4467304F +90EE099A0D1597241AAFB7C6594D48D0076FC938FDDB99E769B7C9E26CD3B834 +E708F72D69EA101A7A659D9A45EAD212A79CA612C46AB0C3822390CF8C359715 +842B0B9724CD7968B62A9AB251DBE3230E2A75780344004EB9565798A41725D8 +62C9316F4DAFD66FB503EDABFE85CA7A2DC73F2D3CFEF347C4396F67199275D6 +C15D4441727F2CC6F749B527CFE9C8FF95F87DE5C45DFA8BDBE0639916E92F86 +B5191DBBFA50186ACB02D0CF4A978CABDC22673BE96EB7B9D55E8AC8A42F5616 +0D47CF1C4D2788339C8995A6E93348B313ED8ECD4F7562FD46FCF7DAB75216A0 +A7368EA565E2AFCB92857C37C41E54FF1DE1430EB24CCC1A0441FDC87D122DDC +8959FA7A691C18CB44EC2A5A711FC9188362597510C894CBDA48486E932BB1ED +A35DC7083570126411BCF1838F3593A4D208C042F55A4A96CC0DE494EDD67AE3 +89CD635AA5093B969B604241F4F01AF65B430EEAC934D9A23C5DF3CB7156419E +2D8977C77CA4CEE2293FCAAD12B694163FB4AA99C7348216BE0A9A86AF66C01A +4F98E0E6C9CC4FE29D1494ACF281B4A0656909B87E6336F8D5EB590032268401 +C186C2B53E1026BFC1D001363B376A6AA5EBCBDFFFE87468B2ED480496035BCF +2F409D2A4755AFD7CDA87DD3A6D4490CC5E1A18339DF00D3BD8803A78E75EBA5 +DC16C429474AD2F1C4D6E33EC477DC7F63F03501745573C9295555FE520A4090 +97AE83F9A411879BFF20BE70893A2C8FA46889B0340C30294D69F6472B94B615 +21745C9EB65997EBA32789FDB9144A630A34100B3FC2142213248488DDD46B19 +0E7B03AA78B70F66DCB5D80AB7A59AD954D90B212E723B2C19CDC44BF34EF8CD +876EE89F3B29C2B3B7E1EF2894B109B59F1C1423C02D89A9594566E5FE179778 +3523F2C665DD4E2ADED8B09A6B4B7E5977245DC95C8E626E8F02F72F6BC0C9CD +6F6B396FCA89FCD9BDD82F21C72F0208877C38525E087AD63EF3A73A64B460C7 +437D3DE8A3D33C7E13885581A3B895F28EF6EE357B78D9FE7172F42A4363B18F +9060AA31889FA69584FE4B99F62C387AAE5F47F233ABB03E56B066B7687F2E83 +2D1A5B1294B1F778B40EF5614E05953F0539EDBE10F8151D23F7301F1BD3CC80 +03D645F6CE4E8DAF2C126537A54EAC7AC1772D1128FFF1E2F7AAFB60790453BE +F11898B68FD4344CE141046FC591B4B8FA886E8C3BA638946D1629DC93B48CBA +633F48348E4AB5BAA46AB436B6542DBE4D3BC3B26B3BAC8C5BF99334F1D8DA68 +2A805CCEA0FF53510C91BB85E137D3E63DB8647C7E46A9765278767DA1838964 +43F9C84F4AC0FC4FAA4951BE3D02BD4DE4AE4778E492544F4D9997DCDCBDD3E8 +2A6A780DDA679D86BB60BD08F4AC2E3467DB2A4E1F17E1A38DF332F82EA8B3EE +1676C93888796C57BDAE6572795990157084750D6B080C2BEBD3F19A5FC61AEB +BCB426DB3570BB0803D0EDF1712CABDC6474828C1BBC1B1E67FA18AA21D86A16 +C6E72EF8F6F4DB2898191ABA2486F94048CEB5F4B2D1321B0047476764577A8F +F0492DA9A77B606FBB6787B94536AB286C6F6E68350C7F92E1945BBEAD8575E1 +DA29818CB64C28B48013D6E1B8EE3F26A3EFE588A278988EC249FDAD4E077A4C +9EF91FD4F8256CC77601D4A0D9A0724A43D156F0E7603D67476D2E3493C4690D +A84B84834827B84138B934FEC3CEED73AC380934C041A9EB8B24C8C035418D3D +05232452BB268C814EAE8F9C73B0E4A3625CA4FD471F69DD1D576B7E11B3EFDB +B38139565DA3B669D91C68F42097B5467329D6F56B722EB39330C92448F63EB9 +C2E54DA0233CBA9FD6E3D12E9419A6101D1CF32AE8BFDCAD20C40E2FD1F1F57B +A9756C0577EA1B24D9C36935F20806C0342BA7DC0CAAE4CEB5AF5FCDC29BE62A +19F65367AC70A0E54B4E5FA4DFA84B0B65129FE167B0855BA02C519A6FBA3BD8 +11D03A4091BA6CADA914FDD2AE88725ADA74829D757CC226D2BF4C45737732E5 +0494A4CB815BCCB8C5C9C7F88BEC01D07788630D0412BA25E890F7863250A482 +4E5D799CC845B8B39D8D17367F8CBB3211C0BF2EC572545E0D413FC1EB25073B +BFD3FA9E510AF6CA80C2B0F827B36B9306C1462C801CBE28D1F4CBB9930AFE79 +B860D82CB414823E255899D716DB932AC10C19C33849B8D75A7EF322577FE59F +8E90608F83C6CFDD029D367B7B7C76C34A5FE5E6D2B53B2C63DBDFAD937F73A6 +77950F4BF36B5F506B2C153CEC1D8FFD9F6ACED3C0EF99006E8FEA7C7354C53B +F2069BB90D4C150DAA5B04273E7A5456385464A1DFC7BAA74273D473D5BF0D64 +536A749405170936BA5AFBEE07E9263452BC0242E9544FBB084C1BF99B4EB8E7 +A57C91062D07DA08D56F12435C45204BA6268F47553A4635EFD17D6A6593CCE3 +3DA4C57DF99373EE38E012F69F77F1616CD94C7CA262E6E0D90D7B9795F34EF6 +C04B75687090633AF0AF8829DD5035A04CD9D6235309CC673BB61E0729C49815 +D9EF9E3F14A09E10DDD7741D621AFDBA25A4937D432E54D0079C26349EA54A01 +10DE11D9408BBB86E0861C4E0966E4F6DDC790CD86719D53B6A1EE3E85B3A65F +9B1C72C7CBA58C768685104BB7E68D83080928947CF4C5F699F3690967D166C5 +E21B97AEDDC77930B43273D9F1C2BF5DE9934E4B888742139301CEE5DFEA2C15 +5F8E0C765789200784CA6CC04D56AF3DAF9D5990E11E5677082B54317C310054 +5531B57F088323356355BF7A5BC9D839BA7C96F7178CA23C0FD1A24AAACE763F +A58B4C0485787C170F5606792E6F3B4610EF7960D62D3E45D78645FC19B624EA +9E0E24CAD0115F3FC6A1DC312D7CF8A76CEBAAF6B87BD2954BFDF244F9B7EA80 +C8C3B5352DF852343E982E8E2ED15A5F5103C556FF2954EADE05BAA4CB066B7F +F21E08D46561B074308DC324B490E66112B91973F17AE2C98FC16009F9A9B31A +9E08614579C94948A68042092BD45D87C6191838188FB7EC077DF88BC0810EEA +39CE5F6E6A4E79A1A1DA4B4D02D1086A2D88F4DD7CE7221B813734A3FF4B5E4D +1504E2EB87FECE3621B4684237DE50F129294D134213EE5A47FFC1471750F66E +123667282C40828E3EAE7B5CC2750226CD2B0FF9B2E49F5D859D6AA6104098BC +671E502CF2BD475F7AFA0EF0F95C1303832EE419B6A9EC838E971941C0D27DB5 +B1D2622E69D103937B0A0A34A057ED275C4207AC3E1077751C9A25820B0CE2A2 +A44FC289D78ABD3C156F6F1ADF1816766E77F28FFB75A393ADE51FAB234AFCD5 +37E271175ACE565A85482A25620984BD5D0737D6AC77EEE4EA9F3402D4965D33 +C7000C1069803BA6C3A821904BB97A3587170381537FC5A581707D4C3C632EA2 +741279DAAF6F7726B8DFC4279B89DFD1A43B26CD09F5F38DB748D114047C310D +50FC309491913198D180FBBB3C1A89F682D5758C5D940A132FF032F3B44CA0FC +FBC6811739B78F9A22A0B9DBCB31BC08376365E08452F8E276E05B4ECC6A9B1F +846A7A6EC7A7BC86551E26286F5EE860F72D76D40E22EFD637B632A22D061060 +E51360F95697B02F523598854827B76B0B4E86F0BA7B0850455561D0E4FA44CA +FF98CD03F4E085B6494F3822A8BC6297872AA7E666E281BCC44DA002B73F3271 +2808A77E6B548B0FD7B24B03A32205A066ADE862C501E15591E1057595D1B983 +81DA042F3FC24EF52EC513F85AE80B88D673374AF31A671DB169BA4A8EC43DD6 +A27CCD44EE88C681EC61CE61C2A54E5F1867A5C8D5923FD0BD3E448C3B2E5626 +D311B706525D769F5062915F05BEEE5140B7860AE4E282C2C8810BF944AB4760 +DE02BFE3E1840160F8F080291BBB03FA55E2CB6D15E2D2F50DB74ACFE0AE1AD7 +5F415B63DA8E5C7444C64EB93EF3017DB1564BC6D3A07E1AC4126DA48E92F316 +C3D1BB18451AD8C5BD89E16607B680275B444F61ADB6832090B8488DDF7EA5A5 +EBB1E70DD1BA9B8CC665A16046F4075760783891B7FBC717BC3C49423528473E +5C616359F7D0E528CA71E643EB88AAF241A20CFF8667FBF43743CDFD1E45BD2D +4212A276BEBE73081A5A8BF890E3CF932F8B8E70E646E2D78D64182BBEA6A94B +1BAD8F9FAEA95C2468B3377CBEF942CAAB37BC8E9FA902E27B0A032449895AE9 +46989ECFF2EA561EE0138C9A43A3A74331BE94F083278AA1DEAB6B2B691E17CD +9E83B9F4BC05F58C44660A81FA8EC8977877EC572450EEFA3EA452DB93FD5C90 +3D6CD160F80534ABA44D7A88130B6B890805AC3B1F7549DAF96C49D1D7BCD684 +BF9361A00814CBCEC8E6A89D95FF3F702360939851170399E0B3EE4044B7034F +466C09BF2ECE65D4A379F00724C447526D4D461161F79D9C17FF9551900A39A4 +13DC53A0694C26A90F644B19D343AC29FD49A826D51199D1A3C6BA16FAE9F790 +A757995A523C424459555FCB4F8D1E722E606904920C7F02948E2D1112D0C646 +76E66D29E5F727402299E6804BB21B4212BCBB9CD600DA03057FCCC0366D5BD0 +1420DF25CE02266819D912E433C8C4813D0FBE2A7CF429A6BFA942E0B8BF5705 +9C312FF2C6151973F03F3E75663F7F05477E9488547E5A25F3AFA84467CA7241 +2FACC538E87F6213D9151BA1622DAB8D0EB2DE7163BB82C3FEE77D18A409DA5D +410572C0861469721C7627DC1AFD9A5A30C0F23FF26B31E66826093A22504F5B +7F492FEC4C163074796CE703B9BA9B20D2A72ADEB311994FBCDB4CC94C1E9C5D +E8DC754DA37D7FE30393D6E1C8B3047C6349A11932BEC07D78931ABDCA9AC911 +4D155A91C95508300C13404A24B94A116789A65A02BC19F87AA5165F9A421EE0 +4176DCA8CF68C8F2CA4B9F1E029C8AD47E27C9ED39DD00EB3865BCCB7823FC46 +8293334870B2DD9C260FF0163239DCA914D262300693FA51BF52440A9C04EDBA +2A43C092C10D1AD9E82C4E2100B9D4EC8466EC5A035F2996F05496ECB61364DE +5CB529D3F268E135A0B84ED583B3C217E48C1295A5DB3FA48BED14B8BD1B66E6 +74FD14BC56326945C406C66985B7CF135A72B58018DFC5B6D2FAE195D85A6BC0 +6E90E8621DA89B783A7E1FE79F5E731F929292D1B37F064417E51B64E0870B4C +C094CA5EDBF626EEE88935261B25244F36158EC58E8EC77922A16D6DAAAB60B5 +883D8F6257971A7CDA8F52B8BE18748170E5CC0D4E6D7265D901B3875C228D26 +813D99357B6229C9C49E382FC14FC01CA2E34C39ED57E805A30A5AF850A3891C +D873638CD806D88D42D749837878C14E0B9AB950BB9F367AAC3EA506C5742196 +9460A3A2C2F4A03705A4F0A75FAF09C62EF6DE40485D72444E8F92A22FA84624 +012D2FABBD0CF86907BC75571DEDC9A9DAC47CB61FDBD08606DBABB4F8AB0884 +2D705A8DC2044EF01FB71B31E087C6B30F90C10C295E82346EA4C702FFF1E98B +D7382C180C960E81CC5E3DA66B44701EF921150938CEC0FB0E2ED609F4F3D2E9 +9AAE5E4D6A8C9F541799280F9EE2911A47633F72D739487798BB6AC40F375C74 +2AB78B8D4B2954C65E2D6C5EEB6E7657DBD6715CCAFC9859002566410F67CA80 +073C8238A3E35512C8B1FDE88A2D8CB35B444A837C931E9A5239970CE2F971EB +13CA32BE3420455FDA398D508AB41B6F92401F0DCBBB78FC3E2D2FB1B5FB09AF +B0717D615B3ED608ED99C968A2790761C102CDA4CE40A60E4AA58DA3B92F6726 +2D0C0DF60BE0A7D24F168902B6CED64C3C69900BCF6F53981150A9F307A7EC6E +C7A61B401AB530D995D7DFE0714FDF186C2F71459D116923FA4B3AE794C463DB +F6CDFD8504DFE9E2A37E59508CA79CF3ACB323CADEED5EB59931B160AC6F616E +5A2E8021E12FA8AEA8CB004DB2F6783BEEE1C0CC2F86481503E690D3990990EB +F9C8DA3B2134662A78BF5C9397321C07197EA40B9D2712ABA8AEC64CF511B6A6 +A903F75FAEFD5FD78BACEF6AA9F7F21870AE17BB4870481DC2E421115071CD68 +98FF25BBABA862683D0DEBEDD73C25389E998A4BC54EDC1DD1FC2CC1F90EC83F +DC5D7322062DED9DD30EDEDE0B4DE90AAC1A9E1C5BE4978BCBA8A2065C88440D +6801B6A5566E1D219644C4929497B28DF2F9D9A399EF07B24841AD158871DE63 +4ACD35A46AAEEBB3580401470CDB02D3568E4DFEAB6417AF1F26A61C88AE3422 +19C24FA79A446E68A0300662485DCA28404AED8F0A54B530BFD243DBB7DB1C24 +532F5B6D0430C0778E99836AD0195313B830CE169547070C6FB78CE10356A240 +90F82B11C69AAAB9BDE21164C547851CCA2537F28A5DA32C4ACAAA5B2DAD4018 +B110FA3DE7AC13248D2777E0BFF838CBF2970AE48FB22A62452B6C244CB3ED1B +AF7EC8C45DE1633947246F8A08FA5C68EED3AEFBF010A9B5FD3D828D2FA99EFE +4CAD56638EDBE256A918D772A39A549BB6B04702AE1E90C64019124E5EB66A22 +6B0352E76B9E504B5A9A3559F06F077089C214097031D462E4C174133F92504E +3BB0C4A5681CC87B7CB49B87C196F22A50A567FECB211A706090606AF8BC0BDE +C27141308785FF015B6684959527FEA8DFA797FB396BA417050DFCCE775E452B +BA5B1C1B3D3DDAB465EF77B4D598F55A518BB51F5BE4CC56E4FEA18DAB1D8793 +6659192B7FED0634EF63651196C4EBF0131EFDED59020525114C65D04212106A +6F701AF5FC13D79202F85D28FFABB3B24123652BD7CE8B4097A716519B96CF85 +26A71B6A39271A43417A381901436FB7AE6140AE32B01D7C2E3F512B143A6850 +B06BFECE1F804B59D376BA8D8C67925179A0154C8E3B9884FF1D7750AF416A55 +72591DFCEE2C809E40D7BC49541D3C1BAC83CAB239533D5EE5A6DEF300B5F46C +B3A18679DE50905A1D3F77DA8F366C4D028256025EC193C3B1A71EEDBAB523C1 +9C3AE134629627057257CFDCFB1D14B9C3DFF7008F73D2A0638D9A72DCEB6FB8 +FBF0A604EF3A92C3A49E840C293ED592AC1138055525F6B1D92613266017968F +75A072E62EAB08CFA7F9061113F6BDDC33BEA121DD1E3BD868587E86E055E4D0 +BCCBA1E827F3F37909A43B065945B93939FBF4588407270FB026F40BB171A88A +3E7D888F95A0E9499851FADF25C9636C50198318EA652E031D64714A59812901 +22A4FCA0FA88754AE96CFEE4163A1DA328AB83DC9E4436B5A5870E8D5588DC09 +576FA26F2C2D995CF67639EE5C4C209687C25290B4531210D38BD5B9BF503B39 +067421FB71DA146ED4C22EDFBE5201DEA9C9CC4A6C5CE215D1F0076739E2A70F +14A6365C6FBDD8A0F0DC091A7E121450493490B2B226CC9096D57EE0B818EBBB +3B1E653E3AA2DF732D1AED8DE83C28F32EA03098A10A8BB1E3F10841F7E288B7 +0731D5DE0C0C243702C4571B0F08341029EA61A0AFBF2BA1CD41CC1904A48573 +BA511FFD7E4D880D4263CE69AD0ABF0E146C27CAD8D71299C4AFA2532F2E8481 +C6126402923476EAB2E345750D6A22A40ACA5617938FF6BA331B58225111539F +1C8E2C83B75A62E22D3DB4B910E909A588084F69F60272A4DAF44F1469DBC9AF +F91393D79AEC524DE64ED9AD42516985CE04D37027DFFFAFD36CF3D444D7F946 +288EFAB1744B8FF8F1CC6A0C268DBD466BCC0E9BABD426CB0E2F67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI9 +%!PS-AdobeFont-1.1: CMMI9 1.100 +%%CreationDate: 1996 Jul 23 07:53:55 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI9 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 58 /period put +readonly def +/FontBBox{-29 -250 1075 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935 +86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505 +DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD +67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF +6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554 +FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7 +22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD +730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F +449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7 +97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A +E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C +AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA +A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599 +B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B +9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E +759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3 +5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2 +BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680 +3435E9C9445A59A7C666418C4F2512C32058B1CE1EA46C7839C6E372F6CC60AE +2CF46DD2F130B532DE8ECD42D9204500E413799E298CF6426F28D23BB7216BEA +1A618B3ECC61B44DDEF0BB22D640B47C09AC0DF378CE68FC9CD88BDAE9ED89CB +431A5CF9C3E9528FEE7A9936C2B1CF7B38DD2B95773F0EA0051607BE1B0B3588 +A8B907A5EF011B4622C5093A7B107DD1EED6FEE9536DECF1CC96E65373D0F433 +30AE3C094654ABF4698C07F8C74E71D023DFD242EE83B1306786124DD8C6BFA7 +801E66CB944BE7EBCB3FE803EC97067AF7AFC8A4E9AC9D11 +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 39 /quoteright put +dup 42 /asterisk put +dup 45 /hyphen put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 58 /colon put +dup 65 /A put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 80 /P put +dup 82 /R put +dup 84 /T put +dup 88 /X put +dup 92 /backslash put +dup 95 /underscore put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-20 -233 617 696}readonly 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 33 /exclam put +dup 35 /numbersign put +dup 36 /dollar put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 125 /braceright put +dup 126 /asciitilde put +readonly def +/FontBBox{-6 -233 542 698}readonly 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: 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 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 33 /exclam put +dup 34 /quotedblright put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 61 /equal put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +readonly def +/FontBBox{-251 -250 1009 969}readonly 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 +F92FC6385070EB02BF2541307E4EA34C131815FB9028C118F4B792C5E92BA39B +732EC013E2B29FF8AB36FECD056B8A0123B2E0E756F6F36D1121446A90F6BFD7 +D076C80FCC1E88445AFF2C4D17D25BCC028840AAECD82282BD3720BDC1ADC56C +9EA1525E6DDC2B3C5E66115838C0168070EF155FFA9EE2AF0B1F58736140541C +42300199F8F7509DC6F8FCB3E3F76E429A92CE89A195FD2C39ECC95D90D8745E +5667E1399D4D54788BA3A46906538E24B3846FF10246C3CC049846391B8728FD +9EAD19AB90473454C26C6CCADD66E6C5DE8225A164730F6778DF10820C2BA54C +D9E5823FB4FB192F7210200093A7FDEF6803F656D3201DD7B065E834205A528C +BCDA52E22337E27447C2C750C3730E9BBDA96E944A74AD2B02E4CF6D3B5B7E03 +A9D0DFD550C7224EDDF2F7CFEB0818D15545A50333AE7A8D44F5183E572EF324 +FF51EA08E93305172AD6945C1F023676C538160448E1DF49DEC2BF386B4AF07F +AEEC9D2E0A70CF68473886A398DC83F0CCBE0955E80E7CF44D03717875B89ABD +780C448DFAE200862748F1AEC7F958C42344C93D6B6EF29DF4F563C4912EA159 +4E8C77EA5AC7CA4487E9D29D2D13EF45DABA13F0D1B922CDF7FB0F347C5857BF +EF7ACC16EB538BC2217B0137BD575DAE18F3DA198CF90B0DCB373040C91F6F24 +486DBBA77F6032A17FF382FB14F4AAA3D3608ABA208E94B69A0A1E721B995E54 +F271E5CED22F28313D7FE5679610A946D3AA637765CD441270BAD7808844363B +4251D831391E2C6E88F609BD4280D2B07663B482A2C018512C665BC7ACAA5A7B +29187497986970C06AEEA1CACC1D9375576B85F2BC1CB9498A8F60C8466133AD +8D01E2080BF508B1B4A372209F5CF528986EFF0FA4333BF92EB50154D1CFDC92 +57BC2210E3FF670DA4E64F98C6CB3F396AEB146E7F845F62AEA83388A2AB028E +F12C1FC987897640ED50DD651EE9B0710138751C2E3C9FAA647A4A8D52B0E267 +11108B99F7E090DA4F777B73A33B006C209307F2170D75F5BEB1B576C1A3E2DB +9207958A900BF90786908A9B9CE1DD9EAB4D6EF7FD724B2A22F944FEEE17355E +D21493AA355501EBD985AEFB696ABBC75C40CD1A2FE0DE4BE42F16CF7B599957 +E8096363723E2BBED8B24551DE3FAB160985F36ACDAE7321D7B3A9AD0F164B08 +52074C54BE452F5445D375B85DC2F7F6AD2C0794C0830AC559209E68169DADEF +F78B82317AB6ABDD8874FFD804F70730A9D084B4E9E143226EAC38E7B1F4E1C9 +0270BA81A8B43CCC2F8F3B5E01E90284BC56126233FD45044FD64E5B2D159EB2 +5579F9FD11E0C86CD4F3FF5D06B11BCB1A2BE95570307A372E5FCD0495611D17 +623804766C93D6AC547AEF388F2A3598E519E3D41353F3ABB6F2EAB767D740AF +AA6ED9641EB3E75E36CB9E4779C5A443C4CF780F47CD103CA77C0C873E8AACEE +A7BF44436605A1698CC66DC38DB95393CECED515664ECA7D744AA1FF262F3DC2 +DC7A6420735E7CCA979D78DC2A46C49D0AE793B6DBEBB2F598149827B6A53AE2 +2063E781A6C9A9DB2E3749E46F5E192954E51AC6A715954CA0AC851B2E87C33B +9670D407D1768B181BAE10589F38DAA5C0DC4C33DB7D5BAAC1A23D10C311C09A +35EDD551BD1534D3DBFE58D7A7AA79F93772EFC6052AD3E8F1D196073BB1885B +FBF95F9BFE07E8E2AFC23358A1DF2079C7A6E8D221617A5A6FEF9FC048CA06CF +F2353B9A16F17D6D408FEAD5DB180AAFCA1C17BFB5A7473076DD4EB598ED049C +9469628318347508C2BC5CDF052D452FE48ED25D7F3FC062C8702BFEAE853F1B +CE12F266E2B4CAFE23E2A6BDB3A50669CF1A4F4F1889A90B77A69F00597D5568 +BCB4D9F21BE26267E84AF5C401F96B3B23A80D7FC6956ACD1E0709D0D7222498 +6417B31705074D6728F508F21A3CEA89CCF53F3E0C4E03A2CBB1276A45F456A0 +128F0BD9E095457527D9B6A248DA7FA24ADD7F0B0A7B825FAF9AF69E210FF3C5 +73764761DD61D03DAA7AF4009002AF363A101FDF3BF338247B6B2215AAE38476 +AD6613B5C7D9D0BAA9556BE4C57CBD3C0A86F5446FEE7AB2B738E4043A7AB149 +DF8A86270E888605ABEA1962CABA87E1B6BE4F772D0278FA5286EDAFFE55ACD7 +97EBF448FAA44F33CCAD8A28E883F03EADB5AAE23F700571F6A1ADBB515216B9 +02B59E11FCD26B98FB61871DF998E725974B71BA9B8075C9ACA5BA5AACC43079 +28F62018463D91D404A1024655DAD4CA952E2939394CFFAABF278DF6AC311007 +F9D7FB5FD477B669C2A068BCFEA52F248FFD1D0ED2E47556DD686E5090F91265 +A9B7D19F400A6A056A56C0EA9E74CFD16484BD2767E6B51F5AF34FA6030BAD0B +A791CB6307133C9C16E63547B41DE8A67E0E2A60DBD575D3945B8E29AB07A1DB +E752B54F6B423C787DC3E2E48F3D546C2F6245C8B775684CF1106D621C64E111 +BCC2369ED42B5AC1A43A3F56902CDD3D1167EB6B08D14ABDC75B2E50175D730B +D2AF00DA66A847A3C9A49D447E6071A7E977A58E300D96657AABDEFFEA489DC9 +75AE346C6B9BEF82AF077D6A90489FBF0101FE77BE5C3DC2670765688E014FD0 +5E0E8A2210CA3EB3AA78FF1781552D0DCC4A98A991D582F5D40A0174E33AE2DC +715F5FCE505E8333530611DCDEF642E35839C33C9B94C40792D970EDCBC9CD16 +0EB0D3377020678B474DF8CB1EC018C586399ED22B01218B5C75CE40EBBDA0A9 +EDE1F4E03CEB5B3EECEB0694059162830F53EEBF77CDC7550C20DD9EADE2F052 +6CE34C8F67C21BF6005828D755E857C058E6C7060B610D801617A601DC3F8EAF +618AD72C4828E33967AAB60B411DB233B7B29D62B017FC51467603FF003CD000 +607B8D8DFC04FC22A178E6A038ADF4E8EC72382906BEE75B24CA8F6BCAFDF77A +2D0B5DD4FA43E1007B84948293F8C019DB9979523DA8CA732784082A6ADEF415 +5FF813D469C337441EAA8CF9F920BCA094744A306D4922CC420757D541BD2435 +FE2717A018C89A5490FAB88D6984C09E5C7F62BFF6DFCA24A69F8E29A9DF0D5E +9FC0A12EA1940F72D90DD7CDDB82B2597DA1CBD8F4302F9598920A9B9AE67D0F +E10B30B928B6B2669A08792235482A728E9549E76A15DA1029BE883FF2715020 +73337BEEEF7CAE168CEB6E2AC916D5A68BF4211DEC462703828F2E5CE112E398 +7B79DF6389E5CC1AEB74BB4E4C6793A2666BF9EAFA72BE966C9451104CE2CE24 +45894DF3304E620F484273163D9213853D242DC308055AEE087A588A6FC8CA96 +52D94D576539C3728853FB9658A0CED91EB96148B806644895A49328625499D6 +3186BF65D263D138AC4027A43FFF7024518037ECC474BC3D42307D474312D388 +A163D7DDD77003116C071FF5A84B61DA0E559E96B427ED0D346417236C1AD6E7 +B1CAD4C7AABE7A900D6E4B9C8D472C8909123F0203E285E5DBF7C111B18AEFBD +624DD20CFCF974241215364B627B04FF18D0068835B21C07739A91DDE7B08FE3 +82D175CB6A9FE5DEC9DFC4066339988F06ED8F41E7700E2D0B23016DA5119F3F +9BE6162549B3B4920B383980EFBD90C90AD4E935A9816ECB45ACB0D9F13A3F8C +BB175A17070C5D6195F064CED7176E8484A88D3FFB76BD7700F1CC331CABBAE4 +C89BE8F6D93453E30D2BAABCBDD3551CF2A36BA79E99930F6DD82BE1B0546E9C +7E0CDEB1C823D75FB0998300FDDBF750A43460D0415DE713B7C2A5E7316D020E +B4A20F987C0A996DFA94D6833EC9539B0E75528F7E9FBBD4C4726F2783EB33EA +D564885E0233331432CBF3424C130D3A96F79F4BB503A310D3030BE5AF110CE2 +7A463DC21A8692CEE0A80FCFF803E7202048A8F3ED58EECCC8CCD35B32D414ED +2FE715B39DBD34CB9AD7FAFDB1A1993D3AD5264DE6A52B7D04FD681A28BCD3F6 +80DAB12C43362512F4CECBF5438B3A72317A1BB884DB9B519A8DA6CE1CAD2CC8 +81E283839366441718896F219440D63D2497971BC9E5AFF32A156BA3AD297EA0 +46DFF3B39E4EE1389FB041EB63A82529BBFD882BE02BDE0B25D15C5EE522663F +5C7D054249460D66987AFE8C7FCA65A88003DC933240920463D50130F7A79F85 +17FB7EA80120C5E91411366F06953609323B21A4B5702447D1C54A08A4104EC0 +7C2F9B1C42EB601DB32FEBA0F5A03B7EDF4A3EE9B25A26E4D797BABD1D80E6F5 +1EE2347925BE9A99D7563053611095EF6E54675E146E3B04F3E0F3C051EF3175 +187665A2C7EAB425A8EF999692BE5C224A27B635E249618CCFBD80E7CCB959BC +3DAB0121A2CA60F33E604591C285A31B4B289F44C9E452C7AC45994EA9AF436E +D1282AFA204248362A2C93B4574663B15787575C116CFB343CF0AEC7D593669C +A7D457AC8F865266593D38C52EF63F818835F45C957D2BB9A216EB42DF410DAD +BB20BE33D50278FB254C3414619ADE4CAE4C296DCE73813C777186EB4E67E0C3 +958FCAACE325BB5BDE181053EA6A0C55972CA85A56EAA1C1E3DC9A6534602C39 +24645BF60AB0BB12873BDC5AFC9D2A857C6DA73DAB8B476F8B0D0275220E0A9F +82EFA82C02AE2C375ED3AC6D372590DE40842638F674E7CF92A21551D15E8EF9 +86259CFCA8D82AC06B5B7BB79B9D7CB7C711D5947D01E8FCBEB3028BD300139C +819123EDD7FED75EBA789815185FF47EF9BAC1F23433523A1F4A1FB01153ADEF +8732F194895831C0A1C3D0A186F788BB5B4672A028752287F6570FEDCA05B4EA +0F45CC407AC51FB6960CB331514FF07C7FB6AB575A9558D6C16DA3C4DA01F47B +66617F310D5D3D3197A5E7400D72FD86FBA372454B9BF6F7E2D937EA3A57808F +792E8E51CE5BE1EDA1AF93768B37370DB0075A4C564B128779152E8E363DCA39 +C4DF701E223ED5088F7B71FA76BCC01B3A983E855EF34E6E660FE58D4615CA18 +0868D0104890EA7B56DEB102CFE3A2E6EBD9BF225C51A9BEDAEBE67425A0C3EB +4CDF81701BE383C279850DD8DF20956DFBDCC484D2331F9435CBBB81B57677B5 +4C08D89FD133EA65EB64D26AB8A3A5B69EB04B95DE0B06C3E28D2C6BDEF75325 +3A5CC081DDD1CFD2B505FBD4EEB20E4485F1059591DA43E4CD81C5D491ACE20F +5F71533978C0AF5239EDC9F5BA1FFD5EF3F11F4924D5F27D3205391297F4F6F8 +1AB40A0DDE52ABF5C1A8934B4687604AFB30D2CFE4E0CD2B3E135A7CAE24E872 +E5C67FEA64A4F404354C6F8F284DB570123133B911624E23BC8DE3C6C88F49EA +A78C39621372444C86BBBB534EC955D1116B95D50A7C15EA6CE8644AC2C43382 +196E3ECB853D09713D83F9AEB36CB66BF51204EB72B5F3D0D428BDF2DE64B856 +A0B35830D72ACCCA11A8E19071DC8A3DC7907276FE897AE4545BA75E4AC26078 +046644462A4A8470E593273DED74D8438A7D64625FD4F3E8FCF4062A754FEC62 +0B42D9D0B1EA160A11BCA8C16D33E840455047C747C0D6E7C94B7724E4142A5B +A765C17BE7B49FBDC0CC5A91C837518E745A530327C229463BA7CF9543C5C54C +7E6C2357F18CC07A6D33769343630BA8E4F5AF449465789E48041597A7E4EAF2 +C87CFD08ADEFDCC8691EA54E793C2B2F6C9798C1207AAA3DF7073C15F67F4325 +D881C081634073B98A5964E40744B976744954727CB6C93E89B8B7797D7AC5BF +71F0FB317CE8DB3452FA7F0B6DB6EF9A51372E333982016D2B6F25B018C8ED5D +CB31BD9001BA52D967639B6DF4432BAB04A0CF33BC4AC5216BEFC9B3E7ABAB2E +88D5C93DDABF3ABA3D48781C168AF2D36B2CA24E3EAFFED679453913701E4796 +01091556E4AFD9BFD85BE266F63EE32CABADDB819911C2496A876DF4FE185EE5 +0CDC8CFBF824812402882061FDC2AAE8C85BF2454B513291F8D3C9C85B6DFD63 +628806A9B99D8D3FDC5B9809879C7BF34AE7D6E49736B8E7BC4E93845EF26FB6 +2D5DD1BCF13CB6A3D92924923C1608CAB3E63190854EEEAF7502D68A48194825 +43083BF0607815B532066C631C52C1B8BE3A1C9CF00FFC0C6E044EE75F097BB9 +7D75D7D04E9F412D0823ACA48BB0375270414AA399C72B51F36DBBA81130BD5D +94C5963FE39F8FD28B1B9C93306424AA6F70795A49D5FB9A567D62E4C506967D +6F61E3E15659D23A3B8A60CD0F90888C0B96488612E5253A7855BA567A7C6B3F +1973A96975AE4674332854BB40C4051194A564EB78DFAFE80A8CAEE74C42CDA0 +9254462ED0E1CEE88E0346672815FC0559C8C524FF2E303015DC709A239A2C50 +E49EDB65EEC7EE3A937386DF93D1CCC27270E50312440E06C6BBBE4E8792A47C +D063898C5F34D83BBFEF71DD8B2C081DC8D122A1B279EAAA44D69F5D95ED7DD3 +0820BAAD9C6E3AFF1E24AF5CED94E682FF612C44948E94B982C73A5371D97B90 +4BD25D3850B26F71F71EC4EE368C88582B1677A57403774BC15AD4A153B2C112 +537EF525582DAC217594D09373E745EFCF65911FC804E6CFB441F24416AF11BB +CEFDCA172D7BD04B2E207517A4E578F622488E3D88EB4ABD24F67CB3CB21394E +8B599E4F646A4B4AEE8424B2E322CBB4F98D00FDDB7B21FB72C9A2ED08984504 +42FA811EF7E8B99FC632BFA1044CDC831220988071A33FA5C4B4A0058384357B +BD1B1A113C3C4E1FBE658FB25D111B15A4C253AD44C331233147F289552664A1 +F0C1F186810459C6A41EE0A53EE20149ADBB40EBE3775FE2577A52BAEE2DC9D7 +17D807C801572DD209956BD69D672A731CF9D8747231EDC0BBF0BA5946978A0C +5AB3D4FD0333937C949AFE2E92617A4B46BA01537494101F96568D28993DB807 +3BCD5078A3D49E9950A6E373E7E3E08BED02CECEA8A739985F01E1C4293EEC78 +99D9A46E0936476C2A50CD25F3D8BFFBAB66B8EA5FEC0D0B6DEB314D2D06262E +C6B39A36606F745819252FECD07F53AF0FE4792FD615E329A49994C63EF1AFE1 +B28429C1E8A94EC01D0FB2EC7C0F8DB9DEB0F32947528DE7BE3D008BABCB1C2B +0442AB83B7945E4682BB77D4BF15855464CA59F6E2B67F7E97675F79A78CFE83 +C0313A826C35CD5B321A41EDB4B799B175CB0A27B60D71D24F4286635A354DF6 +84A777DF84AD8D3B4FCEFC6D96A8754C668770DB7A7B200B8E542B7490152BC2 +24B8CCA8E1D9A3BCA2325DAE70DD5109977D5F8C0568AC55F70812B1841F8017 +4CC2C36B4D8618D2B3DBF87F54C2141AA75ED0B5285D1EDA2435BAFC99F518D2 +F3F41B8F674095D15CDC366B8F344DD917EF647B9EAA1F499DDE25D39EA758B7 +D2EDD23E00B8182E9410C14BC31A75C2FE70869212B5F58915F5EF929C2333AB +B9833686A29D7D43BF99D45BD60439CDD5FE3A50ABD328F6C87701C714359F45 +F8664941CACECAC72308503C9FDAB00EF7941AE1EA57A3C4DA8835207CF56F29 +0EDA202E8EC2164041701D2BB5C31F46F4A7AFBF71D8487750E76BDCEBEBBDE0 +B0096D143E923F7B5E6AE139CC44177E86FF3C1348B097004EA8D359D45B7713 +00892975F37C2A2141432DB9D43D84F650575ED5E05DEF92B391562B1EB58CD4 +7942D928E05578CE75CD38458DBB5A0D345A80193D36158A4BAF4E738AD1CA62 +81F8E071DFF98448ACC3D3700A79FD05B7ABA3C06D166EF11B2C622438A60B25 +2D913DD1C1D5B84DF40097E303DACD1E7B6C70C17BFA2851331B5452DD60DF6A +D00501179E18756106D813BAFE909E32ACAAB36785409DBCFF0DC8EF504D94C6 +1353141DDEB71F73E33AE10D48B356797E2E8B5FDB99332F52728E4DD1B01ECD +D43535A1A32D54EE60A6168EEC7156FE6B2AABFC9C6C502B8B19D69E56FA5BBB +7B6ECFF2CD15C964183F3358D2C2D5736B11724E8B5B070C06A729A46606EF12 +2471EE0F28EB50B0B89334C903BEF66B9E6748EB62217C8C4869C2477E9D8D07 +08A53DAFA31818EAB2C9E7E3AADD92B6811B9E2EEC1861A56BDA86590BCB2ADF +31E762D31064C82E4517640539A598E68203C6296ABE191BA759BF5F1A64D9D1 +45A10DDDE932C24F3FD7EBFAF21E43217781334472AF231E4D0E41C509B00B33 +4494FD54A54E3EE5A7A30C148BBF3A8141F825DA530769C32B52BF44E11C00C6 +7F3F71A041287DCCC2B9BC1CAC1F393F8227C256F139607829D18A1EA86BB97C +AA02C568EE3074D8D72D32F53EC60598617DDA06352F83A66123D2183EB58246 +3078ED99ED3A3F326AA95D6E83C2CEFD6B78FE2F2E8BC6BBC96FBDD27E443221 +B2C9F258F0E41C0BAD87EEDA543A2240E4ECC1A0F27F8087310B21211D133DCD +91B0F57E649B550193B0A80946B9A78DB36AB95611BDF60B7F4E009306D7F92A +8E1092B2B87B57A1A72BD5F231F0DDB91B9527A1F128FEB68372CC0704900993 +7BA65818F86C935CE0007A6FF9DBA13B4D2684BC40AD7AA39F7AF164700E91F3 +82B2F393C4D071A58830C91287450D37091E2A750715BC7920137FF21EB45E14 +10C278990E7868671185959739C2373BD957140285B0B13D9BF99D0D895B0E64 +6B4D1B9BD58268B99C6AD6339AA9AF00621C5F19C604760794992EACD9AE35FB +8055C9EC7B456824CCB1F832A9216D853A2E74F66BB9006DCC3D5E00331A9E4C +17ADAF039C11DC0ABB78144D9347A2A2D5A1CA5686D602D9E05EA9F5258BC992 +2FF2D4B6F132DDB2B44CAC473EEF92509D609BD925BE5F1E0A4B17AFB88FA1DC +077B1B4B47A0C2A6521D98EFC7FC0618C07813ABB0AAD9BB44361E6960DD86D4 +1AAAF213B0E459DB193E47382564C8B43D5E2BB1A76D9B00CEE59A0BA1EB70D2 +5FD3907964AF0FCE666350CB0E71A2DE9F2C38068ADF8A80CD08AB3664F0D8CE +CBA06D3427E2D9CCCA8BBBBE30D76693A6E33F0FA093CF77E1D521E5CDC094E2 +C7C078E637FBFC23BB92C158411B65E3944EC1A307801D88DEA7D0ECBEFCD242 +6261F2C8F21353EF10EBECC427CD82D5A05297347024E4A4A1429C09A8675BBD +8E9FE30DCF0C1743AF8E2FCD94C5FE0CD84148336D6DE4A2FE1B9470C998CDB1 +BF1331AE586CAE6EA795E063A7EFCD5C517BA446C798CAD723DD60712F59E12D +9E48DEC3C28462EC24A720B8FF706560850F34D47AC35FDFD2321CF03E70CC01 +C17A5FFC311BC4F86FB8840984A7C6301DFE29DE27E61D4E2A21B45E93C67DF6 +6851DE050CE8EBDDC60D80B3EC6EC129A237F077F1CA031B64AEAC2511BF0CBE +594139930826B9C08E2964A58F135EEE5C49194A77808944FFF53C33EDF831F0 +9C6F8FD4986BF5B22AAC4F363B48B60BFEE02F289286435CD0558847F9F7670E +70784604B75C9B6EF327BE547B26634D77A65BDEB092418EC321481C0E54A8C1 +520294C14422C78CA00A56BB67E75B8A82F2D6F0B4536D8F986AD679C98C4E28 +1233ECE67645F2852D63608F0661F8E6F4B4AE19CA443D58BB0224C15C7250F8 +1EAB2E52C334811FD9EBE0CE83ECEC82FE75BAAE2970CFF8A48D96574A89E270 +EDF3172C1B1CE073005F3CD914283149A6ABFA26979FA942C02DD6D3B25DE635 +638EF495A73307E51FF0CDF0024E872B25A00D3BDB193E02547D5D22BF0DCCDB +97C60D1FC7D7E7202F3F8AAEB43A9DD8CDFDE52819AD152C5DED4CCE57F17B73 +4B49D33E6A94995F9F1B65E86E8C601502416FD071E53FA1117014B9B6926183 +58A94512114E8E65A93FCCBAC3490506915A03209FEE47F9F375F74ED3BB6D17 +6169D49650112156515F95AEF30B40886F7E76977921A91A81CA0135C45D8FEC +D1882CE1FE2FADDFE51FC81BA5CB3B25FCB1D66925A83F014915431A6FC8DE7B +64BCDBCF86AC60B8DEB471513A77A7D706F95B7831F6CF572BF59D2FFC17487D +4C7C1F072BFC246D205E5DE07CD2C847B5F952C9F4A56D5F995BF9C984059E6D +BF7627540F1385DEFD1B10904F38E89B04A2A10AAAFFFCDF844B83C2F42A96A0 +A9A56CCE03ACAE766ACCDB94D5E8EB6F1C65AC89EEA87C8A10B2054C62C7910A +AACFE3C4598A034FBE0EC9265FD121A036103FB5EEE6BC3A75F5DA03A4ECC38A +47467415C26A30863CB6B554DAB4D31841E6EA7BF3E825213B1B8E937832D271 +CA30CB39D34949D88A6505FAD3767CC6301AFC64F3B7C7314955D4577D1091B6 +D17B5A86F6B03FE591ECE351CCA301AA3186E8CAF897DBFE62FF9FE2BEDE52BD +8BF91A3332E70912B4F41EC27A5D843F40FE6F2E9D914B19C2B717CB3D758F9D +B38436B22EBE94F93234F57A5C10FD16338DADFD5E2506F36CD2C597FA71FCE1 +6DAF07C543FF764C69FFDDACF6E4D36FBC43B1D12E3D794E7D8CEDE19EA5A840 +73D9C27C0802B264DBE0A88BCDAA28FAA21768FC9162FD523BB88B33D47B83D4 +CDE6EFA33F908DC4D08EF99A66D4BE4F3B0EDC0571DBE24AAB7BFE6EF61EA800 +63A28D318F872BE817BDE61FC18547BACD2E20826D31B887CBB032F603D1A8B4 +740C630684D7D5277C102622B021A94BC6778E95EF72EFA105629F941589936A +8637EB305A4D2D34D4E91727487C4FD3AD1CD54835245511F92C7D5339706F82 +2166652497E715CF95C28550648799556B3C930853165BF7529BED689BBCB4BB +7BF17F636C8550015E1F5D1E9B84E020FAE16188A0E5D35219887925FDB3451C +6D748C7C01006F48D61743803C4AF43D599CCAB72B3BD3D54CA06CBEDEFE6580 +6CCC0AD4825D300AB511ADCB73D598D72A69BAE2AAC68E83F6158B90CEB61418 +931882921551622EAB521451A770B8CB37AF98066796923B2D2DB0360C8C50EF +1C38F511663CC74139C3A736C8D9E32CEBCD6C76CE7BA90BF99F8438FCA9AADE +9C2D3765A233F3407AA935C2B0E78D20F51F03D4AF95FD9265A5B4E81A70F365 +F7F41C1DE616150F7318725AD035FB85A1CE2BE0BC985AEC91BB729EA3C50696 +605A1D27690E1F9A044F0046E3C051454AF414D8499020ED8C125E50235B2CFC +4E2D40371B113B3F6F5A5AB11D9585D451390AC886DC4A63F09C99EEF844862B +394BDDFC170D5D2D52F334E260CE7F821A880C0FFD71762C70A0C182331D074D +05679BC6B45D3AFE4102007FBB7E8EDEEDC678C35450E3B591D9DEC9E0ADACAD +BA83A5AFDD1652D4FAC6879A8DA4D0C7F06F2C15D19DBC96EAFBEF722FC02F2C +AB5CFB310E84FB104BDF6E2F09915EC3AB1E37F53FD59C4EE2B5662B1AAB849E +554472C675AC8EF847039923AA1624C6C32286E9A458877C5FCECF7B6CA1568A +C9D47FDC77151406D8F87D2A40179067FC738EC9CD16AFDE2554C8B036DE44E8 +E028D2748C70F456C5A72C694AB55C0C912BD509766484D026BC6C9E086CB98B +FA3D2D198527644A5913F48ADEF18C34B02EC085131FFCB039DA40302BD725FB +C1624B2625B7E33BA8DA5318C98BF031D08363172BBD64F7114737F415F3C0B9 +593A6607699B2795F3AF151F6474CB1065F655D4F61F435D6D737D89A48174E0 +48916AD8E74E9AF0864D378967B44384ECFC992D07F3525FED977E13C8E08BDE +E6C73A9FCC110D592769F22FBE3AD16BFAC56612EEA2291132197132EFE4F8F8 +0153C23422BD913B9EAF0A4881BA22E6DB148C7120B3100321880B8938EC1327 +20B4D8DF046B0724C980569222BF08DED088D39E613A0CDBC6069B0D3D8782CF +1383AC14455985A6D26E7686BF6CA39B87CD15405D783A95BC462FE21D14BD61 +4A7AAF05ACA0CDD079E4776D48B6A5FD0D6E6DB159F09358B93CD5E98286982C +1DBA18A61D8BAFE933F94D8835E297B886585724F460A4724C706E90B6B4A938 +30A1554536A2A6FBCBE6145136A01EE051258B3D2CAA0BE9FA5D87617EAF5B81 +4989D0100D1DF1475D19591D4962F269788484833D4297B5B4AFB56E21AA7ECE +68FCD137FB888FE908ECCBBA4218026C0EE52EE046CD113B5185F093BFAE7F11 +964068B1EC998136616C69FF172829A1B24571BB5B6C6C3A9C4683FC99900F69 +AD839F972E4318B5DD3F189F1F7A2173F8D4FF60C81847792ECD2D26222CB479 +15A6B0FB560684CF2129879002019A9122EDE9E4879194AE5A363D91E7AFA33D +07ADF72E5C0B2B13496591662E1D14C0B1EB1628E59D7754E14CF28DC18D2269 +FC99697B1976ACCCC77A8E6FCE44CD91B4F11055FB4735D9A2449C3D29CFCB05 +95E9F08D0D359CF454C25C64248AB1AD08D71B452673448214A4AAA787623E6A +FE57143A557FBFDCFBC6FF8D6939725B59031B1C120AA7EA05FEF8123E8CFC70 +6E4C6F20EB68014DDAC3DD5E8DF02C131C26139D1266EA5E5082C07E1883216D +D23AD5C840F04465A12DE929BDE69193062E814D93D681AF67D50D2B7B1EC175 +27AF17F8F538D09AFEE2EE1A394A6A6E8DA057C74B842D9A75BAC2B642CD7B93 +83CEC2D79ED00016D48CDA845F1A800626239C919313906B5A7D1E016F26D1C3 +543A67AAB698E21CF45C65AABC2DEC61CB78EFC8FBBED7D1B7D1FF47FD5B5EF8 +1D45DF65C69ED1485859E029DBAB233A93E9CC86BD1509AFBD3F4D09655D07EE +2FEB614C28A7FF72B4B18B38FAB217EF4F59627B7E2EEEC0AA2D9739DCDE5062 +66E4CD49456D111AEF35AC11AB1843A5A6E2343D111A2F039554C195FCA18B4D +6EB5A869E06D046CAE3784DEBB455C07211257C174A28B9A01A8F0787A428BC3 +B1827F1CD86E9C9F2279B6EAC9BA07CFB55988F6622EE68B9E832C407FF6D3B5 +04973A4EF13E5431F06148CFEFF5B3A31D98A82D8972907C6557A33BDD20D053 +C967DC3399E4F5D61439869AFA1B293737F877FC4B544BF61AF482CB7FC1C1B0 +9780180EB8CAD7F07EF95919B4C44B43681FCA7E0818205450DBE4614CF0DC39 +28A303E4DB82C3C2289CD3323340FA5B2086E34DCB74C4F4DCF41AEA4943AA48 +8A64DD91FE7102BF4E40A43FCD360C3B0C5103BDC555193FC0AA209D9806955A +5F89B92A8AC3AB9AB3F036378B26197C56223E6886D0F713AE5CC32C71E4B1A1 +D5BCF53A9213DF7B3C0198CE0DE819FFEEF250132150EB78D61CC1839F9E4660 +2BF7E88C072F6B9E2FECEF82A24F959B3D37A3E77FAF592E1008E8F5F19EB9A2 +4735E8F64343E2CD69C298A6A9318C09E8242340BBCBFA81A83958CDFFE39146 +39A143B1F5E3247D50EEEDB18AAB03A584EE00D470E59E432955EA484C76942B +C4968C023A1143DC66D7FDDDCE31E99F41B969F6D4479B809D3C9464979275C8 +EEA46290956E7359F091BD876FB1EF5329048883A9F3C0FEF768F402173CA5A6 +30D7A5D57D05A4A8824702E76AA5F5D003A78E133CFFD42D99F6F02082E33D8A +90C7437604DC3900056FBF8F5F1AAB3853C554B8736ABE01FFB1E5BD575F9D30 +C36F5E11DEFE09E0A561FFBFB3E9F0E635D75D545246DA7D8F50CCED8BAD92D7 +0FDF181FB3DA4FE539ABDD8FC3579490A87B674B88EDC86D2F6D39CAF33AA197 +1DB1E5221B056B5445C2FA6447243474B1EB79A4B03B136D485AB4A62974F0CE +01C65B7CF210D1A9DE21849A9255960692068407635A23A7B0F0265ADDFDE177 +097C1F3BD1DD1D6FACB7CDF110BFDE0B2963269BD31E1A4358E4626A9D3C8563 +3D44F9196D567ED72539C0B750DDDCE780E14EA3B683CC098D464E4A757DCA91 +A7014851D8596285CDF52646146DD5DF679FF81359DE979D33DF491F3662C87C +469CA72935A4C3EB71A299BCF6E1B3F173130F86859A6F6F469B0BF3AF7D2E73 +0630AA1973CC564FBFE0C752FED518163E5CBF7C9CDD22DEFED51619838136EC +174D503ECAB2323971D68A3853818CE57A77EE2468FE5C7273C77B29315D98AD +8E0742DC918898F2F551CF381F162186F87BCA3C6DDE7438E1B06A4609FD3BC9 +2DFA788022309AED10281D4CB3A71A1595BE7DC1386240D95D729E251020B356 +511D5CAFD847AFFEFBD79862BA19DC4C7951970C0C9ED44ABA02A68FF5CCC246 +13BD451E7C5913C5DE0C523612E27FC923C74BFD5677EEA6457B02E0444A04C8 +3FB26E224713F2AAA3EA3B5FC50A36EADBE3AB0777D88C151F8C7503D20ABC11 +0CBF03C39C97DF7E43DE551D9E041EEA9C86AFD3518F9E9A8C2AB570E531D75E +AF59BDE9780919E64DF81AC24EDAF91DC47EBEAFBB5BBA57D5800D801C116437 +C63C7A8DE84782394B4CB699A3A0B0E3798324E1FCA522F5854ABC83B0D4B418 +4D408A0B1B900E8602A3EF6D9EE3BBA3DD876AFD25F69513FBE5BD51B401864A +76255A5E64AF2B28B3B3D138069D5906FD33483AA62D3FA2A1747AD444C55A76 +93FD19854E684A584C822F4A9D2C9799E83230E8774C0A5942806F3738AD1425 +C055CBF364A6EB3D47012389FE430DCFA3440F84500E35843CCBFF860DE1DC66 +8F32943568A0767A3989ACDE3FCBE70B0A2F59012E677A5453ADB258EC8169AC +BA489273284F03A6875CC457C5717A97D7B945CDA1670ADBBC5D3FD622EF483C +99CB7717190B5190408DB73E488FCED65518E8CA3EBBAB43449DB5F57810B4FE +6695F940926DE16480831E8E4DAD65074D989C772E1A143547200B733F3CA84E +A9EDC51A074092AB4963466806EA91E34EE4439D2C8F1AC9DC3B31AC04F94641 +D053C4B265C3387BC718B363C2BBC6C6F284935FD9C7FD7BA14A32B2C2AF1E4B +3739A2257C60B5DD3715E99B0EC878442EC6305224F09158B947670AFB74597A +5224189B403BA81BE4404900BA522E4E78AFD79F96E5F6549711D417AE05342D +6BE3A1FE0BA1F1633391DCB6E798D14A190C6588161AE82B101F77C973310252 +E90CBFA354C89B1D816BF1370F9345834A05EFB21E8C52DED86BB69EFD3C3764 +DBE34A571602F05538400E4BDA2AF7CA8B50C28AFC821B251B9EB5C3F4183836 +F27CBBC378621A244DD82BEC981A6D1A132EA870A09C3AE661B0EE145C2ACDCD +317B8B0CCAAFEAE0ADA2A777359170183C9A69E0CD629C17A0F84B3C32B3862E +2D4C313B9A61935F57F4F93D5292880079E6071682E80D9A87DAD6C609D9D141 +14879B8CA8A7449D04FCA686D44696FD8331B9E6EE6C2B59B950DE663964BCDA +74BFADA585601819C06FE1FA3C098F92E96AEE4FA6F0600718B127D220319750 +EACE38DCAC4AA2CFA1E5BB904F4BE757C68583F875426434819631882F75FA35 +62A62AACBDBE7AB41261B68B1A553C93801723747A90D71764DAF8FB7FECDDCE +7548D5167D3AD2CF89A4504EE7454F3BF2A8A6F8958AEDF25729C61A38870C7A +098D0F41A77E4C5432C4FF56E6C96BB34BE9276727C63FE9B4246A41C614FB89 +223CA46A324DC52FDC7186B468771F4F7033B702260CFFACFFF59CA7F6253CC1 +7344A2A4A885C5A5090F14EE18EBBEC69EC24D809AAA923FD9C1B386F9A64530 +C6379E44AF4824D13D4F947094DD3BE24FBC7D790E6BD0F1A6B3AE63B352D83F +CD789FFDE1965600535B61D91C4C2C44E5ED051715D3900929FA4C13C792761F +448E9B00E59184182398DFC523E990A2432F6C77F05C7A1CF7F24E7E5EB1078A +9769D53ED58F5523C6FC25441682DE3A91B0B14AC6CFFD2CF1ECC6264249B14F +9F1B9682E2A21E2A6070FCA63AF62E2381AA5F4180AAADA3E775891680F3BBA9 +55CBB62C7E80108A348AB2F99B664A9667183159DCE3FC08DDBCFE625528AD54 +9E3CF770CB13D05E4F9424F38FE35074CE024B2AABA2963A5565C70E6579EDFA +A9DA79C5E9C678CD9D988E0EE58DEFE3D6959675A004A236C4074B0452764632 +F6E5A18DDF3942BF038CF0A2AC9AEF98A6EE6CE5F2DEBE26218D2105A3807508 +5DB199DA8381E56E52FF8CF776A88DDEB9312BDD07B6AB03EC9E35876DB3AACA +9CFFBA40CD426FEFB6992C89FE4BEBD80681A1E01701A3DDBCB85E30D7405F86 +21D1D5ED21CB1F559096E2874572221B95FE3528F6571E46D12A89DD347CA976 +F0E0BCD152AEB860F53707461A50A4A2F0D5BD384B44C4122FCF544C3763A8D5 +D978842034B5B083D2C02FBC4AA897BA90BC2DCD408B77B0D14E9BC4F52E1F01 +C5C8BE41EBBA87969DBD1C48E69C0715C65A954603BA69CD423B641FBE43E859 +2D8024429D19182CA87670B2BD8F0488FB68B453DF5B52DA10A2437528FD55F9 +94C868088C61586E09CCA9CC24B7269FD330B69112A16776A08491E653DE7A13 +50AB14E3E6ABE9ADAD7B7601676AB0AA88C0603C1CF6E07B1DE7ABB6ACFE948B +E1B9DA9237F9C41B48F5F0708A0F3E85F0A12F1369AEDE38ED12F3FCB02238E9 +2B674E995A7DFB44459AE09702BA0EC70737213594F0DC1A5D4A9E841BE5D985 +5C42F5A9D5E25CBF85771D0C6D14F934AC5D3622EEA3419D362AC03FF973715D +A82F54E81D9A2DEA6D5047DC4706B71F5B8929C7D11BFDF1EDB5B4574B8CFEFF +A619B01E0B73830F3B241DA42B8EE022B639165C26445B1172D8F625E24CCBF2 +F86E2170EE96EB1B0CA10200E393DC402DA602415A150529C2022F9C4398AD58 +1BEC5AAB4A3D18C54E8DB9DE2AC089C066CAF988FB093EEE303FC99D12E355ED +EAFFA90F0426CFE25A69070FBC7376214B3A8A3FC60E560009A2159B07CAA909 +8DF022C891F54C2DED1391AFFE894BC990B28EB94A7EAB870799E6D0980974C7 +99DAF9F1464B4F3603E3382F195DED9B78EB08700546509F730E2C016AF19088 +289998B271B69468F6319AC55D7BF218CA407BEF60366CE694A4DFC9E3CCC5BD +9F30F14123B1E7CDB50344C45708E600A08B86A88AF3EA67D85C9C19D9AE3189 +2B3373E3AA286D8F4C481930920805802BFC8E51696CD82383653DACC794CB8B +F115851597EDF37827EA38B94657E9C7030CA1C46D238A181B3EDE8A3217CCE8 +519C5D0F74CDBA7DE1C0F2D47AD98FF5B1ABF695CFD1CAD1902BD47F9DE9EB5A +EB190C525E83020CC24830F52ED40DD3D5D9579E3CC02867918BC5B60C6CC68F +BF2DDA27F17FBF84BF7C4DD978CABE2C3092F6C9E201B31578FAC3D9655D8081 +FD8BD9B977DFD95FD1887AE024E7FD9202D3662B5C75760A4E70B08DA6C95006 +E7F7689D66DC874568B0FBF98B6C4E5CBFA96C306B7EEEFEB0A0D5D96A8472E5 +0F649A6C61CAD0D90D46C847081E496F4D523D471AF73B82CC6D744C9A274328 +7969F66EE4002C3B82B5ACEBFAFCDCB77FA8062A742974C27D4A4AA37C3B89B0 +12E8B6814C41776A41652A65D6464C8ECAF0FA42A28ABB9E84841D5D9B334245 +22EB2B835A002038B512C633BC20D7BF59C4725094A38CD11EEC59A4605D1CFC +E9DA9254910AA951D47A7108EDAAE8383B51059A0BF6357F698C21D9A473044B +7828FB5BF05DB0435CB37840BBCAA368D07CF44ADD383E521731A300CEDE2F2C +B108643D548331850F51464E8AE5D257EF53D51516FB4C4C4176A6D9A2F46DB0 +70B10360A8DD870C0B654D1002B8E25C9D39DB5AB34F4D0857D980999E5ED4D1 +5A33CB97414E39BA94A9799412CA6E08BADDD5F33C33A7BBF38B91F6E59B4C52 +25E8115A08ECCC5F54EE4BA92962A12402433EF12CF3FF90D50DA8939B50C1ED +6CFD48FE86B06EC15443B257E5377BACF3BA79C1C90688B54AA9D4A56B0CAC8E +DFFBA242084DD87534FA21E0174E4D342DBF3E4A44C18E6C976E5164DB749528 +14F598CFF640A4DE7D57163F18714D35CC9A10D727187097A0A6F42721D78213 +F1BFFE950D5505D9427C9D7E19D99D231001D2BA8569E8E49CDBD82FC0E358AF +A4ADF0EF2728D289FE4A5F4F8D6B8AC38DC3FAE985005EC396444CAA7582843E +B7EA619993758B7174F39155E4A0C36122729205C09474094F8E5E48341F8368 +702E7A85258052F0260B1A4F7E36D679E13E28FB0DE87275A92DF72585C1AAA0 +772ED992E6F49F3B392085586DDD87E6BE16656C673ED5E134E17501144D84C7 +B661005829B212EB53A07F7590196B217BD097914E955C5D81F9B6944AC83716 +E10A2868234A4DAE402054D384BC00ECC3C8DB95A443A4211A125751DB40A283 +CB3FE6125CC609A97C5FA631213AE1CAFEFAF41182459E13E97A4DA186D613C4 +08ECBBB9E6A40809883266EF6E68B07935245823F358C4235C446C750A80746E +8B156B6D95B636700AE9FF44704AE2DEEF8463282B171423F24B921874C9FD81 +5E6905B6266EEE8EFCD5164D8985E2EA84DDB0637B09B95B61A94AFD5899B26B +917F7984A7B6206D2859B4024E80C71B47FA862F6F648C444C8920FB8A6D6F68 +5F1DF4B28A8F7B3253C9FF97D7676FD694FB420454041D4249ABEE685276117E +5F59C853078E6C1DF2C54B9DB5324281F41AC6106FA7246C2BF540DE25BE4E36 +E2572AEA0A993F57EC8A19E7E78A7B8FF6628FE898184763440C8B52F8A8214B +C1F67D3DD2F63C60DB01110A998A99372F63DEB1002AA6F885F356B0CC8CF6D7 +208FE8B8586B03C760F26C300CCD82811D71C385FAE1FC4770027B2994BCDB4A +88EDEAC938E4B3144DBBF9A921A429824AADC7D1D71ED3947763F97E5B227336 +E0D5C3108EA260DE5237B6324527373B0937873586BE1E408B2326981242EC82 +247ACBF8169B5FAC8D59CB8377858A44458280852FEA8420B3A7C6E975D5A0DE +F871DBEEC19DF6560AD6760C0C69388C4910BF79F3CE9B8DBA56431EE3F60097 +BD782A01CF2DDE86662D878A5D5F332BAEB6C2866129120F08A7DFFBCB908475 +A6B827DB33150A8A2FA8C8C942C0E5F26A6CB80D1944C630C421644D6BEAE3A1 +DC78596083F8E0FD24EABD83E2EFA91A2FFC5A31F7756ADFEC46F6149F7843B8 +1CFFFEFC1A3624F416B0AE9E65496455825B53C2ABA1CBD2818C9F60EDF6AB64 +671A87B5B908260E44110C38841A3C2C47032CA91B904895063DB6F1EDFB0BA4 +5D28A4D3F8E1828BC4409BFF5ACD5E0D89CEE8A2418DE054498E8D1C82081E58 +E5365C9993E10EF250A644A4365E34C0E94BED8A638F3281404A8275AE7237F6 +14AEAEFD6AFA0660D1428FE7F6443F4686CA7CB0F48023D3D165158A2A3238CC +0D318B2042209B6522A7F42BD4F67FBABE76D3409FAAE2B16C27C5FC4DC3D2B4 +DD15497659235D1A264F50B912A13F43637350FBCD3BEACA5D3CF62260F44733 +48A4C4FD285967AC60A49EA5FA8E253C009A1166C8E402F83F5E6A460018FBBE +32CEA943B9871D9A4559A6EE776E46C6FDA4692169F5CDCD9458813C6C32689F +AA853F11AC89828E0FFDAF7D8BF25D9FA9F900D554CA7B2095B5F89688A5A6BC +B39508E0D96C8E33A3894A5E00E0A97007B08C64E1A14D080F3E2594A5A029E4 +305EC3790B1CACC592644035C2279226EC4227E8DCA3B15488173CE5231221E4 +A6DFA0FE8BF3912843432CC081AA1396874099332DE150402AA21D1DBA056548 +F6FB3E96488BD07DDB8813653B67C9D4CF67E5CD80C00EF70BA738460AAC255E +A0AE846B04C59A56009EB9CC1A2F0040C20CDFEC2FF8AA1245DF14D74C71B769 +572A15F5A8E627EBE5C8081BF6B77E251340C30EDDF3207C7923B7C70FC00927 +AB4F26BABB73FDFB7BB8002F96F1B14C8259A1A5CF1DE0EFCCF711B93B1ABC51 +A92E11E3B43450B7252E3FEB3491B36C18C35F5D8FDDF35D0D29A6AAD844B4B0 +A94079C01DC7139C526DECDE8F307FB8687BFB484E21A9D97FBA35BFB5B85927 +BEA114B7CD39C8FA313AA8AB4995C496DC3909E45ABDA71126C5649C1D8ED49C +C99A956859216BAB195F56412B73682520947030B9C8C3A760BDFE4F0457ECB2 +D9480917AFF2411FAA0AE36390D14FEBFA2E682C04AF7AAF447160EF4CC7EF70 +D50BC32731B9CC9A79D378BDD5E5B33319A2F93F500C8B88D54F6465A8E66A4B +A5C81A6FF7BF8960C274288D3E3C3CA91765F3FEDA39EA1F5FD1357346BF30C2 +DA09C2A5B36BA44B73F2C1F2F29A08E86285D9A5B33C97F7FFC877DBCD2C5098 +B5C6768E13BBFFBBB9E385C5DE70564456F45E9C5E48C92A4E12F31206E52D72 +6F1BBDCE33FEA115502B2DE84F9B0DB87FD0A19ADFFD0D0AC5348E4DAEEB7BE6 +54A0E92CFB4BA347075ADA7B07FD44F436BC74DB1361F0195B9DC7CA76DC994F +BD4AFAB58C4758331853F35B90D737CC6BB90F82946F1CEDDC36BCAFFBD91778 +2C45352271F00B553E70E1C7699353C21AC2FF5269D5C070A24642A20F959E4B +EC352E7BFAB8C8CD0259A47222B98A223ADAE09309CE254008D0A8215890541A +2B64D0AE4846D56B0E296C2BECB4E6E15FAE6189907A772DCBFE7D9A534DAF45 +E9806B580D6E7437D6EC6C212918E096FAAE8AAF2EE471A670487D9106C59C8D +9E0E72CA5B325E976E534E0FC4402580D531D8873DCBEF1FA5AD86758E8E3000 +7CC778A190AA1F04591FEC4DC81DC3B4D9 +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 45 /hyphen put +dup 47 /slash put +dup 50 /two put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 117 /u put +dup 120 /x put +readonly def +/FontBBox{14 -250 1077 750}readonly 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 +146001CF717DE25AC1BE5AEA5F2F1C17719251C429D3AED19EFB5A6812F33CB8 +554D92C7AB2C51C09C7EE0E5344CE62BEEB49D5F09AAE8AE94984EAD1847C5C7 +72B2A06D1906BE1B19B8672AF6C90238BB7A697EDF6C299BB33275CACDECCCB5 +5A2AC6B60E598D35B682B3445B029767AAED04633BD8C7F65DF5B19E68BAB10A +1941EF5974412C72A167C7899691A81DFB0F11107009CBDBE91BA59603A49A10 +7D1F25271F3978093DF92B9899EA3F62A16C032F432ADF2D882FBBE99164176F +026A97BF90473AD4F4DAB59E8D19A3F95A29E4D872FFA35AA6821F8BB8912534 +AF87564ABC178962288EB3EF0996127FDEEB56DA2A67399B52A50869E6F81207 +423B5181D9707C9C5A8E4EEAD48B967A5CE54ADA3A4C923E6B9E5D893E9FC93A +D8D2FE2ACD2CCFD644D020FBD6E57B8CE610A777C9C0C13F99B949105004821C +A093A86B100DB0FF4B1151E0E3CE04C45A6A3EEE664243CC1A58DBA98FA7E455 +460C26843DC93DF1F9D1E076FD2EFEB77EE7BD7ED299E991DFE2F98089CCE967 +40FF20C8751D5266C7C44BBB5B357C808EC9019446E96D1520C3C707A0C5AF9A +A0AC16D7DCCE3E622B1AFE418CF0FDF81220202C6A6413F071E4781425C6BCC0 +6443F29F7C38C6086F644100AD8DDF3D78D120CE99F422C9A277589362076868 +AB8B5C5A7B99E79266915C95BE2D712322C85FDF0A2118452E1321AD76C7FCC9 +F4F067BF3A9B7F06ED98C9534528A3EDAEE3354BC95C03E21441B199CA288E58 +7AECE47656B66475AC53D9B7FC4613260628895CA1BFB21E25B1098EE7779DA6 +D46C18933860924530644D877A5A1755A6EADF2EC377A40AB8A87FE650B774C2 +AD0FB796AFF2DC6DEE921DFCB4406440F493777AB4AB145CF5DABC0A803E36BC +63ADB4E3A8E4060CDA2767C70793726A3E093235BFE0EE4498B7D8A01762734B +303E9D24E5354AF9B2519CFB708661C630664F9EDE2CDCA80777FECA16627495 +04E32CD2A9B68E29577B27C65B0AA3AD89C23BA2B79F0EFB08C08BA8DFC1D5B9 +FA53DB87349E7CC25082FB7395CEB69C8A185A6C6BA5686E476FC86D6A22E306 +AB5E1C1D2809485E299312C66BC6C9BC0D95552539D22DA59B874A318C03D9E0 +0A60B47AB88C68AFC89B5EEA0521C4528283FC44BBB90861F9C1D428C81E69DC +D2476FAA9113341BE5324695E96BB0E9E83455BD2F020B19C7D47DDD66932C57 +B92E7A6EC1EFE1B38F145E4A09C4F86E2DE2251078F33399B6DBF6B093B596C3 +8553B2C2B14CFF58CCBD97C117616E5A0FA91F740F1F113CA22C8872082750CB +AB56FB6298AA24A6FC17CB63FD919D83FFD8E21D7CF08278AD5B774B18E2845E +B8A690ADB9EEF48C65B7A1FE2767E923A4ED2FC14831F76D07B5449057CD6ADA +8A6017783DB40B74467260E2E710DAD3B54A3750B2EDD2A5D9D86F33B2692F42 +DB513C6CE754145E880CD636BD81FB09DDD312285B37EAEB06771AF9C4A94FB2 +B5118E00399D78094375E381860F28AF216546AE14336AA8021AAEBEC7B18D4B +4D951ADFFF236BE54405680A893DA6963810697D154E599CE6488C6E0651942B +A046A769CFB69F0D6ED0CCEB32DFF9BA1F42DC407AD6168D1E8F9F543462CA0B +D2D4F6A743241A0AE8209D24C3CFD15FCE0BFC5B12A38D79D7B6B542358E5D38 +1E2FB10DF79DB1EBEDA7B62B4ED1908B6958367320BC5540F29720015BF69836 +A816CEA95F20AB0C4AFBAEE96E148642AFC20ACED0614386B26FD5A17A661987 +6BD1EA156E836689A39200851A1ABFC51691BAE4706F60F255443A6A5D1770B6 +97F11FAC489336A2EE528D25FB23C8EFAD6DBA039A189885A350C82880DC5223 +1B30F1EC85EB3CCDCD88DD1C030F9B346A46C4EA46FEDC6E13AB155AAADB4CCB +1E2B585A9C1C6CEA143E43DE0A0E344AF525368138B475C665572B46BCB211F5 +9B14464D112DA0BC53710A573B9D061399DD6D4C7E7DFAEE23F06DA8AC4FEC16 +6493ABC66E6C64D115992E8C11307589809ED7DBF05F079003517753256BBC3F +129CC928B009A30709FA4A8527686342C3EF7F7352D7C070838D6586B1E5728A +2AB44B2DD2B158CD4D4214A01D25384ACE75298AC298E6D47FD1F4936A52855A +C99070A834C957F9B09BEA059841DA63CA94CD5BC7B01A7156BBBE71254A1F4A +EE8E7A82EC8A64B4CF55F0FA6ED8A60B7DA91518AE7FBE43E93025E2BCEE5B92 +3A622D725BEA3D14E14735BCE2FC04BF11120B761E3DCEF94D582020BBD67C32 +3B1AEAA0A82FAEAA69B8A2C74F6D82436ABBAEB48F2DCD8F4C9A99012E73F8EB +E34E43E27AE6B7228EC48B226DE50FD58AEEF7A28CE336F4A113D679024A053B +AFE36FEE965917F5A1910443C11147836AF4430C3D4A7D4F4CF759E9E1EF1268 +163F077B862B77ABD0F7DB83EC447F872BC219AFA9B3EBC8FF0A9CB558A35F5A +FA49258CB038E7D3F0EE530972D4C245EEBEA89BE3DC179B567487EB44FA6CF9 +088A5ABBF8DF8EA830FF67A9409BC8258285F7650F924E167F405EADEAE15921 +9A72E2C9DF52FD66C9762EF5CDC5146932D2F322871922577C04CD90865E1BA6 +1E792CB2EE30BE10721C014DF1C53D8F2F07B27E970D9AA1D70DDB06D09BBAED +CBFC0855651175B85C86119EC3316F7A8A9F237C63AEFEBCEA7DB430B8A9A0F9 +87C7DF4A86ED545DA1CF238A61B9E6F6E827BED954282F163F01E911B17C4000 +E8BEDE28EF8AE821F1A319EF110C75A15FF0D55FEF8D9961D4FBFE1087C5888D +CED4ADB1EA201C1D91FD6DF71D121B5F05F98041AF17514496D5B3CA7BB09E0E +19FA8C9FF2196DE23663684794C65C684B7AF97BE6754AA108C2C7015A14D975 +1B8D3D39F376E3F693E12DB603A39BD41670CA0F997BAA41E30817B4CD2DAB98 +1EAC8E82E058A71C1729EF32B9DB11A9F2546E43618ACB1D0CC698219C6FDE29 +E4D783343E8A3DAF9DB2EC3FF1E95EBC4D9B0E482FCDCBF5D14FE05E4D3F87F2 +07659A072D9465DA3D5D684481AEFD853D83ADAF5B61BA84F09346FB68379836 +00652CCDB39DC8CA06A668EFA3A570B6F22F5BA266F6A6C8BAE414ABE7278973 +CBCF137158CD9DBC409F2B510E86879EFAFBD5D810717BCBEF5E45E74193A352 +E6F1BAC1433CEB19BE0FDEB6EF159FEE2CCBF08FF84C788AB5B898F460C756F0 +1DE3CF57C53E48C2A61EEB5A83875C156F000909E643F202148DA4D634BCF8BB +212AE802172D1B73DBCA14040817537FEBBD6DFF70C55A53C03DC314394EC407 +0BA251E7DBFD890416B42630CAC6B927D1324F9FA3BA236C5A7CF47C1C97FC62 +2C80366A3FF8A31E07754E01DF6293487C8F05E2C7E07DF4EE1B103C4AC1A979 +4FDBE6F0E997E72B321CEC0D5AC53D13D13749700199D7E4A728A8DC2E4566C3 +6EC71AC96F2EA85ED2EC9DD95B69A8368521FE1860BADDB68AD640AE3D651D58 +47F72E37D21B707D9C68F9485D2229233B284EEBA81FE8FDE475E62729054F11 +B2ABF54A241DE72B75B06A594016362AADCD8E06E7BECD43A9DD3167831FE455 +4AF2706AF62475223AC236B1218CF8E167B7C2704B185F9AD9FF978E1341692E +6716EDBE7925E39DF0315408E92E2274829945A54CE69EC9A6A3F7A5A382366D +72770D713BABC37C30686CCE65AA741A93561F9B9D938A4A63D791DE94B6455F +5E5FED608643CE8C429E4A3E845E79965AA5CC327524626D833A44E0BA98C915 +41F440B593B406CDDB69A369606C034E065EAB6FE42B6F0E9852878B934A03CB +037F5AAD74C1C5E846AB464C0566F36B921144C6E44824D78D81FEBCF8F58D25 +04161A00B077979A9A4A7E8E1CEA8EB6220F8BBA12756F4BE9D7026244970E41 +B982BA34C9DC3A0BCF765A77B314903338F301DD71FDD813ED616A88DD4DF27D +5F3B4261450145A2A7F5EDE3616B026F5FA3B67B4C83139DD628127D4C46652B +0187BA8DB624E4444555B851C759F6EA0BEE67AA734ED11E6BFAC849711AFCF9 +1DF03E08886702F00E1889DD54D65DA5D377FCFBF958250B926A0DD7B1AFCB63 +ACE9ED6756F871F7FD49583B2DCAE606E015D5C9DA104C844E393DCD49033471 +1248AAAA3812AD25210516018A15CE1C14CAFB533D4FD3A2A4ACA4230FEAB582 +C2BDC65CED03492CADAE4B1686CCAA16CD8C7581672590727933FE63030DF2AF +FEE52DF524AE193D19B2821DCF83EF667CFA3770A3214FBDFFE854ADFC42BFD4 +8E461C73E94DAA9693AE3F632EC8BC5BA18CF4A5C49716C6D7840CE439A508DA +32650240CFE8A11D2EA8E44DDDC4C3F86FFF13F10BFF03A9BADE6B614D23F05D +AC5400CCE1ACDA00A76443871FCECF4F7F68FC04C71A56DC94290DDCAFC88B27 +141DA29CC8500D776DBF086280D30B6F498E83FFB6C1CFCBF64046C819B8DD7E +1622CF99F02DB2EAB639A148FDA44139203C21B179BFD9F2600F1D6EFE2F2F49 +6F0CE21F7FB711E494F65ACCC420850E77939D8F179D861190BA922E5AE6A1BE +E5981475AB279740A40CBCA4B1C955C888F97C1FAAA6F1AF6F2CFFC5F2458F +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 11 /ff put +dup 12 /fi put +dup 33 /exclam put +dup 35 /numbersign put +dup 36 /dollar put +dup 39 /quoteright put +dup 42 /asterisk put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-53 -251 1139 750}readonly 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 12 /fi put +dup 45 /hyphen put +dup 97 /a put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 118 /v put +dup 120 /x put +readonly def +/FontBBox{-163 -250 1146 969}readonly 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 +340651456ECDE53615252416539F5CDCC809BBEB1FD5312D83E683356670AACC +97E95202657848F59D564FC6F4DD08792FCA977F09DBB0ECF3A57BAAC110DF24 +29AA33642650834A240116F984213A043B38FDC4922254789F951FE907B95881 +28B3CB8D33416E23168989E283ED3D01C5C17E9003676FE45C35E14DD10042EA +F0BF9262955F512C16D95B55C2D976B6C7DCE0665C82C1DD66752A74B8FD4EB9 +4DD212B7A7A82D1BF4ECC2FDB00680D107B3074A5A0638699B86EDC52AB0875E +CFECE6276446186B226D8ABEAA30EC5524F6A293EC01DF5EB1B8BD65A0318419 +F56652CDF1C7BA2189FA55A8BB75630F58A2270D573A2924C1A2EAF4DD3ED46D +293711EDC9F95497CBC2BDB73C35A6D614CD8B871A29AB724F4C35CBB3E5E36F +F2CA1079FCE485B94B0582B17E08B21165B8B0B367AD4468229996DFD88A3558 +F61AEB65C3D7B646F126C2C929ECF6BD3AC4156FFCA2D175D3DB61910F22E2DC +D493751023913190A945A274AD2744258A3AA21C284F7EAAE53CA112EEE32E8D +D70D543688BFEB944C697DF184161DAFA6198317774DF841E5378B44865A34F3 +C7870FC43F21B52364A0059F8660D55AA1D418CE4376F8EED12C015AD054E3DE +623A8C6CC5278069D34FF8E0D5133B950CC5912E4EC8C3120F40D530110834CA +E0A0C90F4432836A3C01B3D7021AE52E7F2E9796AE380979C80AC2210FDCAD6D +65A099C762B1EA11F4FE055684CF3C449B2CD9ABCDC0FB3317BDB45EAF9707A8 +39DC9289C9F89EC6E79974B9A3FE62C3C0BA62D0EA6DEB3FCE1FF38170205011 +E76AEA346EAB416F39BF6AABED2DBEBD993520282AAA34077E2B21D5833D737F +F92E8883D351BCE621BCF65DE21FE99467B4E3CBF022B6AE9886000212C69EB0 +8270823D46B390AAF582747D1E57BBB27F2B4461513125AC826B0181690AA46B +0690E903DBD3FF7D23CBE2FA6FC2504342DB6797658DCEDBFD8C61D034694881 +71D7DECC437496E7E7408F465E945E28C544942CC0BCBC250D4E0AF14D9F81E7 +8D8521A893AB2DD7B456FF8F0DE426AF5F94CD626CE320AC8D2C0FB2DCBE346C +E864950CE39F58A8EEEC66FB491B3BEF7A5ECC9F652C4560D46775E553FA3B14 +E8D88EE59D2C6C8940B4942478E6652113A7104EF9A7B7BF39BB1C85055C8647 +EA3F3EACEDC13EA0020326E111EE6CCE763B761A82853D626036DC1FC293B118 +F3054946D2123D595F452AA40E8DC325669DCBFDC3DC330932A4C4086A9D9FC0 +6A03D3B807D7FEB165869EA049BC841CB94F34FD3C00B7A355399ACDE83C51A8 +4C4506E7D670F49A5B21E249AB3E5347C17FB9AFFBD4D5423F62751DDE8BFBB0 +21967DE512591E181108649B113CC3E7319D61CF208F4E0011E79A8585532C37 +19CB1DE645A5B07C8AC0C5C55BCAC7E01F13F6544B428B6F3A7FE67509A14A35 +430CB295ECF49CB5D00DB6C14E60A164C8D8D83341AF9DD6250CCDA3845A29EE +0BFA6D3B0820A5BDDAC9680EABF26A5EBDCE9CD54ECB820F2590BDEA36BBEB23 +F12CD662ABAC43B4096ADDFDB6E0BDD31E07D3DF37A72F0BD72DA2BDDBD756FD +A52D351EDA9FC8B39BA1CFDABFF5B7B061E8435486ECA0ACACBC4917CDB9D4C7 +6D81CC1A9FEE75EA765B4F20F511F271B5B4E054E02CA7FF5990BAE4D271C5DA +ED2E796B32B7015493512F81B910B5795D38DAFF64928CABBBE031E92B1C08A2 +86F2C1F68FDE286FAF7CA74C9913385D739262D5C06EF73A1C3976698F51D2D0 +F858984D2BCA7941D2181C99A7C33B65A17B6A1C02CCFDB9A23D0E3E729B85AB +405830E2D06B2B35EB265900DDBDBE125C0F82613FF98CF49E7294F3ECF414DF +EA84248C22A561477861EA75492743C4FB8935D446A121FD8F60AC14C61DB254 +07FBDDA07CDD853AFE99EB5B54C3F89503040DB85714CD95725D3344C5131B3A +5330021B809B995E123E060CCDAB57183CA09E554E8145887E80EF7AF58835C7 +D6F5A4E695551D4CABDDF5E90DB51A41110BAB360EFED144A6699F00FE3023A7 +CF7AA2055BC8D55C67DE8128527AE31D9130E5EA7A07BF2067CB108127BD8C5A +B6D325A6415EA9C20C5702A1A58725A385F69BFDAD14B6C21D2CF73A77E68713 +45DB838A412DEA0D0575D6DD2B7A1650BCAB58E5BEEAAEADA39023C2CB326512 +E8D89107960E19213BA4C18929C09C2EF5E216F2DF15FEE3D68E2D3253FF0FBD +0B1E09E63EE47A6EEE92F79FB4D3382AE21F7C7FE24C1C5E28B6BABB761FB9D6 +6BFBB74E0A29FBF106DC542DA56E84B1DA7EF89DC9EE90B6421CD0C69FBD7850 +5C5D461310A26AD4E91563CEBD727B0E327E5DE3DCF1DC53974B5D47D21B8B6B +A91C05685BC0AA35709BD3DBE8AA91F9ACA6A1091EF4CD5336C76543A1EBDE83 +ADA5206DA79094F67BA57B508073ED36029A5472EABADE8DD76CDC578827DE8F +A92896430254C0A2DB513EF6A5B619880926C0039ECBED0ED9CB4EE2DDAE7B38 +39633206926DB7589EDA69A409B9F6A0E691DEB2B7EA4069C5689F1FF2B73AFD +1EB302099183F5611D5AB1027B7D970DB28B621E67936ED0EB201A048BA1310F +7F4401234B19FD34674B851E635A1621C15A1F4D1232ABFF7B1E145F6DD8E603 +38F1A2487B742AE67F4773B3C595A7602247DA7CB4C6F8A9963F63DC09E6A532 +BFE5F5AEC47992B8813ADD822CB3E731940A8BA3B39C01EA2A935A6BD453D655 +B1A11B3107D196A5760ED2E4E1B4C61D3EB276FFF61DB628695CC6902CC3C708 +8196E3165A0CCEAF5352D3B7555D83E6D0377C325B1224E86930040F3FF47DE6 +F5EDB77FE09A3F8D39A0783B2E8739D9D8EC76F0C846C32259C8691118E67475 +10470154D3B6B35E4C6EAE6A5898313E55DB0625A3F92E755393AD5D51E40955 +BB5373BB842E80B0EFC3C4B3783B980952E871730DFC94056E093072869C14EE +3E722BB2801C8BDF3C0EA18C7DB3AF8EFFA64FFC28094D2EFE57DD02F4C7D576 +977D9AF960A3C79C3B3C95AA5F3FF4D9E1DD7C1E2470351296F1D2D0C68911FF +26B3C4F5CA46BB694244554CAC720E1D1CF66F68E9E1E0502773AE3D5C317A98 +4B08881BF4D931E1D2C6FB39D8C04F4149F003C846D7EAF1474FB8CBE9E3A93A +AF8A65A5B4ED2D2011B60C4F48FC91A030D6C6977159AA76838B6CE596A6DA92 +BE1B1D3A9C2BAB9EEC1E32D810DAED8AB3AC500BADBC03B357DF6AB8DD95FF22 +499BA619627A9BE8F803F331C95AA64A1FEF457C96012068637F7DB1AA4A2B43 +17285FE41B2109E3CB752413933E04292449CAA9DF8502E55C808BC2DF3F2B1E +0F0167D66371E6FDE932B77C478BE64124158C7D3EB2AEB7C1138C51F9BBE4BC +27DFC04D1C87B422709024AE639FFE87EBC03AF0AABDEA9A836EF77CFA0F60E3 +EF2FD1967D178827C85ED92D08F44642EE15D547DE067DF3F432FB557BA6D162 +3F3575BB854DA9FE02C7C4E06A75AF13A4924D144C3A91FFCE9BC2FC878259F1 +7C4051FAC31F1FF13A2D088C72F3B1EB03618B2D0E620759C1DD37D171EAE046 +5A51AFAD8ED2A7A18FEF4B4A16AC12CD92233007E2C48FAEEB1501A3F82AAC62 +FA3A83A70653EB36D237C23B37B1E2A549C50C9D51DF8A737E422ABA9C1CE63F +862BB06BC0134FC43658008E3F5D40C55FE92AABDE7B3AE6546AC1C37D2BE0AE +6C870FB22D5A744126A34AA7F426CF2E74F3F7443373615FA9A530BE5B4A57C3 +8E650A8B155FF8620F458F0CD87841A4F41587578F5A420D7CE90C6449BBD6D8 +0BCBD039A4A03E6CE6E02B2D31F544DED20D9BB03A1E50D6CA679011844C452B +96CDD80B67CC95C6B760A2A59A74FE37695ACD1673AC17ACA5F27AECAF921931 +47C905266992CE1E53677854D6111E787550717D74C93AC6C9DCD8F559AAA559 +1ABD98B9B1956E4CBEB9CEC3A1BC1AE6C45106A6BC2D86216DBBD7F953E5B271 +465D5DB891CF5571745CF32CFE0A52526B8215DD9F165D7A53820F1E089DF84B +2EACF3C25DD708843DB319888186D4279DAF34DBC50FA97E4EA0D3F297578140 +5267C8EE6AFBA8C1598B4263100DF52D3897010A429BC15498C9F9C181542201 +488922DA2077CD26BBC5477430B2F06C629A2E720632D6812E3A606A650CD38E +BC8828E1E37395FE0283B71451A0E94E16D8CC642AE498A191E7135C383F7742 +57200F56FCA40362072E3DE4957842C710AEFCB4F8830C4912EA5032E8EECDB2 +4C1CA969FFBDF37966A782DC92A0C8D1D9024A7F6131C1CEB3B458A8EB69C008 +9319C05A1AEFDE3BB663FB9174B94FEED60F6D914DAB5029DAF2F3A8131CD499 +5A74469662E126B9B000D5EC348452DE795677ABAB9089FDEB1B27B2E2E5E4F1 +B31E25B11D4B4C4E73499070249B16C0344FFBA87CD10A44A1E9E9F2962CC186 +78739D31823C2DE468D1FBB9849CC92F18B5FBE9DD385576A54215DF9339D5B8 +3AB66E902E43732750DA2F57F9F6C928C84E1B6ED12FBEADAFCC659E571F7D8D +2B9121C134EB9FEE6FAF9C46D29AC24EB5592C9EEC5BF4140E8BBAF20422E47F +A16A7BD43A6DA305A9FEC0A4BF7237AE50572766B27A0A2A4AAD47465B50D487 +BF9FC09B1680AAF48203C0C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 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 58 /period put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176676ABB71BBD0EE56B4CC492C0652750227CEC6CBEEE374709231B00CD +0DE83AFDE295B314F6C8B1FFD32251C1925D96A64D739FF1DA4926460B28B3DE +E949AA0BA3DDB16534FBA30C32092D5F712B5E8C8D5142F35AF2906E6C219D2C +7FD9A368C193E0EB9C7E25FF03C546B6ED993F964CEDB1B8537C617170787F37 +88D6F2AD02384B01067FE3F98257BAB958BB3BCD1001090A4502DA0638080EC6 +DB784CC8AC37CDC01B29BC481D6A05ADC6188785262358C1BF1D694BBF31C1F1 +AF117C1ACED44AAC6EB4B9A2511A6762DDE8FCCBA5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI12 +%!PS-AdobeFont-1.1: CMMI12 1.100 +%%CreationDate: 1996 Jul 27 08:57:55 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI12 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 58 /period put +readonly def +/FontBBox{-30 -250 1026 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 +5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC +4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67 +3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993 +EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F +4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59 +2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A +323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C +2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1 +D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA +5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F +0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D +A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77 +2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60 +00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8 +CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757 +99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA +C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D +5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295 +55B50047CC8911C98FE1A7BA6CDEA82D34476286E710776823690AD333DD3A49 +335002F4680DBE1C21174BF016B0DF799B01EB9D6988479A8334BBA2F8DC7146 +BC0DAE9DE3A6453B181808E68A89E0C02DAC6264D002B422EBC1CF14F65D9888 +15EE6D514D3457F7F3C6A3D17EE1DA076F73ECC392D349174DA9E4680F29CE10 +0157E42CA35F5DBFF56BFC3AA07E61A78DBE882C5AB388220C19750D3643E7C8 +23D6673027CE568A4ACCE1D12B1D9E5A43507F4AF9BC873237F65A6B95078DD2 +378007CF0F0DE7CCEF760E19D6D1D7B412EC5D4972 +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 /minus put +dup 13 /circlecopyrt put +dup 15 /bullet put +dup 33 /arrowright put +dup 55 /mapsto put +readonly def +/FontBBox{-29 -960 1116 775}readonly 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 11 /ff put +dup 12 /fi put +dup 14 /ffi put +dup 42 /asterisk put +dup 45 /hyphen put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 87 /W put +dup 88 /X put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-62 -250 1123 750}readonly 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 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +readonly def +/FontBBox{-4 -235 731 800}readonly 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 +TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi) +@start /Fa 130[62 1[62 123[{}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 4[43 57 1[52 60 58 70 +3[28 58 3[59 1[54 58 7[38 38 38 38 38 38 38 38 38 38 +3[21 31[43 12[{}50 74.7198 /CMR9 rf /Fc 197[21 58[{}1 +74.7198 /CMMI9 rf /Fd 134[39 39 2[39 39 39 39 2[39 39 +39 39 2[39 39 2[39 3[39 19[39 27[39 39 2[39 45[{}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[{}81 74.7198 /CMTT9 rf /Ff 167[62 3[60 46 +2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 +/CMR10 rf /Fg 135[67 2[67 1[50 2[61 69 5[33 1[70 2[68 +52[60 47[{}9 109.174 /CMCSC10 rf /Fh 140[56 3[56 56 1[56 +2[56 56 56 57[56 45[{}8 109.091 /CMTT12 rf /Fi 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[{}50 90.9091 /CMSLTT10 rf /Fj 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 2[85 68 92 92 84 92 96 +116 74 96 1[46 96 96 77 81 94 89 87 93 1[58 5[61 61 61 +61 61 61 61 61 61 61 1[34 41 34 4[34 26[68 72 11[{}63 +109.091 /CMBX12 rf /Fk 135[42 1[42 1[30 37 38 1[46 46 +51 74 23 2[28 1[42 1[42 46 42 1[46 51[33 32[51 12[{}18 +90.9091 /CMTI10 rf /Fl 135[56 2[56 1[42 55 1[51 58 56 +68 47 2[27 1[58 49 51 57 54 53 56 46[50 2[50 1[34 45[{}20 +90.9091 /CMCSC10 rf /Fm 197[25 58[{}1 90.9091 /CMMI10 +rf /Fn 197[33 58[{}1 119.552 /CMMI12 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 10[122 124 112 90 120 3[126 153 97 1[83 60 +126 127 101 106 124 117 115 122 7[81 81 81 81 81 81 81 +81 81 81 35[90 94 11[{}52 143.462 /CMBX12 rf /Fp 200[0 +21[91 17[45 1[91 12[71{}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[{}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[{}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[{}93 90.9091 /CMTT10 rf /Ft +131[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 +48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 +68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 +59 62 69 66 64 68 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 71 76 45 1[45 25 18[76 +51 51 53 11[{}88 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[{}13 172.154 /CMBX12 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%BeginPaperSize: Letter +letter +%%EndPaperSize + end +%%EndSetup +%%Page: 1 1 +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(4.1,)g(for)f +Fs(Bash)g Ft(V)-8 b(ersion)31 b(4.1.)3145 1697 y(Decem)m(b)s(er)g(2009) +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 end +%%Page: 2 2 +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(4.1,)c(23)f(Decem)m(b)s +(er)g(2009\).)150 3133 y(This)f(is)g(Edition)h(4.1,)h(last)g(up)s +(dated)d(23)i(Decem)m(b)s(er)h(2009,)h(of)d Fq(The)g(GNU)i(Bash)e +(Reference)i(Man)m(ual)p Ft(,)150 3243 y(for)e Fs(Bash)p +Ft(,)g(V)-8 b(ersion)31 b(4.1.)150 3377 y(Cop)m(yrigh)m(t)602 +3374 y(c)577 3377 y Fp(\015)f Ft(1988{2009)35 b(F)-8 +b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)150 +3512 y(P)m(ermission)h(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)h(License,)g(V)-8 b(ersion)39 +b(1.3)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\))f(The)f +(FSF's)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)31 b(is:)41 +b(Y)-8 b(ou)31 b(are)f(free)h(to)f(cop)m(y)h(and)f(mo)s(dify)f(this)h +(GNU)390 4548 y(man)m(ual.)41 b(Buying)30 b(copies)h(from)e(GNU)i +(Press)f(supp)s(orts)e(the)i(FSF)g(in)g(dev)m(eloping)h(GNU)390 +4658 y(and)f(promoting)g(soft)m(w)m(are)i(freedom.")150 +4902 y(Published)d(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 +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)13 b Fn(:)19 b(:)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(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)h(:)57 b Fr(1)275 778 y Ft(1.1)92 +b(What)31 b(is)f(Bash?)22 b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)52 b Ft(1)275 888 y(1.2)92 b(What)31 +b(is)f(a)h(shell?)13 b Fm(:)j(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)44 b Ft(1)150 1130 y Fr(2)135 b(De\014nitions)13 +b Fn(:)20 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)h(:)f(:)h(:)f(:)57 b Fr(3)150 1400 y(3)135 b(Basic)45 +b(Shell)g(F)-11 b(eatures)27 b Fn(:)21 b(:)e(:)g(:)h(:)f(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h +(:)f(:)72 b Fr(5)275 1537 y Ft(3.1)92 b(Shell)30 b(Syn)m(tax)25 +b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)55 +b Ft(5)399 1646 y(3.1.1)93 b(Shell)30 b(Op)s(eration)c +Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)56 b Ft(5)399 1756 +y(3.1.2)93 b(Quoting)15 b Fm(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)45 b Ft(6)524 1866 y(3.1.2.1)93 b(Escap)s(e)30 +b(Character)11 b Fm(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 b Ft(6)524 1975 y(3.1.2.2)93 +b(Single)31 b(Quotes)d Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)58 b Ft(6)524 +2085 y(3.1.2.3)93 b(Double)31 b(Quotes)26 b Fm(:)16 b(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)56 +b Ft(6)524 2194 y(3.1.2.4)93 b(ANSI-C)30 b(Quoting)d +Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)57 b Ft(6)524 2304 y(3.1.2.5)93 b(Lo)s(cale-Sp)s(eci\014c) +32 b(T)-8 b(ranslation)8 b Fm(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h +(:)38 b Ft(7)399 2413 y(3.1.3)93 b(Commen)m(ts)26 b Fm(:)15 +b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)56 b +Ft(7)275 2523 y(3.2)92 b(Shell)30 b(Commands)21 b Fm(:)14 +b(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)51 b Ft(7)399 +2633 y(3.2.1)93 b(Simple)30 b(Commands)c Fm(:)15 b(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)57 +b Ft(8)399 2742 y(3.2.2)93 b(Pip)s(elines)18 b Fm(:)d(:)g(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)48 b Ft(8)399 +2852 y(3.2.3)93 b(Lists)30 b(of)h(Commands)15 b Fm(:)f(:)h(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)45 +b Ft(8)399 2961 y(3.2.4)93 b(Comp)s(ound)28 b(Commands)22 +b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)54 b Ft(9)524 3071 y(3.2.4.1)93 b(Lo)s(oping)30 +b(Constructs)11 b Fm(:)k(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)41 b Ft(9)524 3181 y(3.2.4.2)93 b(Conditional)31 +b(Constructs)18 b Fm(:)d(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)47 +b Ft(10)524 3290 y(3.2.4.3)93 b(Grouping)30 b(Commands)15 +b Fm(:)f(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)45 +b Ft(13)399 3400 y(3.2.5)93 b(Copro)s(cesses)18 b Fm(:)d(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)47 b Ft(14)275 3509 y(3.3)92 +b(Shell)30 b(F)-8 b(unctions)29 b Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)58 b Ft(14)275 3619 y(3.4)92 b(Shell)30 +b(P)m(arameters)17 b Fm(:)f(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)46 +b Ft(15)399 3729 y(3.4.1)93 b(P)m(ositional)32 b(P)m(arameters)20 +b Fm(:)d(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)50 b Ft(16)399 3838 y(3.4.2)93 b(Sp)s(ecial)30 +b(P)m(arameters)16 b Fm(:)h(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)46 b Ft(16)275 3948 +y(3.5)92 b(Shell)30 b(Expansions)17 b Fm(:)d(:)h(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)46 b Ft(17)399 4057 y(3.5.1)93 b(Brace)31 +b(Expansion)21 b Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)50 b Ft(18)399 +4167 y(3.5.2)93 b(Tilde)30 b(Expansion)10 b Fm(:)15 b(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)40 b Ft(19)399 4276 y(3.5.3)93 b(Shell)30 b(P)m(arameter)i +(Expansion)18 b Fm(:)d(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) +48 b Ft(19)399 4386 y(3.5.4)93 b(Command)29 b(Substitution)12 +b Fm(:)j(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)42 b Ft(22)399 4496 y(3.5.5)93 b(Arithmetic)31 b(Expansion)19 +b Fm(:)c(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)48 b Ft(23)399 4605 y(3.5.6)93 b(Pro)s(cess)30 +b(Substitution)d Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)57 b Ft(23)399 4715 y(3.5.7)93 +b(W)-8 b(ord)31 b(Splitting)20 b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 +b Ft(23)399 4824 y(3.5.8)93 b(Filename)32 b(Expansion)13 +b Fm(:)i(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)43 b Ft(24)524 4934 y(3.5.8.1)93 b(P)m(attern)31 +b(Matc)m(hing)d Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)56 b Ft(24)399 5044 y(3.5.9)93 b(Quote)31 +b(Remo)m(v)-5 b(al)9 b Fm(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)39 +b Ft(25)275 5153 y(3.6)92 b(Redirections)26 b Fm(:)15 +b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)55 +b Ft(26)399 5263 y(3.6.1)93 b(Redirecting)31 b(Input)23 +b Fm(:)14 b(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)h(:)52 b Ft(27)p eop end +%%Page: -2 4 +TeXDict begin -2 3 bop 150 -116 a Ft(ii)2612 b(Bash)31 +b(Reference)g(Man)m(ual)399 83 y(3.6.2)93 b(Redirecting)31 +b(Output)26 b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)56 b Ft(27)399 193 y(3.6.3)93 +b(App)s(ending)28 b(Redirected)k(Output)12 b Fm(:)h(:)j(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)41 b Ft(27)399 302 y(3.6.4)93 b(Redirecting)31 +b(Standard)e(Output)h(and)f(Standard)h(Error)d Fm(:)15 +b(:)g(:)h(:)f(:)h(:)f(:)g(:)58 b Ft(27)399 412 y(3.6.5)93 +b(App)s(ending)28 b(Standard)i(Output)f(and)h(Standard)f(Error)19 +b Fm(:)14 b(:)h(:)h(:)f(:)h(:)f(:)g(:)h(:)48 b Ft(28)399 +521 y(3.6.6)93 b(Here)31 b(Do)s(cumen)m(ts)c Fm(:)15 +b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)56 b Ft(28)399 631 y(3.6.7)93 b(Here)31 +b(Strings)c Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)58 +b Ft(28)399 741 y(3.6.8)93 b(Duplicating)32 b(File)f(Descriptors)16 +b Fm(:)g(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)46 +b Ft(28)399 850 y(3.6.9)93 b(Mo)m(ving)32 b(File)f(Descriptors)19 +b Fm(:)d(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)49 +b Ft(29)399 960 y(3.6.10)93 b(Op)s(ening)29 b(File)j(Descriptors)f(for) +f(Reading)h(and)f(W)-8 b(riting)19 b Fm(:)e(:)e(:)h(:)f(:)h(:)f(:)49 +b Ft(29)275 1069 y(3.7)92 b(Executing)31 b(Commands)17 +b Fm(:)d(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)46 b Ft(29)399 1179 y(3.7.1)93 +b(Simple)30 b(Command)f(Expansion)23 b Fm(:)15 b(:)g(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)52 b Ft(29)399 1289 y(3.7.2)93 b(Command)29 +b(Searc)m(h)i(and)f(Execution)d Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)56 +b Ft(30)399 1398 y(3.7.3)93 b(Command)29 b(Execution)i(En)m(vironmen)m +(t)8 b Fm(:)16 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)38 b Ft(30)399 1508 +y(3.7.4)93 b(En)m(vironmen)m(t)18 b Fm(:)d(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)47 b Ft(31)399 1617 y(3.7.5)93 b(Exit)31 b(Status)c +Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)57 b +Ft(32)399 1727 y(3.7.6)93 b(Signals)15 b Fm(:)g(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)44 b Ft(32)275 1836 +y(3.8)92 b(Shell)30 b(Scripts)23 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)53 b Ft(33)150 2079 y Fr(4)135 +b(Shell)45 b(Builtin)g(Commands)22 b Fn(:)e(:)g(:)f(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)67 +b Fr(35)275 2216 y Ft(4.1)92 b(Bourne)30 b(Shell)g(Builtins)e +Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)57 b Ft(35)275 2325 y(4.2)92 +b(Bash)30 b(Builtin)h(Commands)24 b Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)54 +b Ft(41)275 2435 y(4.3)92 b(Mo)s(difying)30 b(Shell)g(Beha)m(vior)9 +b Fm(:)17 b(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)39 b Ft(51)399 2545 y(4.3.1)93 b(The)30 +b(Set)g(Builtin)c Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)55 b +Ft(51)399 2654 y(4.3.2)93 b(The)30 b(Shopt)f(Builtin)13 +b Fm(:)j(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)43 b Ft(55)275 2764 y(4.4)92 b(Sp)s(ecial)30 +b(Builtins)21 b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)50 +b Ft(59)150 3006 y Fr(5)135 b(Shell)45 b(V)-11 b(ariables)19 +b Fn(:)h(:)g(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)64 +b Fr(61)275 3143 y Ft(5.1)92 b(Bourne)30 b(Shell)g(V)-8 +b(ariables)22 b Fm(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)51 b Ft(61)275 +3253 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)16 b Fm(:)h(:)f(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)46 b Ft(61)150 3495 y +Fr(6)135 b(Bash)44 b(F)-11 b(eatures)13 b Fn(:)20 b(:)g(:)f(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)58 b Fr(71)275 +3632 y Ft(6.1)92 b(In)m(v)m(oking)31 b(Bash)d Fm(:)16 +b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)58 b +Ft(71)275 3742 y(6.2)92 b(Bash)30 b(Startup)g(Files)20 +b Fm(:)c(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)49 b Ft(73)275 +3851 y(6.3)92 b(In)m(teractiv)m(e)32 b(Shells)11 b Fm(:)16 +b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)41 b Ft(75)399 +3961 y(6.3.1)93 b(What)31 b(is)f(an)h(In)m(teractiv)m(e)h(Shell?)17 +b Fm(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)47 b +Ft(75)399 4071 y(6.3.2)93 b(Is)30 b(this)g(Shell)g(In)m(teractiv)m(e?) +14 b Fm(:)k(:)e(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +44 b Ft(75)399 4180 y(6.3.3)93 b(In)m(teractiv)m(e)33 +b(Shell)d(Beha)m(vior)23 b Fm(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)52 b Ft(75)275 4290 y(6.4)92 b(Bash)30 +b(Conditional)h(Expressions)22 b Fm(:)14 b(:)i(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)51 b Ft(76)275 4399 y(6.5)92 +b(Shell)30 b(Arithmetic)c Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)55 b Ft(78)275 4509 y(6.6)92 b(Aliases)12 b Fm(:)k(:)g(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)42 +b Ft(79)275 4619 y(6.7)92 b(Arra)m(ys)17 b Fm(:)e(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)47 +b Ft(80)275 4728 y(6.8)92 b(The)29 b(Directory)j(Stac)m(k)e +Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)58 b Ft(81)399 4838 y(6.8.1)93 +b(Directory)32 b(Stac)m(k)f(Builtins)14 b Fm(:)i(:)g(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)44 b Ft(81)275 +4947 y(6.9)92 b(Con)m(trolling)31 b(the)g(Prompt)24 b +Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)54 b Ft(82)275 5057 y(6.10)92 b(The)30 +b(Restricted)h(Shell)23 b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)53 +b Ft(84)275 5166 y(6.11)92 b(Bash)31 b(POSIX)e(Mo)s(de)9 +b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)38 b Ft(84)p eop +end +%%Page: -3 5 +TeXDict begin -3 4 bop 3674 -116 a Ft(iii)150 83 y Fr(7)135 +b(Job)45 b(Con)l(trol)24 b Fn(:)c(:)g(:)f(:)h(:)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(:)h(:)f(:)g(:)69 b Fr(89)275 220 y +Ft(7.1)92 b(Job)30 b(Con)m(trol)h(Basics)17 b Fm(:)f(:)g(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)47 b Ft(89)275 330 y(7.2)92 b(Job)30 b(Con)m(trol)h +(Builtins)25 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)55 b Ft(90)275 +439 y(7.3)92 b(Job)30 b(Con)m(trol)h(V)-8 b(ariables)19 +b Fm(:)e(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)49 b Ft(92)150 682 y Fr(8)135 +b(Command)45 b(Line)g(Editing)27 b Fn(:)20 b(:)g(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)72 +b Fr(93)275 819 y Ft(8.1)92 b(In)m(tro)s(duction)30 b(to)h(Line)f +(Editing)d Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)56 b Ft(93)275 928 y(8.2)92 b(Readline)31 +b(In)m(teraction)8 b Fm(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)38 +b Ft(93)399 1038 y(8.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)d +Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)57 +b Ft(94)399 1147 y(8.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i +(Commands)27 b Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)57 +b Ft(94)399 1257 y(8.2.3)93 b(Readline)31 b(Killing)g(Commands)19 +b Fm(:)14 b(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)49 +b Ft(95)399 1367 y(8.2.4)93 b(Readline)31 b(Argumen)m(ts)11 +b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)41 b Ft(95)399 1476 y(8.2.5)93 b(Searc)m(hing)31 +b(for)f(Commands)f(in)h(the)h(History)9 b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 +b Ft(95)275 1586 y(8.3)92 b(Readline)31 b(Init)f(File)23 +b Fm(:)16 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)52 b Ft(96)399 +1695 y(8.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)15 +b Fm(:)g(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)44 +b Ft(96)399 1805 y(8.3.2)93 b(Conditional)31 b(Init)f(Constructs)25 +b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)56 +b Ft(102)399 1914 y(8.3.3)93 b(Sample)30 b(Init)g(File)12 +b Fm(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)42 b Ft(103)275 2024 y(8.4)92 +b(Bindable)30 b(Readline)h(Commands)11 b Fm(:)k(:)g(:)g(:)h(:)f(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)41 b Ft(106)399 2134 y(8.4.1)93 +b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)e Fm(:)16 b(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)58 b Ft(106)399 +2243 y(8.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f +(History)17 b Fm(:)g(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)47 b Ft(107)399 2353 y(8.4.3)93 b(Commands)29 b(F)-8 +b(or)31 b(Changing)f(T)-8 b(ext)21 b Fm(:)c(:)e(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +51 b Ft(108)399 2462 y(8.4.4)93 b(Killing)31 b(And)e(Y)-8 +b(anking)22 b Fm(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)52 b Ft(109)399 2572 y(8.4.5)93 b(Sp)s(ecifying)30 +b(Numeric)g(Argumen)m(ts)17 b Fm(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)47 +b Ft(110)399 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)12 b Fm(:)k(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)42 +b Ft(110)399 2791 y(8.4.7)93 b(Keyb)s(oard)29 b(Macros)21 +b Fm(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)51 b Ft(112)399 2901 y(8.4.8)93 b(Some)30 +b(Miscellaneous)j(Commands)24 b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)55 +b Ft(112)275 3010 y(8.5)92 b(Readline)31 b(vi)f(Mo)s(de)20 +b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)50 b Ft(114)275 +3120 y(8.6)92 b(Programmable)30 b(Completion)16 b Fm(:)g(:)f(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)46 +b Ft(115)275 3230 y(8.7)92 b(Programmable)30 b(Completion)h(Builtins)c +Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)56 b Ft(117)150 +3472 y Fr(9)135 b(Using)45 b(History)h(In)l(teractiv)l(ely)39 +b Fn(:)19 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h +(:)80 b Fr(121)275 3609 y Ft(9.1)92 b(Bash)30 b(History)h(F)-8 +b(acilities)21 b Fm(:)d(:)e(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)51 b Ft(121)275 3719 +y(9.2)92 b(Bash)30 b(History)h(Builtins)19 b Fm(:)d(:)g(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 +b Ft(121)275 3828 y(9.3)92 b(History)31 b(Expansion)21 +b Fm(:)15 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)52 b Ft(123)399 3938 +y(9.3.1)93 b(Ev)m(en)m(t)31 b(Designators)10 b Fm(:)18 +b(:)d(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)40 b Ft(123)399 4047 y(9.3.2)93 b(W)-8 b(ord)31 +b(Designators)17 b Fm(:)g(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)47 b Ft(124)399 4157 +y(9.3.3)93 b(Mo)s(di\014ers)26 b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)57 b Ft(125)150 4399 y Fr(10)135 b(Installing)46 +b(Bash)24 b Fn(:)c(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)68 +b Fr(127)275 4536 y Ft(10.1)92 b(Basic)32 b(Installation)20 +b Fm(:)d(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)50 b Ft(127)275 4646 +y(10.2)92 b(Compilers)30 b(and)g(Options)8 b Fm(:)15 +b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)38 b Ft(128)275 4755 y(10.3)92 b(Compiling)30 +b(F)-8 b(or)32 b(Multiple)f(Arc)m(hitectures)21 b Fm(:)c(:)e(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)52 b Ft(128)275 4865 y(10.4)92 b(Installation)32 b(Names)13 +b Fm(:)j(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)43 b Ft(128)275 4975 y(10.5)92 +b(Sp)s(ecifying)30 b(the)g(System)h(T)m(yp)s(e)12 b Fm(:)j(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)42 b Ft(128)275 +5084 y(10.6)92 b(Sharing)30 b(Defaults)15 b Fm(:)i(:)e(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)46 b Ft(129)275 5194 y(10.7)92 b(Op)s(eration)30 +b(Con)m(trols)24 b Fm(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)54 b Ft(129)275 +5303 y(10.8)92 b(Optional)31 b(F)-8 b(eatures)10 b Fm(:)17 +b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)40 b Ft(129)p eop end +%%Page: -4 6 +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)160 +b(Rep)t(orting)46 b(Bugs)35 b Fn(:)20 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)80 b Fr(135)150 353 y(App)t(endix)44 +b(B)166 b(Ma)7 b(jor)45 b(Di\013erences)i(F)-11 b(rom)44 +b(The)419 486 y(Bourne)g(Shell)35 b Fn(:)19 b(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)78 b Fr(137)275 623 y Ft(B.1)92 +b(Implemen)m(tation)31 b(Di\013erences)h(F)-8 b(rom)31 +b(The)e(SVR4.2)j(Shell)13 b Fm(:)i(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)43 +b Ft(141)150 865 y Fr(App)t(endix)h(C)165 b(GNU)45 b(F)-11 +b(ree)45 b(Do)t(cumen)l(tation)h(License)439 998 y Fn(:)19 +b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)64 b Fr(143)150 +1268 y(App)t(endix)44 b(D)159 b(Indexes)15 b Fn(:)20 +b(:)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(:)59 b Fr(151)275 1405 +y Ft(D.1)92 b(Index)29 b(of)i(Shell)f(Builtin)h(Commands)16 +b Fm(:)e(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)46 b Ft(151)275 +1514 y(D.2)92 b(Index)29 b(of)i(Shell)f(Reserv)m(ed)h(W)-8 +b(ords)12 b Fm(:)j(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)42 +b Ft(152)275 1624 y(D.3)92 b(P)m(arameter)31 b(and)f(V)-8 +b(ariable)32 b(Index)20 b Fm(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)50 b Ft(152)275 1733 y(D.4)92 b(F)-8 b(unction)31 +b(Index)16 b Fm(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)47 +b Ft(154)275 1843 y(D.5)92 b(Concept)30 b(Index)d Fm(:)15 +b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)57 b Ft(156)p +eop end +%%Page: 1 7 +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 602 y Fr(1.1)68 b(What)45 b(is)g(Bash?)150 762 y +Ft(Bash)38 b(is)g(the)g(shell,)i(or)d(command)h(language)h(in)m +(terpreter,)h(for)e(the)g Fl(gnu)f Ft(op)s(erating)h(system.)63 +b(The)150 871 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 981 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 1091 +y(Bell)g(Labs)e(Researc)m(h)h(v)m(ersion)g(of)f(Unix.)275 +1220 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 1330 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 +1439 y(posix)c Ft(Shell)g(and)g(T)-8 b(o)s(ols)35 b(p)s(ortion)f(of)g +(the)h Fl(ieee)f(posix)f Ft(sp)s(eci\014cation)j(\()p +Fl(ieee)e Ft(Standard)f(1003.1\).)56 b(It)150 1549 y(o\013ers)31 +b(functional)f(impro)m(v)m(emen)m(ts)i(o)m(v)m(er)g Fs(sh)d +Ft(for)i(b)s(oth)e(in)m(teractiv)m(e)k(and)d(programming)g(use.)275 +1679 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 1788 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 +1898 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 2008 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 +2231 y Fr(1.2)68 b(What)45 b(is)g(a)h(shell?)150 2390 +y Ft(A)m(t)32 b(its)f(base,)h(a)f(shell)g(is)h(simply)e(a)h(macro)h +(pro)s(cessor)f(that)g(executes)i(commands.)42 b(The)30 +b(term)h(macro)150 2500 y(pro)s(cessor)25 b(means)g(functionalit)m(y)i +(where)d(text)j(and)d(sym)m(b)s(ols)h(are)h(expanded)e(to)i(create)h +(larger)f(expres-)150 2609 y(sions.)275 2739 y(A)34 b(Unix)h(shell)g +(is)f(b)s(oth)g(a)h(command)g(in)m(terpreter)g(and)f(a)h(programming)f +(language.)55 b(As)35 b(a)g(com-)150 2848 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 +2958 y(programming)30 b(language)h(features)f(allo)m(w)h(these)g +(utilities)g(to)g(b)s(e)e(com)m(bined.)41 b(Files)31 +b(con)m(taining)g(com-)150 3068 y(mands)e(can)i(b)s(e)e(created,)j(and) +d(b)s(ecome)i(commands)f(themselv)m(es.)42 b(These)30 +b(new)f(commands)h(ha)m(v)m(e)i(the)150 3177 y(same)f(status)h(as)f +(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 +3287 y(establish)h(custom)f(en)m(vironmen)m(ts)h(to)g(automate)h(their) +f(common)f(tasks.)275 3417 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 +3526 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 3636 y(read)30 b(from)g(a)h(\014le.) +275 3765 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 3875 y(The)29 b(shell)g(w)m(aits)i(for)e(sync)m +(hronous)f(commands)h(to)h(complete)h(b)s(efore)e(accepting)i(more)e +(input;)g(asyn-)150 3985 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 4094 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 4204 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 +4313 y(commands')30 b(en)m(vironmen)m(ts.)275 4443 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 +4553 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 4662 +y Fs(continue)p Ft(,)43 b(and)f Fs(exec)p Ft(\))g(cannot)h(b)s(e)e +(implemen)m(ted)i(outside)g(of)f(the)h(shell)f(b)s(ecause)h(they)f +(directly)150 4772 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,)h(among)h(others,)150 +4881 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 4991 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.)275 +5121 y(While)39 b(executing)h(commands)e(is)g(essen)m(tial,)43 +b(most)c(of)g(the)g(p)s(o)m(w)m(er)f(\(and)g(complexit)m(y\))j(of)e +(shells)150 5230 y(is)34 b(due)f(to)i(their)f(em)m(b)s(edded)f +(programming)h(languages.)52 b(Lik)m(e)35 b(an)m(y)f(high-lev)m(el)i +(language,)h(the)d(shell)150 5340 y(pro)m(vides)c(v)-5 +b(ariables,)32 b(\015o)m(w)e(con)m(trol)i(constructs,)f(quoting,)g(and) +f(functions.)p eop end +%%Page: 2 8 +TeXDict begin 2 7 bop 150 -116 a Ft(2)2617 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(Shells)21 b(o\013er)i(features)f +(geared)h(sp)s(eci\014cally)g(for)f(in)m(teractiv)m(e)j(use)d(rather)g +(than)g(to)h(augmen)m(t)g(the)f(pro-)150 408 y(gramming)32 +b(language.)48 b(These)32 b(in)m(teractiv)m(e)j(features)d(include)g +(job)g(con)m(trol,)j(command)c(line)i(editing,)150 518 +y(command)d(history)g(and)g(aliases.)42 b(Eac)m(h)31 +b(of)g(these)g(features)f(is)h(describ)s(ed)e(in)h(this)g(man)m(ual.)p +eop end +%%Page: 3 9 +TeXDict begin 3 8 bop 150 -116 a Ft(Chapter)30 b(2:)41 +b(De\014nitions)2662 b(3)150 299 y Fo(2)80 b(De\014nitions)150 +552 y Ft(These)30 b(de\014nitions)g(are)h(used)e(throughout)h(the)h +(remainder)f(of)g(this)h(man)m(ual.)150 720 y Fs(POSIX)240 +b Ft(A)27 b(family)g(of)g(op)s(en)f(system)g(standards)g(based)g(on)h +(Unix.)39 b(Bash)27 b(is)g(primarily)f(concerned)630 +830 y(with)k(the)h(Shell)f(and)g(Utilities)i(p)s(ortion)e(of)h(the)f +Fl(posix)g Ft(1003.1)j(standard.)150 995 y Fs(blank)240 +b Ft(A)30 b(space)h(or)g(tab)f(c)m(haracter.)150 1161 +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 +1271 y(an)30 b(executable)i(program)e(somewhere)h(in)f(the)g(\014le)h +(system.)150 1436 y Fs(control)d(operator)630 1546 y +Ft(A)20 b Fs(token)f Ft(that)i(p)s(erforms)e(a)i(con)m(trol)g +(function.)37 b(It)21 b(is)f(a)h Fs(newline)d Ft(or)j(one)f(of)h(the)f +(follo)m(wing:)630 1655 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(',)f(`)p +Fs(\()p Ft(',)h(or)g(`)p Fs(\))p Ft('.)150 1821 y Fs(exit)e(status)630 +1931 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 2040 y(bits,)h(so)f(the)h(maxim)m(um)f(v)-5 +b(alue)31 b(is)f(255.)150 2206 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 2315 +y(when)e(executing)h(a)g(command,)h(the)f(resulting)f(\014elds)g(are)h +(used)f(as)h(the)g(command)f(name)630 2425 y(and)30 b(argumen)m(ts.)150 +2591 y 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 2756 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 +2866 y(that)h(are)g(all)g(in)f(the)h(same)f(pro)s(cess)g(group.)150 +3031 y Fs(job)f(control)630 3141 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 3251 y(execution)32 b(of)e(pro)s(cesses.)150 +3416 y Fs(metacharacter)630 3526 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 3635 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 +3801 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 3910 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 4020 y(Also)31 +b(referred)f(to)h(as)f(an)h Fs(identifier)p Ft(.)150 +4186 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 4295 y(tions],)f(page)f(26,)i +(for)d(a)g(list)h(of)f(redirection)h(op)s(erators.)58 +b(Op)s(erators)35 b(con)m(tain)j(at)f(least)630 4405 +y(one)31 b(unquoted)e Fs(metacharacter)p Ft(.)150 4570 +y Fs(process)f(group)630 4680 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 4846 y Fs(process)e(group)h(ID)630 4955 +y Ft(A)h(unique)g(iden)m(ti\014er)h(that)f(represen)m(ts)h(a)g +Fs(process)d(group)h Ft(during)g(its)i(lifetime.)150 +5121 y Fs(reserved)d(word)630 5230 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 +5340 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(.)p eop end +%%Page: 4 10 +TeXDict begin 4 9 bop 150 -116 a Ft(4)2617 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(return)e(status)630 +408 y Ft(A)h(synon)m(ym)g(for)g Fs(exit)g(status)p Ft(.)150 +568 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 677 y(o)s(ccurring)30 b(in)g(the)h(system.) +150 837 y Fs(special)d(builtin)630 946 y Ft(A)j(shell)f(builtin)g +(command)h(that)g(has)f(b)s(een)g(classi\014ed)h(as)g(sp)s(ecial)g(b)m +(y)f(the)h Fl(posix)f Ft(stan-)630 1056 y(dard.)150 1215 +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 1325 y Fs(word)29 b Ft(or)i(an)f +Fs(operator)p Ft(.)150 1484 y Fs(word)288 b Ft(A)28 b(sequence)g(of)g +(c)m(haracters)h(treated)g(as)f(a)g(unit)f(b)m(y)h(the)g(shell.)40 +b(W)-8 b(ords)28 b(ma)m(y)g(not)g(include)630 1594 y(unquoted)i +Fs(metacharacters)p Ft(.)p eop end +%%Page: 5 11 +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)150 603 +y Ft(Bash)21 b(is)g(an)f(acron)m(ym)i(for)e(`)p Fs(Bourne-Again)27 +b(SHell)p Ft('.)37 b(The)20 b(Bourne)g(shell)h(is)g(the)g(traditional)h +(Unix)f(shell)150 712 y(originally)h(written)f(b)m(y)f(Stephen)g +(Bourne.)38 b(All)21 b(of)g(the)g(Bourne)f(shell)h(builtin)f(commands)g +(are)i(a)m(v)-5 b(ailable)150 822 y(in)26 b(Bash,)h(The)f(rules)f(for)h +(ev)-5 b(aluation)28 b(and)d(quoting)h(are)h(tak)m(en)g(from)f(the)g +Fl(posix)f Ft(sp)s(eci\014cation)i(for)f(the)150 931 +y(`standard')k(Unix)g(shell.)275 1089 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 1199 y(tures,)k(shell)e +(functions,)h(shell)g Fk(p)-5 b(ar)g(ameters)p Ft(,)41 +b(shell)36 b(expansions,)i Fk(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 1308 +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 +1576 y Fr(3.1)68 b(Shell)45 b(Syn)l(tax)150 1735 y Ft(When)40 +b(the)h(shell)g(reads)f(input,)i(it)f(pro)s(ceeds)f(through)g(a)h +(sequence)g(of)g(op)s(erations.)71 b(If)40 b(the)h(input)150 +1845 y(indicates)31 b(the)f(b)s(eginning)f(of)h(a)g(commen)m(t,)h(the)f +(shell)g(ignores)g(the)g(commen)m(t)h(sym)m(b)s(ol)f(\(`)p +Fs(#)p Ft('\),)h(and)e(the)150 1954 y(rest)i(of)f(that)h(line.)275 +2112 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 +2222 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 2331 y(and)30 b(c)m(haracters.)275 +2489 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 +2598 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 +2708 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 +2818 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 +3040 y Fj(3.1.1)63 b(Shell)41 b(Op)s(eration)150 3187 +y Ft(The)c(follo)m(wing)h(is)f(a)h(brief)e(description)i(of)f(the)g +(shell's)h(op)s(eration)f(when)f(it)i(reads)f(and)f(executes)j(a)150 +3297 y(command.)h(Basically)-8 b(,)34 b(the)c(shell)h(do)s(es)f(the)h +(follo)m(wing:)199 3454 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(33\),)k +(from)41 b(a)i(string)330 3564 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 3673 y(page)j(71\),)h(or) +e(from)g(the)h(user's)f(terminal.)199 3820 y(2.)61 b(Breaks)43 +b(the)g(input)f(in)m(to)h(w)m(ords)f(and)g(op)s(erators,)k(ob)s(eying)d +(the)g(quoting)g(rules)f(describ)s(ed)f(in)330 3929 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 +4039 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(79\).)199 4185 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 +4294 y(mands],)30 b(page)h(7\).)199 4441 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(17\),)330 4550 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 4660 y(pansion],)30 +b(page)h(24\))h(and)e(commands)g(and)g(argumen)m(ts.)199 +4806 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(26\))g(and)e(re-)330 +4915 y(mo)m(v)m(es)c(the)e(redirection)h(op)s(erators)g(and)f(their)g +(op)s(erands)f(from)h(the)h(argumen)m(t)f(list.)199 5062 +y(6.)61 b(Executes)31 b(the)g(command)f(\(see)h(Section)g(3.7)h +([Executing)f(Commands],)f(page)h(29\).)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(32\).)p +eop end +%%Page: 6 12 +TeXDict begin 6 11 bop 150 -116 a Ft(6)2617 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fj(3.1.2)63 b(Quoting)150 +446 y Ft(Quoting)32 b(is)h(used)e(to)i(remo)m(v)m(e)h(the)e(sp)s(ecial) +h(meaning)f(of)h(certain)g(c)m(haracters)g(or)f(w)m(ords)g(to)h(the)f +(shell.)150 555 y(Quoting)c(can)f(b)s(e)g(used)f(to)j(disable)e(sp)s +(ecial)h(treatmen)m(t)h(for)e(sp)s(ecial)h(c)m(haracters,)i(to)e(prev)m +(en)m(t)g(reserv)m(ed)150 665 y(w)m(ords)i(from)g(b)s(eing)g +(recognized)h(as)g(suc)m(h,)f(and)g(to)h(prev)m(en)m(t)g(parameter)g +(expansion.)275 793 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 902 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 1012 y(expansion)i(facilities)j +(are)e(b)s(eing)f(used)g(\(see)h(Section)h(9.3)f([History)h(In)m +(teraction],)j(page)c(123\),)47 b(the)150 1122 y Fq(history)30 +b(expansion)h Ft(c)m(haracter,)h(usually)f(`)p Fs(!)p +Ft(',)g(m)m(ust)f(b)s(e)g(quoted)h(to)g(prev)m(en)m(t)g(history)g +(expansion.)41 b(See)150 1231 y(Section)22 b(9.1)g([Bash)f(History)h(F) +-8 b(acilities],)26 b(page)c(121,)j(for)20 b(more)h(details)h +(concerning)g(history)f(expansion.)275 1359 y(There)36 +b(are)i(three)f(quoting)g(mec)m(hanisms:)55 b(the)37 +b Fq(escap)s(e)h(c)m(haracter)7 b Ft(,)40 b(single)d(quotes,)j(and)c +(double)150 1469 y(quotes.)150 1655 y Fj(3.1.2.1)63 b(Escap)s(e)41 +b(Character)150 1802 y Ft(A)36 b(non-quoted)f(bac)m(kslash)h(`)p +Fs(\\)p Ft(')g(is)f(the)h(Bash)g(escap)s(e)f(c)m(haracter.)58 +b(It)36 b(preserv)m(es)f(the)h(literal)h(v)-5 b(alue)36 +b(of)150 1911 y(the)27 b(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 2021 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 +2131 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 2317 y Fj(3.1.2.2)63 +b(Single)42 b(Quotes)150 2464 y Ft(Enclosing)24 b(c)m(haracters)h(in)e +(single)h(quotes)g(\(`)p Fs(')p Ft('\))g(preserv)m(es)g(the)f(literal)i +(v)-5 b(alue)24 b(of)g(eac)m(h)g(c)m(haracter)h(within)150 +2573 y(the)31 b(quotes.)42 b(A)31 b(single)h(quote)f(ma)m(y)g(not)g(o)s +(ccur)g(b)s(et)m(w)m(een)g(single)h(quotes,)f(ev)m(en)h(when)d +(preceded)i(b)m(y)g(a)150 2683 y(bac)m(kslash.)150 2869 +y Fj(3.1.2.3)63 b(Double)42 b(Quotes)150 3016 y Ft(Enclosing)24 +b(c)m(haracters)h(in)f(double)f(quotes)h(\(`)p Fs(")p +Ft('\))g(preserv)m(es)g(the)g(literal)h(v)-5 b(alue)24 +b(of)g(all)g(c)m(haracters)h(within)150 3125 y(the)34 +b(quotes,)h(with)f(the)g(exception)h(of)f(`)p Fs($)p +Ft(',)h(`)p Fs(`)p Ft(',)g(`)p Fs(\\)p Ft(',)g(and,)f(when)f(history)g +(expansion)h(is)g(enabled,)h(`)p Fs(!)p Ft('.)150 3235 +y(The)25 b(c)m(haracters)h(`)p Fs($)p Ft(')g(and)f(`)p +Fs(`)p Ft(')g(retain)h(their)f(sp)s(ecial)h(meaning)f(within)g(double)g +(quotes)h(\(see)g(Section)g(3.5)150 3345 y([Shell)j(Expansions],)g +(page)h(17\).)41 b(The)28 b(bac)m(kslash)i(retains)f(its)h(sp)s(ecial)f +(meaning)g(only)g(when)f(follo)m(w)m(ed)150 3454 y(b)m(y)41 +b(one)f(of)h(the)g(follo)m(wing)h(c)m(haracters:)63 b(`)p +Fs($)p Ft(',)43 b(`)p Fs(`)p Ft(',)h(`)p Fs(")p Ft(',)g(`)p +Fs(\\)p Ft(',)f(or)e Fs(newline)p Ft(.)69 b(Within)41 +b(double)f(quotes,)150 3564 y(bac)m(kslashes)25 b(that)h(are)f(follo)m +(w)m(ed)h(b)m(y)e(one)h(of)g(these)g(c)m(haracters)h(are)f(remo)m(v)m +(ed.)40 b(Bac)m(kslashes)26 b(preceding)150 3673 y(c)m(haracters)35 +b(without)e(a)h(sp)s(ecial)f(meaning)h(are)f(left)h(unmo)s(di\014ed.)47 +b(A)34 b(double)f(quote)g(ma)m(y)h(b)s(e)f(quoted)150 +3783 y(within)h(double)h(quotes)g(b)m(y)g(preceding)g(it)g(with)g(a)g +(bac)m(kslash.)55 b(If)35 b(enabled,)h(history)f(expansion)g(will)150 +3892 y(b)s(e)f(p)s(erformed)g(unless)g(an)h(`)p Fs(!)p +Ft(')g(app)s(earing)f(in)h(double)f(quotes)i(is)f(escap)s(ed)g(using)f +(a)h(bac)m(kslash.)55 b(The)150 4002 y(bac)m(kslash)31 +b(preceding)f(the)h(`)p Fs(!)p Ft(')f(is)h(not)g(remo)m(v)m(ed.)275 +4130 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 4240 y(Section)31 +b(3.5.3)h([Shell)f(P)m(arameter)h(Expansion],)e(page)h(19\).)150 +4426 y Fj(3.1.2.4)63 b(ANSI-C)40 b(Quoting)150 4573 y +Ft(W)-8 b(ords)41 b(of)h(the)f(form)g Fs($')p Fi(string)11 +b Fs(')38 b Ft(are)k(treated)g(sp)s(ecially)-8 b(.)75 +b(The)41 b(w)m(ord)g(expands)f(to)i Fq(string)8 b Ft(,)44 +b(with)150 4682 y(bac)m(kslash-escap)s(ed)g(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 4792 y(escap)s(e)31 b(sequences,)g(if)f(presen)m(t,) +h(are)g(deco)s(ded)f(as)g(follo)m(ws:)150 4938 y Fs(\\a)384 +b Ft(alert)31 b(\(b)s(ell\))150 5084 y Fs(\\b)384 b Ft(bac)m(kspace)150 +5230 y Fs(\\e)150 5340 y(\\E)g Ft(an)30 b(escap)s(e)h(c)m(haracter)h +(\(not)f(ANSI)f(C\))p eop end +%%Page: 7 13 +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(\\f)384 b Ft(form)30 b(feed)150 475 y Fs(\\n)384 +b Ft(newline)150 652 y Fs(\\r)g Ft(carriage)32 b(return)150 +828 y Fs(\\t)384 b Ft(horizon)m(tal)32 b(tab)150 1005 +y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)150 1181 y Fs(\\\\)384 +b Ft(bac)m(kslash)150 1358 y Fs(\\')g Ft(single)31 b(quote)150 +1534 y Fs(\\")384 b Ft(double)30 b(quote)150 1711 y Fs(\\)p +Fi(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 1887 y Fs(\\x)p +Fi(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 1997 y(hex)30 +b(digits\))150 2173 y Fs(\\c)p Fi(x)336 b Ft(a)31 b(con)m(trol-)p +Fq(x)38 b Ft(c)m(haracter)150 2358 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 2575 y Fj(3.1.2.5)63 b(Lo)s(cale-Sp)s(eci\014c)41 +b(T)-10 b(ranslation)150 2722 y Ft(A)28 b(double-quoted)g(string)f +(preceded)h(b)m(y)f(a)h(dollar)h(sign)e(\(`)p Fs($)p +Ft('\))i(will)f(cause)g(the)g(string)g(to)g(b)s(e)f(translated)150 +2831 y(according)f(to)f(the)g(curren)m(t)g(lo)s(cale.)41 +b(If)24 b(the)h(curren)m(t)g(lo)s(cale)h(is)f Fs(C)g +Ft(or)g Fs(POSIX)p Ft(,)f(the)h(dollar)h(sign)f(is)g(ignored.)150 +2941 y(If)30 b(the)g(string)h(is)f(translated)h(and)f(replaced,)h(the)g +(replacemen)m(t)h(is)e(double-quoted.)275 3093 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 +3202 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 3312 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 +3421 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 3531 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 3531 28 4 v 34 w(MESSA)m(GES/)p +Fs(TEXTDOMAIN)p Ft(.mo.)150 3747 y Fj(3.1.3)63 b(Commen)m(ts)150 +3894 y Ft(In)21 b(a)i(non-in)m(teractiv)m(e)h(shell,)g(or)e(an)g(in)m +(teractiv)m(e)j(shell)d(in)g(whic)m(h)g(the)g Fs(interactive_comments) +16 b Ft(option)150 4004 y(to)40 b(the)f Fs(shopt)e Ft(builtin)h(is)h +(enabled)g(\(see)h(Section)g(4.3.2)g([The)f(Shopt)f(Builtin],)k(page)e +(55\),)i(a)d(w)m(ord)150 4113 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 +4223 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 4333 y(commen)m(ts.)56 b(The)34 b Fs +(interactive_comments)c 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 4442 y(Section)30 +b(6.3)f([In)m(teractiv)m(e)j(Shells],)d(page)h(75,)g(for)e(a)i +(description)e(of)h(what)g(mak)m(es)h(a)f(shell)g(in)m(teractiv)m(e.) +150 4700 y Fr(3.2)68 b(Shell)45 b(Commands)150 4860 y +Ft(A)d(simple)g(shell)g(command)f(suc)m(h)h(as)g Fs(echo)29 +b(a)h(b)g(c)41 b Ft(consists)i(of)f(the)f(command)h(itself)h(follo)m(w) +m(ed)g(b)m(y)150 4969 y(argumen)m(ts,)31 b(separated)g(b)m(y)f(spaces.) +275 5121 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 5230 +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 5340 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.)p eop end +%%Page: 8 14 +TeXDict begin 8 13 bop 150 -116 a Ft(8)2617 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fj(3.2.1)63 b(Simple)41 +b(Commands)150 446 y Ft(A)29 b(simple)f(command)g(is)h(the)g(kind)e(of) +i(command)f(encoun)m(tered)h(most)g(often.)40 b(It's)29 +b(just)f(a)h(sequence)g(of)150 555 y(w)m(ords)22 b(separated)i(b)m(y)e +Fs(blank)p Ft(s,)i(terminated)f(b)m(y)g(one)g(of)g(the)g(shell's)g(con) +m(trol)h(op)s(erators)f(\(see)h(Chapter)f(2)150 665 y([De\014nitions],) +37 b(page)e(3\).)54 b(The)35 b(\014rst)e(w)m(ord)i(generally)g(sp)s +(eci\014es)g(a)g(command)f(to)h(b)s(e)f(executed,)j(with)150 +775 y(the)31 b(rest)f(of)h(the)f(w)m(ords)g(b)s(eing)g(that)h +(command's)f(argumen)m(ts.)275 912 y(The)h(return)h(status)g(\(see)i +(Section)f(3.7.5)h([Exit)f(Status],)h(page)f(32\))g(of)g(a)g(simple)f +(command)g(is)h(its)150 1022 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 1131 y(w)m(as)31 +b(terminated)g(b)m(y)f(signal)h Fq(n)p Ft(.)150 1333 +y Fj(3.2.2)63 b(Pip)s(elines)150 1480 y Ft(A)35 b Fs(pipeline)e +Ft(is)j(a)f(sequence)h(of)f(simple)g(commands)g(separated)h(b)m(y)f +(one)g(of)h(the)f(con)m(trol)i(op)s(erators)150 1590 +y(`)p Fs(|)p Ft(')31 b(or)f(`)p Fs(|&)p Ft('.)275 1727 +y(The)f(format)i(for)f(a)h(pip)s(eline)f(is)390 1865 +y Fs([time)46 b([-p]])h([!])g Fi(command1)56 b Fs([)47 +b([|)g(or)h(|&])e Fi(command2)56 b Fs(...])150 2002 y +Ft(The)25 b(output)f(of)i(eac)m(h)g(command)f(in)f(the)i(pip)s(eline)e +(is)i(connected)g(via)f(a)h(pip)s(e)e(to)i(the)f(input)f(of)h(the)h +(next)150 2112 y(command.)40 b(That)29 b(is,)h(eac)m(h)h(command)e +(reads)g(the)h(previous)f(command's)g(output.)40 b(This)29 +b(connection)150 2221 y(is)h(p)s(erformed)f(b)s(efore)h(an)m(y)h +(redirections)g(sp)s(eci\014ed)f(b)m(y)g(the)g(command.)275 +2359 y(If)j(`)p Fs(|&)p Ft(')h(is)h(used,)f(the)h(standard)e(error)h +(of)g Fq(command1)42 b Ft(is)34 b(connected)h(to)g Fq(command2)7 +b Ft('s)35 b(standard)150 2468 y(input)25 b(through)g(the)h(pip)s(e;)h +(it)f(is)g(shorthand)f(for)g Fs(2>&1)k(|)p Ft(.)39 b(This)25 +b(implicit)i(redirection)g(of)f(the)g(standard)150 2578 +y(error)k(is)g(p)s(erformed)f(after)i(an)m(y)g(redirections)g(sp)s +(eci\014ed)e(b)m(y)i(the)f(command.)275 2715 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 +2825 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 2935 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 3044 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)37 b(ma)m(y)g(b)s(e)e(set)h(to)h(a)f(format)g(string)g(that) +150 3154 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 3263 y(page)29 b(61,)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 +3373 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 3483 y(cannot)31 b(time)g(these)g(easily)-8 +b(.)275 3620 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(8\),)i(the)f +(shell)150 3730 y(w)m(aits)31 b(for)f(all)i(commands)e(in)g(the)g(pip)s +(eline)g(to)h(complete.)275 3867 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 3977 y(Execution)36 b(En)m(vironmen)m +(t],)i(page)e(30\).)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 4086 y(last)27 +b(command)f(in)f(the)i(pip)s(eline,)f(unless)g(the)g +Fs(pipefail)e Ft(option)i(is)g(enabled)g(\(see)h(Section)g(4.3.1)h +([The)150 4196 y(Set)34 b(Builtin],)j(page)e(51\).)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 +4305 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 +4415 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 4525 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 4634 y(pip)s(eline)30 +b(to)h(terminate)g(b)s(efore)f(returning)g(a)h(v)-5 b(alue.)150 +4836 y Fj(3.2.3)63 b(Lists)41 b(of)h(Commands)150 4983 +y Ft(A)37 b Fs(list)e Ft(is)i(a)g(sequence)g(of)g(one)g(or)f(more)h +(pip)s(elines)f(separated)h(b)m(y)g(one)g(of)f(the)h(op)s(erators)g(`)p +Fs(;)p Ft(',)i(`)p Fs(&)p Ft(',)150 5093 y(`)p Fs(&&)p +Ft(',)31 b(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 5230 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 5340 y(ha)m(v)m(e)32 b(equal)e(precedence.) +p eop end +%%Page: 9 15 +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)275 299 +y(A)29 b(sequence)h(of)g(one)g(or)g(more)g(newlines)f(ma)m(y)h(app)s +(ear)f(in)h(a)g Fs(list)e Ft(to)j(delimit)f(commands,)g(equiv-)150 +408 y(alen)m(t)i(to)f(a)g(semicolon.)275 551 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 +661 y(async)m(hronously)g(in)g(a)h(subshell.)39 b(This)28 +b(is)g(kno)m(wn)g(as)h(executing)h(the)e(command)h(in)f(the)g +Fq(bac)m(kground)t Ft(.)150 770 y(The)g(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 880 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 +(89\),)j(the)d(standard)e(input)g(for)150 990 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 1099 y +Fs(/dev/null)p Ft(.)275 1242 y(Commands)19 b(separated)j(b)m(y)f(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 1352 +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 +1494 y Fl(and)g Ft(and)h Fl(or)g Ft(lists)h(are)g(sequences)f(of)h(one) +g(or)f(more)h(pip)s(elines)e(separated)i(b)m(y)g(the)f(con)m(trol)i(op) +s(er-)150 1604 y(ators)e(`)p Fs(&&)p Ft(')f(and)g(`)p +Fs(||)p Ft(',)h(resp)s(ectiv)m(ely)-8 b(.)42 b Fl(and)30 +b Ft(and)f Fl(or)h Ft(lists)h(are)g(executed)g(with)f(left)h(asso)s +(ciativit)m(y)-8 b(.)275 1747 y(An)30 b Fl(and)f Ft(list)i(has)f(the)h +(form)390 1890 y Fi(command1)56 b Fs(&&)47 b Fi(command2)150 +2032 y 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 +2175 y(An)f Fl(or)f Ft(list)i(has)f(the)h(form)390 2318 +y Fi(command1)56 b Fs(||)47 b Fi(command2)150 2461 y +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 +2604 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 2713 y(in)d(the)h(list.)150 2921 +y Fj(3.2.4)63 b(Comp)s(ound)42 b(Commands)150 3068 y +Ft(Comp)s(ound)32 b(commands)j(are)g(the)g(shell)g(programming)f +(constructs.)54 b(Eac)m(h)35 b(construct)g(b)s(egins)f(with)150 +3177 y(a)k(reserv)m(ed)f(w)m(ord)h(or)f(con)m(trol)i(op)s(erator)f(and) +f(is)g(terminated)h(b)m(y)f(a)h(corresp)s(onding)f(reserv)m(ed)g(w)m +(ord)150 3287 y(or)44 b(op)s(erator.)81 b(An)m(y)44 b(redirections)g +(\(see)h(Section)g(3.6)g([Redirections],)j(page)d(26\))g(asso)s(ciated) +g(with)150 3396 y(a)g(comp)s(ound)e(command)i(apply)f(to)h(all)h +(commands)e(within)g(that)h(comp)s(ound)e(command)i(unless)150 +3506 y(explicitly)32 b(o)m(v)m(erridden.)275 3649 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 3758 y(commands)30 +b(and)g(execute)i(them)e(as)g(a)h(unit.)150 3966 y Fj(3.2.4.1)63 +b(Lo)s(oping)43 b(Constructs)150 4113 y Ft(Bash)31 b(supp)s(orts)d(the) +j(follo)m(wing)g(lo)s(oping)g(constructs.)275 4256 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 4365 y(replaced)c(with)f(one)h(or)f(more)g(newlines.)150 +4537 y Fs(until)240 b Ft(The)30 b(syn)m(tax)h(of)f(the)h +Fs(until)e Ft(command)h(is:)870 4676 y Fs(until)46 b +Fi(test-commands)11 b Fs(;)44 b(do)j Fi(consequent-commands)11 +b Fs(;)42 b(done)630 4814 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 4924 y(whic)m(h)c(is)h(not)g(zero.)67 +b(The)38 b(return)g(status)h(is)f(the)h(exit)h(status)f(of)g(the)g +(last)g(command)630 5034 y(executed)31 b(in)f Fq(consequen)m +(t-commands)t Ft(,)h(or)g(zero)g(if)f(none)h(w)m(as)f(executed.)150 +5201 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 5340 y Fs(while)46 b +Fi(test-commands)11 b Fs(;)44 b(do)j Fi(consequent-commands)11 +b Fs(;)42 b(done)p eop end +%%Page: 10 16 +TeXDict begin 10 15 bop 150 -116 a Ft(10)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(Execute)42 b 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 408 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 518 y Fq(consequen)m(t-commands)t +Ft(,)c(or)g(zero)g(if)f(none)g(w)m(as)h(executed.)150 +668 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 797 y Fs(for)47 b Fi(name)57 +b Fs([)48 b([in)e([)p Fi(words)57 b Fs(...)o(])48 b(])f(;)h(])f(do)g +Fi(commands)11 b Fs(;)45 b(done)630 927 y Ft(Expand)31 +b Fq(w)m(ords)t Ft(,)i(and)e(execute)j Fq(commands)i +Ft(once)d(for)f(eac)m(h)i(mem)m(b)s(er)e(in)g(the)g(resultan)m(t)630 +1037 y(list,)d(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 Fi(words)11 +b Ft(')27 b(is)h(not)g(presen)m(t,)h(the)630 1146 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)f(parameter)g(that)630 1256 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 1365 y(page)c(16\).)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 1475 y(If)37 b(there)h(are)g(no) +g(items)g(in)g(the)g(expansion)g(of)f Fq(w)m(ords)t Ft(,)j(no)d +(commands)h(are)g(executed,)630 1585 y(and)30 b(the)g(return)g(status)g +(is)h(zero.)630 1714 y(An)f(alternate)i(form)e(of)h(the)f +Fs(for)g Ft(command)g(is)g(also)h(supp)s(orted:)870 1844 +y Fs(for)47 b(\(\()g Fi(expr1)57 b Fs(;)47 b Fi(expr2)57 +b Fs(;)48 b Fi(expr3)57 b Fs(\)\))47 b(;)g(do)g Fi(commands)57 +b Fs(;)47 b(done)630 1974 y 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 2083 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 +(78\).)77 b(The)42 b(arithmetic)630 2193 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 2302 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 +2412 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 2522 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 +2631 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 +2781 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(35\))g(ma)m(y) +150 2890 y(b)s(e)i(used)f(to)i(con)m(trol)h(lo)s(op)f(execution.)150 +3080 y Fj(3.2.4.2)63 b(Conditional)42 b(Constructs)150 +3247 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 3377 y Fs(if)47 b Fi(test-commands)11 +b Fs(;)44 b(then)965 3486 y Fi(consequent-commands)11 +b Fs(;)870 3596 y([elif)46 b Fi(more-test-commands)11 +b Fs(;)42 b(then)965 3705 y Fi(more-consequents)11 b +Fs(;])870 3815 y([else)46 b Fi(alternate-consequents)11 +b Fs(;])870 3925 y(fi)630 4054 y Ft(The)53 b Fq(test-commands)58 +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 4164 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 4273 y(status,)45 b(eac)m(h)e +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 4383 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)630 4493 y(`)p Fs(else)29 b Fi +(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 4602 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 4712 +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 4821 y(or)30 b(zero)i(if)e(no)g +(condition)h(tested)g(true.)150 4971 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 +5101 y Fs(case)47 b Fi(word)57 b Fs(in)47 b([)g([\(])g +Fi(pattern)57 b Fs([|)47 b Fi(pattern)11 b Fs(]...)l(\))48 +b Fi(command-list)55 b Fs(;;]...)46 b(esac)630 5230 y(case)20 +b Ft(will)i(selectiv)m(ely)j(execute)e(the)e Fq(command-list)k +Ft(corresp)s(onding)20 b(to)i(the)g(\014rst)f Fq(pattern)630 +5340 y Ft(that)42 b(matc)m(hes)g Fq(w)m(ord)t Ft(.)71 +b(If)41 b(the)g(shell)g(option)g Fs(nocasematch)d Ft(\(see)k(the)f +(description)g(of)p eop end +%%Page: 11 17 +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 Fs(shopt)34 b Ft(in)h(Section)h(4.3.2)h([The)e(Shopt)f(Builtin],)k +(page)e(55\))g(is)g(enabled,)g(the)g(matc)m(h)g(is)630 +408 y(p)s(erformed)29 b(without)i(regard)g(to)g(the)g(case)h(of)f +(alphab)s(etic)g(c)m(haracters.)44 b(The)30 b(`)p Fs(|)p +Ft(')h(is)g(used)630 518 y(to)e(separate)g(m)m(ultiple)g(patterns,)g +(and)e(the)i(`)p Fs(\))p Ft(')f(op)s(erator)g(terminates)h(a)g(pattern) +f(list.)41 b(A)630 628 y(list)31 b(of)g(patterns)f(and)g(an)g(asso)s +(ciated)i(command-list)f(is)f(kno)m(wn)g(as)h(a)g Fq(clause)5 +b Ft(.)630 754 y(Eac)m(h)42 b(clause)g(m)m(ust)f(b)s(e)g(terminated)h +(with)e(`)p Fs(;;)p Ft(',)45 b(`)p Fs(;&)p Ft(',)f(or)d(`)p +Fs(;;&)p Ft('.)73 b(The)41 b Fq(w)m(ord)j Ft(under-)630 +864 y(go)s(es)35 b(tilde)f(expansion,)h(parameter)g(expansion,)g +(command)f(substitution,)h(arithmetic)630 973 y(expansion,)47 +b(and)d(quote)g(remo)m(v)-5 b(al)45 b(b)s(efore)f(matc)m(hing)h(is)f +(attempted.)82 b(Eac)m(h)45 b Fq(pattern)630 1083 y Ft(undergo)s(es)38 +b(tilde)h(expansion,)i(parameter)e(expansion,)i(command)d +(substitution,)j(and)630 1192 y(arithmetic)32 b(expansion.)630 +1319 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 1428 y(`)p Fs(;&)p Ft(',)c(or)e(`)p +Fs(;;&)p Ft('.)39 b(The)25 b(\014rst)g(pattern)h(that)g(matc)m(hes)h +(determines)e(the)h(command-list)g(that)630 1538 y(is)k(executed.)630 +1665 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 1774 y(in)m(teresting)d(feature)f(of)f(an)g(animal:)870 +1901 y Fs(echo)47 b(-n)g("Enter)f(the)h(name)f(of)i(an)f(animal:)f(") +870 2010 y(read)h(ANIMAL)870 2120 y(echo)g(-n)g("The)f($ANIMAL)g(has)h +(")870 2229 y(case)g($ANIMAL)e(in)965 2339 y(horse)i(|)g(dog)g(|)h +(cat\))e(echo)h(-n)g("four";;)965 2449 y(man)g(|)h(kangaroo)d(\))j +(echo)e(-n)i("two";;)965 2558 y(*\))g(echo)e(-n)h("an)g(unknown)f +(number)g(of";;)870 2668 y(esac)870 2777 y(echo)h(")g(legs.")630 +2921 y Ft(If)25 b(the)h(`)p Fs(;;)p Ft(')g(op)s(erator)g(is)g(used,)g +(no)g(subsequen)m(t)f(matc)m(hes)i(are)f(attempted)h(after)g(the)f +(\014rst)630 3030 y(pattern)g(matc)m(h.)40 b(Using)26 +b(`)p Fs(;&)p Ft(')f(in)h(place)g(of)g(`)p Fs(;;)p Ft(')g(causes)g +(execution)h(to)f(con)m(tin)m(ue)h(with)f(the)630 3140 +y Fq(command-list)39 b Ft(asso)s(ciated)f(with)e(the)g(next)g(clause,)j +(if)d(an)m(y)-8 b(.)59 b(Using)37 b(`)p Fs(;;&)p Ft(')f(in)g(place)h +(of)630 3249 y(`)p Fs(;;)p Ft(')30 b(causes)g(the)g(shell)g(to)g(test)h +(the)f(patterns)g(in)f(the)h(next)g(clause,)h(if)e(an)m(y)-8 +b(,)31 b(and)f(execute)630 3359 y(an)m(y)h(asso)s(ciated)h +Fq(command-list)h Ft(on)d(a)h(successful)f(matc)m(h.)630 +3485 y(The)c(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 3595 y(is)30 b(the)h(exit)g(status)g(of)f(the)h +Fq(command-list)i Ft(executed.)150 3738 y Fs(select)630 +3865 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 +3974 y(same)c(syn)m(tax)g(as)f(the)h Fs(for)e Ft(command:)870 +4101 y Fs(select)46 b Fi(name)57 b Fs([in)47 b Fi(words)57 +b Fs(...)o(];)47 b(do)h Fi(commands)11 b Fs(;)44 b(done)630 +4227 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 4337 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 +4446 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 Fi(words)11 b Ft(')29 b(is)h(omitted,)i +(the)e(p)s(ositional)i(parameters)630 4556 y(are)22 b(prin)m(ted,)h(as) +f(if)f(`)p Fs(in)30 b("$@")p Ft(')21 b(had)g(b)s(een)f(sp)s(eci\014ed.) +37 b(The)21 b Fs(PS3)g Ft(prompt)g(is)g(then)g(displa)m(y)m(ed)630 +4666 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 +4775 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 4885 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 4994 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 5104 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 +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 Fi(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(78\).)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 Fi(expression)11 b Fs(")630 1998 y Ft(See)25 b(Section)h(4.2)h +([Bash)e(Builtins],)i(page)f(41,)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 Fi(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(76.)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,)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)j(as)f(primaries.)630 3211 y(When)d(used)g(with)g(`)p +Fs([[)p Ft(',)h(The)f(`)p Fs(<)p Ft(')g(and)g(`)p Fs(>)p +Ft(')h(op)s(erators)f(sort)h(lexicographically)i(using)d(the)630 +3320 y(curren)m(t)i(lo)s(cale.)630 3453 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)f(to)i(the)e(righ)m(t)h(of)g(the)g(op)s(erator)630 +3563 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 +3673 y(Section)37 b(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)j(page)c(24.) +59 b(If)36 b(the)g(shell)g(option)h Fs(nocasematch)630 +3782 y Ft(\(see)42 b(the)f(description)g(of)h Fs(shopt)d +Ft(in)i(Section)h(4.3.2)h([The)e(Shopt)f(Builtin],)45 +b(page)d(55\))630 3892 y(is)e(enabled,)i(the)e(matc)m(h)h(is)e(p)s +(erformed)g(without)g(regard)h(to)h(the)f(case)g(of)g(alphab)s(etic)630 +4001 y(c)m(haracters.)h(The)28 b(return)e(v)-5 b(alue)28 +b(is)g(0)g(if)g(the)g(string)g(matc)m(hes)h(\(`)p Fs(==)p +Ft('\))f(or)g(do)s(es)f(not)h(matc)m(h)630 4111 y(\(`)p +Fs(!=)p Ft('\)the)33 b(pattern,)g(and)f(1)g(otherwise.)47 +b(An)m(y)32 b(part)g(of)h(the)f(pattern)g(ma)m(y)h(b)s(e)f(quoted)g(to) +630 4221 y(force)f(it)g(to)g(b)s(e)f(matc)m(hed)h(as)f(a)h(string.)630 +4354 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 4463 y(`)p Fs(==)p Ft(')29 b(and)f(`)p +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 +4573 y(ered)34 b(an)g(extended)g(regular)g(expression)g(and)f(matc)m +(hed)i(accordingly)g(\(as)f(in)g Fk(r)-5 b(e)g(gex)11 +b Ft(3\)\).)630 4682 y(The)29 b(return)f(v)-5 b(alue)30 +b(is)g(0)g(if)f(the)h(string)g(matc)m(hes)g(the)g(pattern,)g(and)f(1)h +(otherwise.)41 b(If)29 b(the)630 4792 y(regular)e(expression)g(is)h +(syn)m(tactically)i(incorrect,)f(the)e(conditional)i(expression's)e +(return)630 4902 y(v)-5 b(alue)40 b(is)g(2.)68 b(If)39 +b(the)h(shell)f(option)h Fs(nocasematch)d Ft(\(see)j(the)g(description) +g(of)f Fs(shopt)f Ft(in)630 5011 y(Section)32 b(4.3.2)g([The)f(Shopt)f +(Builtin],)i(page)g(55\))g(is)f(enabled,)g(the)g(matc)m(h)h(is)e(p)s +(erformed)630 5121 y(without)36 b(regard)g(to)h(the)f(case)h(of)f +(alphab)s(etic)h(c)m(haracters.)59 b(An)m(y)36 b(part)g(of)h(the)f +(pattern)630 5230 y(ma)m(y)g(b)s(e)g(quoted)g(to)g(force)g(it)h(to)f(b) +s(e)f(matc)m(hed)i(as)f(a)g(string.)57 b(Substrings)34 +b(matc)m(hed)j(b)m(y)630 5340 y(paren)m(thesized)44 b(sub)s +(expressions)e(within)i(the)g(regular)g(expression)g(are)g(sa)m(v)m(ed) +h(in)f(the)p eop end +%%Page: 13 19 +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(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 408 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 518 y(of)39 b Fs(BASH_REMATCH)c +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 628 y(paren)m(thesized)31 +b(sub)s(expression.)630 770 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 879 y(order)30 b(of)g(precedence:)630 +1054 y Fs(\()g Fi(expression)38 b Fs(\))1110 1163 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 +1273 y(normal)e(precedence)h(of)g(op)s(erators.)630 1447 +y Fs(!)f Fi(expression)1110 1557 y Ft(T)-8 b(rue)30 b(if)g +Fq(expression)g Ft(is)h(false.)630 1731 y Fi(expression1)38 +b Fs(&&)30 b Fi(expression2)1110 1841 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 2015 y Fi(expression1)38 b Fs(||)30 +b Fi(expression2)1110 2125 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 2299 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 +2408 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 +2623 y Fj(3.2.4.3)63 b(Grouping)43 b(Commands)150 2770 +y Ft(Bash)30 b(pro)m(vides)g(t)m(w)m(o)h(w)m(a)m(ys)f(to)h(group)e(a)h +(list)g(of)g(commands)f(to)i(b)s(e)e(executed)h(as)g(a)h(unit.)40 +b(When)29 b(com-)150 2879 y(mands)h(are)i(group)s(ed,)f(redirections)h +(ma)m(y)g(b)s(e)e(applied)i(to)g(the)f(en)m(tire)h(command)g(list.)44 +b(F)-8 b(or)32 b(example,)150 2989 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 3171 y Fs(\(\))870 3313 y(\()47 +b Fi(list)58 b Fs(\))630 3455 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 3564 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(30\),)630 +3674 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 3783 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 3893 y(subshell)g(completes.)150 4067 +y Fs({})870 4209 y({)47 b Fi(list)11 b Fs(;)46 b(})630 +4351 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 +4461 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 4570 y(follo)m(wing)32 b Fq(list)h Ft(is)d(required.)275 +4752 y(In)44 b(addition)h(to)h(the)f(creation)i(of)e(a)g(subshell,)j +(there)e(is)f(a)g(subtle)g(di\013erence)h(b)s(et)m(w)m(een)f(these)150 +4862 y(t)m(w)m(o)c(constructs)e(due)g(to)g(historical)i(reasons.)67 +b(The)39 b(braces)g(are)h Fs(reserved)28 b(words)p Ft(,)40 +b(so)g(they)f(m)m(ust)150 4971 y(b)s(e)d(separated)h(from)f(the)g +Fq(list)j Ft(b)m(y)e Fs(blank)p Ft(s)e(or)h(other)h(shell)f(metac)m +(haracters.)62 b(The)36 b(paren)m(theses)h(are)150 5081 +y Fs(operators)p Ft(,)23 b(and)h(are)g(recognized)i(as)e(separate)i +(tok)m(ens)f(b)m(y)f(the)g(shell)h(ev)m(en)g(if)f(they)g(are)h(not)f +(separated)150 5191 y(from)30 b(the)g Fq(list)j Ft(b)m(y)e(whitespace.) +275 5340 y(The)e(exit)j(status)e(of)h(b)s(oth)f(of)g(these)h +(constructs)g(is)f(the)h(exit)g(status)f(of)h Fq(list)r +Ft(.)p eop end +%%Page: 14 20 +TeXDict begin 14 19 bop 150 -116 a Ft(14)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fj(3.2.5)63 b(Copro)s(cesses)150 +446 y Ft(A)37 b Fs(coprocess)c Ft(is)k(a)g(shell)f(command)h(preceded)f +(b)m(y)g(the)h Fs(coproc)d Ft(reserv)m(ed)j(w)m(ord.)59 +b(A)36 b(copro)s(cess)h(is)150 555 y(executed)g(async)m(hronously)g(in) +f(a)h(subshell,)g(as)g(if)g(the)f(command)h(had)f(b)s(een)f(terminated) +i(with)g(the)150 665 y(`)p Fs(&)p Ft(')d(con)m(trol)h(op)s(erator,)g +(with)f(a)g(t)m(w)m(o-w)m(a)m(y)i(pip)s(e)d(established)h(b)s(et)m(w)m +(een)h(the)f(executing)h(shell)f(and)f(the)150 775 y(copro)s(cess.)275 +906 y(The)c(format)i(for)f(a)h(copro)s(cess)g(is:)390 +1037 y Fs(coproc)46 b([)p Fi(NAME)11 b Fs(])46 b Fi(command)56 +b Fs([)p Fi(redirections)11 b Fs(])150 1168 y Ft(This)41 +b(creates)i(a)g(copro)s(cess)f(named)f Fq(NAME)5 b Ft(.)43 +b(If)f Fq(NAME)47 b Ft(is)42 b(not)g(supplied,)i(the)e(default)g(name)g +(is)150 1277 y Fq(COPR)m(OC)8 b Ft(.)22 b Fq(NAME)29 +b Ft(m)m(ust)23 b(not)g(b)s(e)g(supplied)e(if)i Fq(command)k +Ft(is)c(a)g(simple)g(command)g(\(see)h(Section)g(3.2.1)150 +1387 y([Simple)39 b(Commands],)h(page)g(8\);)k(otherwise,)e(it)d(is)g +(in)m(terpreted)h(as)f(the)g(\014rst)f(w)m(ord)h(of)g(the)g(simple)150 +1496 y(command.)275 1627 y(When)23 b(the)h(copro)s(c)g(is)g(executed,)i +(the)e(shell)g(creates)h(an)e(arra)m(y)i(v)-5 b(ariable)24 +b(\(see)h(Section)f(6.7)h([Arra)m(ys],)150 1737 y(page)43 +b(80\))g(named)f Fq(NAME)48 b Ft(in)42 b(the)g(con)m(text)i(of)e(the)h +(executing)g(shell.)76 b(The)42 b(standard)f(output)h(of)150 +1846 y Fq(command)d Ft(is)d(connected)h(via)g(a)f(pip)s(e)g(to)g(a)h +(\014le)f(descriptor)g(in)f(the)i(executing)g(shell,)h(and)d(that)i +(\014le)150 1956 y(descriptor)25 b(is)f(assigned)h(to)h +Fq(NAME)5 b Ft([0].)40 b(The)25 b(standard)e(input)h(of)h +Fq(command)j Ft(is)d(connected)g(via)h(a)f(pip)s(e)150 +2066 y(to)33 b(a)f(\014le)g(descriptor)g(in)f(the)i(executing)g(shell,) +f(and)g(that)g(\014le)g(descriptor)g(is)g(assigned)g(to)h +Fq(NAME)5 b Ft([1].)150 2175 y(This)31 b(pip)s(e)g(is)h(established)g +(b)s(efore)g(an)m(y)g(redirections)g(sp)s(eci\014ed)g(b)m(y)f(the)i +(command)e(\(see)i(Section)g(3.6)150 2285 y([Redirections],)25 +b(page)e(26\).)39 b(The)21 b(\014le)h(descriptors)g(can)g(b)s(e)f +(utilized)i(as)f(argumen)m(ts)h(to)f(shell)g(commands)150 +2394 y(and)30 b(redirections)h(using)f(standard)f(w)m(ord)h +(expansions.)275 2525 y(The)f(pro)s(cess)h(id)f(of)h(the)g(shell)h(spa) +m(wned)e(to)i(execute)g(the)f(copro)s(cess)h(is)f(a)m(v)-5 +b(ailable)32 b(as)e(the)g(v)-5 b(alue)31 b(of)150 2635 +y(the)26 b(v)-5 b(ariable)26 b Fq(NAME)p 931 2635 28 +4 v 46 w Ft(PID.)g(The)f Fs(wait)g Ft(builtin)g(command)g(ma)m(y)h(b)s +(e)f(used)g(to)i(w)m(ait)f(for)g(the)g(copro)s(cess)150 +2745 y(to)31 b(terminate.)275 2876 y(The)e(return)h(status)g(of)h(a)g +(copro)s(cess)f(is)h(the)f(exit)i(status)e(of)h Fq(command)t +Ft(.)150 3101 y Fr(3.3)68 b(Shell)45 b(F)-11 b(unctions)150 +3260 y Ft(Shell)35 b(functions)h(are)g(a)g(w)m(a)m(y)g(to)h(group)e +(commands)g(for)h(later)g(execution)h(using)e(a)h(single)g(name)g(for) +150 3370 y(the)f(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 3480 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 3589 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 3699 y(pro)s(cess)30 +b(is)g(created)i(to)f(in)m(terpret)g(them.)275 3830 y(F)-8 +b(unctions)30 b(are)h(declared)g(using)f(this)g(syn)m(tax:)390 +3961 y Fs([)47 b(function)f(])h Fi(name)58 b Fs(\(\))47 +b Fi(compound-command)54 b Fs([)47 b Fi(redirections)55 +b Fs(])275 4092 y Ft(This)31 b(de\014nes)h(a)g(shell)h(function)f +(named)g Fq(name)5 b Ft(.)47 b(The)32 b(reserv)m(ed)h(w)m(ord)f +Fs(function)e Ft(is)i(optional.)48 b(If)150 4201 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 4311 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 4420 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 +4530 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 4640 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 4749 y(page)31 b(26\))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 4880 y(A)41 b(function)f(de\014nition)h(ma)m(y)g(b) +s(e)g(deleted)g(using)g(the)g(`)p Fs(-f)p Ft(')g(option)g(to)h(the)f +Fs(unset)e Ft(builtin)i(\(see)150 4990 y(Section)31 b(4.1)h([Bourne)e +(Shell)g(Builtins],)h(page)h(35\).)275 5121 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 +5230 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 +5340 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(.)p eop end +%%Page: 15 21 +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)275 299 +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 +408 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.)62 b(This)150 518 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 628 y(separated)26 +b(from)f(the)h(command)f(list)i(b)m(y)e(whitespace)h(or)g(another)g +(shell)g(metac)m(haracter.)41 b(Also,)28 b(when)150 737 +y(using)i(the)g(braces,)h(the)g Fq(list)i Ft(m)m(ust)d(b)s(e)g +(terminated)h(b)m(y)f(a)h(semicolon,)h(a)e(`)p Fs(&)p +Ft(',)h(or)g(a)f(newline.)275 879 y(When)i(a)i(function)f(is)g +(executed,)i(the)e(argumen)m(ts)h(to)g(the)f(function)g(b)s(ecome)g +(the)h(p)s(ositional)g(pa-)150 988 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(16\).)75 b(The)150 1098 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)h(parameters)f(is)g(up)s(dated)f(to)150 +1207 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 1317 +y Ft(v)-5 b(ariable)31 b(is)g(set)f(to)i(the)e(name)h(of)f(the)h +(function)f(while)g(the)h(function)f(is)g(executing.)275 +1459 y(All)25 b(other)g(asp)s(ects)g(of)g(the)g(shell)g(execution)h(en) +m(vironmen)m(t)g(are)f(iden)m(tical)h(b)s(et)m(w)m(een)g(a)f(function)g +(and)150 1568 y(its)35 b(caller)i(with)d(these)i(exceptions:)50 +b(the)36 b Fs(DEBUG)d Ft(and)h Fs(RETURN)g Ft(traps)g(are)i(not)f +(inherited)f(unless)h(the)150 1678 y(function)26 b(has)g(b)s(een)f(giv) +m(en)i(the)g Fs(trace)d Ft(attribute)j(using)f(the)g +Fs(declare)e Ft(builtin)i(or)g(the)h Fs(-o)i(functrace)150 +1787 y Ft(option)f(has)e(b)s(een)h(enabled)g(with)g(the)g +Fs(set)f Ft(builtin,)i(\(in)f(whic)m(h)f(case)j(all)f(functions)e +(inherit)h(the)g Fs(DEBUG)150 1897 y Ft(and)33 b Fs(RETURN)f +Ft(traps\),)j(and)e(the)h Fs(ERR)f Ft(trap)h(is)g(not)g(inherited)f +(unless)g(the)h Fs(-o)c(errtrace)h Ft(shell)j(option)150 +2007 y(has)h(b)s(een)f(enabled.)55 b(See)35 b(Section)h(4.1)g([Bourne)f +(Shell)g(Builtins],)i(page)f(35,)i(for)c(the)i(description)f(of)150 +2116 y(the)c Fs(trap)e Ft(builtin.)275 2258 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 2367 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 2477 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 +2586 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 2696 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 2806 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 2915 y(of)h(the)f(last)h +(command)f(executed)i(b)s(efore)e(the)g Fs(return)p Ft(.)275 +3057 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 3166 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 +3308 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 3417 y Fs(typeset)d Ft(builtin)h(commands)h +(\(see)h(Section)g(4.2)g([Bash)f(Builtins],)i(page)f(41\).)55 +b(The)35 b(`)p Fs(-F)p Ft(')g(option)g(to)150 3527 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 +3636 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 3746 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 +3856 y(Section)g(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(35\).)47 +b(Note)33 b(that)g(shell)f(functions)g(and)f(v)-5 b(ariables)33 +b(with)150 3965 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 4075 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 4216 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.)150 +4459 y Fr(3.4)68 b(Shell)45 b(P)l(arameters)150 4619 +y Ft(A)23 b Fq(parameter)31 b Ft(is)23 b(an)g(en)m(tit)m(y)i(that)f +(stores)g(v)-5 b(alues.)39 b(It)23 b(can)h(b)s(e)f(a)g +Fs(name)p Ft(,)h(a)g(n)m(um)m(b)s(er,)f(or)h(one)f(of)h(the)f(sp)s +(ecial)150 4728 y(c)m(haracters)i(listed)f(b)s(elo)m(w.)39 +b(A)24 b Fq(v)-5 b(ariable)29 b Ft(is)24 b(a)g(parameter)g(denoted)f(b) +m(y)h(a)g Fs(name)p Ft(.)37 b(A)24 b(v)-5 b(ariable)24 +b(has)f(a)h Fq(v)-5 b(alue)150 4838 y Ft(and)33 b(zero)i(or)e(more)h +Fq(attributes)t Ft(.)51 b(A)m(ttributes)34 b(are)g(assigned)g(using)f +(the)h Fs(declare)e Ft(builtin)h(command)150 4947 y(\(see)e(the)g +(description)f(of)h(the)f Fs(declare)f Ft(builtin)h(in)g(Section)h(4.2) +g([Bash)g(Builtins],)g(page)g(41\).)275 5089 y(A)d(parameter)h(is)g +(set)g(if)f(it)h(has)f(b)s(een)g(assigned)h(a)g(v)-5 +b(alue.)40 b(The)28 b(n)m(ull)h(string)f(is)h(a)g(v)-5 +b(alid)28 b(v)-5 b(alue.)41 b(Once)150 5198 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 5340 +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)p eop end +%%Page: 16 22 +TeXDict begin 16 21 bop 150 -116 a Ft(16)2572 b(Bash)31 +b(Reference)g(Man)m(ual)390 299 y Fi(name)11 b Fs(=[)p +Fi(value)g Fs(])150 435 y Ft(If)34 b Fq(v)-5 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 +544 y(pansion,)h(parameter)f(and)f(v)-5 b(ariable)36 +b(expansion,)f(command)g(substitution,)h(arithmetic)g(expansion,)150 +654 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 763 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 873 y(\(see)e(Section)g(3.5.5)i([Arithmetic)e(Expansion],)f +(page)h(23\).)42 b(W)-8 b(ord)31 b(splitting)g(is)g(not)f(p)s +(erformed,)f(with)150 983 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 +1092 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 1202 +y Fs(readonly)p Ft(,)d(and)i Fs(local)f Ft(builtin)h(commands.)275 +1338 y(In)f(the)h(con)m(text)i(where)d(an)h(assignmen)m(t)h(statemen)m +(t)h(is)e(assigning)g(a)h(v)-5 b(alue)30 b(to)h(a)f(shell)g(v)-5 +b(ariable)31 b(or)150 1447 y(arra)m(y)f(index)g(\(see)h(Section)g(6.7)g +([Arra)m(ys],)g(page)g(80\),)g(the)f(`)p Fs(+=)p Ft(')g(op)s(erator)g +(can)h(b)s(e)e(used)g(to)i(app)s(end)d(to)150 1557 y(or)36 +b(add)g(to)h(the)f(v)-5 b(ariable's)37 b(previous)f(v)-5 +b(alue.)59 b(When)36 b(`)p Fs(+=)p Ft(')g(is)g(applied)g(to)h(a)g(v)-5 +b(ariable)37 b(for)f(whic)m(h)g(the)150 1666 y(in)m(teger)k(attribute)e +(has)g(b)s(een)g(set,)j Fq(v)-5 b(alue)44 b Ft(is)38 +b(ev)-5 b(aluated)39 b(as)g(an)f(arithmetic)h(expression)f(and)g(added) +150 1776 y(to)e(the)f(v)-5 b(ariable's)36 b(curren)m(t)f(v)-5 +b(alue,)37 b(whic)m(h)e(is)g(also)h(ev)-5 b(aluated.)56 +b(When)35 b(`)p Fs(+=)p Ft(')g(is)h(applied)f(to)g(an)g(arra)m(y)150 +1886 y(v)-5 b(ariable)26 b(using)e(comp)s(ound)f(assignmen)m(t)j(\(see) +f(Section)h(6.7)f([Arra)m(ys],)i(page)f(80\),)h(the)e(v)-5 +b(ariable's)25 b(v)-5 b(alue)150 1995 y(is)32 b(not)f(unset)h(\(as)g +(it)g(is)f(when)g(using)g(`)p Fs(=)p Ft('\),)i(and)e(new)g(v)-5 +b(alues)32 b(are)g(app)s(ended)d(to)k(the)f(arra)m(y)g(b)s(eginning)150 +2105 y(at)27 b(one)f(greater)i(than)e(the)g(arra)m(y's)h(maxim)m(um)f +(index)g(\(for)g(indexed)g(arra)m(ys\),)i(or)e(added)g(as)g(additional) +150 2214 y(k)m(ey-v)-5 b(alue)35 b(pairs)e(in)g(an)g(asso)s(ciativ)m(e) +j(arra)m(y)-8 b(.)51 b(When)33 b(applied)g(to)h(a)g(string-v)-5 +b(alued)34 b(v)-5 b(ariable,)35 b Fq(v)-5 b(alue)39 b +Ft(is)150 2324 y(expanded)30 b(and)f(app)s(ended)g(to)i(the)g(v)-5 +b(ariable's)31 b(v)-5 b(alue.)150 2525 y Fj(3.4.1)63 +b(P)m(ositional)41 b(P)m(arameters)150 2671 y Ft(A)28 +b Fq(p)s(ositional)h(parameter)35 b Ft(is)28 b(a)g(parameter)g(denoted) +g(b)m(y)g(one)g(or)g(more)g(digits,)h(other)g(than)e(the)h(single)150 +2781 y(digit)34 b Fs(0)p Ft(.)48 b(P)m(ositional)36 b(parameters)d(are) +g(assigned)h(from)e(the)i(shell's)f(argumen)m(ts)g(when)f(it)i(is)f(in) +m(v)m(ok)m(ed,)150 2891 y(and)38 b(ma)m(y)i(b)s(e)e(reassigned)i(using) +e(the)h Fs(set)g Ft(builtin)f(command.)67 b(P)m(ositional)41 +b(parameter)e Fs(N)g Ft(ma)m(y)h(b)s(e)150 3000 y(referenced)34 +b(as)h Fs(${N})p Ft(,)g(or)f(as)h Fs($N)e Ft(when)h Fs(N)g +Ft(consists)h(of)f(a)h(single)g(digit.)54 b(P)m(ositional)37 +b(parameters)d(ma)m(y)150 3110 y(not)j(b)s(e)f(assigned)h(to)g(with)f +(assignmen)m(t)i(statemen)m(ts.)61 b(The)36 b Fs(set)g +Ft(and)g Fs(shift)f Ft(builtins)h(are)h(used)f(to)150 +3219 y(set)k(and)f(unset)f(them)i(\(see)g(Chapter)f(4)g([Shell)h +(Builtin)g(Commands],)h(page)f(35\).)68 b(The)39 b(p)s(ositional)150 +3329 y(parameters)44 b(are)g(temp)s(orarily)g(replaced)h(when)e(a)h +(shell)g(function)g(is)g(executed)g(\(see)h(Section)g(3.3)150 +3439 y([Shell)30 b(F)-8 b(unctions],)32 b(page)f(14\).)275 +3574 y(When)c(a)i(p)s(ositional)g(parameter)g(consisting)f(of)h(more)f +(than)g(a)g(single)h(digit)g(is)f(expanded,)g(it)h(m)m(ust)150 +3684 y(b)s(e)h(enclosed)h(in)f(braces.)150 3885 y Fj(3.4.2)63 +b(Sp)s(ecial)41 b(P)m(arameters)150 4032 y Ft(The)d(shell)g(treats)h +(sev)m(eral)g(parameters)f(sp)s(ecially)-8 b(.)65 b(These)38 +b(parameters)h(ma)m(y)f(only)g(b)s(e)g(referenced;)150 +4141 y(assignmen)m(t)31 b(to)g(them)g(is)f(not)h(allo)m(w)m(ed.)150 +4303 y Fs(*)432 b Ft(Expands)29 b(to)h(the)h(p)s(ositional)f +(parameters,)h(starting)g(from)e(one.)41 b(When)30 b(the)g(expansion) +630 4412 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 +4522 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 4631 y Fs("$*")h Ft(is)i(equiv)-5 +b(alen)m(t)33 b(to)h Fs("$1)p Fi(c)11 b Fs($2)p Fi(c)g +Fs(...)l(")p Ft(,)33 b(where)f Fq(c)38 b Ft(is)32 b(the)h(\014rst)e(c)m +(haracter)j(of)f(the)f(v)-5 b(alue)630 4741 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 +4850 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 5011 y +Fs(@)432 b Ft(Expands)29 b(to)h(the)h(p)s(ositional)f(parameters,)h +(starting)g(from)e(one.)41 b(When)30 b(the)g(expansion)630 +5121 y(o)s(ccurs)c(within)g(double)f(quotes,)j(eac)m(h)f(parameter)g +(expands)e(to)i(a)g(separate)g(w)m(ord.)39 b(That)630 +5230 y(is,)29 b Fs("$@")e Ft(is)i(equiv)-5 b(alen)m(t)30 +b(to)f Fs("$1")g("$2")h(...)o Ft(.)40 b(If)28 b(the)g(double-quoted)h +(expansion)f(o)s(ccurs)630 5340 y(within)d(a)h(w)m(ord,)g(the)g +(expansion)f(of)h(the)g(\014rst)f(parameter)h(is)f(joined)h(with)f(the) +h(b)s(eginning)p eop end +%%Page: 17 23 +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)630 299 +y(part)25 b(of)g(the)g(original)g(w)m(ord,)h(and)e(the)h(expansion)g +(of)g(the)g(last)h(parameter)f(is)g(joined)f(with)630 +408 y(the)37 b(last)g(part)g(of)f(the)h(original)h(w)m(ord.)59 +b(When)36 b(there)h(are)g(no)f(p)s(ositional)h(parameters,)630 +518 y Fs("$@")29 b Ft(and)h Fs($@)g Ft(expand)f(to)j(nothing)e(\(i.e.,) +i(they)e(are)h(remo)m(v)m(ed\).)150 677 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 836 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 995 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 +1105 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 1215 y(option\).)150 1374 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 +1483 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 1643 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 1752 y(c)m(hronous\))30 +b(command.)150 1911 y Fs(0)432 b Ft(Expands)20 b(to)j(the)f(name)g(of)g +(the)g(shell)g(or)f(shell)h(script.)38 b(This)21 b(is)h(set)g(at)h +(shell)f(initialization.)630 2021 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 2130 y(page)39 b(33\),)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 2240 y(option)i(\(see)g(Section)h(6.1)f([In)m(v)m(oking)h +(Bash],)h(page)e(71\),)j(then)d Fs($0)e Ft(is)i(set)g(to)g(the)g +(\014rst)630 2350 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 2459 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 +2618 y Fs(_)432 b Ft(\(An)27 b(underscore.\))39 b(A)m(t)29 +b(shell)e(startup,)h(set)f(to)h(the)g(absolute)g(pathname)f(used)f(to)i +(in)m(v)m(ok)m(e)630 2728 y(the)22 b(shell)g(or)g(shell)g(script)f(b)s +(eing)h(executed)h(as)f(passed)f(in)g(the)h(en)m(vironmen)m(t)h(or)e +(argumen)m(t)630 2838 y(list.)72 b(Subsequen)m(tly)-8 +b(,)43 b(expands)c(to)j(the)e(last)i(argumen)m(t)f(to)g(the)g(previous) +f(command,)630 2947 y(after)35 b(expansion.)54 b(Also)36 +b(set)f(to)h(the)f(full)f(pathname)h(used)f(to)h(in)m(v)m(ok)m(e)i(eac) +m(h)f(command)630 3057 y(executed)42 b(and)e(placed)i(in)e(the)h(en)m +(vironmen)m(t)h(exp)s(orted)f(to)g(that)h(command.)72 +b(When)630 3166 y(c)m(hec)m(king)32 b(mail,)f(this)g(parameter)g(holds) +e(the)i(name)f(of)h(the)g(mail)g(\014le.)150 3399 y Fr(3.5)68 +b(Shell)45 b(Expansions)150 3558 y Ft(Expansion)27 b(is)i(p)s(erformed) +d(on)i(the)g(command)g(line)h(after)f(it)h(has)f(b)s(een)f(split)h(in)m +(to)i Fs(token)p Ft(s.)38 b(There)28 b(are)150 3668 y(sev)m(en)j(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)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)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)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: 18 24 +TeXDict begin 18 23 bop 150 -116 a Ft(18)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(Only)k(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(16\))h(and)d Fs("${)p +Fi(name)11 b Fs([@]}")27 b Ft(\(see)k(Section)h(6.7)f([Arra)m(ys],)g +(page)g(80\).)275 765 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(25\))h(is)150 875 y(p)s(erformed.)150 +1077 y Fj(3.5.1)63 b(Brace)40 b(Expansion)150 1224 y +Ft(Brace)28 b(expansion)f(is)h(a)f(mec)m(hanism)h(b)m(y)f(whic)m(h)f +(arbitrary)h(strings)g(ma)m(y)h(b)s(e)f(generated.)40 +b(This)27 b(mec)m(ha-)150 1334 y(nism)e(is)h(similar)g(to)g +Fq(\014lename)g(expansion)f Ft(\(see)i(Section)f(3.5.8)i([Filename)f +(Expansion],)f(page)h(24\),)h(but)150 1443 y(the)36 b(\014le)f(names)h +(generated)g(need)f(not)h(exist.)57 b(P)m(atterns)36 +b(to)g(b)s(e)f(brace)h(expanded)e(tak)m(e)j(the)f(form)f(of)150 +1553 y(an)29 b(optional)i Fq(pream)m(ble)5 b Ft(,)30 +b(follo)m(w)m(ed)i(b)m(y)d(either)h(a)g(series)g(of)g(comma-separated)h +(strings)e(or)h(a)g(seqeunce)150 1663 y(expression)36 +b(b)s(et)m(w)m(een)g(a)g(pair)g(of)g(braces,)i(follo)m(w)m(ed)f(b)m(y)f +(an)g(optional)h Fq(p)s(ostscript)r Ft(.)56 b(The)36 +b(pream)m(ble)g(is)150 1772 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 1882 y(eac)m(h)32 b(resulting)e +(string,)h(expanding)e(left)j(to)f(righ)m(t.)275 2019 +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 2129 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 2267 y Fs(bash$)46 +b(echo)h(a{d,c,b}e)390 2376 y(ade)g(ace)g(abe)275 2514 +y Ft(A)20 b(sequence)h(expression)g(tak)m(es)h(the)f(form)f +Fs({)p Fi(x)11 b Fs(..)p Fi(y)g Fs([..)p Fi(incr)g Fs(]})p +Ft(,)18 b(where)i Fq(x)27 b Ft(and)20 b Fq(y)28 b Ft(are)22 +b(either)f(in)m(tegers)150 2623 y(or)42 b(single)h(c)m(haracters,)j +(and)c Fq(incr)7 b Ft(,)44 b(an)e(optional)h(incremen)m(t,)j(is)c(an)g +(in)m(teger.)77 b(When)41 b(in)m(tegers)j(are)150 2733 +y(supplied,)e(the)f(expression)g(expands)f(to)h(eac)m(h)h(n)m(um)m(b)s +(er)e(b)s(et)m(w)m(een)h Fq(x)47 b Ft(and)40 b Fq(y)8 +b Ft(,)44 b(inclusiv)m(e.)73 b(Supplied)150 2842 y(in)m(tegers)33 +b(ma)m(y)e(b)s(e)g(pre\014xed)f(with)h(`)p Fs(0)p Ft(')h(to)g(force)g +(eac)m(h)g(term)g(to)g(ha)m(v)m(e)g(the)g(same)g(width.)42 +b(When)31 b(either)150 2952 y Fq(x)43 b Ft(or)36 b Fq(y)44 +b Ft(b)s(egins)36 b(with)g(a)h(zero,)i(the)e(shell)g(attempts)g(to)g +(force)g(all)h(generated)f(terms)g(to)g(con)m(tain)h(the)150 +3062 y(same)e(n)m(um)m(b)s(er)e(of)i(digits,)i(zero-padding)d(where)h +(necessary)-8 b(.)57 b(When)35 b(c)m(haracters)i(are)f(supplied,)g(the) +150 3171 y(expression)h(expands)f(to)i(eac)m(h)g(c)m(haracter)g +(lexicographically)i(b)s(et)m(w)m(een)e Fq(x)43 b Ft(and)37 +b Fq(y)8 b Ft(,)38 b(inclusiv)m(e.)62 b(Note)150 3281 +y(that)30 b(b)s(oth)e Fq(x)35 b Ft(and)28 b Fq(y)37 b +Ft(m)m(ust)29 b(b)s(e)f(of)h(the)g(same)g(t)m(yp)s(e.)41 +b(When)28 b(the)i(incremen)m(t)f(is)g(supplied,)f(it)i(is)f(used)f(as) +150 3390 y(the)j(di\013erence)f(b)s(et)m(w)m(een)h(eac)m(h)h(term.)41 +b(The)30 b(default)g(incremen)m(t)h(is)g(1)f(or)h(-1)g(as)f +(appropriate.)275 3528 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 3638 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 3747 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 +3857 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 3966 y(brace)31 b(expansion.)275 +4104 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 +4214 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 4323 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275 +4461 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)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 4570 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 4680 y(eligible)e(for)e(brace)h(expansion.)275 4818 +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 +4927 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 5065 y Fs(mkdir)46 b(/usr/local/src/bash/{old,n)o +(ew,)o(dist)o(,bug)o(s})275 5202 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 end +%%Page: 19 25 +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)150 299 +y Fj(3.5.2)63 b(Tilde)41 b(Expansion)150 446 y Ft(If)29 +b(a)h(w)m(ord)g(b)s(egins)f(with)g(an)h(unquoted)f(tilde)h(c)m +(haracter)h(\(`)p Fs(~)p Ft('\),)g(all)g(of)f(the)g(c)m(haracters)h(up) +d(to)j(the)f(\014rst)150 555 y(unquoted)23 b(slash)h(\(or)h(all)g(c)m +(haracters,)i(if)d(there)g(is)h(no)f(unquoted)f(slash\))h(are)h +(considered)f(a)g Fq(tilde-pre\014x)6 b Ft(.)150 665 +y(If)38 b(none)g(of)g(the)h(c)m(haracters)g(in)f(the)h(tilde-pre\014x)f +(are)h(quoted,)h(the)f(c)m(haracters)h(in)d(the)i(tilde-pre\014x)150 +775 y(follo)m(wing)28 b(the)f(tilde)g(are)g(treated)h(as)f(a)g(p)s +(ossible)f Fq(login)i(name)5 b Ft(.)40 b(If)26 b(this)g(login)i(name)f +(is)f(the)h(n)m(ull)g(string,)150 884 y(the)35 b(tilde)g(is)g(replaced) +g(with)f(the)h(v)-5 b(alue)35 b(of)g(the)g Fs(HOME)e +Ft(shell)i(v)-5 b(ariable.)54 b(If)34 b Fs(HOME)g Ft(is)h(unset,)g(the) +g(home)150 994 y(directory)e(of)g(the)f(user)g(executing)i(the)e(shell) +h(is)f(substituted)g(instead.)47 b(Otherwise,)33 b(the)g +(tilde-pre\014x)150 1103 y(is)d(replaced)h(with)f(the)h(home)f +(directory)h(asso)s(ciated)h(with)e(the)h(sp)s(eci\014ed)e(login)j +(name.)275 1235 y(If)g(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 1344 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 1476 y(If)e(the)i(c)m(haracters)g(follo)m(wing)h(the) +e(tilde)h(in)f(the)g(tilde-pre\014x)h(consist)f(of)h(a)f(n)m(um)m(b)s +(er)f Fq(N)10 b Ft(,)30 b(optionally)150 1585 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)g(is)h(replaced)f(with)g(the)h(corresp)s(onding)e +(elemen)m(t)j(from)e(the)150 1695 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 1804 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 1914 y(page)c(81\).)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 2024 y(`)p Fs(-)p +Ft(',)31 b(`)p Fs(+)p Ft(')f(is)h(assumed.)275 2155 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 +2286 y(Eac)m(h)38 b(v)-5 b(ariable)38 b(assignmen)m(t)h(is)e(c)m(hec)m +(k)m(ed)j(for)d(unquoted)g(tilde-pre\014xes)h(immediately)g(follo)m +(wing)150 2396 y(a)d(`)p Fs(:)p Ft(')g(or)g(the)g(\014rst)f(`)p +Fs(=)p Ft('.)54 b(In)34 b(these)h(cases,)i(tilde)e(expansion)g(is)g +(also)h(p)s(erformed.)52 b(Consequen)m(tly)-8 b(,)37 +b(one)150 2505 y(ma)m(y)27 b(use)e(\014le)h(names)g(with)g(tildes)g(in) +g(assignmen)m(ts)h(to)g Fs(PATH)p Ft(,)f Fs(MAILPATH)p +Ft(,)e(and)i Fs(CDPATH)p Ft(,)f(and)h(the)g(shell)150 +2615 y(assigns)31 b(the)f(expanded)g(v)-5 b(alue.)275 +2746 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 2899 y Fs(~)432 +b Ft(The)30 b(v)-5 b(alue)31 b(of)f Fs($HOME)150 3052 +y(~/foo)240 b Ft(`)p Fs($HOME/foo)p Ft(')150 3205 y Fs(~fred/foo)630 +3315 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 3468 y(~+/foo)192 +b Ft(`)p Fs($PWD/foo)p Ft(')150 3621 y Fs(~-/foo)g Ft(`)p +Fs(${OLDPWD-'~-'}/foo)p Ft(')150 3774 y Fs(~)p Fi(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 Fi(N)11 b Ft(')150 3927 y Fs(~+)p +Fi(N)336 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 Fi(N)11 b Ft(')150 4080 +y Fs(~-)p Fi(N)336 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 Fi(N)11 +b Ft(')150 4273 y Fj(3.5.3)63 b(Shell)41 b(P)m(arameter)f(Expansion)150 +4420 y Ft(The)g(`)p Fs($)p Ft(')h(c)m(haracter)i(in)m(tro)s(duces)d +(parameter)h(expansion,)j(command)d(substitution,)i(or)e(arithmetic)150 +4529 y(expansion.)d(The)22 b(parameter)h(name)f(or)g(sym)m(b)s(ol)h(to) +g(b)s(e)e(expanded)h(ma)m(y)h(b)s(e)f(enclosed)h(in)f(braces,)i(whic)m +(h)150 4639 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 4749 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 4880 +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 4989 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 +5099 y(command)30 b(substitution,)g(or)h(parameter)g(expansion.)275 +5230 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 5340 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)p +eop end +%%Page: 20 26 +TeXDict begin 20 25 bop 150 -116 a Ft(20)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 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 408 +y(as)f(part)f(of)g(its)h(name.)275 553 y(If)c(the)g(\014rst)g(c)m +(haracter)i(of)f Fq(parameter)35 b Ft(is)27 b(an)h(exclamation)i(p)s +(oin)m(t)d(\(!\),)i(a)f(lev)m(el)i(of)d(v)-5 b(ariable)29 +b(indirec-)150 663 y(tion)e(is)f(in)m(tro)s(duced.)39 +b(Bash)27 b(uses)e(the)i(v)-5 b(alue)27 b(of)f(the)h(v)-5 +b(ariable)27 b(formed)f(from)g(the)g(rest)h(of)f Fq(parameter)34 +b Ft(as)150 772 y(the)e(name)h(of)f(the)h(v)-5 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 882 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 991 y(expansion)p Ft(.)45 b(The)32 b(exceptions)i(to)g +(this)e(are)h(the)g(expansions)g(of)g($)p Fs({)p Ft(!)p +Fq(pre\014x*)8 b Fs(})31 b Ft(and)i($)p Fs({)p Ft(!)p +Fq(name)5 b Ft([)p Fs(@)p Ft(])p Fs(})33 b Ft(de-)150 +1101 y(scrib)s(ed)h(b)s(elo)m(w.)56 b(The)35 b(exclamation)j(p)s(oin)m +(t)d(m)m(ust)g(immediately)i(follo)m(w)g(the)e(left)i(brace)e(in)g +(order)g(to)150 1210 y(in)m(tro)s(duce)30 b(indirection.)275 +1355 y(In)39 b(eac)m(h)i(of)g(the)f(cases)h(b)s(elo)m(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 1465 y(command)30 b(substitution,)g(and)g +(arithmetic)i(expansion.)275 1609 y(When)h(not)h(p)s(erforming)e +(substring)h(expansion,)h(using)f(the)h(form)f(describ)s(ed)g(b)s(elo)m +(w,)h(Bash)g(tests)150 1719 y(for)44 b(a)i(parameter)f(that)g(is)g +(unset)f(or)h(n)m(ull.)84 b(Omitting)45 b(the)g(colon)h(results)e(in)g +(a)i(test)f(only)g(for)g(a)150 1828 y(parameter)36 b(that)f(is)g +(unset.)55 b(Put)34 b(another)i(w)m(a)m(y)-8 b(,)38 b(if)d(the)g(colon) +h(is)f(included,)h(the)f(op)s(erator)g(tests)h(for)150 +1938 y(b)s(oth)22 b Fq(parameter)7 b Ft('s)22 b(existence)i(and)e(that) +h(its)g(v)-5 b(alue)23 b(is)g(not)f(n)m(ull;)k(if)c(the)h(colon)g(is)g +(omitted,)i(the)e(op)s(erator)150 2047 y(tests)31 b(only)g(for)f +(existence.)150 2222 y Fs(${)p Fi(parameter)11 b Fs(:)p +Fp(\000)p Fi(word)g Fs(})630 2331 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 +2441 y(the)31 b(v)-5 b(alue)30 b(of)h Fq(parameter)37 +b Ft(is)31 b(substituted.)150 2610 y Fs(${)p Fi(parameter)11 +b Fs(:=)p Fi(word)g Fs(})630 2720 y Ft(If)32 b Fq(parameter)40 +b Ft(is)32 b(unset)g(or)h(n)m(ull,)g(the)f(expansion)h(of)f +Fq(w)m(ord)k Ft(is)d(assigned)f(to)i Fq(parameter)7 b +Ft(.)630 2829 y(The)30 b(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 2939 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 +3108 y Fs(${)p Fi(parameter)11 b Fs(:?)p Fi(word)g Fs(})630 +3218 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 3328 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 3437 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 3606 y Fs(${)p Fi(parameter)11 +b Fs(:+)p Fi(word)g Fs(})630 3716 y Ft(If)35 b Fq(parameter)42 +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 3826 y(of)31 b Fq(w)m(ord)i +Ft(is)e(substituted.)150 3995 y Fs(${)p Fi(parameter)11 +b Fs(:)p Fi(offset)g Fs(})150 4105 y(${)p Fi(parameter)g +Fs(:)p Fi(offset)g Fs(:)p Fi(le)o(ngt)o(h)g Fs(})630 +4214 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 +4324 y(sp)s(eci\014ed)30 b(b)m(y)g Fq(o\013set)r Ft(.)43 +b(If)30 b Fq(length)h Ft(is)g(omitted,)g(expands)f(to)h(the)g +(substring)f(of)g Fq(parameter)630 4433 y Ft(starting)38 +b(at)g(the)f(c)m(haracter)i(sp)s(eci\014ed)d(b)m(y)h +Fq(o\013set)r Ft(.)62 b Fq(length)38 b Ft(and)e Fq(o\013set)k +Ft(are)e(arithmetic)630 4543 y(expressions)30 b(\(see)i(Section)g(6.5)g +([Shell)f(Arithmetic],)h(page)g(78\).)43 b(This)30 b(is)h(referred)f +(to)i(as)630 4653 y(Substring)d(Expansion.)630 4792 y +Fq(length)j Ft(m)m(ust)f(ev)-5 b(aluate)33 b(to)f(a)g(n)m(um)m(b)s(er)e +(greater)i(than)f(or)g(equal)h(to)g(zero.)45 b(If)30 +b Fq(o\013set)35 b Ft(ev)-5 b(al-)630 4902 y(uates)36 +b(to)h(a)f(n)m(um)m(b)s(er)e(less)i(than)f(zero,)j(the)e(v)-5 +b(alue)36 b(is)g(used)f(as)g(an)h(o\013set)h(from)e(the)h(end)630 +5011 y(of)h(the)g(v)-5 b(alue)38 b(of)f Fq(parameter)7 +b Ft(.)61 b(If)36 b Fq(parameter)44 b Ft(is)37 b(`)p +Fs(@)p Ft(',)i(the)f(result)f(is)g Fq(length)g Ft(p)s(ositional)630 +5121 y(parameters)i(b)s(eginning)f(at)i Fq(o\013set)r +Ft(.)67 b(If)39 b Fq(parameter)45 b Ft(is)39 b(an)g(indexed)g(arra)m(y) +g(name)g(sub-)630 5230 y(scripted)34 b(b)m(y)g(`)p Fs(@)p +Ft(')g(or)g(`)p Fs(*)p Ft(',)h(the)f(result)g(is)g(the)g +Fq(length)h Ft(mem)m(b)s(ers)e(of)h(the)g(arra)m(y)h(b)s(eginning)630 +5340 y(with)25 b Fs(${)p Fi(parameter)11 b Fs([)p Fi(offset)g +Fs(]})p Ft(.)33 b(A)25 b(negativ)m(e)j Fq(o\013set)g +Ft(is)e(tak)m(en)g(relativ)m(e)i(to)e(one)g(greater)p +eop end +%%Page: 21 27 +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(than)26 b(the)h(maxim)m(um)f(index)g(of)g(the)h(sp)s(eci\014ed)f +(arra)m(y)-8 b(.)40 b(Substring)25 b(expansion)h(applied)g(to)630 +408 y(an)k(asso)s(ciativ)m(e)j(arra)m(y)e(pro)s(duces)e(unde\014ned)f +(results.)630 548 y(Note)37 b(that)f(a)g(negativ)m(e)i(o\013set)f(m)m +(ust)f(b)s(e)f(separated)h(from)f(the)h(colon)h(b)m(y)e(at)i(least)g +(one)630 658 y(space)g(to)g(a)m(v)m(oid)g(b)s(eing)f(confused)f(with)h +(the)h(`)p Fs(:-)p Ft(')f(expansion.)57 b(Substring)35 +b(indexing)h(is)630 767 y(zero-based)24 b(unless)f(the)h(p)s(ositional) +g(parameters)g(are)g(used,)g(in)g(whic)m(h)f(case)h(the)g(indexing)630 +877 y(starts)30 b(at)g(1)f(b)m(y)h(default.)40 b(If)29 +b Fq(o\013set)j Ft(is)e(0,)g(and)f(the)g(p)s(ositional)h(parameters)g +(are)g(used,)f Fs($@)630 986 y Ft(is)h(pre\014xed)g(to)h(the)f(list.) +150 1156 y Fs(${!)p Fi(prefix)11 b Fs(*})150 1265 y(${!)p +Fi(prefix)g Fs(@})630 1375 y Ft(Expands)23 b(to)i(the)g(names)f(of)h(v) +-5 b(ariables)25 b(whose)f(names)g(b)s(egin)g(with)g +Fq(pre\014x)6 b Ft(,)25 b(separated)g(b)m(y)630 1484 +y(the)k(\014rst)f(c)m(haracter)j(of)e(the)g Fs(IFS)f +Ft(sp)s(ecial)i(v)-5 b(ariable.)41 b(When)29 b(`)p Fs(@)p +Ft(')g(is)g(used)f(and)h(the)g(expan-)630 1594 y(sion)35 +b(app)s(ears)g(within)f(double)h(quotes,)i(eac)m(h)f(v)-5 +b(ariable)36 b(name)f(expands)g(to)g(a)h(separate)630 +1704 y(w)m(ord.)150 1873 y Fs(${!)p Fi(name)11 b Fs([@]})150 +1983 y(${!)p Fi(name)g Fs([*]})630 2092 y Ft(If)26 b +Fq(name)32 b 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 2202 y(in)c Fq(name)5 b Ft(.)39 b(If)23 +b Fq(name)30 b Ft(is)24 b(not)g(an)g(arra)m(y)-8 b(,)27 +b(expands)c(to)i(0)f(if)h Fq(name)k Ft(is)24 b(set)h(and)e(n)m(ull)h +(otherwise.)630 2311 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 2421 y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150 +2590 y Fs(${#)p Fi(parameter)11 b Fs(})630 2700 y Ft(The)40 +b(length)g(in)g(c)m(haracters)i(of)e(the)h(expanded)e(v)-5 +b(alue)41 b(of)f Fq(parameter)47 b Ft(is)40 b(substituted.)630 +2809 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 2919 y(parameters.)i(If)32 +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 3029 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 3198 y +Fs(${)p Fi(parameter)11 b Fs(#)p Fi(word)g Fs(})150 3308 +y(${)p Fi(parameter)g Fs(##)p Fi(word)g Fs(})630 3417 +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 +3527 y(Section)k(3.5.8)h([Filename)g(Expansion],)g(page)f(24\).)56 +b(If)35 b(the)h(pattern)f(matc)m(hes)i(the)e(b)s(e-)630 +3636 y(ginning)g(of)g(the)g(expanded)f(v)-5 b(alue)36 +b(of)f Fq(parameter)7 b Ft(,)36 b(then)f(the)g(result)g(of)g(the)g +(expansion)630 3746 y(is)28 b(the)g(expanded)e(v)-5 b(alue)28 +b(of)g Fq(parameter)35 b Ft(with)27 b(the)h(shortest)g(matc)m(hing)h +(pattern)f(\(the)g(`)p Fs(#)p Ft(')630 3856 y(case\))e(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 3965 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 +4075 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 4184 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 +4294 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 4463 +y Fs(${)p Fi(parameter)11 b Fs(\045)p Fi(word)g Fs(})150 +4573 y(${)p Fi(parameter)g Fs(\045\045)p Fi(word)g Fs(})630 +4682 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 4792 y(the)43 b(pattern)f(matc)m(hes)i(a)e(trailing)i(p)s +(ortion)e(of)g(the)h(expanded)e(v)-5 b(alue)43 b(of)g +Fq(parameter)7 b Ft(,)630 4902 y(then)39 b(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 5011 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 +5121 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 5230 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 5340 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)p eop end +%%Page: 22 28 +TeXDict begin 22 27 bop 150 -116 a Ft(22)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(op)s(eration)f(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 408 y(the)h(resultan)m(t)g(list.)150 +579 y Fs(${)p Fi(parameter)11 b Fs(/)p Fi(pattern)g Fs(/)p +Fi(s)o(tri)o(ng)f Fs(})630 688 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 798 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 +908 y(replaced)33 b(with)f Fq(string)8 b Ft(.)47 b(If)33 +b Fq(pattern)f Ft(b)s(egins)g(with)h(`)p Fs(/)p Ft(',)g(all)h(matc)m +(hes)f(of)g Fq(pattern)g Ft(are)g(re-)630 1017 y(placed)27 +b(with)f Fq(string)8 b Ft(.)40 b(Normally)27 b(only)g(the)g(\014rst)f +(matc)m(h)h(is)g(replaced.)40 b(If)26 b Fq(pattern)g +Ft(b)s(egins)630 1127 y(with)33 b(`)p Fs(#)p Ft(',)i(it)f(m)m(ust)f +(matc)m(h)i(at)f(the)g(b)s(eginning)f(of)g(the)h(expanded)f(v)-5 +b(alue)34 b(of)g Fq(parameter)7 b Ft(.)630 1236 y(If)34 +b Fq(pattern)g Ft(b)s(egins)g(with)g(`)p Fs(\045)p Ft(',)h(it)g(m)m +(ust)f(matc)m(h)h(at)g(the)f(end)g(of)g(the)h(expanded)e(v)-5 +b(alue)35 b(of)630 1346 y Fq(parameter)7 b Ft(.)40 b(If)29 +b Fq(string)36 b Ft(is)29 b(n)m(ull,)h(matc)m(hes)g(of)f +Fq(pattern)g Ft(are)g(deleted)h(and)e(the)h Fs(/)f Ft(follo)m(wing)630 +1455 y Fq(pattern)34 b Ft(ma)m(y)g(b)s(e)f(omitted.)51 +b(If)33 b Fq(parameter)41 b Ft(is)33 b(`)p Fs(@)p Ft(')h(or)g(`)p +Fs(*)p Ft(',)g(the)g(substitution)f(op)s(eration)630 +1565 y(is)38 b(applied)g(to)g(eac)m(h)h(p)s(ositional)g(parameter)f(in) +g(turn,)h(and)e(the)h(expansion)g(is)g(the)g(re-)630 +1675 y(sultan)m(t)f(list.)59 b(If)36 b Fq(parameter)43 +b Ft(is)36 b(an)g(arra)m(y)h(v)-5 b(ariable)37 b(subscripted)e(with)h +(`)p Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)h(the)630 1784 +y(substitution)30 b(op)s(eration)h(is)f(applied)g(to)h(eac)m(h)g(mem)m +(b)s(er)f(of)g(the)h(arra)m(y)g(in)f(turn,)f(and)h(the)630 +1894 y(expansion)g(is)h(the)f(resultan)m(t)h(list.)150 +2064 y Fs(${)p Fi(parameter)11 b Fs(^)p Fi(pattern)g +Fs(})150 2174 y(${)p Fi(parameter)g Fs(^^)p Fi(pattern)g +Fs(})150 2283 y(${)p Fi(parameter)g Fs(,)p Fi(pattern)g +Fs(})150 2393 y(${)p Fi(parameter)g Fs(,,)p Fi(pattern)g +Fs(})630 2502 y Ft(This)35 b(expansion)h(mo)s(di\014es)f(the)h(case)h +(of)f(alphab)s(etic)h(c)m(haracters)g(in)f Fq(parameter)7 +b Ft(.)57 b(The)630 2612 y Fq(pattern)36 b Ft(is)f(expanded)g(to)h(pro) +s(duce)e(a)i(pattern)g(just)f(as)h(in)f(\014lename)g(expansion.)56 +b(The)630 2722 y(`)p Fs(^)p Ft(')36 b(op)s(erator)g(con)m(v)m(erts)h +(lo)m(w)m(ercase)h(letters)f(matc)m(hing)g Fq(pattern)f +Ft(to)g(upp)s(ercase;)i(the)e(`)p Fs(,)p Ft(')630 2831 +y(op)s(erator)g(con)m(v)m(erts)i(matc)m(hing)f(upp)s(ercase)e(letters)i +(to)g(lo)m(w)m(ercase.)59 b(The)36 b(`)p Fs(^^)p Ft(')g(and)f(`)p +Fs(,,)p Ft(')630 2941 y(expansions)c(con)m(v)m(ert)i(eac)m(h)g(matc)m +(hed)f(c)m(haracter)h(in)e(the)h(expanded)f(v)-5 b(alue;)32 +b(the)g(`)p Fs(^)p Ft(')g(and)630 3050 y(`)p Fs(,)p Ft(')24 +b(expansions)f(matc)m(h)i(and)e(con)m(v)m(ert)j(only)d(the)h(\014rst)f +(c)m(haracter)j(in)d(the)h(expanded)f(v)-5 b(alue.)630 +3160 y(If)31 b Fq(pattern)g Ft(is)g(omitted,)i(it)f(is)f(treated)h(lik) +m(e)h(a)e(`)p Fs(?)p Ft(',)h(whic)m(h)f(matc)m(hes)i(ev)m(ery)f(c)m +(haracter.)44 b(If)630 3270 y Fq(parameter)37 b Ft(is)31 +b(`)p Fs(@)p Ft(')f(or)h(`)p Fs(*)p Ft(',)f(the)h(case)g(mo)s +(di\014cation)g(op)s(eration)g(is)f(applied)g(to)i(eac)m(h)f(p)s(osi-) +630 3379 y(tional)26 b(parameter)e(in)h(turn,)f(and)g(the)h(expansion)f +(is)g(the)h(resultan)m(t)g(list.)40 b(If)23 b Fq(parameter)32 +b Ft(is)630 3489 y(an)e(arra)m(y)g(v)-5 b(ariable)31 +b(subscripted)d(with)i(`)p Fs(@)p Ft(')g(or)f(`)p Fs(*)p +Ft(',)i(the)f(case)g(mo)s(di\014cation)h(op)s(eration)f(is)630 +3598 y(applied)d(to)g(eac)m(h)h(mem)m(b)s(er)e(of)h(the)g(arra)m(y)g +(in)g(turn,)g(and)f(the)h(expansion)f(is)h(the)g(resultan)m(t)630 +3708 y(list.)150 3918 y Fj(3.5.4)63 b(Command)41 b(Substitution)150 +4065 y Ft(Command)f(substitution)h(allo)m(ws)i(the)e(output)g(of)h(a)f +(command)g(to)h(replace)g(the)g(command)f(itself.)150 +4175 y(Command)29 b(substitution)h(o)s(ccurs)h(when)e(a)i(command)f(is) +g(enclosed)h(as)g(follo)m(ws:)390 4320 y Fs($\()p Fi(command)11 +b Fs(\))150 4465 y Ft(or)390 4611 y Fs(`)p Fi(command)g +Fs(`)150 4756 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 +4866 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 +4975 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 5085 y(command)21 b(substitution)g Fs($\(cat)29 +b Fi(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 +Fi(file)11 b Fs(\))p Ft(.)275 5230 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 5340 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)p eop end +%%Page: 23 29 +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)150 299 +y(bac)m(kslash)41 b(terminates)g(the)f(command)g(substitution.)69 +b(When)40 b(using)g(the)g Fs($\()p Fi(command)11 b Fs(\))37 +b Ft(form,)42 b(all)150 408 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 543 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 653 y(the)31 +b(inner)e(bac)m(kquotes)j(with)e(bac)m(kslashes.)275 +787 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 +897 y(are)i(not)f(p)s(erformed)f(on)h(the)h(results.)150 +1096 y Fj(3.5.5)63 b(Arithmetic)40 b(Expansion)150 1243 +y Ft(Arithmetic)25 b(expansion)g(allo)m(ws)g(the)g(ev)-5 +b(aluation)26 b(of)f(an)f(arithmetic)i(expression)e(and)g(the)g +(substitution)150 1353 y(of)31 b(the)f(result.)41 b(The)30 +b(format)g(for)g(arithmetic)i(expansion)e(is:)390 1488 +y Fs($\(\()47 b Fi(expression)55 b Fs(\)\))275 1622 y +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 +1732 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 1841 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 1976 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 2086 y(Arithmetic],)32 +b(page)f(78\).)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 +2195 y(to)f(the)g(standard)e(error)h(and)g(no)g(substitution)g(o)s +(ccurs.)150 2395 y Fj(3.5.6)63 b(Pro)s(cess)42 b(Substitution)150 +2542 y Ft(Pro)s(cess)i(substitution)g(is)g(supp)s(orted)f(on)h(systems) +g(that)h(supp)s(ort)d(named)i(pip)s(es)f(\()p Fl(fif)n(o)p +Ft(s\))i(or)f(the)150 2651 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 2786 y Fs(<\()p Fi(list)11 +b Fs(\))150 2921 y Ft(or)390 3055 y Fs(>\()p Fi(list)g +Fs(\))150 3190 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 +3300 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)g +(of)g(the)150 3409 y(expansion.)40 b(If)28 b(the)h Fs(>\()p +Fi(list)11 b Fs(\))26 b Ft(form)h(is)i(used,)f(writing)h(to)g(the)f +(\014le)h(will)g(pro)m(vide)f(input)g(for)g Fq(list)r +Ft(.)41 b(If)28 b(the)150 3519 y Fs(<\()p Fi(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 3628 y Fq(list)r Ft(.)41 b(Note)31 b(that)f(no)f(space)h(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)g(left)h(paren)m(thesis,)h(otherwise)150 +3738 y(the)g(construct)f(w)m(ould)g(b)s(e)g(in)m(terpreted)h(as)f(a)h +(redirection.)275 3873 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 3982 y(v)-5 b(ariable)31 +b(expansion,)g(command)f(substitution,)g(and)g(arithmetic)i(expansion.) +150 4182 y Fj(3.5.7)63 b(W)-10 b(ord)41 b(Splitting)150 +4329 y Ft(The)30 b(shell)h(scans)g(the)g(results)f(of)h(parameter)g +(expansion,)g(command)g(substitution,)g(and)f(arithmetic)150 +4438 y(expansion)g(that)h(did)f(not)g(o)s(ccur)h(within)e(double)h +(quotes)h(for)f(w)m(ord)g(splitting.)275 4573 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 4682 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 4792 y Fs()p +Ft(,)26 b(the)32 b(default,)g(then)f(sequences)h(of)62 +b Fs()p Ft(,)30 b Fs()p Ft(,)h(and)f Fs()150 +4902 y Ft(at)39 b(the)f(b)s(eginning)g(and)f(end)h(of)g(the)h(results)f +(of)g(the)g(previous)g(expansions)g(are)g(ignored,)j(and)d(an)m(y)150 +5011 y(sequence)31 b(of)g Fs(IFS)f Ft(c)m(haracters)j(not)e(at)g(the)g +(b)s(eginning)g(or)f(end)h(serv)m(es)g(to)h(delimit)f(w)m(ords.)42 +b(If)30 b Fs(IFS)g Ft(has)150 5121 y(a)g(v)-5 b(alue)30 +b(other)g(than)g(the)g(default,)g(then)f(sequences)h(of)g(the)g +(whitespace)g(c)m(haracters)h Fs(space)e Ft(and)g Fs(tab)150 +5230 y Ft(are)36 b(ignored)g(at)g(the)g(b)s(eginning)f(and)g(end)g(of)h +(the)g(w)m(ord,)h(as)f(long)g(as)g(the)g(whitespace)h(c)m(haracter)g +(is)150 5340 y(in)f(the)g(v)-5 b(alue)36 b(of)g Fs(IFS)f +Ft(\(an)h Fs(IFS)f Ft(whitespace)h(c)m(haracter\).)60 +b(An)m(y)35 b(c)m(haracter)j(in)d Fs(IFS)g Ft(that)i(is)f(not)g +Fs(IFS)p eop end +%%Page: 24 30 +TeXDict begin 24 29 bop 150 -116 a Ft(24)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y(whitespace,)c(along)f(with)f(an)m(y)g +(adjacen)m(t)h Fs(IFS)e Ft(whitespace)i(c)m(haracters,)i(delimits)e(a)f +(\014eld.)38 b(A)26 b(sequence)150 408 y(of)35 b Fs(IFS)f +Ft(whitespace)h(c)m(haracters)i(is)d(also)i(treated)g(as)f(a)g +(delimiter.)55 b(If)34 b(the)h(v)-5 b(alue)35 b(of)g +Fs(IFS)f Ft(is)h(n)m(ull,)h(no)150 518 y(w)m(ord)30 b(splitting)h(o)s +(ccurs.)275 648 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 758 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 +867 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 997 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 1187 y Fj(3.5.8)63 +b(Filename)41 b(Expansion)150 1334 y Ft(After)26 b(w)m(ord)g +(splitting,)i(unless)d(the)i(`)p Fs(-f)p Ft(')f(option)g(has)g(b)s(een) +f(set)i(\(see)g(Section)g(4.3.1)h([The)e(Set)g(Builtin],)150 +1444 y(page)h(51\),)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 +1553 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 1663 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 1772 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 +1882 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 1991 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 2101 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 2211 y(alphab)s(etic)d(c)m +(haracters.)275 2341 y(When)23 b(a)h(pattern)f(is)h(used)f(for)g +(\014lename)h(expansion,)h(the)e(c)m(haracter)i(`)p Fs(.)p +Ft(')f(at)g(the)g(start)g(of)g(a)g(\014lename)150 2450 +y(or)f(immediately)i(follo)m(wing)g(a)f(slash)f(m)m(ust)h(b)s(e)f(matc) +m(hed)h(explicitly)-8 b(,)27 b(unless)c(the)g(shell)h(option)g +Fs(dotglob)150 2560 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 2669 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 2799 y(See)28 b(the)g(description)g +(of)g Fs(shopt)e Ft(in)i(Section)g(4.3.2)i([The)e(Shopt)f(Builtin],)i +(page)g(55,)g(for)f(a)g(descrip-)150 2909 y(tion)j(of)f(the)h +Fs(nocaseglob)p Ft(,)d Fs(nullglob)p Ft(,)g Fs(failglob)p +Ft(,)h(and)g Fs(dotglob)g Ft(options.)275 3039 y(The)j +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 +3148 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 3258 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 +3367 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 3477 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 3587 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 3696 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 +3806 y Fs(GLOBIGNORE)28 b Ft(is)i(unset.)150 3996 y Fj(3.5.8.1)63 +b(P)m(attern)40 b(Matc)m(hing)150 4143 y Ft(An)m(y)24 +b(c)m(haracter)h(that)f(app)s(ears)f(in)g(a)h(pattern,)i(other)e(than)f +(the)h(sp)s(ecial)g(pattern)g(c)m(haracters)h(describ)s(ed)150 +4252 y(b)s(elo)m(w,)31 b(matc)m(hes)g(itself.)42 b(The)29 +b Fl(nul)h Ft(c)m(haracter)i(ma)m(y)e(not)h(o)s(ccur)f(in)g(a)h +(pattern.)40 b(A)31 b(bac)m(kslash)g(escap)s(es)150 4362 +y(the)38 b(follo)m(wing)g(c)m(haracter;)43 b(the)37 b(escaping)i(bac)m +(kslash)e(is)h(discarded)f(when)f(matc)m(hing.)63 b(The)36 +b(sp)s(ecial)150 4471 y(pattern)30 b(c)m(haracters)i(m)m(ust)f(b)s(e)e +(quoted)i(if)f(they)h(are)f(to)i(b)s(e)d(matc)m(hed)i(literally)-8 +b(.)275 4601 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 4751 y Fs(*)432 +b Ft(Matc)m(hes)31 b(an)m(y)e(string,)h(including)f(the)g(n)m(ull)g +(string.)41 b(When)29 b(the)g Fs(globstar)e Ft(shell)i(option)630 +4861 y(is)37 b(enabled,)h(and)e(`)p Fs(*)p Ft(')h(is)g(used)f(in)g(a)h +(\014lename)g(expansion)g(con)m(text,)j(t)m(w)m(o)e(adjacen)m(t)g(`)p +Fs(*)p Ft('s)630 4971 y(used)f(as)g(a)h(single)g(pattern)g(will)f(matc) +m(h)i(all)f(\014les)f(and)g(zero)h(or)g(more)f(directories)i(and)630 +5080 y(sub)s(directories.)g(If)25 b(follo)m(w)m(ed)j(b)m(y)e(a)g(`)p +Fs(/)p Ft(',)h(t)m(w)m(o)g(adjacen)m(t)h(`)p Fs(*)p Ft('s)e(will)g +(matc)m(h)h(only)f(directories)630 5190 y(and)k(sub)s(directories.)150 +5340 y Fs(?)432 b Ft(Matc)m(hes)32 b(an)m(y)f(single)g(c)m(haracter.)p +eop end +%%Page: 25 31 +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)150 299 +y Fs([...)o(])241 b Ft(Matc)m(hes)27 b(an)m(y)e(one)g(of)g(the)g +(enclosed)g(c)m(haracters.)41 b(A)25 b(pair)f(of)h(c)m(haracters)i +(separated)e(b)m(y)g(a)630 408 y(h)m(yphen)i(denotes)h(a)g +Fq(range)g(expression)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 518 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 628 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 737 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)h(it)g(as)g(the)630 847 +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 956 y(\014rst)25 b(c)m(haracter)i(in)e +(the)h(set.)40 b(The)25 b(sorting)h(order)f(of)h(c)m(haracters)h(in)f +(range)g(expressions)f(is)630 1066 y(determined)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 1176 y(if)30 +b(set.)630 1309 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 1418 +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 1528 +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 1637 y(to)34 b(`)p Fs([aBbCcDdxXyYz])p +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 1747 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 1857 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 1990 +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 +2099 y(where)30 b Fq(class)35 b Ft(is)30 b(one)h(of)f(the)h(follo)m +(wing)h(classes)f(de\014ned)e(in)h(the)h Fl(posix)f Ft(standard:)870 +2233 y Fs(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g(digit)g(graph)g +(lower)870 2342 y(print)g(punct)g(space)f(upper)h(word)190 +b(xdigit)630 2475 y Ft(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 2585 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 2718 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 2828 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 2937 +y(curren)m(t)g(lo)s(cale\))j(as)d(the)h(c)m(haracter)h +Fq(c)6 b Ft(.)630 3070 y(Within)21 b(`)p Fs([)p Ft(')h(and)e(`)p +Fs(])p Ft(',)j(the)f(syn)m(tax)f Fs([.)p Fq(sym)m(b)s(ol)t +Fs(.])f Ft(matc)m(hes)i(the)f(collating)j(sym)m(b)s(ol)c +Fq(sym)m(b)s(ol)t Ft(.)275 3227 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 3336 +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 3446 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 +3556 y(more)e(of)f(the)h(follo)m(wing)g(sub-patterns:)150 +3712 y Fs(?\()p Fi(pattern-list)11 b Fs(\))630 3822 y +Ft(Matc)m(hes)32 b(zero)f(or)g(one)f(o)s(ccurrence)h(of)f(the)h(giv)m +(en)g(patterns.)150 3979 y Fs(*\()p Fi(pattern-list)11 +b Fs(\))630 4088 y Ft(Matc)m(hes)32 b(zero)f(or)g(more)f(o)s +(ccurrences)h(of)f(the)h(giv)m(en)g(patterns.)150 4245 +y Fs(+\()p Fi(pattern-list)11 b Fs(\))630 4354 y Ft(Matc)m(hes)32 +b(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m(en)i(patterns.) +150 4511 y Fs(@\()p Fi(pattern-list)11 b Fs(\))630 4621 +y Ft(Matc)m(hes)32 b(one)f(of)f(the)h(giv)m(en)g(patterns.)150 +4777 y Fs(!\()p Fi(pattern-list)11 b Fs(\))630 4887 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 5083 y Fj(3.5.9)63 b(Quote)41 b(Remo)m(v)-7 +b(al)150 5230 y Ft(After)32 b(the)g(preceding)g(expansions,)h(all)f +(unquoted)f(o)s(ccurrences)h(of)g(the)h(c)m(haracters)g(`)p +Fs(\\)p Ft(',)g(`)p Fs(')p Ft(',)f(and)g(`)p Fs(")p Ft(')150 +5340 y(that)f(did)f(not)g(result)g(from)g(one)h(of)g(the)f(ab)s(o)m(v)m +(e)i(expansions)e(are)h(remo)m(v)m(ed.)p eop end +%%Page: 26 32 +TeXDict begin 26 31 bop 150 -116 a Ft(26)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(3.6)68 b(Redirections)150 +458 y Ft(Before)43 b(a)f(command)f(is)h(executed,)j(its)d(input)f(and)g +(output)g(ma)m(y)i(b)s(e)e Fq(redirected)k Ft(using)c(a)h(sp)s(ecial) +150 568 y(notation)33 b(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 677 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 787 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 897 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 +1048 y(Eac)m(h)45 b(redirection)h(that)f(ma)m(y)h(b)s(e)e(preceded)g(b) +m(y)h(a)h(\014le)f(descriptor)f(n)m(um)m(b)s(er)g(ma)m(y)h(instead)h(b) +s(e)150 1158 y(preceded)41 b(b)m(y)g(a)g(w)m(ord)g(of)g(the)g(form)g +Fs({)p Fq(v)-5 b(arname)5 b Fs(})p Ft(.)72 b(In)40 b(this)h(case,)k +(for)c(eac)m(h)h(redirection)g(op)s(erator)150 1267 y(except)30 +b Fs(>)p Ft(&-)f(and)f Fs(<)p Ft(&-,)h(the)g(shell)g(will)h(allo)s +(cate)h(a)e(\014le)h(descriptor)e(greater)j(than)d(10)i(and)e(assign)i +(it)f(to)150 1377 y Fs({)p Fq(v)-5 b(arname)5 b Fs(})p +Ft(.)42 b(If)31 b Fs(>)p Ft(&-)f(or)h Fs(<)p Ft(&-)g(is)g(preceded)g(b) +m(y)g Fs({)p Fq(v)-5 b(arname)5 b Fs(})p Ft(,)31 b(the)g(v)-5 +b(alue)31 b(of)g Fq(v)-5 b(arname)37 b Ft(de\014nes)30 +b(the)h(\014le)150 1486 y(descriptor)f(to)h(close.)275 +1638 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 1747 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 1857 y(descriptor)33 +b(0\).)49 b(If)33 b(the)g(\014rst)f(c)m(haracter)i(of)g(the)f +(redirection)g(op)s(erator)h(is)f(`)p Fs(>)p Ft(',)h(the)f(redirection) +g(refers)150 1966 y(to)e(the)g(standard)e(output)h(\(\014le)h +(descriptor)f(1\).)275 2118 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 2227 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 2337 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 2447 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 +2598 y(Note)h(that)g(the)g(order)f(of)g(redirections)h(is)g +(signi\014can)m(t.)41 b(F)-8 b(or)31 b(example,)h(the)e(command)390 +2749 y Fs(ls)47 b(>)h Fi(dirlist)56 b Fs(2>&1)150 2901 +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 3010 y(\014le)h Fq(dirlist)r Ft(,)h(while)f(the)h(command)390 +3161 y Fs(ls)47 b(2>&1)g(>)g Fi(dirlist)150 3313 y Ft(directs)28 +b(only)f(the)g(standard)g(output)g(to)h(\014le)f Fq(dirlist)r +Ft(,)h(b)s(ecause)g(the)f(standard)g(error)g(w)m(as)g(made)h(a)f(cop)m +(y)150 3422 y(of)k(the)f(standard)g(output)g(b)s(efore)g(the)g +(standard)g(output)g(w)m(as)g(redirected)h(to)g Fq(dirlist)r +Ft(.)275 3574 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 3683 y(in)k(the)h(follo)m(wing)g(table:)150 +3868 y Fs(/dev/fd/)p Fi(fd)630 3977 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 4154 y Fs(/dev/stdin)630 +4263 y Ft(File)i(descriptor)e(0)h(is)f(duplicated.)150 +4440 y Fs(/dev/stdout)630 4549 y Ft(File)i(descriptor)e(1)h(is)f +(duplicated.)150 4725 y Fs(/dev/stderr)630 4835 y Ft(File)i(descriptor) +e(2)h(is)f(duplicated.)150 5011 y Fs(/dev/tcp/)p Fi(host)11 +b Fs(/)p Fi(port)630 5121 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 5230 +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 5340 y(corresp)s(onding)29 +b(so)s(c)m(k)m(et.)p eop end +%%Page: 27 33 +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 Fs(/dev/udp/)p Fi(host)11 b Fs(/)p Fi(port)630 408 +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 518 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 +628 y(corresp)s(onding)29 b(so)s(c)m(k)m(et.)275 785 +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.)275 918 y(Redirections)f(using)e(\014le)i +(descriptors)f(greater)h(than)f(9)h(should)e(b)s(e)h(used)f(with)h +(care,)h(as)g(they)f(ma)m(y)150 1027 y(con\015ict)i(with)f(\014le)h +(descriptors)f(the)g(shell)h(uses)f(in)m(ternally)-8 +b(.)150 1224 y Fj(3.6.1)63 b(Redirecting)40 b(Input)150 +1371 y Ft(Redirection)35 b(of)f(input)f(causes)i(the)f(\014le)g(whose)g +(name)g(results)g(from)g(the)g(expansion)g(of)g Fq(w)m(ord)k +Ft(to)d(b)s(e)150 1481 y(op)s(ened)d(for)g(reading)g(on)g(\014le)h +(descriptor)f Fs(n)p Ft(,)h(or)f(the)g(standard)g(input)f(\(\014le)i +(descriptor)f(0\))h(if)f Fs(n)g Ft(is)h(not)150 1590 +y(sp)s(eci\014ed.)275 1724 y(The)c(general)j(format)e(for)h +(redirecting)g(input)e(is:)390 1857 y Fs([)p Fi(n)11 +b Fs(]<)p Fi(word)150 2054 y Fj(3.6.2)63 b(Redirecting)40 +b(Output)150 2200 y Ft(Redirection)31 b(of)g(output)f(causes)h(the)f +(\014le)h(whose)f(name)g(results)h(from)e(the)i(expansion)f(of)h +Fq(w)m(ord)i Ft(to)f(b)s(e)150 2310 y(op)s(ened)d(for)g(writing)g(on)g +(\014le)h(descriptor)f Fq(n)p Ft(,)g(or)g(the)h(standard)e(output)h +(\(\014le)h(descriptor)f(1\))h(if)g Fq(n)e Ft(is)i(not)150 +2420 y(sp)s(eci\014ed.)40 b(If)30 b(the)g(\014le)h(do)s(es)f(not)h +(exist)g(it)g(is)f(created;)i(if)e(it)h(do)s(es)f(exist)h(it)g(is)g +(truncated)f(to)h(zero)g(size.)275 2553 y(The)e(general)j(format)e(for) +h(redirecting)g(output)f(is:)390 2686 y Fs([)p Fi(n)11 +b Fs(]>[|])p Fi(word)275 2819 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 +2929 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 3039 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 +3148 y(`)p Fs(>)p Ft(')36 b(and)f(the)g Fs(noclobber)e +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 3258 y(named)30 b(b)m(y)g +Fq(w)m(ord)k Ft(exists.)150 3455 y Fj(3.6.3)63 b(App)s(ending)42 +b(Redirected)e(Output)150 3601 y Ft(Redirection)23 b(of)e(output)h(in)f +(this)h(fashion)f(causes)h(the)g(\014le)g(whose)f(name)h(results)f +(from)g(the)h(expansion)g(of)150 3711 y Fq(w)m(ord)28 +b Ft(to)e(b)s(e)e(op)s(ened)g(for)h(app)s(ending)e(on)i(\014le)g +(descriptor)g Fq(n)p Ft(,)g(or)g(the)g(standard)f(output)h(\(\014le)g +(descriptor)150 3821 y(1\))31 b(if)f Fq(n)g Ft(is)h(not)f(sp)s +(eci\014ed.)40 b(If)30 b(the)h(\014le)f(do)s(es)g(not)h(exist)g(it)g +(is)f(created.)275 3954 y(The)f(general)j(format)e(for)h(app)s(ending)e +(output)h(is:)390 4087 y Fs([)p Fi(n)11 b Fs(]>>)p Fi(word)150 +4284 y Fj(3.6.4)63 b(Redirecting)40 b(Standard)h(Output)g(and)g +(Standard)g(Error)150 4431 y Ft(This)33 b(construct)i(allo)m(ws)g(b)s +(oth)f(the)g(standard)g(output)f(\(\014le)i(descriptor)f(1\))h(and)f +(the)g(standard)f(error)150 4540 y(output)d(\(\014le)h(descriptor)f +(2\))h(to)g(b)s(e)f(redirected)h(to)g(the)f(\014le)h(whose)f(name)h(is) +f(the)g(expansion)h(of)f Fq(w)m(ord)t Ft(.)275 4674 y(There)f(are)i(t)m +(w)m(o)h(formats)e(for)h(redirecting)g(standard)e(output)h(and)g +(standard)f(error:)390 4807 y Fs(&>)p Fi(word)150 4940 +y Ft(and)390 5073 y Fs(>&)p Fi(word)150 5207 y Ft(Of)h(the)g(t)m(w)m(o) +i(forms,)e(the)h(\014rst)e(is)i(preferred.)39 b(This)30 +b(is)g(seman)m(tically)j(equiv)-5 b(alen)m(t)32 b(to)390 +5340 y Fs(>)p Fi(word)57 b Fs(2>&1)p eop end +%%Page: 28 34 +TeXDict begin 28 33 bop 150 -116 a Ft(28)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fj(3.6.5)63 b(App)s(ending)42 +b(Standard)f(Output)g(and)g(Standard)g(Error)150 446 +y Ft(This)33 b(construct)i(allo)m(ws)g(b)s(oth)f(the)g(standard)g +(output)f(\(\014le)i(descriptor)f(1\))h(and)f(the)g(standard)f(error) +150 555 y(output)d(\(\014le)h(descriptor)f(2\))h(to)g(b)s(e)f(app)s +(ended)f(to)i(the)f(\014le)h(whose)f(name)g(is)h(the)f(expansion)h(of)f +Fq(w)m(ord)t Ft(.)275 689 y(The)f(format)i(for)f(app)s(ending)f +(standard)h(output)g(and)f(standard)h(error)g(is:)390 +822 y Fs(&>>)p Fi(word)150 955 y Ft(This)g(is)g(seman)m(tically)j +(equiv)-5 b(alen)m(t)32 b(to)390 1089 y Fs(>>)p Fi(word)57 +b Fs(2>&1)150 1286 y Fj(3.6.6)63 b(Here)41 b(Do)s(cumen)m(ts)150 +1432 y Ft(This)c(t)m(yp)s(e)h(of)f(redirection)i(instructs)e(the)h +(shell)f(to)i(read)e(input)g(from)g(the)h(curren)m(t)f(source)h(un)m +(til)g(a)150 1542 y(line)31 b(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 +1652 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 1785 y(The)e(format)i(of)g(here-do)s(cumen)m +(ts)f(is:)390 1918 y Fs(<<[)p Fp(\000)p Fs(])p Fi(word)772 +2028 y(here-document)390 2137 y(delimiter)275 2271 y +Ft(No)j(parameter)h(expansion,)g(command)f(substitution,)h(arithmetic)h +(expansion,)f(or)f(\014lename)g(ex-)150 2380 y(pansion)h(is)h(p)s +(erformed)f(on)g Fq(w)m(ord)t Ft(.)54 b(If)34 b(an)m(y)h(c)m(haracters) +i(in)d Fq(w)m(ord)k Ft(are)d(quoted,)i(the)e Fq(delimiter)42 +b Ft(is)35 b(the)150 2490 y(result)40 b(of)g(quote)h(remo)m(v)-5 +b(al)42 b(on)e Fq(w)m(ord)t Ft(,)i(and)d(the)i(lines)f(in)g(the)g +(here-do)s(cumen)m(t)h(are)f(not)g(expanded.)150 2600 +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 2709 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 2819 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 2952 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 3062 y(lines)33 b(and)e(the)i(line)g +(con)m(taining)h Fq(delimiter)7 b Ft(.)47 b(This)31 b(allo)m(ws)j +(here-do)s(cumen)m(ts)f(within)e(shell)i(scripts)f(to)150 +3171 y(b)s(e)e(inden)m(ted)g(in)g(a)h(natural)f(fashion.)150 +3368 y Fj(3.6.7)63 b(Here)41 b(Strings)150 3515 y Ft(A)30 +b(v)-5 b(arian)m(t)32 b(of)e(here)h(do)s(cumen)m(ts,)f(the)g(format)h +(is:)390 3648 y Fs(<<<)47 b Fi(word)275 3782 y Ft(The)29 +b Fq(w)m(ord)34 b Ft(is)c(expanded)g(and)g(supplied)f(to)i(the)f +(command)h(on)f(its)h(standard)e(input.)150 3979 y Fj(3.6.8)63 +b(Duplicating)41 b(File)g(Descriptors)150 4125 y Ft(The)30 +b(redirection)h(op)s(erator)390 4259 y Fs([)p Fi(n)11 +b Fs(]<&)p Fi(word)150 4392 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 4502 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 4611 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 +4721 y(to)31 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 +4830 y(is)g(used.)275 4964 y(The)f(op)s(erator)390 5097 +y Fs([)p Fi(n)11 b Fs(]>&)p Fi(word)150 5230 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 +5340 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)p +eop end +%%Page: 29 35 +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)150 299 +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 408 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 518 y(describ)s(ed)h(previously)-8 +b(.)150 717 y Fj(3.6.9)63 b(Mo)m(ving)41 b(File)h(Descriptors)150 +864 y Ft(The)30 b(redirection)h(op)s(erator)390 999 y +Fs([)p Fi(n)11 b Fs(]<&)p Fi(digit)g Fs(-)150 1133 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 1243 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 1377 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s +(erator)390 1512 y Fs([)p Fi(n)11 b Fs(]>&)p Fi(digit)g +Fs(-)150 1646 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 +1756 y(if)i Fq(n)g Ft(is)h(not)f(sp)s(eci\014ed.)150 +1955 y Fj(3.6.10)63 b(Op)s(ening)42 b(File)g(Descriptors)g(for)g +(Reading)e(and)h(W)-10 b(riting)150 2102 y Ft(The)30 +b(redirection)h(op)s(erator)390 2236 y Fs([)p Fi(n)11 +b Fs(]<>)p Fi(word)150 2371 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 2480 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 2590 y(exist,)e(it)g(is)g +(created.)150 2822 y Fr(3.7)68 b(Executing)46 b(Commands)150 +3046 y Fj(3.7.1)63 b(Simple)41 b(Command)h(Expansion)150 +3193 y Ft(When)33 b(a)g(simple)g(command)g(is)g(executed,)h(the)g +(shell)f(p)s(erforms)e(the)i(follo)m(wing)i(expansions,)e(assign-)150 +3303 y(men)m(ts,)e(and)f(redirections,)h(from)f(left)h(to)g(righ)m(t.) +199 3437 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 3547 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 +3681 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 3791 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g +(17\).)61 b(If)37 b(an)m(y)g(w)m(ords)f(remain)h(after)h(expansion,)h +(the)e(\014rst)330 3901 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 4010 y(men)m(ts.)199 4145 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(26\).)199 +4279 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 4389 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 4498 y(b)s(eing)30 +b(assigned)h(to)g(the)f(v)-5 b(ariable.)275 4658 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 4767 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 4877 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 4986 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 +5096 y(status.)275 5230 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 5340 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.)p eop end +%%Page: 30 36 +TeXDict begin 30 35 bop 150 -116 a Ft(30)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 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 408 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 518 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 628 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 737 y(zero.)150 +925 y Fj(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h(Execution)150 +1071 y Ft(After)i(a)h(command)f(has)g(b)s(een)f(split)h(in)m(to)h(w)m +(ords,)j(if)c(it)g(results)g(in)g(a)h(simple)f(command)g(and)f(an)150 +1181 y(optional)32 b(list)f(of)f(argumen)m(ts,)h(the)g(follo)m(wing)g +(actions)h(are)f(tak)m(en.)199 1310 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 1419 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 +1529 y(F)-8 b(unctions],)31 b(page)h(14.)199 1657 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 +1767 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 1895 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 2005 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 2115 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 2224 +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 2334 y(Builtins],)37 b(page)f(35\).)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)330 2443 y(command)24 b(is)h(not)g(found)e(in)i(the)g(hash)f +(table.)39 b(If)25 b(the)f(searc)m(h)i(is)e(unsuccessful,)h(the)g +(shell)g(searc)m(hes)330 2553 y(for)e(a)h(de\014ned)e(shell)h(function) +h(named)e Fs(command_not_found_handle)p Ft(.)32 b(If)23 +b(that)h(function)f(exists,)330 2663 y(it)32 b(is)f(in)m(v)m(ok)m(ed)i +(with)e(the)h(original)g(command)f(and)g(the)h(original)g(command's)f +(argumen)m(ts)h(as)g(its)330 2772 y(argumen)m(ts,)h(and)e(the)i +(function's)e(exit)i(status)g(b)s(ecomes)f(the)g(exit)h(status)f(of)h +(the)f(shell.)46 b(If)31 b(that)330 2882 y(function)g(is)g(not)g +(de\014ned,)f(the)i(shell)f(prin)m(ts)f(an)h(error)g(message)h(and)f +(returns)e(an)i(exit)h(status)g(of)330 2991 y(127.)199 +3120 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 3229 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 3339 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 3449 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8 +b(.)199 3577 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 3687 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 +3796 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(33.)199 +3925 y(6.)61 b(If)38 b(the)h(command)f(w)m(as)h(not)g(b)s(egun)e(async) +m(hronously)-8 b(,)42 b(the)c(shell)h(w)m(aits)h(for)e(the)h(command)f +(to)330 4034 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150 +4222 y Fj(3.7.3)63 b(Command)41 b(Execution)f(En)m(vironmen)m(t)150 +4369 y Ft(The)30 b(shell)g(has)h(an)f Fq(execution)h(en)m(vironmen)m(t) +r Ft(,)h(whic)m(h)e(consists)h(of)f(the)h(follo)m(wing:)225 +4497 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 4607 y(the)g Fs(exec)e +Ft(builtin)225 4735 y Fp(\017)60 b Ft(the)28 b(curren)m(t)g(w)m(orking) +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 4845 y(in)m(v)m(o)s(cation)225 4973 y Fp(\017)60 +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 +5102 y Fp(\017)60 b Ft(curren)m(t)30 b(traps)g(set)h(b)m(y)f +Fs(trap)225 5230 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 5340 y(shell's)i(paren)m(t) +f(in)g(the)h(en)m(vironmen)m(t)p eop end +%%Page: 31 37 +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)225 299 +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 408 y(en)m(vironmen)m(t)225 543 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 +652 y(b)m(y)c Fs(set)225 787 y Fp(\017)60 b Ft(options)31 +b(enabled)f(b)m(y)g Fs(shopt)f Ft(\(see)j(Section)f(4.3.2)h([The)e +(Shopt)g(Builtin],)h(page)g(55\))225 921 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(79\))225 +1056 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 1165 y(page)31 +b(8\),)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 1324 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 1434 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 1543 y(noted,)31 +b(the)f(v)-5 b(alues)31 b(are)g(inherited)f(from)g(the)g(shell.)225 +1678 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 1787 y(the)g(command)225 1922 +y Fp(\017)60 b Ft(the)31 b(curren)m(t)f(w)m(orking)g(directory)225 +2056 y Fp(\017)60 b Ft(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225 +2190 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 2300 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(31\))225 2434 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 2544 y(traps)e(ignored)h(b)m(y)f(the)g(shell)h(are)g(ignored) +275 2703 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 +2813 y(en)m(vironmen)m(t.)275 2947 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 3057 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 3166 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 +3276 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 3385 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 +3495 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275 +3629 y(Subshells)24 b(spa)m(wned)h(to)i(execute)g(command)f +(substitutions)g(inherit)g(the)g(v)-5 b(alue)26 b(of)g(the)h(`)p +Fs(-e)p Ft(')e(option)150 3739 y(from)20 b(the)h(paren)m(t)g(shell.)37 +b(When)21 b(not)f(in)h Fl(posix)f Ft(mo)s(de,)i(Bash)f(clears)g(the)g +(`)p Fs(-e)p Ft(')f(option)h(in)g(suc)m(h)f(subshells.)275 +3873 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 3983 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 4093 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 4292 y Fj(3.7.4)63 +b(En)m(vironmen)m(t)150 4438 y Ft(When)28 b(a)i(program)e(is)h(in)m(v)m +(ok)m(ed)h(it)f(is)g(giv)m(en)g(an)g(arra)m(y)g(of)g(strings)f(called)i +(the)f Fq(en)m(vironmen)m(t)r Ft(.)41 b(This)28 b(is)h(a)150 +4548 y(list)i(of)g(name-v)-5 b(alue)31 b(pairs,)f(of)h(the)f(form)g +Fs(name=value)p Ft(.)275 4682 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 4792 +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 +4902 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 5011 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 5121 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 5230 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 +5340 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)p eop end +%%Page: 32 38 +TeXDict begin 32 37 bop 150 -116 a Ft(32)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 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 +408 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 549 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 659 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 768 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 +909 y(If)d(the)h(`)p Fs(-k)p Ft(')g(option)g(is)g(set)g(\(see)h +(Section)f(4.3.1)i([The)e(Set)g(Builtin],)h(page)f(51\),)i(then)e(all)g +(parameter)150 1019 y(assignmen)m(ts)i(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 1128 y(command)g(name.)275 1269 y(When)f(Bash)h(in)m +(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 1379 y(of)h(the)f(command)g(and)g(passed)g(to)h(that)g +(command)f(in)g(its)h(en)m(vironmen)m(t.)150 1585 y Fj(3.7.5)63 +b(Exit)40 b(Status)150 1731 y Ft(The)26 b(exit)h(status)f(of)g(an)g +(executed)h(command)f(is)g(the)h(v)-5 b(alue)26 b(returned)f(b)m(y)h +(the)g Fq(w)m(aitpid)k Ft(system)d(call)g(or)150 1841 +y(equiv)-5 b(alen)m(t)33 b(function.)45 b(Exit)32 b(statuses)g(fall)g +(b)s(et)m(w)m(een)h(0)f(and)f(255,)i(though,)f(as)g(explained)g(b)s +(elo)m(w,)h(the)150 1951 y(shell)i(ma)m(y)g(use)f(v)-5 +b(alues)35 b(ab)s(o)m(v)m(e)g(125)h(sp)s(ecially)-8 b(.)54 +b(Exit)35 b(statuses)g(from)f(shell)h(builtins)f(and)f(comp)s(ound)150 +2060 y(commands)j(are)g(also)h(limited)g(to)g(this)f(range.)58 +b(Under)36 b(certain)h(circumstances,)h(the)e(shell)h(will)f(use)150 +2170 y(sp)s(ecial)31 b(v)-5 b(alues)31 b(to)g(indicate)g(sp)s(eci\014c) +f(failure)h(mo)s(des.)275 2311 y(F)-8 b(or)32 b(the)g(shell's)g(purp)s +(oses,)e(a)j(command)e(whic)m(h)h(exits)g(with)g(a)g(zero)g(exit)h +(status)f(has)f(succeeded.)150 2420 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 2530 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 2639 y(failure)37 b(mo)s(des.)61 b(When)37 +b(a)g(command)g(terminates)h(on)f(a)g(fatal)i(signal)f(whose)f(n)m(um)m +(b)s(er)e(is)i Fq(N)10 b Ft(,)38 b(Bash)150 2749 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 2890 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 2999 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 +3140 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 +3250 y(is)c(greater)i(than)e(zero.)275 3391 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 3500 +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 +3610 y(page)31 b(8\).)275 3751 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 3860 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 3970 y(return)29 +b(an)i(exit)g(status)g(of)f(2)h(to)g(indicate)g(incorrect)h(usage.)150 +4175 y Fj(3.7.6)63 b(Signals)150 4322 y Ft(When)36 b(Bash)g(is)h(in)m +(teractiv)m(e,)j(in)c(the)h(absence)f(of)h(an)m(y)f(traps,)i(it)e +(ignores)h Fs(SIGTERM)d Ft(\(so)j(that)g(`)p Fs(kill)150 +4432 y(0)p Ft(')c(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 4542 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 4651 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 4761 y(page)f(89\),)h +(Bash)e(ignores)h Fs(SIGTTIN)p Ft(,)e Fs(SIGTTOU)p Ft(,)g(and)g +Fs(SIGTSTP)p Ft(.)275 4902 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 5011 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 5121 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 +5230 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 5340 y Fs(SIGTTOU)p Ft(,)h(and)g +Fs(SIGTSTP)p Ft(.)p eop end +%%Page: 33 39 +TeXDict begin 33 38 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(33)275 299 +y(The)30 b(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 408 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 518 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 628 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 737 y(Section)f(7.2)g([Job)f +(Con)m(trol)h(Builtins],)g(page)g(90\))h(or)e(mark)m(ed)g(to)h(not)f +(receiv)m(e)i Fs(SIGHUP)d Ft(using)h Fs(disown)150 847 +y(-h)p Ft(.)275 992 y(If)38 b(the)h Fs(huponexit)e Ft(shell)i(option)g +(has)g(b)s(een)f(set)i(with)f Fs(shopt)e Ft(\(see)j(Section)g(4.3.2)h +([The)e(Shopt)150 1102 y(Builtin],)31 b(page)g(55\),)h(Bash)f(sends)e +(a)i Fs(SIGHUP)e Ft(to)i(all)g(jobs)f(when)f(an)i(in)m(teractiv)m(e)i +(login)e(shell)g(exits.)275 1247 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 1357 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 1467 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 1576 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 +1686 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 1935 y Fr(3.8)68 b(Shell)45 +b(Scripts)150 2094 y Ft(A)30 b(shell)f(script)h(is)f(a)h(text)h(\014le) +f(con)m(taining)h(shell)f(commands.)40 b(When)29 b(suc)m(h)g(a)h +(\014le)g(is)f(used)g(as)h(the)g(\014rst)150 2204 y(non-option)i +(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(')g(option)g(is)g(supplied)150 +2313 y(\(see)25 b(Section)h(6.1)f([In)m(v)m(oking)h(Bash],)g(page)f +(71\),)i(Bash)e(reads)f(and)g(executes)i(commands)e(from)g(the)h +(\014le,)150 2423 y(then)32 b(exits.)46 b(This)32 b(mo)s(de)f(of)i(op)s +(eration)f(creates)i(a)e(non-in)m(teractiv)m(e)j(shell.)46 +b(The)31 b(shell)i(\014rst)e(searc)m(hes)150 2532 y(for)d(the)g(\014le) +g(in)g(the)g(curren)m(t)f(directory)-8 b(,)30 b(and)d(lo)s(oks)i(in)e +(the)i(directories)g(in)e Fs($PATH)g Ft(if)h(not)g(found)e(there.)275 +2678 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 2787 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 2897 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 3007 y(parameters)31 b(are)f(unset.)275 +3152 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 +3262 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 3371 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 3517 +y Fs(filename)46 b Fi(arguments)150 3662 y Ft(is)30 b(equiv)-5 +b(alen)m(t)32 b(to)f(executing)390 3808 y Fs(bash)47 +b(filename)e Fi(arguments)150 3953 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 +4063 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 4172 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 4282 y([Bourne)30 +b(Shell)h(Builtins],)g(page)g(35\))h(are)e(retained)h(b)m(y)f(the)h(c)m +(hild.)275 4427 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 4537 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 4647 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 4756 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 4902 y(The)40 b(argumen)m(ts)h(to)g(the)g(in)m +(terpreter)g(consist)g(of)g(a)g(single)h(optional)f(argumen)m(t)h +(follo)m(wing)g(the)150 5011 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 5121 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 +5230 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 5340 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.)p eop end +%%Page: 34 40 +TeXDict begin 34 39 bop 150 -116 a Ft(34)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 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 408 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 +518 y(under)29 b(another)h(shell.)p eop end +%%Page: 35 41 +TeXDict begin 35 40 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(35)150 299 y Fo(4)80 +b(Shell)53 b(Builtin)f(Commands)150 541 y Ft(Builtin)34 +b(commands)f(are)h(con)m(tained)g(within)f(the)h(shell)g(itself.)50 +b(When)34 b(the)f(name)h(of)f(a)h(builtin)f(com-)150 +651 y(mand)26 b(is)i(used)e(as)i(the)g(\014rst)e(w)m(ord)h(of)h(a)f +(simple)h(command)f(\(see)h(Section)g(3.2.1)h([Simple)f(Commands],)150 +760 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 870 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 979 y(with)30 b(separate)h(utilities.)275 +1117 y(This)c(section)j(brie\015y)e(describ)s(es)g(the)h(builtins)f +(whic)m(h)g(Bash)h(inherits)f(from)g(the)h(Bourne)g(Shell,)g(as)150 +1226 y(w)m(ell)i(as)g(the)g(builtin)e(commands)h(whic)m(h)h(are)f +(unique)g(to)h(or)f(ha)m(v)m(e)i(b)s(een)d(extended)i(in)f(Bash.)275 +1363 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 +1473 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 1583 y(page)40 b(90\),)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 +(81\),)j(the)150 1692 y(command)23 b(history)h(\(see)g(Section)g(9.2)h +([Bash)f(History)g(Builtins],)h(page)g(121\),)h(and)d(the)h +(programmable)150 1802 y(completion)32 b(facilities)g(\(see)g(Section)f +(8.7)g([Programmable)g(Completion)g(Builtins],)g(page)h(117\).)275 +1939 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 2076 y(Unless)39 +b(otherwise)h(noted,)i(eac)m(h)f(builtin)e(command)g(do)s(cumen)m(ted)g +(as)h(accepting)h(options)f(pre-)150 2186 y(ceded)33 +b(b)m(y)h(`)p Fs(-)p Ft(')f(accepts)i(`)p Fs(--)p Ft(')e(to)h(signify)f +(the)h(end)e(of)i(the)f(options.)50 b(The)33 b Fs(:)p +Ft(,)h Fs(true)p Ft(,)f Fs(false)p Ft(,)f(and)h Fs(test)150 +2295 y Ft(builtins)i(do)g(not)h(accept)g(options)g(and)f(do)g(not)h +(treat)g(`)p Fs(--)p Ft(')f(sp)s(ecially)-8 b(.)57 b(The)35 +b Fs(exit)p Ft(,)h Fs(logout)p Ft(,)f Fs(break)p Ft(,)150 +2405 y Fs(continue)p Ft(,)29 b Fs(let)p Ft(,)i(and)g +Fs(shift)f Ft(builtins)g(accept)j(and)e(pro)s(cess)g(argumen)m(ts)g(b)s +(eginning)g(with)g(`)p Fs(-)p Ft(')g(with-)150 2515 y(out)f(requiring)f +(`)p Fs(--)p Ft('.)41 b(Other)29 b(builtins)h(that)g(accept)h(argumen)m +(ts)f(but)g(are)g(not)g(sp)s(eci\014ed)f(as)h(accepting)150 +2624 y(options)25 b(in)m(terpret)f(argumen)m(ts)h(b)s(eginning)e(with)h +(`)p Fs(-)p Ft(')h(as)f(in)m(v)-5 b(alid)25 b(options)g(and)e(require)h +(`)p Fs(--)p Ft(')g(to)h(prev)m(en)m(t)150 2734 y(this)30 +b(in)m(terpretation.)150 2970 y Fr(4.1)68 b(Bourne)45 +b(Shell)g(Builtins)150 3130 y Ft(The)22 b(follo)m(wing)j(shell)d +(builtin)h(commands)f(are)h(inherited)g(from)f(the)h(Bourne)g(Shell.)38 +b(These)22 b(commands)150 3239 y(are)31 b(implemen)m(ted)g(as)f(sp)s +(eci\014ed)g(b)m(y)g(the)h Fl(posix)e Ft(standard.)150 +3403 y Fs(:)h Ft(\(a)h(colon\))870 3512 y Fs(:)47 b([)p +Fi(arguments)11 b Fs(])630 3648 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 3758 y(return)29 b(status)i(is)f(zero.)150 +3920 y Fs(.)g Ft(\(a)h(p)s(erio)s(d\))870 4029 y Fs(.)47 +b Fi(filename)57 b Fs([)p Fi(arguments)11 b Fs(])630 +4165 y Ft(Read)34 b(and)f(execute)i(commands)e(from)g(the)h +Fq(\014lename)39 b Ft(argumen)m(t)34 b(in)f(the)h(curren)m(t)g(shell) +630 4275 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 +4384 y Fq(\014lename)5 b Ft(.)51 b(When)34 b(Bash)g(is)g(not)g(in)f +Fl(posix)g Ft(mo)s(de,)i(the)f(curren)m(t)f(directory)i(is)e(searc)m +(hed)630 4494 y(if)e 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,)f(they)i(b)s(ecome)630 4604 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 4713 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 4823 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 4932 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 +5042 y(to)31 b Fs(source)p Ft(.)150 5204 y Fs(break)870 +5340 y(break)46 b([)p Fi(n)11 b Fs(])p eop end +%%Page: 36 42 +TeXDict begin 36 41 bop 150 -116 a Ft(36)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(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 408 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 518 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 +671 y Fs(cd)870 803 y(cd)47 b([-L|-P])f([)p Fi(directory)11 +b Fs(])630 934 y Ft(Change)36 b(the)h(curren)m(t)f(w)m(orking)g +(directory)h(to)g Fq(directory)8 b Ft(.)59 b(If)35 b +Fq(directory)45 b Ft(is)36 b(not)h(giv)m(en,)630 1044 +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 1154 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 1285 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 1395 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 1526 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 1636 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 1745 y(w)m(orking)k +(directory)g(is)f(written)g(to)i(the)e(standard)g(output.)630 +1877 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 1987 +y(erwise.)150 2140 y Fs(continue)870 2271 y(continue)46 +b([)p Fi(n)11 b Fs(])630 2403 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 2513 +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 2622 y(greater)39 +b(than)f(or)g(equal)g(to)h(1.)63 b(The)38 b(return)e(status)j(is)e +(zero)i(unless)e Fq(n)h Ft(is)g(not)g(greater)630 2732 +y(than)30 b(or)g(equal)h(to)g(1.)150 2885 y Fs(eval)870 +3017 y(eval)47 b([)p Fi(arguments)11 b Fs(])630 3148 +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 3258 +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 +3367 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 +3521 y Fs(exec)870 3652 y(exec)47 b([-cl])f([-a)h Fi(name)11 +b Fs(])46 b([)p Fi(command)56 b Fs([)p Fi(arguments)11 +b Fs(]])630 3784 y Ft(If)36 b Fq(command)k Ft(is)c(supplied,)h(it)g +(replaces)h(the)e(shell)h(without)f(creating)i(a)f(new)f(pro)s(cess.) +630 3893 y(If)h(the)g(`)p Fs(-l)p Ft(')g(option)h(is)f(supplied,)g(the) +h(shell)f(places)h(a)g(dash)e(at)i(the)f(b)s(eginning)f(of)i(the)630 +4003 y(zeroth)e(argumen)m(t)g(passed)f(to)h Fq(command)t +Ft(.)56 b(This)34 b(is)i(what)f(the)h Fs(login)e Ft(program)h(do)s(es.) +630 4113 y(The)e(`)p Fs(-c)p Ft(')h(option)g(causes)g +Fq(command)j Ft(to)e(b)s(e)e(executed)i(with)e(an)h(empt)m(y)g(en)m +(vironmen)m(t.)630 4222 y(If)d(`)p Fs(-a)p Ft(')g(is)h(supplied,)f(the) +g(shell)h(passes)f Fq(name)37 b Ft(as)31 b(the)h(zeroth)g(argumen)m(t)g +(to)g Fq(command)t Ft(.)630 4332 y(If)45 b(no)g Fq(command)k +Ft(is)c(sp)s(eci\014ed,)k(redirections)d(ma)m(y)g(b)s(e)f(used)f(to)j +(a\013ect)g(the)e(curren)m(t)630 4441 y(shell)33 b(en)m(vironmen)m(t.) +48 b(If)32 b(there)h(are)g(no)f(redirection)h(errors,)g(the)g(return)e +(status)i(is)g(zero;)630 4551 y(otherwise)e(the)f(return)g(status)g(is) +h(non-zero.)150 4704 y Fs(exit)870 4836 y(exit)47 b([)p +Fi(n)11 b Fs(])630 4967 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 5077 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 5187 y(b)s(efore)j(the)h +(shell)f(terminates.)150 5340 y Fs(export)p eop end +%%Page: 37 43 +TeXDict begin 37 42 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(37)870 299 y Fs(export)46 +b([-fn])g([-p])h([)p Fi(name)11 b Fs([=)p Fi(value)g +Fs(]])630 432 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)f(pro)s(cesses)f(in)g(the)h(en)m +(vironmen)m(t.)70 b(If)39 b(the)630 542 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 +651 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)630 761 y Ft(for)h(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 +870 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 980 y(ma)m(y)31 b(b)s(e)f(reused)g(as)h(input.)41 +b(If)31 b(a)g(v)-5 b(ariable)31 b(name)g(is)g(follo)m(w)m(ed)i(b)m(y)d +(=)p Fq(v)-5 b(alue)5 b Ft(,)32 b(the)f(v)-5 b(alue)31 +b(of)630 1089 y(the)g(v)-5 b(ariable)31 b(is)f(set)h(to)g +Fq(v)-5 b(alue)5 b Ft(.)630 1223 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 1332 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 1442 y(shell)g(function.)150 1598 y Fs(getopts)870 +1731 y(getopts)46 b Fi(optstring)56 b(name)h Fs([)p Fi(args)11 +b Fs(])630 1864 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 1974 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 2084 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 2193 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 2303 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 2412 y(option)29 +b(in)f(the)g(shell)h(v)-5 b(ariable)29 b Fq(name)5 b +Ft(,)29 b(initializing)h Fq(name)k Ft(if)28 b(it)h(do)s(es)f(not)g +(exist,)i(and)e(the)630 2522 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 2632 +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 2741 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 2851 y Fs(OPTARG)p Ft(.)55 b(The)35 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 2960 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 3070 y(new)30 +b(set)h(of)f(parameters)h(is)f(to)i(b)s(e)d(used.)630 +3203 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 +3313 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 3422 y(and)g Fs(name)f Ft(is)h(set)h(to)g(`)p +Fs(?)p Ft('.)630 3555 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 +3665 y(giv)m(en)h(in)f Fq(args)t Ft(,)h Fs(getopts)e +Ft(parses)g(those)i(instead.)630 3798 y Fs(getopts)h +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 3907 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 4017 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 4127 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 4236 y(the)c(\014rst)e(c)m +(haracter)j(of)f Fs(optstring)d Ft(is)i(not)h(a)f(colon.)630 +4369 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 4479 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 +4589 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 +4722 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 +4831 y(\(`)p Fs(?)p Ft('\))35 b(is)g(placed)g(in)g Fq(name)5 +b Ft(,)36 b Fs(OPTARG)d Ft(is)h(unset,)i(and)e(a)h(diagnostic)h +(message)f(is)g(prin)m(ted.)630 4941 y(If)e Fs(getopts)f +Ft(is)h(silen)m(t,)j(then)d(a)i(colon)f(\(`)p Fs(:)p +Ft('\))h(is)e(placed)h(in)g Fq(name)k Ft(and)33 b Fs(OPTARG)f +Ft(is)i(set)g(to)630 5050 y(the)d(option)f(c)m(haracter)i(found.)150 +5207 y Fs(hash)870 5340 y(hash)47 b([-r])f([-p)h Fi(filename)11 +b Fs(])45 b([-dt])h([)p Fi(name)11 b Fs(])p eop end +%%Page: 38 44 +TeXDict begin 38 43 bop 150 -116 a Ft(38)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(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 408 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.)55 +b(The)34 b(commands)g(are)630 518 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 628 +y(inhibits)e(the)h(path)f(searc)m(h,)j(and)d Fq(\014lename)44 +b Ft(is)39 b(used)f(as)g(the)h(lo)s(cation)h(of)f Fq(name)5 +b Ft(.)65 b(The)630 737 y(`)p Fs(-r)p Ft(')28 b(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 847 y(causes)38 +b(the)f(shell)h(to)g(forget)g(the)f(remem)m(b)s(ered)g(lo)s(cation)i +(of)e(eac)m(h)h Fq(name)5 b Ft(.)62 b(If)37 b(the)g(`)p +Fs(-t)p Ft(')630 956 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 1066 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 +1176 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 1285 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 1395 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 1504 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 1672 y Fs(pwd)870 1811 +y(pwd)47 b([-LP])630 1950 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 2060 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 2169 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 2279 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 +2388 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 2556 y Fs(readonly)870 +2695 y(readonly)46 b([-aApf])f([)p Fi(name)11 b Fs([=)p +Fi(value)g Fs(]])43 b(...)630 2834 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 2944 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 3053 y(function.)39 +b(The)26 b(`)p Fs(-a)p Ft(')h(option)g(means)g(eac)m(h)h +Fq(name)k Ft(refers)26 b(to)i(an)e(indexed)h(arra)m(y)g(v)-5 +b(ariable;)630 3163 y(the)33 b(`)p Fs(-A)p Ft(')g(option)g(means)g(eac) +m(h)h Fq(name)k Ft(refers)32 b(to)h(an)g(asso)s(ciativ)m(e)j(arra)m(y)d +(v)-5 b(ariable.)49 b(If)32 b(no)630 3272 y Fq(name)f +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 3382 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 3492 y(that)25 b(ma)m(y)g(b)s(e)e(reused) +h(as)g(input.)38 b(If)24 b(a)g(v)-5 b(ariable)25 b(name)g(is)f(follo)m +(w)m(ed)i(b)m(y)e(=)p Fq(v)-5 b(alue)5 b Ft(,)26 b(the)e(v)-5 +b(alue)630 3601 y(of)26 b(the)h(v)-5 b(ariable)27 b(is)f(set)h(to)g +Fq(v)-5 b(alue)5 b Ft(.)40 b(The)26 b(return)f(status)i(is)f(zero)h +(unless)e(an)i(in)m(v)-5 b(alid)26 b(option)630 3711 +y(is)k(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 3820 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 3988 y Fs(return)870 4127 y(return)46 +b([)p Fi(n)11 b Fs(])630 4266 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 +4376 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 +4485 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 +4595 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 4704 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 +4814 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 +4924 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 +5033 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 +5201 y Fs(shift)870 5340 y(shift)46 b([)p Fi(n)11 b Fs(])p +eop end +%%Page: 39 45 +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(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 +408 y(from)34 b Fq(n)p Fs(+)p Ft(1)39 b(.)22 b(.)h(.)45 +b Fs($#)34 b Ft(are)g(renamed)g(to)h Fs($1)k Ft(.)22 +b(.)g(.)46 b Fs($#)p Ft(-)p Fq(n)p Ft(.)51 b(P)m(arameters)36 +b(represen)m(ted)e(b)m(y)g(the)630 518 y(n)m(um)m(b)s(ers)25 +b Fs($#)i Ft(to)g Fs($#)p Ft(-)p Fq(n)p Fs(+)p Ft(1)g(are)g(unset.)39 +b Fq(n)26 b Ft(m)m(ust)h(b)s(e)f(a)i(non-negativ)m(e)h(n)m(um)m(b)s(er) +c(less)i(than)g(or)630 628 y(equal)33 b(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 +737 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 847 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.)150 +1006 y Fs(test)150 1116 y([)432 b Ft(Ev)-5 b(aluate)31 +b(a)g(conditional)g(expression)f Fq(expr)7 b Ft(.)40 +b(Eac)m(h)30 b(op)s(erator)h(and)e(op)s(erand)g(m)m(ust)h(b)s(e)g(a)630 +1225 y(separate)d(argumen)m(t.)40 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 +1335 y(in)34 b(Section)g(6.4)h([Bash)g(Conditional)f(Expressions],)h +(page)g(76.)52 b Fs(test)33 b Ft(do)s(es)g(not)h(accept)630 +1445 y(an)m(y)27 b(options,)i(nor)d(do)s(es)h(it)g(accept)i(and)d +(ignore)i(an)f(argumen)m(t)g(of)g(`)p Fs(--)p Ft(')g(as)h(signifying)f +(the)630 1554 y(end)j(of)g(options.)630 1689 y(When)g(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 1823 +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 +1933 y(order)30 b(of)h(precedence.)43 b(The)30 b(ev)-5 +b(aluation)33 b(dep)s(ends)28 b(on)j(the)g(n)m(um)m(b)s(er)f(of)h +(argumen)m(ts;)g(see)630 2042 y(b)s(elo)m(w.)630 2202 +y Fs(!)f Fi(expr)210 b Ft(T)-8 b(rue)30 b(if)g Fq(expr)37 +b Ft(is)30 b(false.)630 2361 y Fs(\()g Fi(expr)40 b Fs(\))122 +b Ft(Returns)23 b(the)h(v)-5 b(alue)24 b(of)g Fq(expr)7 +b Ft(.)37 b(This)23 b(ma)m(y)i(b)s(e)e(used)g(to)h(o)m(v)m(erride)h +(the)f(normal)1110 2471 y(precedence)31 b(of)f(op)s(erators.)630 +2630 y Fi(expr1)39 b Fs(-a)30 b Fi(expr2)1110 2740 y +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 2899 y Fi(expr1)39 +b Fs(-o)30 b Fi(expr2)1110 3009 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 +3168 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 3278 y(based)30 b(on)g(the)h(n)m(um)m(b)s(er)e(of)h(argumen)m(ts.) +630 3437 y(0)h(argumen)m(ts)1110 3547 y(The)f(expression)g(is)g(false.) +630 3706 y(1)h(argumen)m(t)1110 3816 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 +3975 y(2)g(argumen)m(ts)1110 4085 y(If)f(the)h(\014rst)f(argumen)m(t)h +(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 4194 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 4304 y(conditional)42 b(op)s(erators)f(\(see)g(Section)h(6.4)f +([Bash)g(Conditional)g(Expres-)1110 4413 y(sions],)34 +b(page)f(76\),)i(the)e(expression)f(is)h(true)g(if)g(the)g(unary)e +(test)j(is)f(true.)47 b(If)1110 4523 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 4633 y(false.)630 4792 y(3)e(argumen)m(ts)1110 +4902 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 5011 y(\(see)23 b(Section)g(6.4)f +([Bash)h(Conditional)f(Expressions],)h(page)g(76\),)i(the)d(result)1110 +5121 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 5230 y(and)31 +b(third)g(argumen)m(ts)i(as)f(op)s(erands.)44 b(The)31 +b(`)p Fs(-a)p Ft(')h(and)g(`)p Fs(-o)p Ft(')f(op)s(erators)i(are)1110 +5340 y(considered)25 b(binary)g(op)s(erators)g(when)f(there)i(are)f +(three)h(argumen)m(ts.)39 b(If)25 b(the)p eop end +%%Page: 40 46 +TeXDict begin 40 45 bop 150 -116 a Ft(40)2572 b(Bash)31 +b(Reference)g(Man)m(ual)1110 299 y(\014rst)d(argumen)m(t)h(is)g(`)p +Fs(!)p Ft(',)h(the)f(v)-5 b(alue)29 b(is)g(the)g(negation)i(of)e(the)g +(t)m(w)m(o-argumen)m(t)1110 408 y(test)38 b(using)f(the)g(second)g(and) +g(third)f(argumen)m(ts.)61 b(If)37 b(the)g(\014rst)f(argumen)m(t)1110 +518 y(is)j(exactly)i(`)p Fs(\()p Ft(')f(and)f(the)g(third)g(argumen)m +(t)h(is)f(exactly)i(`)p Fs(\))p Ft(',)h(the)e(result)f(is)1110 +628 y(the)46 b(one-argumen)m(t)g(test)h(of)f(the)f(second)h(argumen)m +(t.)86 b(Otherwise,)50 b(the)1110 737 y(expression)30 +b(is)h(false.)630 909 y(4)g(argumen)m(ts)1110 1019 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 1129 y(argumen)m(t)h +(expression)f(comp)s(osed)h(of)f(the)h(remaining)g(argumen)m(ts.)50 +b(Oth-)1110 1238 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 1348 +y(dence)e(using)e(the)i(rules)f(listed)h(ab)s(o)m(v)m(e.)630 +1520 y(5)g(or)f(more)h(argumen)m(ts)1110 1630 y(The)43 +b(expression)f(is)i(parsed)e(and)g(ev)-5 b(aluated)45 +b(according)f(to)f(precedence)1110 1739 y(using)30 b(the)g(rules)g +(listed)h(ab)s(o)m(v)m(e.)150 1911 y Fs(times)870 2052 +y(times)630 2193 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 2303 y(return)29 b(status)i(is)f(zero.)150 +2475 y Fs(trap)870 2616 y(trap)47 b([-lp])f([)p Fi(arg)11 +b Fs(])46 b([)p Fi(sigspec)56 b Fs(...)o(])630 2757 y +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 +2866 y(signal)36 b Fq(sigsp)s(ec)6 b Ft(.)55 b(If)35 +b Fq(arg)44 b Ft(is)35 b(absen)m(t)h(\(and)f(there)g(is)g(a)h(single)g +Fq(sigsp)s(ec)6 b Ft(\))35 b(or)h(equal)f(to)i(`)p Fs(-)p +Ft(',)630 2976 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 3086 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 3195 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 3305 +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 3414 y +Fq(sigsp)s(ec)6 b Ft(.)40 b(If)28 b(no)g(argumen)m(ts)h(are)g +(supplied,)f(or)g(only)h(`)p Fs(-p)p Ft(')f(is)g(giv)m(en,)i +Fs(trap)e Ft(prin)m(ts)g(the)g(list)630 3524 y(of)g(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 3634 y(as)34 b(shell)g(input.)51 +b(The)33 b(`)p Fs(-l)p Ft(')h(option)g(causes)h(the)f(shell)g(to)h +(prin)m(t)e(a)i(list)f(of)g(signal)h(names)630 3743 y(and)j(their)h +(corresp)s(onding)f(n)m(um)m(b)s(ers.)65 b(Eac)m(h)39 +b Fq(sigsp)s(ec)45 b Ft(is)39 b(either)g(a)g(signal)h(name)f(or)g(a)630 +3853 y(signal)27 b(n)m(um)m(b)s(er.)39 b(Signal)27 b(names)f(are)h +(case)h(insensitiv)m(e)g(and)e(the)g Fs(SIG)g Ft(pre\014x)g(is)h +(optional.)630 3994 y(If)35 b(a)g Fq(sigsp)s(ec)41 b +Ft(is)35 b Fs(0)g Ft(or)g Fs(EXIT)p Ft(,)g Fq(arg)43 +b Ft(is)35 b(executed)h(when)e(the)h(shell)h(exits.)55 +b(If)35 b(a)g Fq(sigsp)s(ec)41 b Ft(is)630 4103 y Fs(DEBUG)p +Ft(,)32 b(the)g(command)g Fq(arg)40 b Ft(is)33 b(executed)g(b)s(efore)f +(ev)m(ery)h(simple)f(command,)h Fs(for)e Ft(com-)630 +4213 y(mand,)d Fs(case)g Ft(command,)h Fs(select)e Ft(command,)i(ev)m +(ery)h(arithmetic)g Fs(for)d Ft(command,)j(and)630 4322 +y(b)s(efore)22 b(the)g(\014rst)f(command)h(executes)i(in)e(a)g(shell)h +(function.)37 b(Refer)22 b(to)h(the)g(description)f(of)630 +4432 y(the)i Fs(extdebug)d Ft(option)j(to)h(the)f Fs(shopt)e +Ft(builtin)h(\(see)i(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)630 +4542 y(page)33 b(55\))g(for)f(details)h(of)f(its)h(e\013ect)g(on)f(the) +g Fs(DEBUG)f Ft(trap.)46 b(If)31 b(a)i Fq(sigsp)s(ec)38 +b Ft(is)32 b Fs(RETURN)p Ft(,)f(the)630 4651 y(command)h +Fq(arg)41 b Ft(is)33 b(executed)g(eac)m(h)h(time)f(a)g(shell)g +(function)g(or)f(a)h(script)g(executed)g(with)630 4761 +y(the)e Fs(.)f Ft(or)g Fs(source)f Ft(builtins)g(\014nishes)h +(executing.)630 4902 y(If)g(a)i Fq(sigsp)s(ec)k Ft(is)31 +b Fs(ERR)p Ft(,)f(the)h(command)g Fq(arg)39 b Ft(is)31 +b(executed)g(whenev)m(er)g(a)g(simple)g(command)630 5011 +y(has)k(a)h(non-zero)h(exit)f(status,)i(sub)5 b(ject)35 +b(to)h(the)g(follo)m(wing)h(conditions.)57 b(The)35 b +Fs(ERR)g Ft(trap)630 5121 y(is)30 b(not)f(executed)i(if)e(the)h(failed) +g(command)g(is)f(part)h(of)f(the)h(command)f(list)i(immediately)630 +5230 y(follo)m(wing)47 b(an)d Fs(until)g Ft(or)h Fs(while)f +Ft(k)m(eyw)m(ord,)49 b(part)c(of)g(the)h(test)g(follo)m(wing)g(the)f +Fs(if)g Ft(or)630 5340 y Fs(elif)d Ft(reserv)m(ed)i(w)m(ords,)j(part)c +(of)h(a)g(command)f(executed)i(in)e(a)h Fs(&&)f Ft(or)h +Fs(||)f Ft(list,)k(or)d(if)p eop end +%%Page: 41 47 +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)40 +b(command's)g(return)f(status)h(is)g(b)s(eing)f(in)m(v)m(erted)i(using) +f Fs(!)p Ft(.)68 b(These)40 b(are)g(the)h(same)630 408 +y(conditions)31 b(ob)s(ey)m(ed)f(b)m(y)h(the)f Fs(errexit)f +Ft(option.)630 545 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 654 y(signals)28 b(that)f(are)h(not)f(b)s(eing)g +(ignored)g(are)g(reset)h(to)g(their)f(original)h(v)-5 +b(alues)28 b(in)e(a)i(subshell)630 764 y(or)i(subshell)g(en)m(vironmen) +m(t)h(when)e(one)i(is)f(created.)630 900 y(The)g(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 +1063 y Fs(umask)870 1199 y(umask)46 b([-p])h([-S])g([)p +Fi(mode)11 b Fs(])630 1335 y Ft(Set)29 b(the)h(shell)f(pro)s(cess's)g +(\014le)g(creation)h(mask)f(to)h Fq(mo)s(de)5 b Ft(.)40 +b(If)28 b Fq(mo)s(de)34 b Ft(b)s(egins)29 b(with)f(a)i(digit,)630 +1445 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 1554 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 1664 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 1773 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)630 1883 y(is)f(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 1993 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 2102 y +Fq(mo)s(de)k Ft(argumen)m(t)c(is)f(supplied,)g(and)f(non-zero)i +(otherwise.)630 2238 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 2348 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 2457 y(of)d Fs(755)p +Ft(.)150 2620 y Fs(unset)870 2756 y(unset)46 b([-fv])h([)p +Fi(name)11 b Fs(])630 2892 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 +3002 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 3112 +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 3221 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 3331 y(unless)e(a)g Fq(name)36 b Ft(is)30 b(readonly)-8 +b(.)150 3568 y Fr(4.2)68 b(Bash)45 b(Builtin)g(Commands)150 +3728 y Ft(This)c(section)h(describ)s(es)f(builtin)f(commands)h(whic)m +(h)g(are)h(unique)e(to)j(or)e(ha)m(v)m(e)h(b)s(een)f(extended)g(in)150 +3837 y(Bash.)g(Some)30 b(of)h(these)g(commands)f(are)g(sp)s(eci\014ed)g +(in)g(the)h Fl(posix)e Ft(standard.)150 4002 y Fs(alias)870 +4138 y(alias)46 b([-p])h([)p Fi(name)11 b Fs([=)p Fi(value)g +Fs(])43 b(...)o(])630 4274 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 4384 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 4493 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 4603 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 4712 y(describ)s(ed)29 b(in)h(Section)i(6.6)f +([Aliases],)h(page)f(79.)150 4875 y Fs(bind)870 5011 +y(bind)47 b([-m)g Fi(keymap)11 b Fs(])45 b([-lpsvPSV])870 +5121 y(bind)i([-m)g Fi(keymap)11 b Fs(])45 b([-q)i Fi(function)11 +b Fs(])45 b([-u)h Fi(function)11 b Fs(])45 b([-r)i Fi(keyseq)11 +b Fs(])870 5230 y(bind)47 b([-m)g Fi(keymap)11 b Fs(])45 +b(-f)i Fi(filename)870 5340 y Fs(bind)g([-m)g Fi(keymap)11 +b Fs(])45 b(-x)i Fi(keyseq:shell-command)p eop end +%%Page: 42 48 +TeXDict begin 42 47 bop 150 -116 a Ft(42)2572 b(Bash)31 +b(Reference)g(Man)m(ual)870 299 y Fs(bind)47 b([-m)g +Fi(keymap)11 b Fs(])45 b Fi(keyseq:function-name)870 +408 y Fs(bind)i Fi(readline-command)630 545 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(93\))g(k)m(ey)630 655 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 765 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 874 y(w)m(ould)e(app)s(ear)f(in)h(a)h(Readline)g +(initialization)i(\014le)d(\(see)h(Section)g(8.3)g([Readline)g(Init)630 +984 y(File],)g(page)c(96\),)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 +1093 y(argumen)m(t;)31 b(e.g.,)h(`)p Fs("\\C-x\\C-r":re-read-init-f)o +(ile)p Ft('.)630 1230 y(Options,)e(if)h(supplied,)e(ha)m(v)m(e)i(the)g +(follo)m(wing)h(meanings:)630 1395 y Fs(-m)e Fi(keymap)1110 +1504 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 1614 +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 1724 +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 +1833 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 1943 y(to)31 b Fs(emacs-standard)p +Ft(.)630 2107 y Fs(-l)384 b Ft(List)31 b(the)f(names)g(of)h(all)g +(Readline)g(functions.)630 2271 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 2381 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 2545 +y Fs(-P)384 b Ft(List)31 b(curren)m(t)f(Readline)h(function)f(names)g +(and)g(bindings.)630 2710 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 2819 +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 2984 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 3148 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 +3258 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 3367 +y(Readline)d(initialization)i(\014le.)630 3532 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 3641 y(they)31 b(output.)630 +3806 y Fs(-f)f Fi(filename)1110 3915 y Ft(Read)h(k)m(ey)g(bindings)e +(from)h Fq(\014lename)5 b Ft(.)630 4080 y Fs(-q)30 b +Fi(function)1110 4189 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 4354 +y Fs(-u)g Fi(function)1110 4463 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 4628 +y Fs(-r)g Fi(keyseq)1110 4737 y Ft(Remo)m(v)m(e)i(an)m(y)f(curren)m(t)f +(binding)f(for)h Fq(k)m(eyseq)r Ft(.)630 4902 y Fs(-x)g +Fi(keyseq:shell-command)1110 5011 y Ft(Cause)35 b Fq(shell-command)k +Ft(to)d(b)s(e)f(executed)h(whenev)m(er)f Fq(k)m(eyseq)j +Ft(is)d(en)m(tered.)1110 5121 y(When)46 b Fq(shell-command)k +Ft(is)c(executed,)51 b(the)46 b(shell)g(sets)g(the)g +Fs(READLINE_)1110 5230 y(LINE)37 b Ft(v)-5 b(ariable)38 +b(to)g(the)g(con)m(ten)m(ts)i(of)e(the)g(Readline)g(line)g(bu\013er)f +(and)g(the)1110 5340 y Fs(READLINE_POINT)e Ft(v)-5 b(ariable)39 +b(to)h(the)e(curren)m(t)h(lo)s(cation)h(of)f(the)g(insertion)p +eop end +%%Page: 43 49 +TeXDict begin 43 48 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(43)1110 299 y(p)s(oin)m(t.)59 +b(If)37 b(the)f(executed)i(command)e(c)m(hanges)i(the)f(v)-5 +b(alue)37 b(of)f Fs(READLINE_)1110 408 y(LINE)29 b Ft(or)h +Fs(READLINE_POINT)p Ft(,)c(those)31 b(new)e(v)-5 b(alues)31 +b(will)f(b)s(e)f(re\015ected)i(in)f(the)1110 518 y(editing)h(state.)630 +677 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 +837 y Fs(builtin)870 971 y(builtin)46 b([)p Fi(shell-builtin)54 +b Fs([)p Fi(args)11 b Fs(]])630 1106 y Ft(Run)35 b(a)h(shell)h +(builtin,)g(passing)f(it)g Fq(args)t Ft(,)i(and)e(return)f(its)h(exit)h +(status.)58 b(This)36 b(is)g(useful)630 1215 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 1325 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 1435 y(zero)e(if)g +Fq(shell-builtin)f Ft(is)g(not)h(a)g(shell)f(builtin)g(command.)150 +1594 y Fs(caller)870 1729 y(caller)46 b([)p Fi(expr)11 +b Fs(])630 1863 y Ft(Returns)34 b(the)g(con)m(text)j(of)e(an)m(y)g +(activ)m(e)i(subroutine)c(call)j(\(a)f(shell)g(function)f(or)h(a)g +(script)630 1973 y(executed)c(with)f(the)h Fs(.)f Ft(or)g +Fs(source)f Ft(builtins\).)630 2107 y(Without)45 b Fq(expr)7 +b Ft(,)46 b Fs(caller)d Ft(displa)m(ys)h(the)g(line)g(n)m(um)m(b)s(er)f +(and)g(source)h(\014lename)h(of)f(the)630 2217 y(curren)m(t)35 +b(subroutine)f(call.)56 b(If)35 b(a)h(non-negativ)m(e)h(in)m(teger)g +(is)e(supplied)f(as)h Fq(expr)7 b Ft(,)36 b Fs(caller)630 +2326 y Ft(displa)m(ys)41 b(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 +2436 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 +2545 y(b)s(e)30 b(used,)g(for)g(example,)h(to)g(prin)m(t)f(a)h(stac)m +(k)h(trace.)42 b(The)29 b(curren)m(t)i(frame)f(is)g(frame)h(0.)630 +2680 y(The)e(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 2790 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 +2949 y Fs(command)870 3083 y(command)46 b([-pVv])g Fi(command)56 +b Fs([)p Fi(arguments)g Fs(...)o(])630 3218 y Ft(Runs)31 +b Fq(command)36 b Ft(with)d Fq(argumen)m(ts)j Ft(ignoring)d(an)m(y)g +(shell)g(function)f(named)g Fq(command)t Ft(.)630 3328 +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 3437 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 +3547 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 +3656 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 3766 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 3875 +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 +3985 y Fq(command)34 b Ft(otherwise.)630 4120 y(If)25 +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 4229 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 4339 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 4448 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 +4558 y(non-zero)31 b(if)f(not.)150 4717 y Fs(declare)870 +4852 y(declare)46 b([-aAfFilrtux])e([-p])j([)p Fi(name)11 +b Fs([=)p Fi(value)g Fs(])43 b(...)o(])630 4986 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 5096 y(the)k(v)-5 b(alues)30 b(of)h(v)-5 b(ariables)31 +b(instead.)630 5230 y(The)c(`)p Fs(-p)p Ft(')h(option)g(will)g(displa)m +(y)g(the)g(attributes)g(and)g(v)-5 b(alues)28 b(of)g(eac)m(h)h +Fq(name)5 b Ft(.)40 b(When)27 b(`)p Fs(-p)p Ft(')630 +5340 y(is)j(used)g(with)g Fq(name)36 b Ft(argumen)m(ts,)31 +b(additional)g(options)f(are)h(ignored.)p eop end +%%Page: 44 50 +TeXDict begin 44 49 bop 150 -116 a Ft(44)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(When)36 b(`)p Fs(-p)p +Ft(')f(is)h(supplied)f(without)h Fq(name)41 b Ft(argumen)m(ts,)d +Fs(declare)c Ft(will)i(displa)m(y)g(the)g(at-)630 408 +y(tributes)31 b(and)f(v)-5 b(alues)31 b(of)g(all)h(v)-5 +b(ariables)31 b(ha)m(ving)h(the)f(attributes)g(sp)s(eci\014ed)f(b)m(y)h +(the)g(addi-)630 518 y(tional)h(options.)41 b(If)30 b(no)g(other)h +(options)g(are)g(supplied)e(with)h(`)p Fs(-p)p Ft(',)g +Fs(declare)f Ft(will)i(displa)m(y)630 628 y(the)f(attributes)g(and)e(v) +-5 b(alues)30 b(of)g(all)g(shell)g(v)-5 b(ariables.)41 +b(The)29 b(`)p Fs(-f)p Ft(')g(option)h(will)g(restrict)g(the)630 +737 y(displa)m(y)h(to)g(shell)f(functions.)630 867 y(The)36 +b(`)p Fs(-F)p Ft(')h(option)g(inhibits)f(the)h(displa)m(y)g(of)g +(function)g(de\014nitions;)i(only)e(the)g(function)630 +976 y(name)30 b(and)f(attributes)i(are)f(prin)m(ted.)40 +b(If)30 b(the)g Fs(extdebug)e Ft(shell)i(option)g(is)g(enabled)g(using) +630 1086 y Fs(shopt)24 b Ft(\(see)i(Section)g(4.3.2)i([The)d(Shopt)f +(Builtin],)k(page)e(55\),)i(the)d(source)h(\014le)f(name)h(and)630 +1196 y(line)38 b(n)m(um)m(b)s(er)e(where)i(the)g(function)f(is)h +(de\014ned)e(are)i(displa)m(y)m(ed)h(as)e(w)m(ell.)64 +b(`)p Fs(-F)p Ft(')38 b(implies)630 1305 y(`)p Fs(-f)p +Ft('.)i(The)28 b(follo)m(wing)i(options)f(can)f(b)s(e)g(used)g(to)h +(restrict)g(output)f(to)h(v)-5 b(ariables)30 b(with)e(the)630 +1415 y(sp)s(eci\014ed)i(attributes)h(or)f(to)h(giv)m(e)h(v)-5 +b(ariables)31 b(attributes:)630 1564 y Fs(-a)384 b Ft(Eac)m(h)36 +b Fq(name)k Ft(is)34 b(an)h(indexed)g(arra)m(y)g(v)-5 +b(ariable)36 b(\(see)f(Section)h(6.7)g([Arra)m(ys],)1110 +1674 y(page)31 b(80\).)630 1823 y Fs(-A)384 b Ft(Eac)m(h)24 +b Fq(name)k Ft(is)23 b(an)g(asso)s(ciativ)m(e)j(arra)m(y)e(v)-5 +b(ariable)24 b(\(see)g(Section)g(6.7)g([Arra)m(ys],)1110 +1933 y(page)31 b(80\).)630 2082 y Fs(-f)384 b Ft(Use)31 +b(function)f(names)g(only)-8 b(.)630 2232 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 +2341 y(\(see)29 b(Section)f(6.5)h([Shell)f(Arithmetic],)i(page)e(78\))h +(is)f(p)s(erformed)e(when)h(the)1110 2451 y(v)-5 b(ariable)31 +b(is)g(assigned)f(a)h(v)-5 b(alue.)630 2600 y Fs(-l)384 +b Ft(When)26 b(the)g(v)-5 b(ariable)27 b(is)f(assigned)g(a)g(v)-5 +b(alue,)28 b(all)f(upp)s(er-case)e(c)m(haracters)j(are)1110 +2710 y(con)m(v)m(erted)k(to)f(lo)m(w)m(er-case.)43 b(The)30 +b(upp)s(er-case)g(attribute)h(is)g(disabled.)630 2859 +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 2969 y(b)m(y)30 b(subsequen)m(t)g(assignmen)m(t)h +(statemen)m(ts)h(or)f(unset.)630 3118 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 3228 +y Fs(DEBUG)26 b Ft(and)h Fs(RETURN)f Ft(traps)h(from)g(the)h(calling)h +(shell.)40 b(The)27 b(trace)i(attribute)1110 3337 y(has)h(no)g(sp)s +(ecial)h(meaning)g(for)f(v)-5 b(ariables.)630 3487 y +Fs(-u)384 b Ft(When)28 b(the)h(v)-5 b(ariable)29 b(is)f(assigned)h(a)f +(v)-5 b(alue,)30 b(all)f(lo)m(w)m(er-case)i(c)m(haracters)f(are)1110 +3597 y(con)m(v)m(erted)i(to)f(upp)s(er-case.)40 b(The)30 +b(lo)m(w)m(er-case)j(attribute)e(is)g(disabled.)630 3746 +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)g(the)g(en)m(vi-)1110 +3856 y(ronmen)m(t.)630 4005 y(Using)e(`)p Fs(+)p Ft(')h(instead)f(of)g +(`)p Fs(-)p Ft(')g(turns)f(o\013)i(the)f(attribute)h(instead,)g(with)f +(the)g(exceptions)h(that)630 4115 y(`)p Fs(+a)p Ft(')h(ma)m(y)h(not)f +(b)s(e)f(used)g(to)i(destro)m(y)g(an)f(arra)m(y)g(v)-5 +b(ariable)31 b(and)f(`)p Fs(+r)p Ft(')g(will)g(not)g(remo)m(v)m(e)i +(the)630 4224 y(readonly)e(attribute.)41 b(When)30 b(used)f(in)g(a)h +(function,)g Fs(declare)e Ft(mak)m(es)j(eac)m(h)f Fq(name)35 +b Ft(lo)s(cal,)630 4334 y(as)40 b(with)g(the)g Fs(local)e +Ft(command.)69 b(If)40 b(a)g(v)-5 b(ariable)41 b(name)f(is)g(follo)m(w) +m(ed)h(b)m(y)f(=)p Fq(v)-5 b(alue)5 b Ft(,)43 b(the)630 +4443 y(v)-5 b(alue)31 b(of)f(the)h(v)-5 b(ariable)31 +b(is)g(set)f(to)i Fq(v)-5 b(alue)5 b Ft(.)630 4573 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 +4682 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 +4792 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 4902 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 5011 y([Arra)m(ys],)47 b(page)c(80\),)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 +5121 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 +5230 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 +5340 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g(`)p +Fs(-f)p Ft('.)p eop end +%%Page: 45 51 +TeXDict begin 45 50 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(45)150 299 y Fs(echo)870 +432 y(echo)47 b([-neE])f([)p Fi(arg)57 b Fs(...)o(])630 +565 y Ft(Output)31 b(the)i 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 674 y(status)40 b(is)g(alw)m(a)m(ys)h(0.)69 +b(If)39 b(`)p Fs(-n)p Ft(')h(is)f(sp)s(eci\014ed,)j(the)e(trailing)h +(newline)e(is)h(suppressed.)66 b(If)630 784 y(the)29 +b(`)p Fs(-e)p Ft(')g(option)g(is)h(giv)m(en,)g(in)m(terpretation)g(of)g +(the)f(follo)m(wing)h(bac)m(kslash-escap)s(ed)g(c)m(har-)630 +893 y(acters)38 b(is)f(enabled.)60 b(The)36 b(`)p Fs(-E)p +Ft(')h(option)g(disables)g(the)g(in)m(terpretation)h(of)f(these)g +(escap)s(e)630 1003 y(c)m(haracters,)h(ev)m(en)d(on)g(systems)g(where)f +(they)h(are)g(in)m(terpreted)h(b)m(y)e(default.)55 b(The)34 +b Fs(xpg_)630 1112 y(echo)d Ft(shell)h(option)h(ma)m(y)g(b)s(e)e(used)h +(to)h(dynamically)g(determine)f(whether)f(or)i(not)f +Fs(echo)630 1222 y Ft(expands)39 b(these)i(escap)s(e)g(c)m(haracters)g +(b)m(y)g(default.)70 b Fs(echo)39 b Ft(do)s(es)h(not)g(in)m(terpret)h +(`)p Fs(--)p Ft(')f(to)630 1332 y(mean)30 b(the)h(end)f(of)g(options.) +630 1465 y Fs(echo)f Ft(in)m(terprets)i(the)f(follo)m(wing)i(escap)s(e) +f(sequences:)630 1621 y Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))630 +1777 y Fs(\\b)384 b Ft(bac)m(kspace)630 1933 y Fs(\\c)g +Ft(suppress)28 b(further)h(output)630 2089 y Fs(\\e)384 +b Ft(escap)s(e)630 2245 y Fs(\\f)g Ft(form)30 b(feed)630 +2401 y Fs(\\n)384 b Ft(new)30 b(line)630 2557 y Fs(\\r)384 +b Ft(carriage)32 b(return)630 2713 y Fs(\\t)384 b Ft(horizon)m(tal)32 +b(tab)630 2869 y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)630 +3025 y Fs(\\\\)384 b Ft(bac)m(kslash)630 3181 y Fs(\\0)p +Fi(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 3291 y(three)e(o)s(ctal)g(digits\))630 +3447 y Fs(\\x)p Fi(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 3557 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e +(digits\))150 3713 y Fs(enable)870 3846 y(enable)46 b([-a])h([-dnps])f +([-f)g Fi(filename)11 b Fs(])45 b([)p Fi(name)57 b Fs(...)o(])630 +3978 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 +4088 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 4198 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 4307 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 +4417 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 4526 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 4659 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 4769 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 4878 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 4988 y(whether)c(or)g(not)h(it)g(is)f +(enabled.)630 5121 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 5230 y(ob)5 b(ject)26 b Fq(\014lename)5 +b Ft(,)28 b(on)d(systems)h(that)g(supp)s(ort)e(dynamic)h(loading.)40 +b(The)25 b(`)p Fs(-d)p Ft(')h(option)g(will)630 5340 +y(delete)32 b(a)e(builtin)g(loaded)h(with)f(`)p Fs(-f)p +Ft('.)p eop end +%%Page: 46 52 +TeXDict begin 46 51 bop 150 -116 a Ft(46)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(If)g(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 408 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 518 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 +(59\).)630 650 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 760 y(loading)31 b(a)g(new)f(builtin)g(from)g(a)g(shared)g +(ob)5 b(ject.)150 915 y Fs(help)870 1047 y(help)47 b([-dms])f([)p +Fi(pattern)11 b Fs(])630 1179 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 1288 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 1398 +y(the)h(builtins)e(is)i(prin)m(ted.)630 1530 y(Options,)f(if)h +(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)630 +1685 y Fs(-d)384 b Ft(Displa)m(y)32 b(a)e(short)g(description)h(of)f +(eac)m(h)i Fq(pattern)630 1840 y Fs(-m)384 b Ft(Displa)m(y)32 +b(the)e(description)g(of)h(eac)m(h)h Fq(pattern)e Ft(in)g(a)h +(manpage-lik)m(e)h(format)630 1994 y Fs(-s)384 b Ft(Displa)m(y)32 +b(only)e(a)h(short)f(usage)h(synopsis)e(for)i(eac)m(h)g +Fq(pattern)630 2149 y Ft(The)f(return)f(status)i(is)f(zero)h(unless)f +(no)g(command)h(matc)m(hes)g Fq(pattern)p Ft(.)150 2304 +y Fs(let)870 2436 y(let)47 b Fi(expression)55 b Fs([)p +Fi(expression)11 b Fs(])630 2568 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 2678 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 2787 +y(Arithmetic],)51 b(page)46 b(78.)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 2897 y(otherwise)31 b(0)g(is)f(returned.)150 +3051 y Fs(local)870 3184 y(local)46 b([)p Fi(option)11 +b Fs(])45 b Fi(name)11 b Fs([=)p Fi(value)g Fs(])44 b(...)630 +3316 y Ft(F)-8 b(or)26 b(eac)m(h)h(argumen)m(t,)g(a)e(lo)s(cal)i(v)-5 +b(ariable)26 b(named)f Fq(name)31 b Ft(is)25 b(created,)j(and)d +(assigned)g Fq(v)-5 b(alue)5 b Ft(.)630 3425 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 +3535 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 3645 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 3754 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 3864 y(readonly)30 b(v)-5 +b(ariable.)150 4018 y Fs(logout)870 4151 y(logout)46 +b([)p Fi(n)11 b Fs(])630 4283 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.)150 4437 y Fs(mapfile)870 4570 y(mapfile)46 b([-n)h +Fi(count)11 b Fs(])45 b([-O)i Fi(origin)11 b Fs(])46 +b([-s)g Fi(count)11 b Fs(])46 b([-t])h([-u)g Fi(fd)11 +b Fs(])46 b([)870 4679 y(-C)h Fi(callback)11 b Fs(])45 +b([-c)i Fi(quantum)11 b Fs(])45 b([)p Fi(array)11 b Fs(])630 +4811 y Ft(Read)37 b(lines)g(from)f(the)h(standard)f(input)g(in)m(to)h +(the)g(indexed)f(arra)m(y)i(v)-5 b(ariable)37 b Fq(arra)m(y)8 +b Ft(,)39 b(or)630 4921 y(from)c(\014le)h(descriptor)g +Fq(fd)j Ft(if)d(the)g(`)p Fs(-u)p Ft(')g(option)g(is)g(supplied.)56 +b(The)35 b(v)-5 b(ariable)37 b Fs(MAPFILE)d Ft(is)630 +5031 y(the)d(default)f Fq(arra)m(y)8 b Ft(.)41 b(Options,)30 +b(if)h(supplied,)e(ha)m(v)m(e)j(the)e(follo)m(wing)i(meanings:)630 +5185 y Fs(-n)384 b Ft(Cop)m(y)30 b(at)h(most)g Fq(coun)m(t)i +Ft(lines.)41 b(If)30 b Fq(coun)m(t)j Ft(is)d(0,)h(all)h(lines)e(are)h +(copied.)630 5340 y Fs(-O)384 b Ft(Begin)31 b(assigning)g(to)g +Fq(arra)m(y)39 b Ft(at)31 b(index)f Fq(origin)p Ft(.)41 +b(The)30 b(default)h(index)f(is)g(0.)p eop end +%%Page: 47 53 +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(-s)384 +b Ft(Discard)31 b(the)f(\014rst)g Fq(coun)m(t)j Ft(lines)e(read.)630 +458 y Fs(-t)384 b Ft(Remo)m(v)m(e)32 b(a)f(trailing)g(newline)g(from)f +(eac)m(h)h(line)g(read.)630 618 y Fs(-u)384 b Ft(Read)31 +b(lines)f(from)g(\014le)h(descriptor)f Fq(fd)j Ft(instead)e(of)f(the)h +(standard)e(input.)630 777 y Fs(-C)384 b Ft(Ev)-5 b(aluate)43 +b Fq(callbac)m(k)49 b Ft(eac)m(h)42 b(time)g Fq(quan)m(tum)p +Ft(P)f(lines)h(are)f(read.)74 b(The)41 b(`)p Fs(-c)p +Ft(')1110 887 y(option)31 b(sp)s(eci\014es)f Fq(quan)m(tum)p +Ft(.)630 1046 y Fs(-c)384 b Ft(Sp)s(ecify)30 b(the)g(n)m(um)m(b)s(er)f +(of)i(lines)f(read)h(b)s(et)m(w)m(een)g(eac)m(h)g(call)h(to)f +Fq(callbac)m(k)6 b Ft(.)630 1205 y(If)29 b(`)p Fs(-C)p +Ft(')g(is)h(sp)s(eci\014ed)f(without)g(`)p Fs(-c)p Ft(',)h(the)g +(default)g(quan)m(tum)f(is)g(5000.)42 b(When)30 b Fq(callbac)m(k)37 +b Ft(is)630 1315 y(ev)-5 b(aluated,)35 b(it)e(is)f(supplied)g(the)g +(index)g(of)h(the)g(next)g(arra)m(y)g(elemen)m(t)h(to)f(b)s(e)f +(assigned)h(as)630 1425 y(an)f(additional)h(argumen)m(t.)46 +b Fq(callbac)m(k)40 b Ft(is)32 b(ev)-5 b(aluated)33 b(after)g(the)f +(line)h(is)f(read)g(but)f(b)s(efore)630 1534 y(the)g(arra)m(y)f(elemen) +m(t)i(is)f(assigned.)630 1669 y(If)25 b(not)g(supplied)f(with)h(an)g +(explicit)i(origin,)g Fs(mapfile)c Ft(will)j(clear)g +Fq(arra)m(y)34 b Ft(b)s(efore)24 b(assigning)630 1778 +y(to)31 b(it.)630 1913 y Fs(mapfile)41 b Ft(returns)g(successfully)i +(unless)e(an)i(in)m(v)-5 b(alid)43 b(option)g(or)g(option)g(argumen)m +(t)g(is)630 2022 y(supplied,)29 b Fq(arra)m(y)39 b Ft(is)30 +b(in)m(v)-5 b(alid)31 b(or)g(unassignable,)f(or)h Fq(arra)m(y)38 +b Ft(is)31 b(not)f(an)h(indexed)e(arra)m(y)-8 b(.)150 +2182 y Fs(printf)870 2316 y(printf)46 b([-v)h Fi(var)11 +b Fs(])46 b Fi(format)57 b Fs([)p Fi(arguments)11 b Fs(])630 +2451 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 2560 y Fq(format)r Ft(.)40 b(The)29 b Fq(format)i +Ft(is)d(a)h(c)m(haracter)i(string)d(whic)m(h)h(con)m(tains)h(three)e(t) +m(yp)s(es)h(of)g(ob)5 b(jects:)630 2670 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 2780 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 2889 y(sp)s(eci\014cations,)38 b(eac)m(h)g(of)e(whic)m(h)g(causes)g +(prin)m(ting)g(of)g(the)h(next)f(successiv)m(e)h Fq(argumen)m(t)r +Ft(.)630 2999 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 3108 y(bac)m(kslash)39 +b(escap)s(e)f(sequences)h(in)f(the)g(corresp)s(onding)f +Fq(argumen)m(t)r Ft(,)k(\(except)e(that)g(`)p Fs(\\c)p +Ft(')630 3218 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 3328 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 3437 y Fs(printf)31 b Ft(to)i(output)f(the)h(corresp) +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 3547 y(as)f(shell)f(input.)630 3681 y(The)24 +b(`)p Fs(-v)p Ft(')h(option)g(causes)g(the)g(output)g(to)g(b)s(e)f +(assigned)h(to)h(the)f(v)-5 b(ariable)25 b Fq(v)-5 b(ar)32 +b Ft(rather)24 b(than)630 3791 y(b)s(eing)30 b(prin)m(ted)g(to)h(the)g +(standard)e(output.)630 3925 y(The)i Fq(format)i Ft(is)e(reused)f(as)i +(necessary)f(to)h(consume)f(all)h(of)f(the)g Fq(argumen)m(ts)t +Ft(.)43 b(If)31 b(the)g Fq(for-)630 4035 y(mat)d 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 4144 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 4254 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 +4413 y Fs(read)870 4548 y(read)47 b([-ers])f([-a)h Fi(aname)11 +b Fs(])45 b([-d)i Fi(delim)11 b Fs(])46 b([-i)h Fi(text)11 +b Fs(])46 b([-n)g Fi(nchars)11 b Fs(])46 b([-N)h Fi(nchars)11 +b Fs(])45 b([-p)i Fi(prompt)11 b Fs(])45 b([-t)i Fi(time-)870 +4658 y(out)11 b Fs(])46 b([-u)h Fi(fd)11 b Fs(])46 b([)p +Fi(name)57 b Fs(...])630 4792 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 4902 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 5011 y Fq(name)5 b +Ft(,)28 b(the)g(second)g(w)m(ord)f(to)h(the)f(second)h +Fq(name)5 b Ft(,)28 b(and)f(so)h(on,)g(with)f(lefto)m(v)m(er)j(w)m +(ords)d(and)630 5121 y(their)h(in)m(terv)m(ening)g(separators)g +(assigned)g(to)h(the)e(last)i Fq(name)5 b Ft(.)40 b(If)27 +b(there)h(are)g(few)m(er)f(w)m(ords)630 5230 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 5340 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)p eop end +%%Page: 48 54 +TeXDict begin 48 53 bop 150 -116 a Ft(48)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 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 +408 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 +518 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 628 y(co)s(de)e(is)g(zero,)h(unless)e(end-of-\014le)h(is)g +(encoun)m(tered,)h Fs(read)e Ft(times)h(out)g(\(in)g(whic)m(h)f(case)i +(the)630 737 y(return)i(co)s(de)i(is)g(greater)g(than)g(128\),)h(or)f +(an)f(in)m(v)-5 b(alid)31 b(\014le)g(descriptor)f(is)h(supplied)e(as)i +(the)630 847 y(argumen)m(t)g(to)g(`)p Fs(-u)p Ft('.)630 +983 y(Options,)f(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h +(meanings:)630 1144 y Fs(-a)e Fi(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 1254 y Fq(aname)5 b Ft(,)29 +b(starting)g(at)f(0.)40 b(All)29 b(elemen)m(ts)g(are)f(remo)m(v)m(ed)h +(from)e Fq(aname)33 b Ft(b)s(efore)1110 1363 y(the)e(assignmen)m(t.)41 +b(Other)30 b Fq(name)36 b Ft(argumen)m(ts)30 b(are)h(ignored.)630 +1525 y Fs(-d)f Fi(delim)114 b Ft(The)41 b(\014rst)h(c)m(haracter)h(of)f +Fq(delim)g Ft(is)g(used)g(to)g(terminate)h(the)f(input)f(line,)1110 +1635 y(rather)30 b(than)g(newline.)630 1797 y Fs(-e)384 +b Ft(Readline)28 b(\(see)h(Chapter)e(8)h([Command)f(Line)g(Editing],)i +(page)f(93\))h(is)f(used)1110 1906 y(to)42 b(obtain)f(the)g(line.)73 +b(Readline)41 b(uses)g(the)g(curren)m(t)g(\(or)g(default,)j(if)d(line) +1110 2016 y(editing)31 b(w)m(as)g(not)f(previously)g(activ)m(e\))j +(editing)f(settings.)630 2178 y Fs(-i)e Fi(text)162 b +Ft(If)36 b(Readline)i(is)f(b)s(eing)g(used)f(to)h(read)g(the)g(line,)j +Fq(text)f Ft(is)e(placed)h(in)m(to)g(the)1110 2287 y(editing)31 +b(bu\013er)e(b)s(efore)h(editing)h(b)s(egins.)630 2449 +y Fs(-n)f Fi(nchars)1110 2559 y Fs(read)38 b Ft(returns)f(after)j +(reading)f Fq(nc)m(hars)j Ft(c)m(haracters)e(rather)f(than)g(w)m +(aiting)1110 2668 y(for)g(a)h(complete)h(line)f(of)f(input,)i(but)e +(honor)g(a)h(delimiter)g(if)f(few)m(er)h(than)1110 2778 +y Fq(nc)m(hars)34 b Ft(c)m(haracters)e(are)e(read)h(b)s(efore)f(the)g +(delimiter.)630 2939 y Fs(-N)g Fi(nchars)1110 3049 y +Fs(read)39 b Ft(returns)f(after)j(reading)e(exactly)j +Fq(nc)m(hars)h Ft(c)m(haracters)f(rather)d(than)1110 +3159 y(w)m(aiting)32 b(for)f(a)g(complete)i(line)e(of)g(input,)g +(unless)f(EOF)h(is)g(encoun)m(tered)g(or)1110 3268 y +Fs(read)f Ft(times)i(out.)43 b(Delimiter)33 b(c)m(haracters)f(encoun)m +(tered)g(in)f(the)g(input)g(are)1110 3378 y(not)g(treated)h(sp)s +(ecially)g(and)f(do)f(not)i(cause)f Fs(read)f Ft(to)i(return)e(un)m +(til)h Fq(nc)m(hars)1110 3487 y Ft(c)m(haracters)h(are)f(read.)630 +3649 y Fs(-p)f Fi(prompt)1110 3759 y Ft(Displa)m(y)38 +b Fq(prompt)r Ft(,)f(without)g(a)f(trailing)i(newline,)g(b)s(efore)e +(attempting)i(to)1110 3868 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 3978 y(from)30 b(a)h(terminal.)630 4140 +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 +4249 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 4359 +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 4521 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 4630 y(ec)m(ho)s(ed.)630 +4792 y Fs(-t)i Fi(timeout)1110 4902 y Ft(Cause)23 b Fs(read)f +Ft(to)i(time)f(out)h(and)e(return)g(failure)h(if)g(a)h(complete)g(line) +g(of)f(input)1110 5011 y(is)44 b(not)f(read)h(within)e +Fq(timeout)47 b Ft(seconds.)80 b Fq(timeout)46 b Ft(ma)m(y)e(b)s(e)f(a) +h(decimal)1110 5121 y(n)m(um)m(b)s(er)26 b(with)h(a)h(fractional)h(p)s +(ortion)d(follo)m(wing)j(the)f(decimal)g(p)s(oin)m(t.)40 +b(This)1110 5230 y(option)g(is)g(only)g(e\013ectiv)m(e)j(if)c +Fs(read)g Ft(is)h(reading)g(input)f(from)g(a)h(terminal,)1110 +5340 y(pip)s(e,)25 b(or)e(other)i(sp)s(ecial)f(\014le;)i(it)f(has)e(no) +h(e\013ect)h(when)e(reading)h(from)g(regular)p eop end +%%Page: 49 55 +TeXDict begin 49 54 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(49)1110 299 y(\014les.)55 +b(If)34 b Fq(timeout)k Ft(is)d(0,)i Fs(read)d Ft(returns)g(success)h +(if)g(input)g(is)g(a)m(v)-5 b(ailable)37 b(on)1110 408 +y(the)j(sp)s(eci\014ed)f(\014le)g(descriptor,)j(failure)e(otherwise.)69 +b(The)39 b(exit)h(status)g(is)1110 518 y(greater)32 b(than)e(128)h(if)g +(the)f(timeout)i(is)e(exceeded.)630 682 y Fs(-u)g Fi(fd)258 +b Ft(Read)31 b(input)e(from)h(\014le)g(descriptor)h Fq(fd)t +Ft(.)150 847 y Fs(readarray)870 956 y(readarray)45 b([-n)i +Fi(count)11 b Fs(])46 b([-O)h Fi(origin)11 b Fs(])45 +b([-s)i Fi(count)11 b Fs(])46 b([-t])g([-u)h Fi(fd)11 +b Fs(])47 b([)870 1066 y(-C)g Fi(callback)11 b Fs(])45 +b([-c)i Fi(quantum)11 b Fs(])45 b([)p Fi(array)11 b Fs(])630 +1203 y Ft(Read)37 b(lines)g(from)f(the)h(standard)f(input)g(in)m(to)h +(the)g(indexed)f(arra)m(y)i(v)-5 b(ariable)37 b Fq(arra)m(y)8 +b Ft(,)39 b(or)630 1313 y(from)30 b(\014le)g(descriptor)h +Fq(fd)i Ft(if)d(the)h(`)p Fs(-u)p Ft(')f(option)h(is)f(supplied.)630 +1450 y(A)g(synon)m(ym)g(for)g Fs(mapfile)p Ft(.)150 1614 +y Fs(source)870 1751 y(source)46 b Fi(filename)630 1888 +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(35\).)150 2052 +y Fs(type)870 2189 y(type)47 b([-afptP])e([)p Fi(name)57 +b Fs(...)o(])630 2326 y Ft(F)-8 b(or)41 b(eac)m(h)h Fq(name)5 +b Ft(,)44 b(indicate)e(ho)m(w)f(it)g(w)m(ould)f(b)s(e)g(in)m(terpreted) +h(if)g(used)f(as)h(a)g(command)630 2436 y(name.)630 2573 +y(If)d(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 2682 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 2792 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 2902 +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 3039 +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 3148 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 3285 y(The)23 b(`)p Fs(-P)p Ft(')g(option)h(forces)g(a)g +(path)f(searc)m(h)h(for)f(eac)m(h)h Fq(name)5 b Ft(,)26 +b(ev)m(en)e(if)f(`)p Fs(-t)p Ft(')g(w)m(ould)g(not)h(return)630 +3395 y(`)p Fs(file)p Ft('.)630 3532 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 3641 +y(the)c(\014le)f(that)h(app)s(ears)f(\014rst)f(in)h Fs($PATH)p +Ft(.)630 3778 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 3888 y(cutable)d(named)f Fq(\014le)5 b +Ft(.)49 b(This)32 b(includes)h(aliases)i(and)d(functions,)i(if)f(and)f +(only)i(if)f(the)g(`)p Fs(-p)p Ft(')630 3998 y(option)e(is)f(not)h +(also)g(used.)630 4134 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 4244 y(the)k Fs(command)d +Ft(builtin.)630 4381 y(The)j(return)f(status)h(is)g(zero)h(if)f(all)h +(of)f(the)h Fq(names)i Ft(are)e(found,)e(non-zero)i(if)f(an)m(y)g(are)h +(not)630 4491 y(found.)150 4655 y Fs(typeset)870 4792 +y(typeset)46 b([-afFrxi])f([-p])i([)p Fi(name)11 b Fs([=)p +Fi(value)g Fs(])43 b(...)o(])630 4929 y Ft(The)29 b Fs(typeset)f +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 5039 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 5203 y Fs(ulimit)870 5340 y(ulimit)46 +b([-abcdefilmnpqrstuvxHST])41 b([)p Fi(limit)11 b Fs(])p +eop end +%%Page: 50 56 +TeXDict begin 50 55 bop 150 -116 a Ft(50)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(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 408 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 +518 y(as)i(follo)m(ws:)630 671 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 825 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 +978 y Fs(-a)384 b Ft(All)31 b(curren)m(t)f(limits)h(are)g(rep)s(orted.) +630 1132 y Fs(-b)384 b Ft(The)30 b(maxim)m(um)g(so)s(c)m(k)m(et)i +(bu\013er)e(size.)630 1285 y Fs(-c)384 b Ft(The)30 b(maxim)m(um)g(size) +h(of)g(core)g(\014les)f(created.)630 1439 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 1592 y Fs(-e)384 b Ft(The)30 b(maxim)m(um)g(sc)m +(heduling)h(priorit)m(y)f(\()p Fs(")p Ft(nice)p Fs(")p +Ft(\).)630 1745 y Fs(-f)384 b Ft(The)30 b(maxim)m(um)g(size)h(of)g +(\014les)f(written)h(b)m(y)f(the)g(shell)h(and)f(its)h(c)m(hildren.)630 +1899 y Fs(-i)384 b Ft(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(p)s +(ending)e(signals.)630 2052 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 2206 y Fs(-m)384 b Ft(The)36 b(maxim)m(um)g(residen)m(t)h(set)g +(size)g(\(man)m(y)g(systems)f(do)h(not)f(honor)g(this)1110 +2315 y(limit\).)630 2469 y Fs(-n)384 b Ft(The)38 b(maxim)m(um)h(n)m(um) +m(b)s(er)e(of)i(op)s(en)f(\014le)h(descriptors)g(\(most)g(systems)g(do) +1110 2578 y(not)31 b(allo)m(w)g(this)g(v)-5 b(alue)31 +b(to)g(b)s(e)e(set\).)630 2732 y Fs(-p)384 b Ft(The)30 +b(pip)s(e)f(bu\013er)h(size.)630 2885 y Fs(-q)384 b Ft(The)30 +b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(b)m(ytes)g(in)f(POSIX)f(message)j +(queues.)630 3039 y Fs(-r)384 b Ft(The)30 b(maxim)m(um)g(real-time)i +(sc)m(heduling)f(priorit)m(y)-8 b(.)630 3192 y Fs(-s)384 +b Ft(The)30 b(maxim)m(um)g(stac)m(k)i(size.)630 3345 +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.)630 3499 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 3652 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 +3806 y Fs(-x)384 b Ft(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i +(\014le)f(lo)s(c)m(ks.)630 3959 y Fs(-T)384 b Ft(The)30 +b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(threads.)630 4113 +y(If)i 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 4222 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,)j(the)e(curren)m(t)630 4332 y(soft)38 +b(limit,)j(and)d(no)f(limit,)k(resp)s(ectiv)m(ely)-8 +b(.)66 b(A)38 b(hard)f(limit)h(cannot)h(b)s(e)e(increased)i(b)m(y)f(a) +630 4441 y(non-ro)s(ot)f(user)f(once)i(it)g(is)f(set;)k(a)c(soft)g +(limit)h(ma)m(y)g(b)s(e)e(increased)h(up)f(to)i(the)f(v)-5 +b(alue)38 b(of)630 4551 y(the)c(hard)f(limit.)51 b(Otherwise,)35 +b(the)f(curren)m(t)f(v)-5 b(alue)35 b(of)f(the)f(soft)i(limit)f(for)g +(the)g(sp)s(eci\014ed)630 4661 y(resource)27 b(is)h(prin)m(ted,)f +(unless)g(the)g(`)p Fs(-H)p Ft(')g(option)h(is)f(supplied.)38 +b(When)27 b(setting)h(new)f(limits,)630 4770 y(if)40 +b(neither)f(`)p Fs(-H)p Ft(')h(nor)f(`)p Fs(-S)p Ft(')h(is)f(supplied,) +i(b)s(oth)e(the)h(hard)f(and)g(soft)h(limits)g(are)g(set.)69 +b(If)630 4880 y(no)35 b(option)h(is)f(giv)m(en,)j(then)d(`)p +Fs(-f)p Ft(')g(is)g(assumed.)55 b(V)-8 b(alues)36 b(are)f(in)g(1024-b)m +(yte)j(incremen)m(ts,)630 4989 y(except)d(for)f(`)p Fs(-t)p +Ft(',)g(whic)m(h)g(is)g(in)g(seconds,)h(`)p Fs(-p)p Ft(',)g(whic)m(h)e +(is)h(in)g(units)f(of)h(512-b)m(yte)i(blo)s(c)m(ks,)630 +5099 y(and)30 b(`)p Fs(-n)p Ft(')g(and)g(`)p Fs(-u)p +Ft(',)g(whic)m(h)g(are)h(unscaled)f(v)-5 b(alues.)630 +5230 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 +5340 y(an)30 b(error)g(o)s(ccurs)g(while)h(setting)g(a)g(new)f(limit.)p +eop end +%%Page: 51 57 +TeXDict begin 51 56 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(51)150 299 y Fs(unalias)870 +435 y(unalias)46 b([-a])g([)p Fi(name)57 b Fs(...)47 +b(])630 572 y Ft(Remo)m(v)m(e)39 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 +681 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(79.)150 919 y Fr(4.3)68 b(Mo)t(difying)45 +b(Shell)g(Beha)l(vior)150 1144 y Fj(4.3.1)63 b(The)41 +b(Set)g(Builtin)150 1290 y Ft(This)35 b(builtin)h(is)g(so)g +(complicated)i(that)f(it)f(deserv)m(es)h(its)f(o)m(wn)g(section.)59 +b Fs(set)35 b Ft(allo)m(ws)j(y)m(ou)e(to)h(c)m(hange)150 +1400 y(the)c(v)-5 b(alues)34 b(of)f(shell)g(options)h(and)e(set)i(the)f +(p)s(ositional)h(parameters,)h(or)e(to)h(displa)m(y)f(the)g(names)h +(and)150 1510 y(v)-5 b(alues)31 b(of)f(shell)h(v)-5 b(ariables.)150 +1675 y Fs(set)870 1811 y(set)47 b([--abefhkmnptuvxBCEHPT])41 +b([-o)47 b Fi(option)11 b Fs(])46 b([)p Fi(argument)55 +b Fs(...])870 1921 y(set)47 b([+abefhkmnptuvxBCEHPT])42 +b([+o)47 b Fi(option)11 b Fs(])45 b([)p Fi(argument)56 +b Fs(...)o(])630 2057 y Ft(If)22 b(no)h(options)g(or)g(argumen)m(ts)g +(are)g(supplied,)g Fs(set)f Ft(displa)m(ys)g(the)h(names)g(and)f(v)-5 +b(alues)23 b(of)g(all)630 2167 y(shell)j(v)-5 b(ariables)27 +b(and)e(functions,)h(sorted)g(according)h(to)g(the)f(curren)m(t)f(lo)s +(cale,)k(in)c(a)i(format)630 2276 y(that)i(ma)m(y)h(b)s(e)e(reused)g +(as)h(input)f(for)h(setting)h(or)e(resetting)i(the)f(curren)m(tly-set)h +(v)-5 b(ariables.)630 2386 y(Read-only)37 b(v)-5 b(ariables)37 +b(cannot)h(b)s(e)e(reset.)59 b(In)36 b Fl(posix)g Ft(mo)s(de,)i(only)f +(shell)f(v)-5 b(ariables)38 b(are)630 2495 y(listed.)630 +2632 y(When)29 b(options)g(are)g(supplied,)f(they)h(set)h(or)f(unset)f +(shell)h(attributes.)41 b(Options,)29 b(if)g(sp)s(ec-)630 +2741 y(i\014ed,)h(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630 +2905 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 +3014 y(p)s(ort)e(to)h(the)f(en)m(vironmen)m(t)h(of)g(subsequen)m(t)f +(commands.)630 3177 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 +3287 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 3450 y Fs(-e)384 +b Ft(Exit)65 b(immediately)g(if)f(a)h(pip)s(eline)e(\(see)i(Section)g +(3.2.2)h([Pip)s(elines],)1110 3560 y(page)56 b(8\),)62 +b(whic)m(h)55 b(ma)m(y)h(consist)f(of)h(a)f(single)h(simple)f(command)g +(\(see)1110 3669 y(Section)43 b(3.2.1)i([Simple)d(Commands],)j(page)e +(8\),)k(a)c(subshell)e(command)1110 3779 y(enclosed)32 +b(in)f(paren)m(theses)h(\(see)h(Section)f(3.2.4.3)i([Command)d +(Grouping],)1110 3889 y(page)h(13\),)h(or)e(one)g(of)h(the)f(commands)g +(executed)h(as)f(part)g(of)h(a)f(command)1110 3998 y(list)37 +b(enclosed)g(b)m(y)f(braces)g(\(see)h(Section)g(3.2.4.3)h([Command)e +(Grouping],)1110 4108 y(page)48 b(13\))g(returns)d(a)j(non-zero)f +(status.)91 b(The)46 b(shell)h(do)s(es)g(not)g(exit)h(if)1110 +4217 y(the)39 b(command)f(that)h(fails)g(is)f(part)g(of)h(the)f +(command)h(list)g(immediately)1110 4327 y(follo)m(wing)47 +b(a)f Fs(while)e Ft(or)h Fs(until)f Ft(k)m(eyw)m(ord,)50 +b(part)45 b(of)h(the)g(test)g(in)f(an)h Fs(if)1110 4436 +y Ft(statemen)m(t,)31 b(part)d(of)h(an)m(y)g(command)f(executed)h(in)g +(a)g Fs(&&)e Ft(or)i Fs(||)f Ft(list)h(except)1110 4546 +y(the)48 b(command)h(follo)m(wing)g(the)g(\014nal)f Fs(&&)f +Ft(or)i Fs(||)p Ft(,)j(an)m(y)d(command)f(in)g(a)1110 +4656 y(pip)s(eline)39 b(but)f(the)i(last,)i(or)d(if)g(the)h(command's)f +(return)f(status)h(is)g(b)s(eing)1110 4765 y(in)m(v)m(erted)33 +b(with)e Fs(!)p Ft(.)45 b(A)32 b(trap)g(on)f Fs(ERR)p +Ft(,)h(if)g(set,)h(is)f(executed)g(b)s(efore)g(the)g(shell)1110 +4875 y(exits.)1110 5011 y(This)e(option)h(applies)f(to)h(the)g(shell)g +(en)m(vironmen)m(t)g(and)f(eac)m(h)h(subshell)f(en-)1110 +5121 y(vironmen)m(t)j(separately)i(\(see)f(Section)g(3.7.3)h([Command)d +(Execution)i(En-)1110 5230 y(vironmen)m(t],)i(page)f(30\),)i(and)d(ma)m +(y)h(cause)f(subshells)g(to)h(exit)g(b)s(efore)f(exe-)1110 +5340 y(cuting)d(all)g(the)g(commands)f(in)g(the)g(subshell.)p +eop end +%%Page: 52 58 +TeXDict begin 52 57 bop 150 -116 a Ft(52)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(-f)384 b Ft(Disable)31 +b(\014lename)g(expansion)f(\(globbing\).)630 455 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 565 y(execution.)42 +b(This)29 b(option)i(is)g(enabled)f(b)m(y)g(default.)630 +722 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 +831 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 941 y(command)30 b(name.)630 +1097 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(89\).)630 +1254 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 +1363 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 +1473 y(shells.)630 1630 y Fs(-o)30 b Fi(option-name)1110 +1739 y Ft(Set)h(the)f(option)h(corresp)s(onding)e(to)i +Fq(option-name)5 b Ft(:)1110 1896 y Fs(allexport)1590 +2005 y Ft(Same)30 b(as)h Fs(-a)p Ft(.)1110 2162 y Fs(braceexpand)1590 +2271 y Ft(Same)f(as)h Fs(-B)p Ft(.)1110 2428 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 2538 y([Command)38 +b(Line)g(Editing],)i(page)f(93\).)66 b(This)37 b(also)i(a\013ects)1590 +2647 y(the)31 b(editing)g(in)m(terface)h(used)d(for)h +Fs(read)f(-e)p Ft(.)1110 2804 y Fs(errexit)144 b Ft(Same)30 +b(as)h Fs(-e)p Ft(.)1110 2960 y Fs(errtrace)96 b Ft(Same)30 +b(as)h Fs(-E)p Ft(.)1110 3117 y Fs(functrace)1590 3226 +y Ft(Same)f(as)h Fs(-T)p Ft(.)1110 3383 y Fs(hashall)144 +b Ft(Same)30 b(as)h Fs(-h)p Ft(.)1110 3540 y Fs(histexpand)1590 +3649 y Ft(Same)f(as)h Fs(-H)p Ft(.)1110 3806 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 3915 y([Bash)d(History)g(F)-8 b(acilities],)41 +b(page)c(121.)60 b(This)36 b(option)h(is)f(on)1590 4025 +y(b)m(y)30 b(default)h(in)f(in)m(teractiv)m(e)j(shells.)1110 +4181 y Fs(ignoreeof)1590 4291 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 4448 +y Fs(keyword)144 b Ft(Same)30 b(as)h Fs(-k)p Ft(.)1110 +4604 y Fs(monitor)144 b Ft(Same)30 b(as)h Fs(-m)p Ft(.)1110 +4761 y Fs(noclobber)1590 4870 y Ft(Same)f(as)h Fs(-C)p +Ft(.)1110 5027 y Fs(noexec)192 b Ft(Same)30 b(as)h Fs(-n)p +Ft(.)1110 5183 y Fs(noglob)192 b Ft(Same)30 b(as)h Fs(-f)p +Ft(.)1110 5340 y Fs(nolog)240 b Ft(Curren)m(tly)30 b(ignored.)p +eop end +%%Page: 53 59 +TeXDict begin 53 58 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(53)1110 299 y +Fs(notify)192 b Ft(Same)30 b(as)h Fs(-b)p Ft(.)1110 455 +y Fs(nounset)144 b Ft(Same)30 b(as)h Fs(-u)p Ft(.)1110 +612 y Fs(onecmd)192 b Ft(Same)30 b(as)h Fs(-t)p Ft(.)1110 +769 y Fs(physical)96 b Ft(Same)30 b(as)h Fs(-P)p Ft(.)1110 +925 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 1035 y(the)33 b(last)h(\(righ)m(tmost\))h(command)e(to)h +(exit)g(with)f(a)g(non-zero)1590 1144 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 +1254 y(cessfully)-8 b(.)41 b(This)30 b(option)h(is)f(disabled)g(b)m(y)h +(default.)1110 1410 y Fs(posix)240 b Ft(Change)30 b(the)g(b)s(eha)m +(vior)h(of)f(Bash)g(where)g(the)g(default)h(op)s(era-)1590 +1520 y(tion)25 b(di\013ers)f(from)g(the)h Fl(posix)f +Ft(standard)f(to)i(matc)m(h)h(the)f(stan-)1590 1630 y(dard)32 +b(\(see)i(Section)g(6.11)h([Bash)e(POSIX)f(Mo)s(de],)j(page)e(84\).) +1590 1739 y(This)k(is)g(in)m(tended)g(to)h(mak)m(e)g(Bash)g(b)s(eha)m +(v)m(e)g(as)g(a)f(strict)h(su-)1590 1849 y(p)s(erset)30 +b(of)h(that)f(standard.)1110 2005 y Fs(privileged)1590 +2115 y Ft(Same)g(as)h Fs(-p)p Ft(.)1110 2271 y Fs(verbose)144 +b Ft(Same)30 b(as)h Fs(-v)p Ft(.)1110 2428 y Fs(vi)384 +b Ft(Use)36 b(a)g Fs(vi)p Ft(-st)m(yle)g(line)g(editing)g(in)m +(terface.)58 b(This)35 b(also)h(a\013ects)1590 2538 y(the)31 +b(editing)g(in)m(terface)h(used)d(for)h Fs(read)f(-e)p +Ft(.)1110 2694 y Fs(xtrace)192 b Ft(Same)30 b(as)h Fs(-x)p +Ft(.)630 2851 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 2960 y Ft(\014les)23 b(are)h(not)f(pro)s(cessed,) +h(shell)g(functions)e(are)i(not)f(inherited)g(from)f(the)i(en-)1110 +3070 y(vironmen)m(t,)h(and)e(the)g Fs(SHELLOPTS)p Ft(,)f +Fs(BASHOPTS)p Ft(,)h Fs(CDPATH)e Ft(and)i Fs(GLOBIGNORE)1110 +3180 y Ft(v)-5 b(ariables,)23 b(if)e(they)g(app)s(ear)f(in)g(the)h(en)m +(vironmen)m(t,)i(are)e(ignored.)38 b(If)20 b(the)h(shell)1110 +3289 y(is)37 b(started)h(with)f(the)g(e\013ectiv)m(e)j(user)d +(\(group\))g(id)g(not)g(equal)h(to)g(the)f(real)1110 +3399 y(user)h(\(group\))h(id,)i(and)d(the)h Fs(-p)f Ft(option)i(is)e +(not)i(supplied,)f(these)h(actions)1110 3508 y(are)32 +b(tak)m(en)i(and)d(the)h(e\013ectiv)m(e)j(user)c(id)h(is)g(set)h(to)f +(the)h(real)f(user)g(id.)45 b(If)32 b(the)1110 3618 y +Fs(-p)i Ft(option)h(is)g(supplied)f(at)h(startup,)h(the)f(e\013ectiv)m +(e)i(user)d(id)g(is)h(not)g(reset.)1110 3727 y(T)-8 b(urning)35 +b(this)i(option)g(o\013)g(causes)g(the)g(e\013ectiv)m(e)i(user)d(and)g +(group)g(ids)g(to)1110 3837 y(b)s(e)30 b(set)h(to)g(the)f(real)h(user)f +(and)g(group)g(ids.)630 3994 y Fs(-t)384 b Ft(Exit)31 +b(after)g(reading)f(and)g(executing)h(one)g(command.)630 +4150 y Fs(-u)384 b Ft(T)-8 b(reat)25 b(unset)e(v)-5 b(ariables)25 +b(and)e(parameters)h(other)h(than)e(the)h(sp)s(ecial)h(param-)1110 +4260 y(eters)35 b(`)p Fs(@)p Ft(')f(or)g(`)p Fs(*)p Ft(')h(as)f(an)g +(error)g(when)f(p)s(erforming)g(parameter)i(expansion.)1110 +4369 y(An)28 b(error)h(message)g(will)g(b)s(e)f(written)h(to)h(the)e +(standard)g(error,)h(and)f(a)h(non-)1110 4479 y(in)m(teractiv)m(e)k +(shell)e(will)g(exit.)630 4635 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 +4792 y Fs(-x)384 b Ft(Prin)m(t)21 b(a)h(trace)h(of)f(simple)f +(commands,)i Fs(for)e Ft(commands,)i Fs(case)d Ft(commands,)1110 +4902 y Fs(select)29 b Ft(commands,)j(and)e(arithmetic)j +Fs(for)d Ft(commands)h(and)f(their)i(argu-)1110 5011 +y(men)m(ts)h(or)f(asso)s(ciated)i(w)m(ord)e(lists)h(after)g(they)f(are) +h(expanded)f(and)f(b)s(efore)1110 5121 y(they)i(are)g(executed.)49 +b(The)32 b(v)-5 b(alue)33 b(of)g(the)g Fs(PS4)f Ft(v)-5 +b(ariable)34 b(is)f(expanded)f(and)1110 5230 y(the)24 +b(resultan)m(t)h(v)-5 b(alue)24 b(is)g(prin)m(ted)g(b)s(efore)f(the)h +(command)g(and)f(its)i(expanded)1110 5340 y(argumen)m(ts.)p +eop end +%%Page: 54 60 +TeXDict begin 54 59 bop 150 -116 a Ft(54)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 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 408 y(Expansion],)30 b(page)h(18\).)42 +b(This)30 b(option)h(is)f(on)g(b)m(y)h(default.)630 556 +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 666 y(existing)31 +b(\014les.)630 814 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 +923 y(substitutions,)35 b(and)e(commands)g(executed)i(in)f(a)g +(subshell)f(en)m(vironmen)m(t.)1110 1033 y(The)d Fs(ERR)f +Ft(trap)i(is)f(normally)h(not)f(inherited)g(in)g(suc)m(h)g(cases.)630 +1181 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 +1290 y(teraction],)g(page)d(123\).)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 1400 y(shells.)630 +1548 y Fs(-P)384 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 +1657 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 +1767 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 1877 +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 1986 y(directory)-8 b(.)1110 +2115 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 2224 y(then:)1350 2353 y Fs($)47 b(cd)h(/usr/sys;)d(echo)i +($PWD)1350 2463 y(/usr/sys)1350 2572 y($)g(cd)h(..;)f(pwd)1350 +2682 y(/usr)1110 2811 y Ft(If)30 b Fs(set)f(-P)h Ft(is)h(on,)f(then:) +1350 2939 y Fs($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 +3049 y(/usr/local/sys)1350 3158 y($)g(cd)h(..;)f(pwd)1350 +3268 y(/usr/local)630 3416 y(-T)384 b Ft(If)34 b(set,)j(an)m(y)e(trap)g +(on)g Fs(DEBUG)e Ft(and)i Fs(RETURN)e Ft(are)i(inherited)g(b)m(y)f +(shell)i(func-)1110 3525 y(tions,)k(command)d(substitutions,)h(and)f +(commands)g(executed)h(in)f(a)h(sub-)1110 3635 y(shell)33 +b(en)m(vironmen)m(t.)49 b(The)32 b Fs(DEBUG)g Ft(and)g +Fs(RETURN)f Ft(traps)h(are)i(normally)f(not)1110 3745 +y(inherited)d(in)g(suc)m(h)g(cases.)630 3892 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 4002 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 4112 y(gumen)m(ts)t Ft(,)d(ev)m(en)g(if)f(some)h(of) +f(them)h(b)s(egin)f(with)g(a)g(`)p Fs(-)p Ft('.)630 4260 +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 +4369 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 +4479 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)h(parameters)1110 +4588 y(remain)k(unc)m(hanged.)630 4736 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 +4846 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 4955 y(found)29 b(in)h Fs($-)p Ft(.)630 5084 +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 5194 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)h(parameter)g Fs(#)f +Ft(is)g(set)h(to)g(N.)630 5322 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.)p eop end +%%Page: 55 61 +TeXDict begin 55 60 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(55)150 299 y Fj(4.3.2)63 +b(The)41 b(Shopt)h(Builtin)150 446 y Ft(This)30 b(builtin)g(allo)m(ws)h +(y)m(ou)g(to)g(c)m(hange)h(additional)f(shell)f(optional)i(b)s(eha)m +(vior.)150 618 y Fs(shopt)870 756 y(shopt)46 b([-pqsu])g([-o])h([)p +Fi(optname)56 b Fs(...)o(])630 895 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 +1004 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 1114 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 1224 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 1333 y(follo)m(wing)32 b(meanings:)630 1501 y Fs(-s)384 +b Ft(Enable)30 b(\(set\))i(eac)m(h)f Fq(optname)5 b Ft(.)630 +1668 y Fs(-u)384 b Ft(Disable)31 b(\(unset\))g(eac)m(h)h +Fq(optname)5 b Ft(.)630 1836 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 1946 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 2055 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 2165 y(non-zero)31 b(otherwise.)630 +2333 y Fs(-o)384 b Ft(Restricts)28 b(the)g(v)-5 b(alues)28 +b(of)f Fq(optname)33 b Ft(to)c(b)s(e)d(those)i(de\014ned)f(for)g(the)g +(`)p Fs(-o)p Ft(')h(op-)1110 2442 y(tion)23 b(to)h(the)f +Fs(set)f Ft(builtin)h(\(see)g(Section)h(4.3.1)h([The)d(Set)i(Builtin],) +h(page)e(51\).)630 2610 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 +2719 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 2858 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 2997 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 3106 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 3216 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 +3354 y(The)f(list)h(of)f Fs(shopt)f Ft(options)i(is:)630 +3522 y Fs(autocd)192 b Ft(If)27 b(set,)h(a)g(command)f(name)g(that)h +(is)f(the)g(name)g(of)h(a)f(directory)h(is)f(executed)1110 +3632 y(as)j(if)f(it)h(w)m(ere)f(the)h(argumen)m(t)g(to)g(the)f +Fs(cd)g Ft(command.)40 b(This)29 b(option)g(is)h(only)1110 +3741 y(used)g(b)m(y)g(in)m(teractiv)m(e)j(shells.)630 +3909 y Fs(cdable_vars)1110 4018 y Ft(If)h(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 4128 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 4238 y(the)g(directory)f(to)i(c)m(hange)f(to.)630 +4405 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 4515 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 +4624 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 4734 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 4844 +y(pro)s(ceeds.)40 b(This)30 b(option)h(is)f(only)h(used)e(b)m(y)h(in)m +(teractiv)m(e)k(shells.)630 5011 y Fs(checkhash)1110 +5121 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 5230 +y(exists)k(b)s(efore)f(trying)h(to)h(execute)g(it.)48 +b(If)32 b(a)h(hashed)e(command)i(no)f(longer)1110 5340 +y(exists,)f(a)g(normal)f(path)g(searc)m(h)h(is)g(p)s(erformed.)p +eop end +%%Page: 56 62 +TeXDict begin 56 61 bop 150 -116 a Ft(56)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(checkjobs)1110 408 +y Ft(If)d(set,)i(Bash)e(lists)h(the)g(status)g(of)f(an)m(y)h(stopp)s +(ed)f(and)g(running)e(jobs)i(b)s(efore)1110 518 y(exiting)42 +b(an)f(in)m(teractiv)m(e)j(shell.)72 b(If)41 b(an)m(y)g(jobs)f(are)i +(running,)g(this)f(causes)1110 628 y(the)30 b(exit)g(to)g(b)s(e)f +(deferred)g(un)m(til)h(a)f(second)h(exit)g(is)g(attempted)h(without)e +(an)1110 737 y(in)m(terv)m(ening)j(command)e(\(see)h(Chapter)f(7)h +([Job)f(Con)m(trol],)i(page)f(89\).)42 b(The)1110 847 +y(shell)31 b(alw)m(a)m(ys)g(p)s(ostp)s(ones)f(exiting)h(if)g(an)m(y)f +(jobs)g(are)h(stopp)s(ed.)630 1009 y Fs(checkwinsize)1110 +1118 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 1228 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 1390 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 1499 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 1609 y(commands.)630 +1771 y Fs(compat31)96 b Ft(If)27 b(set,)i(Bash)e(c)m(hanges)i(its)f(b)s +(eha)m(vior)f(to)i(that)f(of)f(v)m(ersion)h(3.1)h(with)e(resp)s(ect) +1110 1880 y(to)k(quoted)g(argumen)m(ts)f(to)h(the)g(conditional)h +(command's)e(=)p Fs(~)g Ft(op)s(erator.)630 2042 y Fs(dirspell)96 +b Ft(If)26 b(set,)i(Bash)f(attempts)g(sp)s(elling)g(correction)g(on)g +(directory)g(names)f(during)1110 2151 y(w)m(ord)36 b(completion)h(if)f +(the)g(directory)g(name)g(initially)h(supplied)e(do)s(es)h(not)1110 +2261 y(exist.)630 2423 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 2532 y(\014lename)j(expansion.)630 +2694 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 2804 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 +2913 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 3075 y Fs(expand_aliases)1110 +3185 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 3294 y(tion)38 +b(6.6)h([Aliases],)j(page)d(79.)64 b(This)37 b(option)h(is)g(enabled)g +(b)m(y)g(default)g(for)1110 3404 y(in)m(teractiv)m(e)33 +b(shells.)630 3566 y Fs(extdebug)96 b Ft(If)30 b(set,)h(b)s(eha)m(vior) +g(in)m(tended)f(for)g(use)g(b)m(y)g(debuggers)g(is)h(enabled:)1159 +3701 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 +3811 y(Builtins],)29 b(page)g(41\))g(displa)m(ys)f(the)g(source)h +(\014le)f(name)g(and)f(line)h(n)m(um-)1290 3921 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 4030 y(men)m(t.)1159 4166 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 4275 y(the)31 b(next)f(command)g(is)h(skipp)s(ed)e(and)g +(not)i(executed.)1159 4411 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)38 +b(of)f(2,)1290 4521 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 4630 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 4740 y Fs(return)29 +b Ft(is)h(sim)m(ulated.)1159 4876 y(4.)61 b Fs(BASH_ARGC)34 +b Ft(and)i Fs(BASH_ARGV)e Ft(are)j(up)s(dated)e(as)h(describ)s(ed)g(in) +g(their)1290 4985 y(descriptions)30 b(\(see)i(Section)f(5.2)g([Bash)g +(V)-8 b(ariables],)32 b(page)f(61\).)1159 5121 y(5.)61 +b(F)-8 b(unction)57 b(tracing)g(is)g(enabled:)93 b(command)56 +b(substitution,)63 b(shell)1290 5230 y(functions,)30 +b(and)f(subshells)g(in)m(v)m(ok)m(ed)j(with)d Fs(\()h +Fi(command)39 b Fs(\))30 b Ft(inherit)g(the)1290 5340 +y Fs(DEBUG)f Ft(and)h Fs(RETURN)e Ft(traps.)p eop end +%%Page: 57 63 +TeXDict begin 57 62 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(57)1159 299 y(6.)61 +b(Error)74 b(tracing)i(is)f(enabled:)131 b(command)74 +b(substitution,)87 b(shell)1290 408 y(functions,)30 b(and)f(subshells)g +(in)m(v)m(ok)m(ed)j(with)d Fs(\()h Fi(command)39 b Fs(\))30 +b Ft(inherit)g(the)1290 518 y Fs(ERROR)f Ft(trap.)630 +667 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 +777 y(Section)j(3.5.8.1)i([P)m(attern)f(Matc)m(hing],)g(page)f(24\))h +(are)f(enabled.)630 927 y Fs(extquote)96 b Ft(If)49 b(set,)54 +b Fs($')p Fi(string)11 b Fs(')46 b Ft(and)j Fs($")p Fi(string)11 +b Fs(")46 b Ft(quoting)k(is)f(p)s(erformed)e(within)1110 +1036 y Fs(${)p Fi(parameter)11 b Fs(})30 b Ft(expansions)j(enclosed)h +(in)g(double)f(quotes.)51 b(This)32 b(option)1110 1146 +y(is)e(enabled)h(b)m(y)f(default.)630 1295 y Fs(failglob)96 +b Ft(If)36 b(set,)j(patterns)d(whic)m(h)g(fail)h(to)h(matc)m(h)f +(\014lenames)f(during)g(\014lename)g(ex-)1110 1405 y(pansion)30 +b(result)g(in)g(an)g(expansion)h(error.)630 1554 y Fs(force_fignore) +1110 1664 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 +1773 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 1883 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 1993 y([Bash)24 b(V)-8 +b(ariables],)27 b(page)e(61,)h(for)d(a)h(description)g(of)g +Fs(FIGNORE)p Ft(.)37 b(This)22 b(option)1110 2102 y(is)30 +b(enabled)h(b)m(y)f(default.)630 2252 y Fs(globstar)96 +b Ft(If)38 b(set,)j(the)e(pattern)f(`)p Fs(**)p Ft(')h(used)e(in)i(a)f +(\014lename)h(expansion)f(con)m(text)j(will)1110 2361 +y(matc)m(h)f(a)g(\014les)f(and)f(zero)i(or)g(more)f(directories)h(and)f +(sub)s(directories.)66 b(If)1110 2471 y(the)30 b(pattern)g(is)g(follo)m +(w)m(ed)i(b)m(y)d(a)i(`)p Fs(/)p Ft(',)f(only)g(directories)h(and)f +(sub)s(directories)1110 2580 y(matc)m(h.)630 2730 y Fs(gnu_errfmt)1110 +2839 y Ft(If)35 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 2949 y(message)c(format.)630 +3098 y Fs(histappend)1110 3208 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 3318 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 3427 y(the)31 b(\014le.)630 3577 y Fs(histreedit)1110 +3686 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 +3796 y(to)d(re-edit)g(a)g(failed)g(history)f(substitution.)630 +3945 y Fs(histverify)1110 4055 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 +4164 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 4274 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 4384 y(further)29 b(mo)s(di\014cation.)630 4533 +y Fs(hostcomplete)1110 4643 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 +4752 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 4862 y(pleted)g(\(see)h +(Section)f(8.4.6)i([Commands)d(F)-8 b(or)36 b(Completion],)g(page)g +(110\).)1110 4971 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.) +630 5121 y Fs(huponexit)1110 5230 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 5340 y(shell)31 b(exits)g(\(see)g(Section)g(3.7.6)h([Signals],)g +(page)f(32\).)p eop end +%%Page: 58 64 +TeXDict begin 58 63 bop 150 -116 a Ft(58)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(interactive_comments)1110 +408 y 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 +518 y(ing)41 b(c)m(haracters)i(on)e(that)h(line)g(to)g(b)s(e)f(ignored) +g(in)g(an)g(in)m(teractiv)m(e)j(shell.)1110 628 y(This)30 +b(option)g(is)h(enabled)f(b)m(y)g(default.)630 777 y +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 +887 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 996 y(semicolon)32 +b(separators)f(where)e(p)s(ossible.)630 1146 y Fs(login_shell)1110 +1255 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 +1365 y(tion)29 b(6.1)g([In)m(v)m(oking)h(Bash],)f(page)g(71\).)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 +1514 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 1624 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 Fi(mail-)1110 +1733 y(file)40 b Fs(has)29 b(been)g(read")g Ft(is)i(displa)m(y)m(ed.) +630 1883 y Fs(no_empty_cmd_completion)1110 1993 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 2102 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 +2212 y(an)k(empt)m(y)h(line.)630 2361 y Fs(nocaseglob)1110 +2471 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 2580 y(p)s(erforming)29 +b(\014lename)i(expansion.)630 2730 y Fs(nocasematch)1110 +2839 y Ft(If)42 b(set,)k(Bash)d(matc)m(hes)g(patterns)g(in)f(a)h +(case-insensitiv)m(e)i(fashion)d(when)1110 2949 y(p)s(erforming)31 +b(matc)m(hing)i(while)f(executing)i Fs(case)d Ft(or)h +Fs([[)g Ft(conditional)h(com-)1110 3059 y(mands.)630 +3208 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 3318 y(to)31 b(a)g(n)m(ull)f(string,)h(rather)f(than)g +(themselv)m(es.)630 3467 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 3577 y(grammable)45 b(Completion],)k(page)c +(115\))h(are)f(enabled.)82 b(This)44 b(option)h(is)1110 +3686 y(enabled)30 b(b)m(y)h(default.)630 3836 y Fs(promptvars)1110 +3945 y Ft(If)24 b(set,)i(prompt)d(strings)h(undergo)f(parameter)i +(expansion,)g(command)f(sub-)1110 4055 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 4164 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 4274 y(page)31 b(82\).)42 b(This)30 +b(option)g(is)h(enabled)f(b)m(y)g(default.)630 4423 y +Fs(restricted_shell)1110 4533 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 4643 y(Section)c(6.10)g([The)f(Restricted)g(Shell],)i(page)e +(84\).)56 b(The)34 b(v)-5 b(alue)35 b(ma)m(y)h(not)1110 +4752 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 4862 +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 4971 +y(stricted.)630 5121 y Fs(shift_verbose)1110 5230 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 5340 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.)p eop end +%%Page: 59 65 +TeXDict begin 59 64 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(59)630 299 y Fs(sourcepath)1110 +408 y Ft(If)22 b(set,)j(the)e Fs(source)e 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 +518 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 628 y(b)m(y)j(default.) +630 787 y Fs(xpg_echo)96 b Ft(If)31 b(set,)h(the)g Fs(echo)e +Ft(builtin)h(expands)f(bac)m(kslash-escap)s(e)j(sequences)f(b)m(y)f +(de-)1110 897 y(fault.)630 1056 y(The)c(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 1166 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 1275 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 +1508 y Fr(4.4)68 b(Sp)t(ecial)45 b(Builtins)150 1667 +y Ft(F)-8 b(or)35 b(historical)h(reasons,)g(the)e Fl(posix)g +Ft(standard)f(has)i(classi\014ed)f(sev)m(eral)i(builtin)e(commands)g +(as)h Fk(sp)-5 b(e-)150 1777 y(cial)p Ft(.)47 b(When)33 +b(Bash)f(is)h(executing)g(in)f Fl(posix)g Ft(mo)s(de,)h(the)g(sp)s +(ecial)g(builtins)e(di\013er)i(from)f(other)g(builtin)150 +1886 y(commands)e(in)g(three)h(resp)s(ects:)199 2021 +y(1.)61 b(Sp)s(ecial)31 b(builtins)e(are)i(found)e(b)s(efore)h(shell)h +(functions)f(during)f(command)h(lo)s(okup.)199 2155 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 2290 +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 +2399 y(after)i(the)f(command)h(completes.)275 2559 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 +2668 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 2778 y([Bash)g(POSIX)e(Mo)s(de],)i(page)g(84.)275 +2912 y(These)f(are)g(the)h Fl(posix)f Ft(sp)s(ecial)h(builtins:)390 +3047 y Fs(break)46 b(:)i(.)f(continue)f(eval)g(exec)h(exit)g(export)f +(readonly)f(return)h(set)390 3156 y(shift)g(trap)h(unset)p +eop end +%%Page: 60 66 +TeXDict begin 60 65 bop eop end +%%Page: 61 67 +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 Fo(5)80 +b(Shell)53 b(V)-13 b(ariables)150 559 y Ft(This)21 b(c)m(hapter)i +(describ)s(es)e(the)i(shell)f(v)-5 b(ariables)23 b(that)f(Bash)h(uses.) +37 b(Bash)23 b(automatically)h(assigns)f(default)150 +668 y(v)-5 b(alues)31 b(to)g(a)g(n)m(um)m(b)s(er)e(of)h(v)-5 +b(ariables.)150 914 y Fr(5.1)68 b(Bourne)45 b(Shell)g(V)-11 +b(ariables)150 1073 y Ft(Bash)30 b(uses)g(certain)h(shell)g(v)-5 +b(ariables)31 b(in)f(the)g(same)h(w)m(a)m(y)g(as)g(the)f(Bourne)g +(shell.)41 b(In)30 b(some)g(cases,)i(Bash)150 1183 y(assigns)f(a)f +(default)h(v)-5 b(alue)31 b(to)g(the)f(v)-5 b(ariable.)150 +1355 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 1464 y(command.)150 1632 y Fs(HOME)288 +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 +1742 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 1852 y(Expansion],)30 b(page)h(19\).)150 +2020 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 2129 y(of)31 b(expansion.)150 2297 y Fs(MAIL)288 +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 +2407 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 +2575 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 2684 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 2794 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 2903 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 3013 y(mail)f(\014le.)150 3181 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 +3349 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 3517 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 3626 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 3736 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 3846 y(initial)f(or)e(trailing)h(colon.)150 +4014 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 4123 y([Prin)m(ting)28 +b(a)g(Prompt],)g(page)h(82,)g(for)e(the)h(complete)h(list)g(of)e(escap) +s(e)h(sequences)g(that)h(are)630 4233 y(expanded)h(b)s(efore)g +Fs(PS1)f Ft(is)h(displa)m(y)m(ed.)150 4401 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 +4646 y Fr(5.2)68 b(Bash)45 b(V)-11 b(ariables)150 4805 +y Ft(These)45 b(v)-5 b(ariables)46 b(are)g(set)g(or)f(used)f(b)m(y)h +(Bash,)50 b(but)44 b(other)i(shells)f(do)h(not)f(normally)h(treat)g +(them)150 4915 y(sp)s(ecially)-8 b(.)275 5058 y(A)24 +b(few)g(v)-5 b(ariables)24 b(used)g(b)m(y)f(Bash)i(are)f(describ)s(ed)f +(in)h(di\013eren)m(t)g(c)m(hapters:)38 b(v)-5 b(ariables)25 +b(for)f(con)m(trolling)150 5168 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(92\).)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: 62 68 +TeXDict begin 62 67 bop 150 -116 a Ft(62)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(BASHOPTS)96 b Ft(A)31 +b(colon-separated)h(list)f(of)g(enabled)f(shell)h(options.)41 +b(Eac)m(h)31 b(w)m(ord)f(in)g(the)h(list)g(is)g(a)g(v)-5 +b(alid)630 408 y(argumen)m(t)33 b(for)g(the)f(`)p Fs(-s)p +Ft(')h(option)g(to)g(the)g Fs(shopt)e Ft(builtin)i(command)f(\(see)i +(Section)f(4.3.2)630 518 y([The)j(Shopt)g(Builtin],)i(page)f(55\).)60 +b(The)36 b(options)h(app)s(earing)f(in)g Fs(BASHOPTS)e +Ft(are)i(those)630 628 y(rep)s(orted)e(as)h(`)p Fs(on)p +Ft(')f(b)m(y)h(`)p Fs(shopt)p Ft('.)53 b(If)34 b(this)g(v)-5 +b(ariable)36 b(is)f(in)f(the)h(en)m(vironmen)m(t)g(when)f(Bash)630 +737 y(starts)25 b(up,)f(eac)m(h)i(shell)e(option)h(in)e(the)i(list)g +(will)f(b)s(e)g(enabled)g(b)s(efore)g(reading)g(an)m(y)g(startup)630 +847 y(\014les.)41 b(This)29 b(v)-5 b(ariable)31 b(is)g(readonly)-8 +b(.)150 998 y Fs(BASHPID)144 b Ft(Expands)36 b(to)j(the)f(pro)s(cess)g +(id)f(of)h(the)g(curren)m(t)g(Bash)g(pro)s(cess.)63 b(This)37 +b(di\013ers)g(from)h Fs($$)630 1107 y Ft(under)31 b(certain)j +(circumstances,)h(suc)m(h)e(as)g(subshells)f(that)i(do)f(not)g(require) +g(Bash)g(to)h(b)s(e)630 1217 y(re-initialized.)150 1367 +y Fs(BASH_ALIASES)630 1477 y Ft(An)40 b(asso)s(ciativ)m(e)j(arra)m(y)d +(v)-5 b(ariable)41 b(whose)f(mem)m(b)s(ers)f(corresp)s(ond)g(to)i(the)f +(in)m(ternal)h(list)630 1587 y(of)g(aliases)h(as)f(main)m(tained)g(b)m +(y)g(the)f Fs(alias)g Ft(builtin)g(\(see)h(Section)h(4.1)f([Bourne)g +(Shell)630 1696 y(Builtins],)36 b(page)e(35\).)53 b(Elemen)m(ts)35 +b(added)e(to)i(this)e(arra)m(y)i(app)s(ear)e(in)h(the)g(alias)h(list;)i +(un-)630 1806 y(setting)31 b(arra)m(y)g(elemen)m(ts)h(cause)f(aliases)h +(to)f(b)s(e)f(remo)m(v)m(ed)h(from)f(the)h(alias)g(list.)150 +1956 y Fs(BASH_ARGC)630 2066 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)g +(of)g(parameters)h(in)f(eac)m(h)h(frame)g(of)630 2176 +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 2285 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 +2395 y(the)37 b(stac)m(k.)63 b(When)37 b(a)h(subroutine)e(is)h +(executed,)j(the)e(n)m(um)m(b)s(er)d(of)j(parameters)f(passed)630 +2504 y(is)g(pushed)f(on)m(to)i Fs(BASH_ARGC)p Ft(.)59 +b(The)37 b(shell)g(sets)h Fs(BASH_ARGC)c Ft(only)k(when)e(in)h +(extended)630 2614 y(debugging)23 b(mo)s(de)f(\(see)h(Section)g(4.3.2)i +([The)d(Shopt)g(Builtin],)j(page)e(55)h(for)e(a)h(description)630 +2724 y(of)31 b(the)f Fs(extdebug)e Ft(option)j(to)g(the)g +Fs(shopt)e Ft(builtin\).)150 2874 y Fs(BASH_ARGV)630 +2984 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 +3093 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 +3203 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 +3313 y(is)40 b(executed,)j(the)d(parameters)h(supplied)d(are)i(pushed)f +(on)m(to)i Fs(BASH_ARGV)p Ft(.)66 b(The)40 b(shell)630 +3422 y(sets)28 b Fs(BASH_ARGV)e Ft(only)i(when)f(in)h(extended)g +(debugging)g(mo)s(de)g(\(see)h(Section)f(4.3.2)i([The)630 +3532 y(Shopt)i(Builtin],)h(page)g(55)g(for)f(a)h(description)f(of)h +(the)f Fs(extdebug)e Ft(option)j(to)g(the)f Fs(shopt)630 +3641 y Ft(builtin\).)150 3792 y Fs(BASH_CMDS)630 3902 +y Ft(An)i(asso)s(ciativ)m(e)i(arra)m(y)f(v)-5 b(ariable)35 +b(whose)f(mem)m(b)s(ers)f(corresp)s(ond)g(to)i(the)f(in)m(ternal)h +(hash)630 4011 y(table)c(of)g(commands)f(as)g(main)m(tained)h(b)m(y)g +(the)f Fs(hash)f Ft(builtin)h(\(see)h(Section)g(4.1)h([Bourne)630 +4121 y(Shell)23 b(Builtins],)j(page)e(35\).)40 b(Elemen)m(ts)24 +b(added)e(to)j(this)e(arra)m(y)h(app)s(ear)e(in)i(the)f(hash)g(table;) +630 4230 y(unsetting)30 b(arra)m(y)h(elemen)m(ts)h(cause)f(commands)f +(to)h(b)s(e)f(remo)m(v)m(ed)h(from)f(the)h(hash)e(table.)150 +4381 y Fs(BASH_COMMAND)630 4491 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 4600 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 4710 y(command)30 b(executing)i(at)f(the)f(time)h(of)g(the)g(trap.) +150 4861 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 4970 +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 5080 y(script.)41 +b(See)30 b(Section)h(6.2)h([Bash)f(Startup)e(Files],)j(page)f(73.)150 +5230 y Fs(BASH_EXECUTION_STRING)630 5340 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.)p +eop end +%%Page: 63 69 +TeXDict begin 63 68 bop 150 -116 a Ft(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(63)150 299 y Fs(BASH_LINENO)630 +408 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 518 y(sp)s(onding)g(to)i(eac)m(h)h(mem)m(b)s(er)e(of)h +Fq(FUNCNAME)5 b Ft(.)41 b Fs(${BASH_LINENO[$i]})34 b +Ft(is)40 b(the)g(line)630 628 y(n)m(um)m(b)s(er)47 b(in)h(the)g(source) +h(\014le)f(where)g Fs(${FUNCNAME[$i]})c Ft(w)m(as)49 +b(called)g(\(or)g Fs(${BASH_)630 737 y(LINENO[$i-1]})22 +b Ft(if)j(referenced)g(within)f(another)i(shell)f(function\).)39 +b(The)25 b(corresp)s(onding)630 847 y(source)f(\014le)h(name)f(is)g +Fs(${BASH_SOURCE[$i]})p Ft(.)34 b(Use)25 b Fs(LINENO)d +Ft(to)j(obtain)g(the)g(curren)m(t)f(line)630 956 y(n)m(um)m(b)s(er.)150 +1112 y Fs(BASH_REMATCH)630 1221 y Ft(An)43 b(arra)m(y)i(v)-5 +b(ariable)44 b(whose)g(mem)m(b)s(ers)f(are)h(assigned)g(b)m(y)f(the)h +(`)p Fs(=~)p Ft(')g(binary)f(op)s(erator)630 1331 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 1440 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 1550 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 +1660 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 1815 y Fs(BASH_SOURCE)630 1924 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 2034 y(elemen)m(ts)32 +b(in)e(the)g Fs(FUNCNAME)e Ft(arra)m(y)j(v)-5 b(ariable.)150 +2189 y Fs(BASH_SUBSHELL)630 2299 y Ft(Incremen)m(ted)34 +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 2408 y(The)c(initial)h(v)-5 +b(alue)31 b(is)g(0.)150 2564 y Fs(BASH_VERSINFO)630 2673 +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(80\))h(whose)f(mem)m(b)s(ers)630 +2783 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 +2892 y(arra)m(y)e(mem)m(b)s(ers)e(are)i(as)g(follo)m(ws:)630 +3048 y Fs(BASH_VERSINFO[0])1110 3157 y Ft(The)f(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 3313 y Fs(BASH_VERSINFO[1])1110 3422 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 3577 y Fs(BASH_VERSINFO[2])1110 3687 y Ft(The)f(patc)m(h)h +(lev)m(el.)630 3842 y Fs(BASH_VERSINFO[3])1110 3952 y +Ft(The)f(build)f(v)m(ersion.)630 4107 y Fs(BASH_VERSINFO[4])1110 +4217 y Ft(The)h(release)i(status)e(\(e.g.,)j Fq(b)s(eta1)7 +b Ft(\).)630 4372 y Fs(BASH_VERSINFO[5])1110 4482 y Ft(The)30 +b(v)-5 b(alue)31 b(of)f Fs(MACHTYPE)p Ft(.)150 4637 y +Fs(BASH_VERSION)630 4746 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 4902 y +Fs(BASH_XTRACEFD)630 5011 y Ft(If)f(set)h(to)h(an)e(in)m(teger)i +(corresp)s(onding)e(to)h(a)g(v)-5 b(alid)31 b(\014le)g(descriptor,)g +(Bash)g(will)g(write)g(the)630 5121 y(trace)37 b(output)f(generated)h +(when)f(`)p Fs(set)29 b(-x)p Ft(')36 b(is)g(enabled)h(to)g(that)f +(\014le)h(descriptor.)58 b(This)630 5230 y(allo)m(ws)29 +b(tracing)h(output)d(to)i(b)s(e)f(separated)g(from)g(diagnostic)h(and)f +(error)f(messages.)41 b(The)630 5340 y(\014le)31 b(descriptor)f(is)h +(closed)g(when)f Fs(BASH_XTRACEFD)d Ft(is)k(unset)f(or)g(assigned)h(a)g +(new)f(v)-5 b(alue.)p eop end +%%Page: 64 70 +TeXDict begin 64 69 bop 150 -116 a Ft(64)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(Unsetting)45 b Fs(BASH_XTRACEFD)40 +b Ft(or)k(assigning)g(it)g(the)g(empt)m(y)h(string)e(causes)i(the)f +(trace)630 408 y(output)33 b(to)i(b)s(e)d(sen)m(t)j(to)f(the)g +(standard)e(error.)50 b(Note)35 b(that)g(setting)f Fs(BASH_XTRACEFD)c +Ft(to)630 518 y(2)39 b(\(the)h(standard)e(error)g(\014le)h +(descriptor\))h(and)e(then)h(unsetting)g(it)g(will)g(result)g(in)g(the) +630 628 y(standard)30 b(error)g(b)s(eing)f(closed.)150 +819 y Fs(COLUMNS)144 b Ft(Used)36 b(b)m(y)h(the)f Fs(select)f +Ft(builtin)h(command)h(to)g(determine)f(the)h(terminal)g(width)f(when) +630 929 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 +1121 y Fs(COMP_CWORD)630 1230 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 1340 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 +1450 y(grammable)36 b(completion)g(facilities)i(\(see)e(Section)g(8.6)g +([Programmable)g(Completion],)630 1559 y(page)31 b(115\).)150 +1751 y Fs(COMP_LINE)630 1861 y Ft(The)38 b(curren)m(t)h(command)f +(line.)66 b(This)37 b(v)-5 b(ariable)40 b(is)f(a)m(v)-5 +b(ailable)41 b(only)d(in)h(shell)f(functions)630 1970 +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 2080 +y(Section)k(8.6)h([Programmable)f(Completion],)g(page)g(115\).)150 +2271 y Fs(COMP_POINT)630 2381 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 2491 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 2600 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 +2710 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 2819 +y(completion)c(facilities)g(\(see)g(Section)f(8.6)g([Programmable)g +(Completion],)h(page)f(115\).)150 3011 y Fs(COMP_TYPE)630 +3121 y Ft(Set)c(to)h(an)f(in)m(teger)h(v)-5 b(alue)28 +b(corresp)s(onding)e(to)h(the)h(t)m(yp)s(e)f(of)g(completion)h +(attempted)g(that)630 3230 y(caused)e(a)g(completion)i(function)d(to)i +(b)s(e)e(called:)40 b Fq(T)-8 b(AB)5 b Ft(,)27 b(for)f(normal)g +(completion,)i(`)p Fs(?)p Ft(',)f(for)630 3340 y(listing)35 +b(completions)h(after)f(successiv)m(e)g(tabs,)h(`)p Fs(!)p +Ft(',)g(for)e(listing)h(alternativ)m(es)i(on)d(partial)630 +3450 y(w)m(ord)22 b(completion,)k(`)p Fs(@)p Ft(',)f(to)e(list)g +(completions)h(if)f(the)g(w)m(ord)f(is)h(not)g(unmo)s(di\014ed,)f(or)h +(`)p Fs(\045)p Ft(',)h(for)630 3559 y(men)m(u)i(completion.)41 +b(This)25 b(v)-5 b(ariable)27 b(is)g(a)m(v)-5 b(ailable)28 +b(only)f(in)f(shell)g(functions)g(and)g(external)630 +3669 y(commands)32 b(in)m(v)m(ok)m(ed)i(b)m(y)e(the)g(programmable)h +(completion)g(facilities)i(\(see)e(Section)g(8.6)630 +3778 y([Programmable)e(Completion],)h(page)f(115\).)150 +3970 y Fs(COMP_KEY)96 b Ft(The)29 b(k)m(ey)i(\(or)g(\014nal)e(k)m(ey)i +(of)f(a)g(k)m(ey)h(sequence\))g(used)e(to)i(in)m(v)m(ok)m(e)h(the)e +(curren)m(t)g(completion)630 4080 y(function.)150 4271 +y Fs(COMP_WORDBREAKS)630 4381 y Ft(The)f(set)i(of)e(c)m(haracters)j +(that)e(the)g(Readline)g(library)g(treats)g(as)g(w)m(ord)g(separators)g +(when)630 4491 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 4600 y(prop)s(erties,)d(ev)m(en)h(if)f(it)h(is)g +(subsequen)m(tly)f(reset.)150 4792 y Fs(COMP_WORDS)630 +4902 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 +5011 y(line.)94 b(The)47 b(line)i(is)f(split)g(in)m(to)h(w)m(ords)e(as) +h(Readline)h(w)m(ould)f(split)g(it,)53 b(using)47 b Fs(COMP_)630 +5121 y(WORDBREAKS)34 b Ft(as)i(describ)s(ed)g(ab)s(o)m(v)m(e.)60 +b(This)36 b(v)-5 b(ariable)37 b(is)f(a)m(v)-5 b(ailable)39 +b(only)e(in)f(shell)h(func-)630 5230 y(tions)32 b(in)m(v)m(ok)m(ed)i(b) +m(y)d(the)i(programmable)f(completion)h(facilities)h(\(see)f(Section)g +(8.6)g([Pro-)630 5340 y(grammable)e(Completion],)g(page)g(115\).)p +eop end +%%Page: 65 71 +TeXDict begin 65 70 bop 150 -116 a Ft(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(65)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(115\).)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(.)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)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)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.)61 b(The)36 b(b)s(ottom-most)i(elemen)m(t)h(is)e +Fs("main")p Ft(.)59 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)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)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)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)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(123\).)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)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)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: 66 72 +TeXDict begin 66 71 bop 150 -116 a Ft(66)2572 b(Bash)31 +b(Reference)g(Man)m(ual)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 +552 y Fs(HISTCONTROL)630 661 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 771 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 +881 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 990 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 1100 y(of)32 b(`)p Fs(ignoreboth)p +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 +1209 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 +1319 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 1428 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 1538 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 1648 y(of)42 b Fs(HISTIGNORE)p Ft(.)73 b(The)42 +b(second)g(and)g(subsequen)m(t)f(lines)h(of)h(a)f(m)m(ulti-line)h(comp) +s(ound)630 1757 y(command)33 b(are)h(not)g(tested,)i(and)d(are)h(added) +f(to)h(the)g(history)g(regardless)g(of)g(the)f(v)-5 b(alue)630 +1867 y(of)31 b Fs(HISTCONTROL)p Ft(.)150 2010 y Fs(HISTFILE)96 +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 2120 y(is)30 b(`)p Fs(~/.bash_history)p Ft('.)150 +2263 y Fs(HISTFILESIZE)630 2373 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 2482 y(is)33 b(assigned)h(a)g(v) +-5 b(alue,)35 b(the)f(history)f(\014le)g(is)h(truncated,)g(if)g +(necessary)-8 b(,)35 b(b)m(y)e(remo)m(ving)i(the)630 +2592 y(oldest)29 b(en)m(tries,)g(to)g(con)m(tain)g(no)f(more)g(than)f +(that)i(n)m(um)m(b)s(er)e(of)h(lines.)40 b(The)27 b(history)h(\014le)g +(is)630 2701 y(also)33 b(truncated)e(to)h(this)g(size)g(after)g +(writing)g(it)g(when)f(an)g(in)m(teractiv)m(e)k(shell)c(exits.)45 +b(The)630 2811 y(default)31 b(v)-5 b(alue)30 b(is)h(500.)150 +2954 y Fs(HISTIGNORE)630 3064 y Ft(A)i(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 3173 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 3283 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 3393 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 3502 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 3612 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 3721 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 3831 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 3941 y(history)d(regardless)h(of)g(the)f(v)-5 +b(alue)31 b(of)g Fs(HISTIGNORE)p Ft(.)630 4067 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 +4177 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 4286 y(these)30 b(t)m(w)m(o)h(patterns,)f +(separating)g(them)g(with)f(a)h(colon,)h(pro)m(vides)e(the)h +(functionalit)m(y)h(of)630 4396 y Fs(ignoreboth)p Ft(.)150 +4539 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 4649 y(default)31 b(v)-5 b(alue)30 b(is)h(500.)150 +4792 y Fs(HISTTIMEFORMAT)630 4902 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 +5011 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 +5121 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 5230 y(history)26 b(\014le)g(so)g(they)g(ma)m(y)h(b)s(e) +e(preserv)m(ed)g(across)i(shell)f(sessions.)39 b(This)25 +b(uses)h(the)g(history)630 5340 y(commen)m(t)31 b(c)m(haracter)h(to)f +(distinguish)f(timestamps)h(from)f(other)g(history)h(lines.)p +eop end +%%Page: 67 73 +TeXDict begin 67 72 bop 150 -116 a Ft(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(67)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)43 b(of)f(the)f(new)g(\014le)h(to)g(the)f +(existing)i(list.)74 b(If)41 b Fs(HOSTFILE)e Ft(is)i(set,)k(but)c(has)g +(no)630 847 y(v)-5 b(alue,)29 b(or)e(do)s(es)h(not)g(name)f(a)h +(readable)g(\014le,)h(Bash)f(attempts)g(to)g(read)g(`)p +Fs(/etc/hosts)p Ft(')d(to)630 956 y(obtain)j(the)g(list)h(of)f(p)s +(ossible)f(hostname)h(completions.)41 b(When)28 b Fs(HOSTFILE)e +Ft(is)i(unset,)g(the)630 1066 y(hostname)j(list)g(is)f(cleared.)150 +1226 y Fs(HOSTNAME)96 b Ft(The)30 b(name)g(of)h(the)f(curren)m(t)h +(host.)150 1386 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 1547 y Fs(IGNOREEOF)630 +1656 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 +1766 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 1875 y(read)40 b(as)f(the)h(\014rst)f(c)m(haracter)i(on)f(an)f +(input)g(line)h(b)s(efore)f(the)h(shell)g(will)g(exit.)70 +b(If)39 b(the)630 1985 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 2094 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 +2204 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 2364 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 2474 y(`)p +Fs(~/.inputrc)p Ft('.)150 2634 y Fs(LANG)288 b Ft(Used)28 +b(to)h(determine)f(the)g(lo)s(cale)h(category)h(for)e(an)m(y)h +(category)h(not)e(sp)s(eci\014cally)g(selected)630 2744 +y(with)i(a)h(v)-5 b(ariable)31 b(starting)g(with)f Fs(LC_)p +Ft(.)150 2904 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 3013 y(a)i(lo)s(cale)h(category)-8 +b(.)150 3173 y Fs(LC_COLLATE)630 3283 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 3393 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 3502 y(alence)e(classes,)h(and)e(collating)i(sequences)e +(within)f(\014lename)h(expansion)g(and)f(pattern)630 +3612 y(matc)m(hing)d(\(see)h(Section)f(3.5.8)h([Filename)g(Expansion],) +e(page)h(24\).)150 3772 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 3882 +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 3991 y(tion)31 +b(3.5.8)h([Filename)g(Expansion],)e(page)h(24\).)150 +4151 y Fs(LC_MESSAGES)630 4261 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 4371 y(ceded)31 b(b)m(y)f(a)h(`)p +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 4531 y Fs(LC_NUMERIC)630 +4640 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 +4800 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 +4961 y Fs(LINES)240 b Ft(Used)25 b(b)m(y)g(the)g Fs(select)e +Ft(builtin)i(command)g(to)h(determine)f(the)g(column)g(length)g(for)g +(prin)m(t-)630 5070 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)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: 68 74 +TeXDict begin 68 73 bop 150 -116 a Ft(68)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(MAILCHECK)630 408 +y Ft(Ho)m(w)d(often)g(\(in)g(seconds\))g(that)g(the)f(shell)h(should)f +(c)m(hec)m(k)i(for)e(mail)h(in)f(the)h(\014les)g(sp)s(eci\014ed)630 +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 +1003 y Fs(OLDPWD)192 b Ft(The)30 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 1160 +y Fs(OPTERR)192 b Ft(If)35 b(set)i(to)f(the)h(v)-5 b(alue)36 +b(1,)i(Bash)e(displa)m(ys)g(error)f(messages)i(generated)g(b)m(y)f(the) +g Fs(getopts)630 1270 y Ft(builtin)30 b(command.)150 +1426 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 1583 +y Fs(PIPESTATUS)630 1692 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(80\))h +(con)m(taining)g(a)f(list)g(of)g(exit)g(sta-)630 1802 +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 +1911 y(\(whic)m(h)30 b(ma)m(y)h(con)m(tain)h(only)f(a)f(single)h +(command\).)150 2068 y Fs(POSIXLY_CORRECT)630 2178 y +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 2287 y Ft(mo)s(de)22 b(\(see)h(Section)g(6.11)h([Bash)e +(POSIX)f(Mo)s(de],)k(page)e(84\))g(b)s(efore)f(reading)g(the)g(startup) +630 2397 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 2506 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 2639 y Fs(set)47 b(-o)g(posix)630 2772 y +Ft(had)30 b(b)s(een)f(executed.)150 2929 y Fs(PPID)288 +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 3086 y Fs(PROMPT_COMMAND)630 3195 y Ft(If)32 +b(set,)h(the)f(v)-5 b(alue)33 b(is)f(in)m(terpreted)g(as)g(a)h(command) +f(to)h(execute)g(b)s(efore)f(the)g(prin)m(ting)g(of)630 +3305 y(eac)m(h)g(primary)d(prompt)g(\()p Fs($PS1)p Ft(\).)150 +3461 y Fs(PROMPT_DIRTRIM)630 3571 y Ft(If)e(set)g(to)h(a)g(n)m(um)m(b)s +(er)e(greater)i(than)f(zero,)i(the)e(v)-5 b(alue)28 b(is)f(used)g(as)g +(the)h(n)m(um)m(b)s(er)e(of)h(trailing)630 3680 y(directory)35 +b(comp)s(onen)m(ts)g(to)h(retain)f(when)f(expanding)g(the)h +Fs(\\w)f Ft(and)g Fs(\\W)g Ft(prompt)g(string)630 3790 +y(escap)s(es)27 b(\(see)g(Section)g(6.9)h([Prin)m(ting)f(a)g(Prompt],)g +(page)g(82\).)40 b(Characters)27 b(remo)m(v)m(ed)h(are)630 +3900 y(replaced)j(with)f(an)g(ellipsis.)150 4056 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 4166 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 4322 y Fs(PS4)336 b Ft(The)20 b(v)-5 +b(alue)22 b(is)e(the)h(prompt)f(prin)m(ted)h(b)s(efore)f(the)h(command) +g(line)g(is)g(ec)m(ho)s(ed)g(when)f(the)h(`)p Fs(-x)p +Ft(')630 4432 y(option)32 b(is)f(set)h(\(see)g(Section)h(4.3.1)g([The)e +(Set)g(Builtin],)i(page)f(51\).)45 b(The)31 b(\014rst)f(c)m(haracter) +630 4542 y(of)k 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 4651 y(indirection.)41 b(The)30 b(default)h(is)f(`)p +Fs(+)g Ft('.)150 4808 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 4964 y Fs(RANDOM)192 b Ft(Eac)m(h)30 +b(time)g(this)f(parameter)g(is)g(referenced,)h(a)f(random)g(in)m(teger) +h(b)s(et)m(w)m(een)g(0)f(and)g(32767)630 5074 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 +5183 y(erator.)150 5340 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.)p eop +end +%%Page: 69 75 +TeXDict begin 69 74 bop 150 -116 a Ft(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(69)150 299 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 +408 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 +518 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 628 y(the)31 b(assignmen)m(t.)150 779 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 889 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 +999 y(user's)30 b(login)h(shell.)150 1150 y Fs(SHELLOPTS)630 +1260 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 1369 y(argumen)m(t)24 b(for)f(the)h(`)p Fs(-o)p +Ft(')f(option)h(to)g(the)g Fs(set)f Ft(builtin)g(command)g(\(see)i +(Section)f(4.3.1)h([The)630 1479 y(Set)k(Builtin],)h(page)f(51\).)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 1589 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)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 1698 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 1808 y(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8 +b(.)150 1960 y Fs(SHLVL)240 b Ft(Incremen)m(ted)21 b(b)m(y)g(one)g(eac) +m(h)h(time)f(a)h(new)e(instance)h(of)g(Bash)g(is)g(started.)38 +b(This)20 b(is)h(in)m(tended)630 2069 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 +2221 y Fs(TIMEFORMAT)630 2330 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 2440 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 2550 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 2659 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 +2769 y(are)31 b(as)f(follo)m(ws;)i(the)f(braces)f(denote)h(optional)h +(p)s(ortions.)630 2921 y Fs(\045\045)384 b Ft(A)30 b(literal)i(`)p +Fs(\045)p Ft('.)630 3072 y Fs(\045[)p Fi(p)11 b Fs(][l]R)85 +b Ft(The)30 b(elapsed)h(time)g(in)f(seconds.)630 3224 +y Fs(\045[)p Fi(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)g(user)f(mo)s(de.)630 +3376 y Fs(\045[)p Fi(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)g(system)g(mo)s(de.)630 +3528 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 3679 +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 +3789 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 3898 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 4008 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)d(not)h(sp)s(eci\014ed,)f(the)h(v)-5 +b(alue)30 b(3)h(is)g(used.)630 4139 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 4248 y Fq(MM)10 +b Ft(m)p Fq(SS)5 b Ft(.)p Fq(FF)i Ft(s.)102 b(The)50 +b(v)-5 b(alue)51 b(of)g Fq(p)i Ft(determines)e(whether)f(or)h(not)f +(the)h(fraction)h(is)630 4358 y(included.)630 4489 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 4619 y Fs +($'\\nreal\\t\0453lR\\nuser\\t\0453)o(lU\\n)o(sys\\)o(t\0453)o(lS')630 +4750 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 4859 y(added)30 b(when)f(the)i(format)f(string)h(is)f(displa)m +(y)m(ed.)150 5011 y Fs(TMOUT)240 b Ft(If)22 b(set)h(to)g(a)g(v)-5 +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 5121 y Fs(read)31 +b Ft(builtin)h(\(see)h(Section)f(4.2)i([Bash)e(Builtins],)h(page)g +(41\).)47 b(The)32 b Fs(select)e Ft(command)630 5230 +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 5340 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.)p eop end +%%Page: 70 76 +TeXDict begin 70 75 bop 150 -116 a Ft(70)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(In)25 b(an)h(in)m(teractiv)m(e)i +(shell,)g(the)e(v)-5 b(alue)26 b(is)g(in)m(terpreted)g(as)g(the)g(n)m +(um)m(b)s(er)f(of)h(seconds)f(to)i(w)m(ait)630 408 y(for)32 +b(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 518 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 677 y Fs(TMPDIR)192 b Ft(If)39 +b(set,)j(Bash)e(uses)f(its)h(v)-5 b(alue)40 b(as)f(the)h(name)f(of)h(a) +g(directory)g(in)f(whic)m(h)g(Bash)h(creates)630 787 +y(temp)s(orary)30 b(\014les)g(for)g(the)h(shell's)g(use.)150 +946 y 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: 71 77 +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 Fo(6)80 +b(Bash)54 b(F)-13 b(eatures)150 554 y Ft(This)30 b(section)h(describ)s +(es)f(features)g(unique)g(to)h(Bash.)150 797 y Fr(6.1)68 +b(In)l(v)l(oking)46 b(Bash)390 957 y Fs(bash)h([long-opt])e([-ir])h +([-abefhkmnptuvxdBCDHP])c([-o)47 b Fi(option)11 b Fs(])45 +b([-O)i Fi(shopt_option)11 b Fs(])44 b([)p Fi(ar-)390 +1066 y(gument)57 b Fs(...)o(])390 1176 y(bash)47 b([long-opt])e +([-abefhkmnptuvxdBCDHP])c([-o)47 b Fi(option)11 b Fs(])46 +b([-O)g Fi(shopt_option)11 b Fs(])44 b(-c)j Fi(string)57 +b Fs([)p Fi(ar-)390 1286 y(gument)g Fs(...)o(])390 1395 +y(bash)47 b([long-opt])e(-s)i([-abefhkmnptuvxdBCDHP])42 +b([-o)k Fi(option)11 b Fs(])46 b([-O)h Fi(shopt_option)11 +b Fs(])43 b([)p Fi(ar-)390 1505 y(gument)57 b Fs(...)o(])275 +1646 y Ft(In)22 b(addition)i(to)g(the)g(single-c)m(haracter)i(shell)e +(command-line)g(options)f(\(see)i(Section)f(4.3.1)i([The)d(Set)150 +1756 y(Builtin],)k(page)e(51\),)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 1865 y(m)m(ust)30 b(app)s(ear)g(on)g(the)h +(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 2035 y Fs(--debugger)630 2145 +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 2255 y(on)25 b(extended)g(debugging)g(mo)s(de)f(\(see)i +(Section)g(4.3.2)h([The)d(Shopt)h(Builtin],)i(page)e(55)h(for)630 +2364 y(a)35 b(description)f(of)h(the)g Fs(extdebug)d +Ft(option)j(to)g(the)f Fs(shopt)f Ft(builtin\))i(and)f(shell)g +(function)630 2474 y(tracing)d(\(see)g(Section)h(4.3.1)g([The)e(Set)g +(Builtin],)h(page)g(51)h(for)e(a)g(description)h(of)f(the)h +Fs(-o)630 2583 y(functrace)d Ft(option\).)150 2750 y +Fs(--dump-po-strings)630 2859 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 2969 +y(output)24 b(in)h(the)g Fl(gnu)f Fs(gettext)f Ft(PO)i(\(p)s(ortable)g +(ob)5 b(ject\))26 b(\014le)f(format.)39 b(Equiv)-5 b(alen)m(t)26 +b(to)f(`)p Fs(-D)p Ft(')630 3079 y(except)31 b(for)f(the)h(output)f +(format.)150 3245 y Fs(--dump-strings)630 3355 y Ft(Equiv)-5 +b(alen)m(t)31 b(to)g(`)p Fs(-D)p Ft('.)150 3521 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(successfully)-8 b(.)150 3688 y Fs(--init-file)27 +b Fi(filename)150 3797 y Fs(--rcfile)h Fi(filename)630 +3907 y Ft(Execute)42 b(commands)f(from)f 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 4016 y(shell.)150 4183 y Fs(--login)144 +b Ft(Equiv)-5 b(alen)m(t)31 b(to)g(`)p Fs(-l)p Ft('.)150 +4349 y Fs(--noediting)630 4459 y Ft(Do)h(not)e(use)h(the)g +Fl(gnu)f Ft(Readline)i(library)e(\(see)h(Chapter)g(8)g([Command)f(Line) +g(Editing],)630 4569 y(page)h(93\))h(to)f(read)f(command)g(lines)h +(when)e(the)i(shell)f(is)h(in)m(teractiv)m(e.)150 4735 +y Fs(--noprofile)630 4845 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 4954 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 5064 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: 72 78 +TeXDict begin 72 77 bop 150 -116 a Ft(72)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(standard)35 b(to)h(matc)m(h)g(the)g(standard.)55 +b(This)35 b(is)h(in)m(tended)f(to)h(mak)m(e)h(Bash)f(b)s(eha)m(v)m(e)g +(as)g(a)630 518 y(strict)26 b(sup)s(erset)e(of)h(that)g(standard.)38 +b(See)26 b(Section)f(6.11)i([Bash)e(POSIX)f(Mo)s(de],)j(page)f(84,)630 +628 y(for)k(a)h(description)f(of)h(the)f(Bash)h Fl(posix)f +Ft(mo)s(de.)150 787 y Fs(--restricted)630 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(84\).)150 +1166 y Fs(--verbose)630 1275 y 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 Fi(string)630 2192 y Ft(Read)23 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)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(75.)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)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(73,)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(84\).)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(output.)63 b(These)38 b(are)g(the)g(strings)g(that)h(are)f(sub)5 +b(ject)38 b(to)h(language)g(translation)g(when)630 4413 +y(the)e(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 Fi(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(Section)28 b(4.3.2)g([The)f +(Shopt)f(Builtin],)i(page)f(55\).)41 b(If)26 b Fq(shopt)p +2690 4902 V 40 w(option)h Ft(is)g(presen)m(t,)h(`)p Fs(-O)p +Ft(')f(sets)630 5011 y(the)40 b(v)-5 b(alue)40 b(of)f(that)h(option;)45 +b(`)p Fs(+O)p Ft(')40 b(unsets)e(it.)69 b(If)39 b Fq(shopt)p +2631 5011 V 40 w(option)h Ft(is)f(not)h(supplied,)h(the)630 +5121 y(names)e(and)g(v)-5 b(alues)40 b(of)g(the)g(shell)f(options)h +(accepted)h(b)m(y)e Fs(shopt)f 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)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: 73 79 +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 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 567 y(A)d Fk(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 676 y(`)p Fs(--login)p Ft(')i(option.)275 +810 y(An)24 b Fk(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 920 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 1029 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 +1139 y([In)m(teractiv)m(e)33 b(Shells],)e(page)g(75,)g(for)f(more)h +(information.)275 1273 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 +1382 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 1492 y(commands)30 b(\(see)g(Section)h(3.8)g([Shell)f +(Scripts],)g(page)h(33\).)41 b(When)30 b(Bash)g(is)g(in)m(v)m(ok)m(ed)i +(in)d(this)h(fashion,)150 1601 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 1711 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 1821 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 1930 y(the)k(exit)g +(status)g(is)f(0.)150 2161 y Fr(6.2)68 b(Bash)45 b(Startup)g(Files)150 +2321 y Ft(This)23 b(section)j(describ)s(es)d(ho)m(w)i(Bash)f(executes)h +(its)g(startup)f(\014les.)38 b(If)24 b(an)m(y)h(of)f(the)h(\014les)f +(exist)h(but)e(cannot)150 2430 y(b)s(e)k(read,)i(Bash)f(rep)s(orts)f +(an)h(error.)39 b(Tildes)28 b(are)g(expanded)f(in)h(\014le)g(names)g +(as)g(describ)s(ed)e(ab)s(o)m(v)m(e)j(under)150 2540 +y(Tilde)h(Expansion)g(\(see)h(Section)h(3.5.2)g([Tilde)e(Expansion],)h +(page)g(19\).)275 2674 y(In)m(teractiv)m(e)h(shells)f(are)g(describ)s +(ed)e(in)h(Section)h(6.3)h([In)m(teractiv)m(e)h(Shells],)d(page)h(75.) +150 2872 y Fj(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 Fh(--login)p Fj(')150 +3019 y Ft(When)c(Bash)f(is)h(in)m(v)m(ok)m(ed)h(as)f(an)g(in)m +(teractiv)m(e)j(login)d(shell,)i(or)e(as)g(a)g(non-in)m(teractiv)m(e)i +(shell)e(with)g(the)150 3128 y(`)p Fs(--login)p Ft(')j(option,)k(it)e +(\014rst)e(reads)h(and)g(executes)h(commands)f(from)f(the)i(\014le)f(`) +p Fs(/etc/profile)p Ft(',)g(if)150 3238 y(that)35 b(\014le)g(exists.)55 +b(After)35 b(reading)g(that)g(\014le,)h(it)g(lo)s(oks)f(for)f(`)p +Fs(~/.bash_profile)p Ft(',)f(`)p Fs(~/.bash_login)p Ft(',)150 +3348 y(and)28 b(`)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 3457 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 3567 y(inhibit)g(this)g(b)s(eha)m +(vior.)275 3701 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 +3810 y(`)p Fs(~/.bash_logout)p Ft(',)27 b(if)k(it)f(exists.)150 +4008 y Fj(In)m(v)m(ok)m(ed)40 b(as)h(an)f(in)m(teractiv)m(e)f +(non-login)k(shell)150 4155 y Ft(When)g(an)h(in)m(teractiv)m(e)i(shell) +e(that)g(is)f(not)h(a)g(login)g(shell)g(is)f(started,)48 +b(Bash)c(reads)f(and)g(executes)150 4265 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 4374 y(option.)52 b(The)33 b(`)p +Fs(--rcfile)28 b Fi(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 4484 +y Fq(\014le)j Ft(instead)30 b(of)h(`)p Fs(~/.bashrc)p +Ft('.)275 4618 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 +4752 y Fs(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g(~/.bashrc;)e(fi) +150 4885 y Ft(after)31 b(\(or)g(b)s(efore\))f(an)m(y)h(login-sp)s +(eci\014c)g(initializations.)150 5083 y Fj(In)m(v)m(ok)m(ed)40 +b(non-in)m(teractiv)m(ely)150 5230 y Ft(When)33 b(Bash)g(is)g(started)h +(non-in)m(teractiv)m(ely)-8 b(,)37 b(to)d(run)e(a)h(shell)h(script,)g +(for)f(example,)i(it)e(lo)s(oks)h(for)f(the)150 5340 +y(v)-5 b(ariable)35 b 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)p eop end +%%Page: 74 80 +TeXDict begin 74 79 bop 150 -116 a Ft(74)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y(expanded)f(v)-5 b(alue)30 +b(as)h(the)g(name)f(of)h(a)f(\014le)h(to)g(read)f(and)g(execute.)42 +b(Bash)31 b(b)s(eha)m(v)m(es)g(as)g(if)f(the)g(follo)m(wing)150 +408 y(command)g(w)m(ere)h(executed:)390 570 y Fs(if)47 +b([)h(-n)f("$BASH_ENV")e(];)i(then)f(.)i("$BASH_ENV";)c(fi)150 +732 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 893 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 1003 y(attempts)31 +b(to)g(read)g(and)e(execute)j(commands)e(from)g(the)h(login)g(shell)g +(startup)e(\014les.)150 1229 y Fj(In)m(v)m(ok)m(ed)40 +b(with)g(name)h Fh(sh)150 1376 y Ft(If)c(Bash)g(is)g(in)m(v)m(ok)m(ed)i +(with)e(the)g(name)g Fs(sh)p Ft(,)i(it)f(tries)f(to)h(mimic)g(the)f +(startup)g(b)s(eha)m(vior)g(of)h(historical)150 1486 +y(v)m(ersions)31 b(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 1647 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 1757 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 1867 +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 1976 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 +2086 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 2195 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 +2305 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 2415 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 2524 y(\014les.)275 2686 +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 2912 y Fj(In)m(v)m(ok)m(ed)40 b(in)h Fg(posix)g Fj(mo)s(de)150 +3059 y Ft(When)25 b(Bash)g(is)h(started)f(in)g Fl(posix)g +Ft(mo)s(de,)h(as)f(with)g(the)h(`)p Fs(--posix)p Ft(')d(command)i(line) +h(option,)h(it)f(follo)m(ws)150 3169 y(the)e Fl(posix)f +Ft(standard)h(for)f(startup)h(\014les.)38 b(In)24 b(this)g(mo)s(de,)h +(in)m(teractiv)m(e)i(shells)d(expand)f(the)h Fs(ENV)f +Ft(v)-5 b(ariable)150 3278 y(and)30 b(commands)g(are)g(read)h(and)e +(executed)j(from)d(the)i(\014le)f(whose)g(name)h(is)f(the)h(expanded)e +(v)-5 b(alue.)41 b(No)150 3388 y(other)31 b(startup)f(\014les)g(are)h +(read.)150 3614 y Fj(In)m(v)m(ok)m(ed)40 b(b)m(y)g(remote)h(shell)h +(daemon)150 3761 y Ft(Bash)36 b(attempts)h(to)g(determine)f(when)f(it)i +(is)f(b)s(eing)g(run)e(with)i(its)g(standard)g(input)f(connected)i(to)g +(a)150 3871 y(a)e(net)m(w)m(ork)h(connection,)h(as)e(if)g(b)m(y)g(the)g +(remote)g(shell)g(daemon,)i(usually)d Fs(rshd)p Ft(,)h(or)g(the)g +(secure)g(shell)150 3980 y(daemon)41 b Fs(sshd)p Ft(.)70 +b(If)40 b(Bash)h(determines)f(it)h(is)g(b)s(eing)f(run)f(in)i(this)f +(fashion,)j(it)e(reads)g(and)f(executes)150 4090 y(commands)26 +b(from)f(`)p Fs(~/.bashrc)p Ft(',)g(if)i(that)f(\014le)g(exists)h(and)f +(is)g(readable.)40 b(It)26 b(will)g(not)g(do)g(this)g(if)g(in)m(v)m(ok) +m(ed)150 4200 y(as)g Fs(sh)p Ft(.)39 b(The)25 b(`)p Fs(--norc)p +Ft(')g(option)h(ma)m(y)g(b)s(e)f(used)g(to)i(inhibit)e(this)h(b)s(eha)m +(vior,)h(and)e(the)h(`)p Fs(--rcfile)p Ft(')e(option)150 +4309 y(ma)m(y)33 b(b)s(e)g(used)f(to)h(force)h(another)f(\014le)g(to)g +(b)s(e)g(read,)g(but)f Fs(rshd)g Ft(do)s(es)h(not)g(generally)h(in)m(v) +m(ok)m(e)h(the)e(shell)150 4419 y(with)d(those)h(options)g(or)f(allo)m +(w)i(them)e(to)h(b)s(e)f(sp)s(eci\014ed.)150 4645 y Fj(In)m(v)m(ok)m +(ed)40 b(with)g(unequal)h(e\013ectiv)m(e)e(and)i(real)g +Fg(uid/gid)p Fj(s)150 4792 y Ft(If)34 b(Bash)h(is)g(started)g(with)f +(the)h(e\013ectiv)m(e)i(user)d(\(group\))h(id)f(not)h(equal)g(to)g(the) +g(real)g(user)f(\(group\))h(id,)150 4902 y(and)26 b(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 +5011 y(from)41 b(the)g(en)m(vironmen)m(t,)j(the)d Fs(SHELLOPTS)p +Ft(,)h Fs(BASHOPTS)p Ft(,)g Fs(CDPATH)p Ft(,)g(and)e +Fs(GLOBIGNORE)e Ft(v)-5 b(ariables,)45 b(if)150 5121 +y(they)28 b(app)s(ear)f(in)h(the)g(en)m(vironmen)m(t,)i(are)e(ignored,) +h(and)e(the)h(e\013ectiv)m(e)j(user)c(id)h(is)g(set)g(to)h(the)f(real)h +(user)150 5230 y(id.)62 b(If)38 b(the)f Fs(-p)h Ft(option)g(is)f +(supplied)g(at)h(in)m(v)m(o)s(cation,)k(the)c(startup)f(b)s(eha)m(vior) +h(is)g(the)g(same,)i(but)d(the)150 5340 y(e\013ectiv)m(e)c(user)d(id)g +(is)g(not)h(reset.)p eop end +%%Page: 75 81 +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.3)68 +b(In)l(teractiv)l(e)47 b(Shells)150 520 y Fj(6.3.1)63 +b(What)40 b(is)h(an)g(In)m(teractiv)m(e)e(Shell?)150 +667 y Ft(An)c(in)m(teractiv)m(e)k(shell)d(is)g(one)g(started)g(without) +f(non-option)h(argumen)m(ts,)i(unless)d(`)p Fs(-s)p Ft(')h(is)f(sp)s +(eci\014ed,)150 777 y(without)f(sp)s(ecifying)h(the)f(`)p +Fs(-c)p Ft(')g(option,)j(and)c(whose)h(input)g(and)g(error)g(output)g +(are)g(b)s(oth)g(connected)150 886 y(to)d(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 1018 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 1150 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 1259 +y(activ)m(e)k(shell)d(is)h(started.)150 1453 y Fj(6.3.2)63 +b(Is)41 b(this)g(Shell)g(In)m(teractiv)m(e?)150 1600 +y Ft(T)-8 b(o)30 b(determine)g(within)f(a)h(startup)g(script)f(whether) +g(or)h(not)g(Bash)g(is)g(running)e(in)m(teractiv)m(ely)-8 +b(,)33 b(test)e(the)150 1710 y(v)-5 b(alue)30 b(of)g(the)f(`)p +Fs(-)p Ft(')h(sp)s(ecial)g(parameter.)41 b(It)29 b(con)m(tains)i +Fs(i)e Ft(when)g(the)g(shell)h(is)f(in)m(teractiv)m(e.)44 +b(F)-8 b(or)30 b(example:)390 1841 y Fs(case)47 b("$-")f(in)390 +1951 y(*i*\))h(echo)f(This)h(shell)f(is)h(interactive)e(;;)390 +2061 y(*\))i(echo)g(This)f(shell)h(is)g(not)g(interactive)e(;;)390 +2170 y(esac)275 2302 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 2411 y(shells,)31 b(and)e(set)i(in)f(in)m(teractiv)m +(e)k(shells.)40 b(Th)m(us:)390 2543 y Fs(if)47 b([)h(-z)f("$PS1")f(];)h +(then)772 2653 y(echo)f(This)h(shell)f(is)i(not)f(interactive)390 +2762 y(else)772 2872 y(echo)f(This)h(shell)f(is)i(interactive)390 +2981 y(fi)150 3175 y Fj(6.3.3)63 b(In)m(teractiv)m(e)38 +b(Shell)k(Beha)m(vior)150 3322 y Ft(When)30 b(the)h(shell)f(is)h +(running)d(in)m(teractiv)m(ely)-8 b(,)34 b(it)d(c)m(hanges)h(its)f(b)s +(eha)m(vior)f(in)g(sev)m(eral)i(w)m(a)m(ys.)199 3454 +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 +3563 y(page)31 b(73.)199 3695 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(89\))g(is)f(enabled)g(b)m +(y)g(default.)55 b(When)34 b(job)330 3805 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 3914 y +Fs(SIGTTOU)p Ft(,)29 b(and)g Fs(SIGTSTP)p Ft(.)199 4046 +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 4156 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 4265 y(command.)199 +4397 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 4506 +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(61\).)199 4638 +y(5.)61 b(Readline)30 b(\(see)h(Chapter)e(8)h([Command)e(Line)i +(Editing],)g(page)g(93\))h(is)f(used)f(to)h(read)f(commands)330 +4748 y(from)h(the)g(user's)g(terminal.)199 4879 y(6.)61 +b(Bash)36 b(insp)s(ects)g(the)h(v)-5 b(alue)37 b(of)f(the)g +Fs(ignoreeof)e Ft(option)j(to)g Fs(set)29 b(-o)36 b Ft(instead)h(of)f +(exiting)i(imme-)330 4989 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 5099 y(Section)31 b(4.3.1)h([The)e(Set)h(Builtin],)g(page)g +(51\).)199 5230 y(7.)61 b(Command)43 b(history)h(\(see)h(Section)g(9.1) +g([Bash)f(History)h(F)-8 b(acilities],)51 b(page)45 b(121\))h(and)d +(history)330 5340 y(expansion)23 b(\(see)i(Section)f(9.3)h([History)f +(In)m(teraction],)j(page)d(123\))h(are)f(enabled)g(b)m(y)f(default.)39 +b(Bash)p eop end +%%Page: 76 82 +TeXDict begin 76 81 bop 150 -116 a Ft(76)2572 b(Bash)31 +b(Reference)g(Man)m(ual)330 299 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 408 y(exits.)199 +543 y(8.)61 b(Alias)31 b(expansion)g(\(see)g(Section)g(6.6)g +([Aliases],)i(page)e(79\))h(is)e(p)s(erformed)f(b)m(y)h(default.)199 +678 y(9.)61 b(In)24 b(the)g(absence)h(of)f(an)m(y)h(traps,)g(Bash)g +(ignores)f Fs(SIGTERM)f Ft(\(see)i(Section)g(3.7.6)h([Signals],)g(page) +f(32\).)154 813 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 923 y(page)i(32\).)42 +b Fs(SIGINT)29 b Ft(will)h(in)m(terrupt)g(some)h(shell)g(builtins.)154 +1058 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(huponexit)e Ft(shell)330 1167 y(option)31 b(has)f(b)s(een)g(enabled) +g(\(see)h(Section)g(3.7.6)i([Signals],)e(page)g(32\).)154 +1302 y(12.)61 b(The)26 b(`)p Fs(-n)p Ft(')f(in)m(v)m(o)s(cation)k +(option)d(is)g(ignored,)h(and)f(`)p Fs(set)k(-n)p Ft(')25 +b(has)h(no)g(e\013ect)i(\(see)e(Section)h(4.3.1)h([The)330 +1412 y(Set)j(Builtin],)g(page)g(51\).)154 1547 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 1656 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(61\).)154 1791 +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 1901 y(enabled)d(will)h(not)g(cause)g +(the)f(shell)h(to)g(exit)g(\(see)g(Section)h(4.3.1)g([The)e(Set)h +(Builtin],)g(page)g(51\).)154 2036 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 +2146 y Fs(${)p Fi(var)11 b Fs(:?)p Fi(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(19\).)154 2280 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 2415 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 +2525 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(84\).)154 2660 y(18.)61 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 +2770 y(page)e(35\).)154 2904 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 3039 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 3149 y(\(see)35 b(the)g(description)f +(of)h(the)f Fs(cdspell)f Ft(option)h(to)i(the)e Fs(shopt)f +Ft(builtin)h(in)g(Section)h(4.3.2)h([The)330 3259 y(Shopt)30 +b(Builtin],)h(page)g(55\).)154 3394 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 3503 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 3613 y(V)-8 b(ariables],)32 +b(page)f(61\).)150 3847 y Fr(6.4)68 b(Bash)45 b(Conditional)h +(Expressions)150 4006 y Ft(Conditional)26 b(expressions)g(are)g(used)f +(b)m(y)g(the)h Fs([[)f Ft(comp)s(ound)g(command)g(and)g(the)h +Fs(test)f Ft(and)g Fs([)g Ft(builtin)150 4116 y(commands.)275 +4251 y(Expressions)32 b(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 4361 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 4470 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 Fi(N)11 b Ft(',)31 +b(then)i(\014le)g(descriptor)g Fq(N)43 b Ft(is)150 4580 +y(c)m(hec)m(k)m(ed.)e(If)26 b(the)g 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 +4689 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.) +275 4825 y(When)h(used)g(with)g(`)p Fs([[)p Ft(',)h(The)f(`)p +Fs(<)p Ft(')h(and)f(`)p Fs(>)p Ft(')g(op)s(erators)h(sort)g +(lexicographically)i(using)d(the)h(curren)m(t)150 4934 +y(lo)s(cale.)275 5070 y(Unless)44 b(otherwise)h(sp)s(eci\014ed,)j +(primaries)c(that)h(op)s(erate)g(on)g(\014les)f(follo)m(w)i(sym)m(b)s +(olic)f(links)g(and)150 5179 y(op)s(erate)31 b(on)f(the)h(target)h(of)e +(the)h(link,)f(rather)h(than)f(the)g(link)h(itself.)150 +5340 y Fs(-a)f Fi(file)162 b Ft(T)-8 b(rue)30 b(if)g +Fq(\014le)36 b Ft(exists.)p eop end +%%Page: 77 83 +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 Fs(-b)30 +b Fi(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 +461 y Fs(-c)f Fi(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 +623 y Fs(-d)f Fi(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 +785 y Fs(-e)30 b Fi(file)162 b Ft(T)-8 b(rue)30 b(if)g +Fq(\014le)36 b Ft(exists.)150 948 y Fs(-f)30 b Fi(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 1110 y Fs(-g)g +Fi(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 +1272 y Fs(-h)g Fi(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 +1434 y Fs(-k)f Fi(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 1596 y Fs(-p)g Fi(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 1759 +y Fs(-r)h Fi(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 1921 y Fs(-s)g +Fi(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 +2083 y Fs(-t)g Fi(fd)258 b Ft(T)-8 b(rue)30 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 +2245 y Fs(-u)f Fi(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-user-id)h(bit)f(is)h +(set.)150 2407 y Fs(-w)f Fi(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 +2570 y Fs(-x)g Fi(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 +2732 y Fs(-O)g Fi(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 2894 y Fs(-G)g Fi(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 +3056 y Fs(-L)g Fi(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 +3218 y Fs(-S)f Fi(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 +3381 y Fs(-N)f Fi(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 3543 y Fi(file1)39 +b Fs(-nt)30 b Fi(file2)630 3652 y Ft(T)-8 b(rue)23 b(if)g +Fq(\014le1)31 b Ft(is)24 b(new)m(er)f(\(according)i(to)f(mo)s +(di\014cation)g(date\))g(than)g Fq(\014le2)7 b Ft(,)25 +b(or)f(if)f Fq(\014le1)31 b Ft(exists)630 3762 y(and)f +Fq(\014le2)38 b Ft(do)s(es)30 b(not.)150 3924 y Fi(file1)39 +b Fs(-ot)30 b Fi(file2)630 4034 y Ft(T)-8 b(rue)30 b(if)g +Fq(\014le1)38 b Ft(is)31 b(older)f(than)g Fq(\014le2)7 +b Ft(,)32 b(or)e(if)h Fq(\014le2)38 b Ft(exists)31 b(and)e +Fq(\014le1)39 b Ft(do)s(es)30 b(not.)150 4196 y Fi(file1)39 +b Fs(-ef)30 b Fi(file2)630 4305 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 +4468 y Fs(-o)g Fi(optname)630 4577 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 +4687 y(description)h(of)f(the)h(`)p Fs(-o)p Ft(')f(option)h(to)h(the)e +Fs(set)g Ft(builtin)g(\(see)i(Section)f(4.3.1)h([The)f(Set)630 +4796 y(Builtin],)31 b(page)g(51\).)150 4959 y Fs(-z)f +Fi(string)630 5068 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 5230 y Fs(-n)f Fi(string)150 +5340 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.)p eop end +%%Page: 78 84 +TeXDict begin 78 83 bop 150 -116 a Ft(78)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fi(string1)39 b Fs(==)30 +b Fi(string2)150 408 y(string1)39 b Fs(=)30 b Fi(string2)630 +518 y Ft(T)-8 b(rue)35 b(if)h(the)g(strings)g(are)g(equal.)58 +b(`)p Fs(=)p Ft(')36 b(should)f(b)s(e)g(used)g(with)h(the)g +Fs(test)f Ft(command)g(for)630 628 y Fl(posix)30 b Ft(conformance.)150 +790 y Fi(string1)39 b Fs(!=)30 b Fi(string2)630 899 y +Ft(T)-8 b(rue)30 b(if)g(the)h(strings)f(are)h(not)f(equal.)150 +1061 y Fi(string1)39 b Fs(<)30 b Fi(string2)630 1171 +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)-8 +b(.)150 1333 y Fi(string1)39 b Fs(>)30 b Fi(string2)630 +1442 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)-8 b(.)150 +1604 y Fi(arg1)40 b Fs(OP)29 b Fi(arg2)630 1714 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)h(binary)630 1823 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 1933 y(equal)28 b(to,)h(greater)g(than,)f(or)f +(greater)i(than)e(or)h(equal)g(to)g Fq(arg2)7 b Ft(,)30 +b(resp)s(ectiv)m(ely)-8 b(.)41 b Fq(Arg1)36 b Ft(and)630 +2043 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 2279 y Fr(6.5)68 b(Shell)45 b(Arithmetic)150 +2438 y Ft(The)35 b(shell)g(allo)m(ws)i(arithmetic)f(expressions)f(to)h +(b)s(e)f(ev)-5 b(aluated,)38 b(as)d(one)h(of)f(the)h(shell)f +(expansions)g(or)150 2548 y(b)m(y)30 b(the)h Fs(let)e +Ft(and)h(the)h(`)p Fs(-i)p Ft(')f(option)h(to)g(the)f +Fs(declare)f Ft(builtins.)275 2685 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 +2795 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 2904 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 3014 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 +3177 y Fi(id)11 b Fs(++)29 b Fi(id)11 b Fs(--)630 3287 +y Ft(v)-5 b(ariable)31 b(p)s(ost-incremen)m(t)g(and)f(p)s(ost-decremen) +m(t)150 3449 y Fs(++)p Fi(id)40 b Fs(--)p Fi(id)630 3558 +y Ft(v)-5 b(ariable)31 b(pre-incremen)m(t)g(and)f(pre-decremen)m(t)150 +3720 y Fs(-)g(+)354 b Ft(unary)29 b(min)m(us)h(and)g(plus)150 +3882 y Fs(!)g(~)354 b Ft(logical)33 b(and)d(bit)m(wise)h(negation)150 +4044 y Fs(**)384 b Ft(exp)s(onen)m(tiation)150 4206 y +Fs(*)30 b(/)g(\045)276 b Ft(m)m(ultiplication,)33 b(division,)d +(remainder)150 4368 y Fs(+)g(-)354 b Ft(addition,)31 +b(subtraction)150 4530 y Fs(<<)f(>>)258 b Ft(left)31 +b(and)f(righ)m(t)h(bit)m(wise)g(shifts)150 4692 y Fs(<=)f(>=)g(<)g(>) +102 b Ft(comparison)150 4854 y Fs(==)30 b(!=)258 b Ft(equalit)m(y)32 +b(and)e(inequalit)m(y)150 5016 y Fs(&)432 b Ft(bit)m(wise)31 +b(AND)150 5178 y Fs(^)432 b Ft(bit)m(wise)31 b(exclusiv)m(e)h(OR)150 +5340 y Fs(|)432 b Ft(bit)m(wise)31 b(OR)p eop end +%%Page: 79 85 +TeXDict begin 79 84 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(79)150 299 y Fs(&&)384 +b Ft(logical)33 b(AND)150 446 y Fs(||)384 b Ft(logical)33 +b(OR)150 592 y Fs(expr)c(?)h(expr)f(:)h(expr)630 702 +y Ft(conditional)i(op)s(erator)150 849 y Fs(=)e(*=)g(/=)g(\045=)f(+=)h +(-=)g(<<=)f(>>=)h(&=)g(^=)f(|=)630 958 y Ft(assignmen)m(t)150 +1105 y Fs(expr1)g(,)h(expr2)630 1214 y Ft(comma)275 1361 +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 1471 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 1580 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 1690 +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 +1800 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 1909 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 2019 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 2128 y(turned)29 b(on)h(to)i(b)s(e)d(used)h +(in)g(an)g(expression.)275 2256 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 2366 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)31 b(a)g(decimal)150 2476 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)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 2585 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 2695 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 2804 +y(or)i(equal)g(to)g(36,)i(lo)m(w)m(ercase)g(and)e(upp)s(ercase)e +(letters)j(ma)m(y)g(b)s(e)e(used)g(in)m(terc)m(hangeably)i(to)g +(represen)m(t)150 2914 y(n)m(um)m(b)s(ers)29 b(b)s(et)m(w)m(een)i(10)g +(and)f(35.)275 3042 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 3152 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 3371 y Fr(6.6)68 b(Aliases)150 3531 +y Fq(Aliases)41 b Ft(allo)m(w)d(a)f(string)f(to)h(b)s(e)f(substituted)g +(for)g(a)g(w)m(ord)g(when)g(it)h(is)f(used)f(as)i(the)g(\014rst)e(w)m +(ord)h(of)h(a)150 3640 y(simple)32 b(command.)45 b(The)31 +b(shell)i(main)m(tains)f(a)h(list)f(of)g(aliases)i(that)e(ma)m(y)h(b)s +(e)e(set)h(and)g(unset)f(with)h(the)150 3750 y Fs(alias)d +Ft(and)h Fs(unalias)e Ft(builtin)i(commands.)275 3878 +y(The)f(\014rst)f(w)m(ord)i(of)f(eac)m(h)i(simple)f(command,)g(if)f +(unquoted,)g(is)h(c)m(hec)m(k)m(ed)h(to)g(see)f(if)g(it)g(has)f(an)g +(alias.)150 3988 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 4097 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 +4207 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 4317 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 4426 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 4536 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 +4645 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 4755 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 +4883 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 4993 y Ft(command.)275 5121 y(There)44 +b(is)h(no)g(mec)m(hanism)g(for)f(using)h(argumen)m(ts)g(in)f(the)h +(replacemen)m(t)i(text,)i(as)d(in)e Fs(csh)p Ft(.)83 +b(If)150 5230 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 5340 y(page)31 b(14\).)p eop end +%%Page: 80 86 +TeXDict begin 80 85 bop 150 -116 a Ft(80)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 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 408 y Ft(shell)e(option)f(is)h(set)g(using)f +Fs(shopt)f Ft(\(see)i(Section)g(4.3.2)h([The)e(Shopt)g(Builtin],)h +(page)g(55\).)275 540 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 650 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 760 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 869 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 979 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 1088 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 +1198 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 +1308 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 +1417 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 1527 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 1636 y(commands.)275 +1768 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 +1996 y Fr(6.7)68 b(Arra)l(ys)150 2155 y Ft(Bash)33 b(pro)m(vides)g +(one-dimensional)g(indexed)f(and)h(asso)s(ciativ)m(e)i(arra)m(y)e(v)-5 +b(ariables.)49 b(An)m(y)33 b(v)-5 b(ariable)33 b(ma)m(y)150 +2265 y(b)s(e)e(used)h(as)g(an)g(indexed)f(arra)m(y;)j(the)e +Fs(declare)e Ft(builtin)h(will)i(explicitly)g(declare)g(an)f(arra)m(y) +-8 b(.)46 b(There)32 b(is)150 2374 y(no)h(maxim)m(um)g(limit)h(on)f +(the)g(size)h(of)g(an)f(arra)m(y)-8 b(,)35 b(nor)d(an)m(y)i(requiremen) +m(t)f(that)h(mem)m(b)s(ers)e(b)s(e)g(indexed)150 2484 +y(or)26 b(assigned)h(con)m(tiguously)-8 b(.)41 b(Indexed)25 +b(arra)m(ys)i(are)f(referenced)g(using)g(in)m(tegers)i(\(including)e +(arithmetic)150 2593 y(expressions)41 b(\(see)h(Section)g(6.5)h([Shell) +e(Arithmetic],)46 b(page)c(78\))g(and)f(are)g(zero-based;)48 +b(asso)s(ciativ)m(e)150 2703 y(arra)m(ys)31 b(use)f(arbitrary)g +(strings.)275 2835 y(An)c(indexed)h(arra)m(y)h(is)f(created)h +(automatically)j(if)c(an)m(y)g(v)-5 b(ariable)28 b(is)g(assigned)f(to)h +(using)f(the)g(syn)m(tax)390 2967 y Fs(name[)p Fi(subscript)11 +b Fs(]=)p Fi(value)150 3099 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 +3208 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 +3340 y Fs(declare)46 b(-a)h Fi(name)150 3472 y Ft(The)30 +b(syn)m(tax)390 3604 y Fs(declare)46 b(-a)h Fi(name)11 +b Fs([)p Fi(subscript)g Fs(])150 3736 y Ft(is)30 b(also)i(accepted;)g +(the)e Fq(subscript)h Ft(is)g(ignored.)275 3868 y(Asso)s(ciativ)m(e)h +(arra)m(ys)f(are)g(created)g(using)390 4000 y Fs(declare)46 +b(-A)h Fi(name)11 b Fs(.)275 4132 y Ft(A)m(ttributes)46 +b(ma)m(y)h(b)s(e)e(sp)s(eci\014ed)g(for)h(an)g(arra)m(y)g(v)-5 +b(ariable)47 b(using)e(the)h Fs(declare)e Ft(and)h Fs(readonly)150 +4242 y Ft(builtins.)40 b(Eac)m(h)31 b(attribute)g(applies)g(to)g(all)g +(mem)m(b)s(ers)f(of)g(an)h(arra)m(y)-8 b(.)275 4374 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 4506 y Fs(name=\(value)p Fi(1)55 b Fs(...)47 +b(value)p Fi(n)11 b Fs(\))150 4638 y Ft(where)37 b(eac)m(h)i +Fq(v)-5 b(alue)42 b Ft(is)c(of)g(the)f(form)g Fs([)p +Fi(subscript)11 b Fs(]=)p Fq(string)d Ft(.)58 b(Indexed)36 +b(arra)m(y)i(assignmen)m(ts)g(do)g(not)150 4747 y(require)c(the)g(brac) +m(k)m(et)h(and)e(subscript.)50 b(When)34 b(assigning)g(to)g(indexed)g +(arra)m(ys,)h(if)f(the)g(optional)h(sub-)150 4857 y(script)c(is)h +(supplied,)f(that)h(index)f(is)h(assigned)g(to;)h(otherwise)f(the)f +(index)h(of)f(the)h(elemen)m(t)h(assigned)f(is)150 4966 +y(the)f(last)g(index)f(assigned)g(to)h(b)m(y)g(the)f(statemen)m(t)i +(plus)e(one.)41 b(Indexing)30 b(starts)g(at)i(zero.)275 +5098 y(When)e(assigning)h(to)g(an)f(asso)s(ciativ)m(e)j(arra)m(y)-8 +b(,)32 b(the)e(subscript)f(is)i(required.)275 5230 y(This)f(syn)m(tax)j +(is)e(also)i(accepted)g(b)m(y)f(the)f Fs(declare)f Ft(builtin.)44 +b(Individual)31 b(arra)m(y)h(elemen)m(ts)h(ma)m(y)g(b)s(e)150 +5340 y(assigned)e(to)g(using)f(the)g 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.)p eop end +%%Page: 81 87 +TeXDict begin 81 86 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(81)275 299 y(An)m(y)33 +b(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 408 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 +518 y(`)p Fs(@)p Ft(')f(or)g(`)p Fs(*)p Ft(',)g(the)g(w)m(ord)g +(expands)f(to)i(all)f(mem)m(b)s(ers)f(of)h(the)g(arra)m(y)h +Fq(name)5 b Ft(.)40 b(These)29 b(subscripts)e(di\013er)i(only)150 +628 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 +737 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 847 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 956 y(When)32 b(there)h(are)f(no)g +(arra)m(y)h(mem)m(b)s(ers,)f Fs(${name[@]})e Ft(expands)h(to)i +(nothing.)47 b(If)31 b(the)i(double-quoted)150 1066 y(expansion)39 +b(o)s(ccurs)h(within)f(a)h(w)m(ord,)i(the)d(expansion)h(of)g(the)f +(\014rst)g(parameter)h(is)g(joined)f(with)h(the)150 1176 +y(b)s(eginning)j(part)h(of)g(the)g(original)h(w)m(ord,)j(and)43 +b(the)h(expansion)g(of)g(the)g(last)h(parameter)f(is)g(joined)150 +1285 y(with)35 b(the)g(last)h(part)f(of)g(the)g(original)h(w)m(ord.)55 +b(This)34 b(is)h(analogous)h(to)g(the)f(expansion)g(of)g(the)g(sp)s +(ecial)150 1395 y(parameters)28 b(`)p Fs(@)p Ft(')g(and)f(`)p +Fs(*)p Ft('.)39 b Fs(${#name[)p Fq(subscript)r Fs(]})24 +b Ft(expands)j(to)h(the)g(length)g(of)f Fs(${name[)p +Fq(subscript)r Fs(]})p Ft(.)150 1504 y(If)j Fq(subscript)i +Ft(is)f(`)p Fs(@)p Ft(')f(or)h(`)p Fs(*)p Ft(',)g(the)g(expansion)g(is) +g(the)g(n)m(um)m(b)s(er)e(of)i(elemen)m(ts)h(in)f(the)g(arra)m(y)-8 +b(.)42 b(Referencing)150 1614 y(an)30 b(arra)m(y)h(v)-5 +b(ariable)31 b(without)g(a)f(subscript)g(is)g(equiv)-5 +b(alen)m(t)32 b(to)f(referencing)g(with)f(a)g(subscript)g(of)g(0.)275 +1757 y(An)35 b(arra)m(y)i(v)-5 b(ariable)37 b(is)g(considered)f(set)h +(if)f(a)h(subscript)e(has)h(b)s(een)g(assigned)g(a)h(v)-5 +b(alue.)59 b(The)36 b(n)m(ull)150 1866 y(string)30 b(is)h(a)g(v)-5 +b(alid)30 b(v)-5 b(alue.)275 2009 y(The)32 b 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(])33 +b(destro)m(ys)h(the)f(arra)m(y)150 2119 y(elemen)m(t)i(at)g(index)f +Fq(subscript)r Ft(.)50 b(Care)34 b(m)m(ust)f(b)s(e)h(tak)m(en)h(to)f(a) +m(v)m(oid)i(un)m(w)m(an)m(ted)e(side)g(e\013ects)h(caused)f(b)m(y)150 +2228 y(\014lename)40 b(expansion.)69 b Fs(unset)39 b +Fq(name)5 b Ft(,)42 b(where)e Fq(name)45 b Ft(is)39 b(an)h(arra)m(y)-8 +b(,)44 b(remo)m(v)m(es)d(the)f(en)m(tire)h(arra)m(y)-8 +b(.)70 b(A)150 2338 y(subscript)29 b(of)i(`)p Fs(*)p +Ft(')f(or)h(`)p Fs(@)p Ft(')f(also)h(remo)m(v)m(es)h(the)f(en)m(tire)g +(arra)m(y)-8 b(.)275 2481 y(The)41 b Fs(declare)p Ft(,)i +Fs(local)p Ft(,)h(and)d Fs(readonly)f Ft(builtins)h(eac)m(h)j(accept)f +(a)f(`)p Fs(-a)p Ft(')g(option)h(to)f(sp)s(ecify)g(an)150 +2591 y(indexed)34 b(arra)m(y)h(and)f(a)h(`)p Fs(-A)p +Ft(')g(option)g(to)g(sp)s(ecify)g(an)f(asso)s(ciativ)m(e)j(arra)m(y)-8 +b(.)55 b(The)34 b Fs(read)f Ft(builtin)i(accepts)150 +2700 y(a)h(`)p Fs(-a)p Ft(')f(option)h(to)g(assign)g(a)f(list)h(of)g(w) +m(ords)f(read)g(from)g(the)h(standard)e(input)h(to)h(an)f(arra)m(y)-8 +b(,)38 b(and)d(can)150 2810 y(read)c(v)-5 b(alues)31 +b(from)f(the)h(standard)f(input)g(in)m(to)i(individual)e(arra)m(y)h +(elemen)m(ts.)44 b(The)30 b Fs(set)g Ft(and)g Fs(declare)150 +2919 y Ft(builtins)g(displa)m(y)g(arra)m(y)h(v)-5 b(alues)31 +b(in)f(a)h(w)m(a)m(y)g(that)g(allo)m(ws)h(them)e(to)h(b)s(e)f(reused)g +(as)g(input.)150 3164 y Fr(6.8)68 b(The)45 b(Directory)g(Stac)l(k)150 +3324 y Ft(The)21 b(directory)h(stac)m(k)h(is)e(a)h(list)g(of)f(recen)m +(tly-visited)j(directories.)39 b(The)20 b Fs(pushd)g +Ft(builtin)h(adds)g(directories)150 3433 y(to)42 b(the)f(stac)m(k)i(as) +e(it)h(c)m(hanges)g(the)f(curren)m(t)g(directory)-8 b(,)45 +b(and)40 b(the)i Fs(popd)e Ft(builtin)g(remo)m(v)m(es)j(sp)s(eci\014ed) +150 3543 y(directories)29 b(from)f(the)h(stac)m(k)h(and)d(c)m(hanges)j +(the)e(curren)m(t)g(directory)h(to)g(the)g(directory)f(remo)m(v)m(ed.) +41 b(The)150 3653 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 3795 +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 3905 y(v)-5 b(ariable.)150 4113 y Fj(6.8.1)63 +b(Directory)40 b(Stac)m(k)g(Builtins)150 4289 y Fs(dirs)870 +4427 y(dirs)47 b([+)p Fi(N)57 b Fs(|)48 b(-)p Fi(N)11 +b Fs(])46 b([-clpv])630 4566 y Ft(Displa)m(y)35 b(the)f(list)g(of)g +(curren)m(tly)g(remem)m(b)s(ered)f(directories.)51 b(Directories)36 +b(are)e(added)f(to)630 4676 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 4785 y(the)i(list.)630 4953 y +Fs(+)p Fi(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 5063 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 +5230 y Fs(-)p Fi(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 5340 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.)p eop end +%%Page: 82 88 +TeXDict begin 82 87 bop 150 -116 a Ft(82)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 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 457 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 567 y(denote)f(the)f(home)h(directory)-8 +b(.)630 725 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 883 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 +993 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 1151 y Fs(popd)870 1285 y(popd)47 +b([+)p Fi(N)57 b Fs(|)48 b(-)p Fi(N)11 b Fs(])46 b([-n])630 +1419 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 1528 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 1638 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 1748 +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 1857 y(+0)p Ft(.)630 2015 y Fs(+)p +Fi(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 2125 y(b)m(y)30 b Fs(dirs)p Ft(\),)g(starting)h(with)f +(zero.)630 2283 y Fs(-)p Fi(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 2393 y(prin)m(ted)30 +b(b)m(y)g Fs(dirs)p Ft(\),)g(starting)h(with)f(zero.)630 +2551 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 2661 +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 2819 y Fs(pushd)870 2953 y(pushd)46 +b([-n])h([+)p Fi(N)57 b Fs(|)48 b Fi(-N)58 b Fs(|)47 +b Fi(dir)57 b Fs(])630 3087 y Ft(Sa)m(v)m(e)29 b(the)f(curren)m(t)g +(directory)g(on)g(the)g(top)g(of)g(the)g(directory)h(stac)m(k)g(and)e +(then)h Fs(cd)f Ft(to)i Fq(dir)7 b Ft(.)630 3196 y(With)31 +b(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 3354 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 3464 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 3622 y Fs(+)p Fi(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 +3732 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 +3841 y(stac)m(k.)630 4000 y Fs(-)p Fi(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 4109 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 4219 y(stac)m(k.)630 +4377 y Fi(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 +4487 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)7 b Ft(.)150 4718 y Fr(6.9)68 b(Con)l(trolling)47 +b(the)e(Prompt)150 4877 y Ft(The)24 b(v)-5 b(alue)24 +b(of)h(the)f(v)-5 b(ariable)25 b Fs(PROMPT_COMMAND)20 +b Ft(is)25 b(examined)f(just)g(b)s(efore)f(Bash)i(prin)m(ts)e(eac)m(h)j +(primary)150 4987 y(prompt.)39 b(If)28 b Fs(PROMPT_COMMAND)d +Ft(is)j(set)h(and)f(has)g(a)h(non-n)m(ull)f(v)-5 b(alue,)29 +b(then)f(the)h(v)-5 b(alue)29 b(is)f(executed)i(just)150 +5096 y(as)h(if)f(it)h(had)f(b)s(een)f(t)m(yp)s(ed)h(on)h(the)f(command) +g(line.)275 5230 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 5340 y(prompt)g(v)-5 b(ariables:)p +eop end +%%Page: 83 89 +TeXDict begin 83 88 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(83)150 299 y Fs(\\a)384 +b Ft(A)30 b(b)s(ell)h(c)m(haracter.)150 457 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 615 +y Fs(\\D{)p Fi(format)11 b Fs(})630 725 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 +835 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 944 y(braces)31 b(are)f(required.)150 1103 +y Fs(\\e)384 b Ft(An)30 b(escap)s(e)h(c)m(haracter.)150 +1261 y Fs(\\h)384 b Ft(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e +(`.'.)150 1419 y Fs(\\H)384 b Ft(The)30 b(hostname.)150 +1577 y Fs(\\j)384 b Ft(The)30 b(n)m(um)m(b)s(er)f(of)h(jobs)g(curren)m +(tly)h(managed)g(b)m(y)f(the)g(shell.)150 1736 y Fs(\\l)384 +b Ft(The)30 b(basename)h(of)f(the)h(shell's)f(terminal)h(device)g +(name.)150 1894 y Fs(\\n)384 b Ft(A)30 b(newline.)150 +2052 y Fs(\\r)384 b Ft(A)30 b(carriage)i(return.)150 +2211 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 2369 y Fs(\\t)384 b Ft(The)30 +b(time,)h(in)f(24-hour)h(HH:MM:SS)g(format.)150 2527 +y Fs(\\T)384 b Ft(The)30 b(time,)h(in)f(12-hour)h(HH:MM:SS)g(format.) +150 2685 y Fs(\\@)384 b Ft(The)30 b(time,)h(in)f(12-hour)h(am/pm)f +(format.)150 2844 y Fs(\\A)384 b Ft(The)30 b(time,)h(in)f(24-hour)h +(HH:MM)g(format.)150 3002 y Fs(\\u)384 b Ft(The)30 b(username)g(of)g +(the)h(curren)m(t)f(user.)150 3160 y Fs(\\v)384 b Ft(The)30 +b(v)m(ersion)h(of)f(Bash)h(\(e.g.,)h(2.00\))150 3319 +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 3477 +y Fs(\\w)384 b Ft(The)34 b(curren)m(t)h(w)m(orking)g(directory)-8 +b(,)37 b(with)e Fs($HOME)e Ft(abbreviated)j(with)e(a)h(tilde)h(\(uses)f +(the)630 3587 y Fs($PROMPT_DIRTRIM)26 b Ft(v)-5 b(ariable\).)150 +3745 y Fs(\\W)384 b Ft(The)30 b(basename)h(of)f Fs($PWD)p +Ft(,)g(with)g Fs($HOME)f Ft(abbreviated)h(with)g(a)h(tilde.)150 +3903 y Fs(\\!)384 b Ft(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i(this)f +(command.)150 4061 y Fs(\\#)384 b Ft(The)30 b(command)g(n)m(um)m(b)s +(er)f(of)i(this)f(command.)150 4220 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 4378 y Fs(\\)p Fi(nnn)288 b Ft(The)30 +b(c)m(haracter)i(whose)e(ASCI)s(I)f(co)s(de)h(is)h(the)f(o)s(ctal)i(v) +-5 b(alue)31 b Fq(nnn)p Ft(.)150 4536 y Fs(\\\\)384 b +Ft(A)30 b(bac)m(kslash.)150 4695 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 +4804 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e(prompt.) +150 4963 y Fs(\\])384 b Ft(End)29 b(a)i(sequence)g(of)f(non-prin)m +(ting)g(c)m(haracters.)275 5121 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 5230 +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 +5340 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(121\),)j(while)d(the)f +(command)p eop end +%%Page: 84 90 +TeXDict begin 84 89 bop 150 -116 a Ft(84)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y(n)m(um)m(b)s(er)42 +b(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 408 +y(session.)275 550 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 +659 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 769 y Ft(shell)31 b(option)f(\(see)i +(Section)f(4.2)g([Bash)g(Builtins],)g(page)g(41\).)150 +1012 y Fr(6.10)68 b(The)45 b(Restricted)h(Shell)150 1171 +y Ft(If)27 b(Bash)h(is)g(started)g(with)g(the)g(name)g +Fs(rbash)p Ft(,)f(or)g(the)h(`)p Fs(--restricted)p Ft(')d(or)j(`)p +Fs(-r)p Ft(')g(option)g(is)g(supplied)e(at)150 1281 y(in)m(v)m(o)s +(cation,)k(the)d(shell)g(b)s(ecomes)h(restricted.)40 +b(A)27 b(restricted)h(shell)f(is)g(used)f(to)i(set)f(up)f(an)h(en)m +(vironmen)m(t)150 1391 y(more)g(con)m(trolled)i(than)e(the)g(standard)g +(shell.)40 b(A)27 b(restricted)h(shell)f(b)s(eha)m(v)m(es)h(iden)m +(tically)h(to)f Fs(bash)e Ft(with)150 1500 y(the)31 b(exception)g(that) +g(the)g(follo)m(wing)h(are)e(disallo)m(w)m(ed)i(or)e(not)h(p)s +(erformed:)225 1642 y Fp(\017)60 b Ft(Changing)30 b(directories)h(with) +g(the)f Fs(cd)g Ft(builtin.)225 1780 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 1917 y Fp(\017)60 +b Ft(Sp)s(ecifying)30 b(command)g(names)g(con)m(taining)i(slashes.)225 +2055 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 2193 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 2303 y Ft(builtin)h(command.)225 2441 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 2579 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 +2717 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 2855 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 2993 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 3102 y Ft(builtin.)225 3240 y Fp(\017)60 +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 3378 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 3516 y Fp(\017)60 b Ft(T)-8 +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 3686 y(These)g(restrictions)h(are)g(enforced)f(after)h(an)m +(y)g(startup)f(\014les)g(are)h(read.)275 3828 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 3937 y(Scripts],)25 +b(page)e(33\),)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 +4180 y Fr(6.11)68 b(Bash)45 b(POSIX)f(Mo)t(de)150 4339 +y Ft(Starting)34 b(Bash)f(with)g(the)g(`)p Fs(--posix)p +Ft(')f(command-line)i(option)g(or)f(executing)h(`)p Fs(set)c(-o)g +(posix)p Ft(')i(while)150 4449 y(Bash)26 b(is)g(running)e(will)j(cause) +f(Bash)g(to)h(conform)f(more)g(closely)h(to)g(the)f Fl(posix)f +Ft(standard)g(b)m(y)h(c)m(hanging)150 4559 y(the)31 b(b)s(eha)m(vior)f +(to)h(matc)m(h)g(that)g(sp)s(eci\014ed)f(b)m(y)g Fl(posix)g +Ft(in)g(areas)h(where)f(the)h(Bash)f(default)h(di\013ers.)275 +4700 y(When)f(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)g(the)f(startup)g(\014les.)275 +4841 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 4983 +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 5092 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 5230 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 +5340 y(non-zero)31 b(status)g(is)f(`Done\(status\)'.)p +eop end +%%Page: 85 91 +TeXDict begin 85 90 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(85)199 299 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 +408 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 545 y(4.)61 b(The)27 b Fs(bg)g Ft(builtin)g(uses)g(the)h +(required)f(format)h(to)g(describ)s(e)f(eac)m(h)i(job)e(placed)h(in)f +(the)h(bac)m(kground,)330 655 y(whic)m(h)h(do)s(es)g(not)g(include)g +(an)g(indication)h(of)f(whether)f(the)h(job)g(is)g(the)h(curren)m(t)e +(or)h(previous)g(job.)199 792 y(5.)61 b(Reserv)m(ed)40 +b(w)m(ords)g(app)s(earing)f(in)h(a)g(con)m(text)i(where)d(reserv)m(ed)h +(w)m(ords)f(are)i(recognized)g(do)f(not)330 902 y(undergo)30 +b(alias)h(expansion.)199 1039 y(6.)61 b(The)38 b Fl(posix)h +Fs(PS1)f Ft(and)g Fs(PS2)g Ft(expansions)g(of)i(`)p Fs(!)p +Ft(')f(to)g(the)g(history)g(n)m(um)m(b)s(er)f(and)g(`)p +Fs(!!)p Ft(')h(to)g(`)p Fs(!)p Ft(')h(are)330 1148 y(enabled,)26 +b(and)f(parameter)g(expansion)g(is)g(p)s(erformed)e(on)i(the)g(v)-5 +b(alues)25 b(of)g Fs(PS1)f Ft(and)h Fs(PS2)f Ft(regardless)330 +1258 y(of)31 b(the)f(setting)i(of)e(the)h Fs(promptvars)c +Ft(option.)199 1395 y(7.)61 b(The)30 b Fl(posix)g Ft(startup)f(\014les) +i(are)g(executed)g(\()p Fs($ENV)p Ft(\))f(rather)g(than)g(the)h(normal) +f(Bash)g(\014les.)199 1532 y(8.)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 1641 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h +(on)e(the)h(line.)199 1778 y(9.)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(\).)154 +1915 y(10.)61 b(The)23 b(output)f(of)i(`)p Fs(kill)29 +b(-l)p Ft(')23 b(prin)m(ts)f(all)i(the)g(signal)f(names)g(on)g(a)h +(single)g(line,)h(separated)e(b)m(y)g(spaces,)330 2025 +y(without)30 b(the)h(`)p Fs(SIG)p Ft(')f(pre\014x.)154 +2162 y(11.)61 b(The)30 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 +2299 y(12.)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 2436 y(13.)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 2545 y(in)m(v)-5 b(alid)31 +b(expression.)154 2682 y(14.)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 2792 y(unless)30 b(the)g(shell)h(is)f(in)m +(teractiv)m(e.)154 2929 y(15.)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 3066 y(16.)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 3176 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 3285 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 3422 y(17.)61 b +Fl(posix)30 b Ft(sp)s(ecial)h(builtins)e(are)i(found)e(b)s(efore)h +(shell)h(functions)f(during)f(command)h(lo)s(okup.)154 +3559 y(18.)61 b(If)24 b(a)g Fl(posix)g Ft(sp)s(ecial)h(builtin)f +(returns)f(an)h(error)g(status,)i(a)e(non-in)m(teractiv)m(e)j(shell)e +(exits.)39 b(The)24 b(fatal)330 3669 y(errors)i(are)h(those)f(listed)h +(in)f(the)h(POSIX)e(standard,)i(and)f(include)g(things)g(lik)m(e)i +(passing)e(incorrect)330 3778 y(options,)43 b(redirection)d(errors,)i +(v)-5 b(ariable)41 b(assignmen)m(t)g(errors)e(for)g(assignmen)m(ts)i +(preceding)f(the)330 3888 y(command)30 b(name,)h(and)f(so)g(on.)154 +4025 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 4134 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 4244 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 4354 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(.)154 4491 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 4600 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 +4710 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 4847 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 4956 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 5093 y(22.)61 b(Pro)s(cess)30 b(substitution)g(is)h(not) +f(a)m(v)-5 b(ailable.)154 5230 y(23.)61 b(Assignmen)m(t)23 +b(statemen)m(ts)h(preceding)e Fl(posix)f Ft(sp)s(ecial)i(builtins)f(p)s +(ersist)g(in)f(the)i(shell)f(en)m(vironmen)m(t)330 5340 +y(after)31 b(the)f(builtin)g(completes.)p eop end +%%Page: 86 92 +TeXDict begin 86 91 bop 150 -116 a Ft(86)2572 b(Bash)31 +b(Reference)g(Man)m(ual)154 299 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 408 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 535 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 +645 y(quired)30 b(b)m(y)g Fl(posix)p Ft(.)154 772 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 899 y(27.)61 +b(The)39 b Fs(trap)e Ft(builtin)i(do)s(esn't)g(c)m(hec)m(k)h(the)g +(\014rst)e(argumen)m(t)i(for)e(a)i(p)s(ossible)e(signal)i(sp)s +(eci\014cation)330 1008 y(and)30 b(rev)m(ert)i(the)e(signal)i(handling) +e(to)h(the)g(original)h(disp)s(osition)e(if)h(it)g(is,)g(unless)f(that) +h(argumen)m(t)330 1118 y(consists)e(solely)g(of)g(digits)g(and)f(is)g +(a)h(v)-5 b(alid)29 b(signal)g(n)m(um)m(b)s(er.)38 b(If)28 +b(users)g(w)m(an)m(t)h(to)g(reset)g(the)g(handler)330 +1228 y(for)h(a)g(giv)m(en)h(signal)g(to)f(the)h(original)g(disp)s +(osition,)f(they)g(should)f(use)h(`)p Fs(-)p Ft(')g(as)g(the)g(\014rst) +f(argumen)m(t.)154 1354 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 +1464 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 1591 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 +1700 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 1810 y(subshells.)154 +1937 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 2064 +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 2173 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 2300 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 2410 y(names)30 b(and)g(de\014nitions.)154 +2537 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 2646 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 2756 y(c)m(haracters.)154 +2883 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 2992 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 3102 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.)154 3229 y(35.)61 b(When)20 +b(the)h Fs(pwd)e Ft(builtin)h(is)g(supplied)g(the)g(`)p +Fs(-P)p Ft(')g(option,)j(it)e(resets)g Fs($PWD)e Ft(to)i(a)g(pathname)f +(con)m(taining)330 3339 y(no)30 b(symlinks.)154 3465 +y(36.)61 b(The)36 b Fs(pwd)f Ft(builtin)h(v)m(eri\014es)h(that)g(the)f +(v)-5 b(alue)37 b(it)g(prin)m(ts)e(is)i(the)f(same)h(as)f(the)h(curren) +m(t)f(directory)-8 b(,)330 3575 y(ev)m(en)31 b(if)f(it)h(is)g(not)f +(ask)m(ed)h(to)g(c)m(hec)m(k)h(the)f(\014le)f(system)h(with)f(the)h(`)p +Fs(-P)p Ft(')f(option.)154 3702 y(37.)61 b(When)35 b(listing)g(the)g +(history)-8 b(,)36 b(the)f Fs(fc)g Ft(builtin)f(do)s(es)g(not)h +(include)g(an)f(indication)i(of)f(whether)f(or)330 3811 +y(not)d(a)f(history)h(en)m(try)f(has)g(b)s(een)g(mo)s(di\014ed.)154 +3938 y(38.)61 b(The)30 b(default)g(editor)h(used)f(b)m(y)g +Fs(fc)g Ft(is)g Fs(ed)p Ft(.)154 4065 y(39.)61 b(The)37 +b Fs(type)g Ft(and)g Fs(command)f Ft(builtins)i(will)g(not)g(rep)s(ort) +f(a)i(non-executable)g(\014le)f(as)g(ha)m(ving)h(b)s(een)330 +4175 y(found,)26 b(though)h(the)g(shell)g(will)g(attempt)h(to)g +(execute)g(suc)m(h)f(a)g(\014le)g(if)g(it)g(is)g(the)g(only)g(so-named) +g(\014le)330 4284 y(found)i(in)h Fs($PATH)p Ft(.)154 +4411 y(40.)61 b(The)33 b Fs(vi)f Ft(editing)i(mo)s(de)f(will)g(in)m(v)m +(ok)m(e)i(the)e Fs(vi)g Ft(editor)h(directly)f(when)f(the)i(`)p +Fs(v)p Ft(')f(command)g(is)g(run,)330 4521 y(instead)e(of)f(c)m(hec)m +(king)i Fs($VISUAL)d Ft(and)g Fs($EDITOR)p Ft(.)154 4648 +y(41.)61 b(When)41 b(the)g Fs(xpg_echo)e Ft(option)i(is)g(enabled,)j +(Bash)d(do)s(es)g(not)g(attempt)h(to)g(in)m(terpret)f(an)m(y)h(ar-)330 +4757 y(gumen)m(ts)35 b(to)g Fs(echo)e Ft(as)i(options.)54 +b(Eac)m(h)35 b(argumen)m(t)g(is)f(displa)m(y)m(ed,)j(after)e(escap)s(e) +g(c)m(haracters)h(are)330 4867 y(con)m(v)m(erted.)154 +4994 y(42.)61 b(The)30 b Fs(ulimit)f Ft(builtin)g(uses)h(a)h(blo)s(c)m +(k)g(size)g(of)g(512)g(b)m(ytes)g(for)f(the)h(`)p Fs(-c)p +Ft(')f(and)g(`)p Fs(-f)p Ft(')g(options.)154 5121 y(43.)61 +b(The)39 b(arriv)-5 b(al)41 b(of)f Fs(SIGCHLD)e Ft(when)h(a)h(trap)g +(is)g(set)h(on)f Fs(SIGCHLD)e Ft(do)s(es)h(not)h(in)m(terrupt)g(the)g +Fs(wait)330 5230 y Ft(builtin)c(and)h(cause)g(it)h(to)f(return)f +(immediately)-8 b(.)62 b(The)37 b(trap)f(command)h(is)g(run)e(once)j +(for)f(eac)m(h)330 5340 y(c)m(hild)31 b(that)g(exits.)p +eop end +%%Page: 87 93 +TeXDict begin 87 92 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(87)275 299 y(There)34 +b(is)g(other)h Fl(posix)f Ft(b)s(eha)m(vior)h(that)g(Bash)g(do)s(es)f +(not)h(implemen)m(t)g(b)m(y)g(default)f(ev)m(en)i(when)d(in)150 +408 y Fl(posix)d Ft(mo)s(de.)40 b(Sp)s(eci\014cally:)199 +543 y(1.)61 b(The)30 b Fs(fc)f Ft(builtin)h(c)m(hec)m(ks)i +Fs($EDITOR)c Ft(as)j(a)f(program)g(to)h(edit)g(history)f(en)m(tries)h +(if)f Fs(FCEDIT)f Ft(is)h(unset,)330 653 y(rather)g(than)g(defaulting)h +(directly)g(to)g Fs(ed)p Ft(.)40 b Fs(fc)30 b Ft(uses)g +Fs(ed)g Ft(if)g Fs(EDITOR)f Ft(is)h(unset.)199 787 y(2.)61 +b(As)29 b(noted)g(ab)s(o)m(v)m(e,)i(Bash)e(requires)g(the)g +Fs(xpg_echo)e Ft(option)j(to)g(b)s(e)e(enabled)h(for)g(the)g +Fs(echo)f Ft(builtin)330 897 y(to)j(b)s(e)f(fully)g(conforman)m(t.)275 +1056 y(Bash)66 b(can)h(b)s(e)f(con\014gured)g(to)i(b)s(e)e +Fl(posix)p Ft(-conforman)m(t)h(b)m(y)f(default,)77 b(b)m(y)66 +b(sp)s(ecifying)h(the)150 1166 y(`)p Fs(--enable-strict-posix-def)o +(ault)o Ft(')i(to)76 b Fs(configure)c Ft(when)i(building)g(\(see)i +(Section)f(10.8)150 1275 y([Optional)31 b(F)-8 b(eatures],)32 +b(page)f(129\).)p eop end +%%Page: 88 94 +TeXDict begin 88 93 bop eop end +%%Page: 89 95 +TeXDict begin 89 94 bop 150 -116 a Ft(Chapter)30 b(7:)41 +b(Job)30 b(Con)m(trol)2571 b(89)150 299 y Fo(7)80 b(Job)54 +b(Con)l(trol)150 521 y Ft(This)25 b(c)m(hapter)i(discusses)f(what)g +(job)f(con)m(trol)j(is,)f(ho)m(w)f(it)h(w)m(orks,)g(and)f(ho)m(w)g +(Bash)g(allo)m(ws)h(y)m(ou)g(to)g(access)150 631 y(its)k(facilities.) +150 858 y Fr(7.1)68 b(Job)45 b(Con)l(trol)h(Basics)150 +1018 y Ft(Job)27 b(con)m(trol)i(refers)e(to)h(the)g(abilit)m(y)h(to)f +(selectiv)m(ely)j(stop)c(\(susp)s(end\))f(the)i(execution)h(of)e(pro)s +(cesses)h(and)150 1127 y(con)m(tin)m(ue)38 b(\(resume\))g(their)f +(execution)h(at)g(a)g(later)g(p)s(oin)m(t.)61 b(A)37 +b(user)g(t)m(ypically)i(emplo)m(ys)f(this)f(facilit)m(y)150 +1237 y(via)27 b(an)e(in)m(teractiv)m(e)k(in)m(terface)f(supplied)d +(join)m(tly)h(b)m(y)g(the)h(op)s(erating)f(system)g(k)m(ernel's)h +(terminal)f(driv)m(er)150 1347 y(and)k(Bash.)275 1479 +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 1588 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(,)34 b(it)150 1698 y(prin)m(ts)c(a)h +(line)f(that)h(lo)s(oks)g(lik)m(e:)390 1830 y Fs([1])47 +b(25647)150 1962 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 2072 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 2181 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)f(as)g(the)g(basis)f +(for)g(job)g(con)m(trol.)275 2313 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 2423 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 +2533 y(\(pro)s(cesses)h(whose)g(pro)s(cess)g(group)g +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 2642 y(k)m(eyb)s +(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 2752 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 2861 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 +2971 y(to)g(read)e(from)h(or,)h(if)f(the)g(user)f(so)i(sp)s(eci\014es)e +(with)h Fs(stty)29 b(tostop)p Ft(,)23 b(write)g(to)g(the)h(terminal.)38 +b(Bac)m(kground)150 3081 y(pro)s(cesses)27 b(whic)m(h)g(attempt)h(to)f +(read)g(from)g(\(write)g(to)h(when)e Fs(stty)j(tostop)d +Ft(is)h(in)f(e\013ect\))j(the)e(terminal)150 3190 y(are)32 +b(sen)m(t)g(a)g Fs(SIGTTIN)e Ft(\()p Fs(SIGTTOU)p Ft(\))g(signal)i(b)m +(y)g(the)g(k)m(ernel's)g(terminal)g(driv)m(er,)g(whic)m(h,)g(unless)f +(caugh)m(t,)150 3300 y(susp)s(ends)d(the)i(pro)s(cess.)275 +3432 y(If)k(the)i(op)s(erating)g(system)f(on)h(whic)m(h)f(Bash)g(is)h +(running)d(supp)s(orts)h(job)h(con)m(trol,)j(Bash)e(con)m(tains)150 +3541 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 +3651 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 3761 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 +3870 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 3980 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 4089 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 4199 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 4309 y(output)j(and)g(t)m(yp)s(eahead)h(to)g(b)s(e)e +(discarded.)275 4441 y(There)j(are)g(a)h(n)m(um)m(b)s(er)e(of)i(w)m(a)m +(ys)g(to)h(refer)e(to)h(a)g(job)f(in)g(the)h(shell.)47 +b(The)32 b(c)m(haracter)i(`)p Fs(\045)p Ft(')f(in)m(tro)s(duces)150 +4550 y(a)e(job)f(sp)s(eci\014cation)h(\()p Fq(jobsp)s(ec)6 +b Ft(\).)275 4682 y(Job)31 b(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)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 +4792 y(notion)k(of)f(the)g(curren)m(t)g(job,)h(whic)m(h)f(is)g(the)g +(last)h(job)f(stopp)s(ed)f(while)h(it)h(w)m(as)g(in)e(the)i(foreground) +e(or)150 4902 y(started)27 b(in)g(the)g(bac)m(kground.)40 +b(A)27 b(single)g(`)p Fs(\045)p Ft(')g(\(with)g(no)g(accompan)m(ying)i +(job)d(sp)s(eci\014cation\))i(also)g(refers)150 5011 +y(to)k(the)e(curren)m(t)h(job.)42 b(The)30 b(previous)g(job)h(ma)m(y)g +(b)s(e)f(referenced)h(using)f(`)p Fs(\045-)p Ft('.)42 +b(If)30 b(there)h(is)g(only)g(a)g(single)150 5121 y(job,)g(`)p +Fs(\045+)p Ft(')g(and)f(`)p Fs(\045-)p Ft(')h(can)h(b)s(oth)e(b)s(e)g +(used)h(to)g(refer)g(to)h(that)g(job.)42 b(In)30 b(output)h(p)s +(ertaining)g(to)g(jobs)g(\(e.g.,)150 5230 y(the)39 b(output)f(of)g(the) +h Fs(jobs)e Ft(command\),)k(the)d(curren)m(t)h(job)f(is)g(alw)m(a)m(ys) +i(\015agged)f(with)f(a)h(`)p Fs(+)p Ft(',)i(and)d(the)150 +5340 y(previous)30 b(job)g(with)g(a)h(`)p Fs(-)p Ft('.)p +eop end +%%Page: 90 96 +TeXDict begin 90 95 bop 150 -116 a Ft(90)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(A)38 b(job)g(ma)m(y)h(also)g(b)s(e)f +(referred)f(to)j(using)d(a)i(pre\014x)e(of)i(the)f(name)h(used)e(to)i +(start)g(it,)i(or)e(using)f(a)150 408 y(substring)29 +b(that)i(app)s(ears)f(in)g(its)h(command)f(line.)41 b(F)-8 +b(or)31 b(example,)g(`)p Fs(\045ce)p Ft(')f(refers)g(to)h(a)g(stopp)s +(ed)e Fs(ce)h Ft(job.)150 518 y(Using)d(`)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 +628 y(line.)41 b(If)30 b(the)h(pre\014x)e(or)h(substring)f(matc)m(hes)j +(more)e(than)h(one)f(job,)h(Bash)f(rep)s(orts)g(an)g(error.)275 +762 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 871 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 981 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 1115 +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 1224 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 1334 y(an)m(y)g(other)g(output.)39 +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 1443 y(immediately)g(\(see)g(Section)g(4.3.1)g([The)f(Set)g +(Builtin],)i(page)f(51\).)40 b(An)m(y)24 b(trap)f(on)h +Fs(SIGCHLD)e Ft(is)i(executed)150 1553 y(for)30 b(eac)m(h)i(c)m(hild)e +(pro)s(cess)g(that)h(exits.)275 1687 y(If)25 b(an)h(attempt)h(to)g +(exit)g(Bash)f(is)h(made)f(while)g(jobs)f(are)i(stopp)s(ed,)f(\(or)h +(running,)e(if)h(the)g Fs(checkjobs)150 1796 y Ft(option)e(is)f +(enabled)h({)g(see)g(Section)g(4.3.2)h([The)e(Shopt)g(Builtin],)j(page) +e(55\),)i(the)e(shell)f(prin)m(ts)g(a)h(w)m(arning)150 +1906 y(message,)k(and)c(if)i(the)f Fs(checkjobs)e Ft(option)j(is)f +(enabled,)i(lists)e(the)h(jobs)f(and)f(their)i(statuses.)39 +b(The)25 b Fs(jobs)150 2016 y Ft(command)36 b(ma)m(y)h(then)f(b)s(e)f +(used)g(to)i(insp)s(ect)f(their)g(status.)59 b(If)36 +b(a)g(second)g(attempt)i(to)f(exit)g(is)f(made)150 2125 +y(without)e(an)f(in)m(terv)m(ening)i(command,)f(Bash)g(do)s(es)f(not)h +(prin)m(t)g(another)f(w)m(arning,)i(and)e(an)m(y)h(stopp)s(ed)150 +2235 y(jobs)c(are)h(terminated.)150 2466 y Fr(7.2)68 +b(Job)45 b(Con)l(trol)h(Builtins)150 2650 y Fs(bg)870 +2784 y(bg)h([)p Fi(jobspec)56 b Fs(...)o(])630 2918 y +Ft(Resume)24 b(eac)m(h)h(susp)s(ended)d(job)i Fq(jobsp)s(ec)29 +b Ft(in)24 b(the)g(bac)m(kground,)h(as)g(if)f(it)h(had)e(b)s(een)g +(started)630 3027 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 3137 +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 3246 +y(con)m(trol)h(enabled,)g(an)m(y)f Fq(jobsp)s(ec)37 b +Ft(w)m(as)32 b(not)g(found)f(or)g(sp)s(eci\014es)h(a)g(job)g(that)g(w)m +(as)g(started)630 3356 y(without)e(job)g(con)m(trol.)150 +3514 y Fs(fg)870 3648 y(fg)47 b([)p Fi(jobspec)11 b Fs(])630 +3782 y Ft(Resume)43 b(the)g(job)g Fq(jobsp)s(ec)48 b +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 3891 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 4001 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 +4111 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 +4220 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 4378 y Fs(jobs)870 4512 y(jobs)47 +b([-lnprs])e([)p Fi(jobspec)11 b Fs(])870 4622 y(jobs)47 +b(-x)g Fi(command)56 b Fs([)p Fi(arguments)11 b Fs(])630 +4756 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 +4914 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 +5072 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 +5182 y(the)31 b(user)e(w)m(as)i(last)g(noti\014ed)f(of)h(their)f +(status.)630 5340 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.)p +eop end +%%Page: 91 97 +TeXDict begin 91 96 bop 150 -116 a Ft(Chapter)30 b(7:)41 +b(Job)30 b(Con)m(trol)2571 b(91)630 299 y Fs(-r)384 b +Ft(Restrict)31 b(output)f(to)i(running)c(jobs.)630 461 +y Fs(-s)384 b Ft(Restrict)31 b(output)f(to)i(stopp)s(ed)d(jobs.)630 +622 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 732 y Ft(is)30 b(not)h(supplied,)e(the)i +(status)g(of)f(all)h(jobs)f(is)h(listed.)630 868 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 977 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(,)j(and)d(executes)i +Fq(command)t Ft(,)630 1087 y(passing)30 b(it)h Fq(argumen)m(t)r +Ft(s,)g(returning)f(its)g(exit)i(status.)150 1249 y Fs(kill)870 +1384 y(kill)47 b([-s)g Fi(sigspec)11 b Fs(])45 b([-n)i +Fi(signum)11 b Fs(])45 b([-)p Fi(sigspec)11 b Fs(])44 +b Fi(jobspec)57 b Fs(or)47 b Fi(pid)870 1494 y Fs(kill)g(-l)g([)p +Fi(exit_status)11 b Fs(])630 1630 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 +1739 y(cation)j Fq(jobsp)s(ec)k Ft(or)25 b(pro)s(cess)g +Fl(id)g Fq(pid)t Ft(.)38 b Fq(sigsp)s(ec)31 b Ft(is)25 +b(either)g(a)h(case-insensitiv)m(e)h(signal)f(name)630 +1849 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 1958 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 2068 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 2178 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 2287 y(the)c(return)f(status)h(is)g(zero.)41 +b Fq(exit)p 1796 2287 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 +2397 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 +2506 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 +2616 y(in)m(v)-5 b(alid)31 b(option)g(is)f(encoun)m(tered.)150 +2778 y Fs(wait)870 2913 y(wait)47 b([)p Fi(jobspec)56 +b Fs(or)47 b Fi(pid)57 b Fs(...])630 3049 y Ft(W)-8 b(ait)28 +b(un)m(til)f(the)f(c)m(hild)h(pro)s(cess)f(sp)s(eci\014ed)g(b)m(y)g +(eac)m(h)h(pro)s(cess)f Fl(id)h Fq(pid)i Ft(or)d(job)g(sp)s +(eci\014cation)630 3159 y Fq(jobsp)s(ec)40 b 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 3268 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 3378 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 3487 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 3597 y(the)g(return)e(status)i(is)f(127.)150 +3759 y Fs(disown)870 3894 y(disown)46 b([-ar])g([-h])h([)p +Fi(jobspec)56 b Fs(...)o(])630 4030 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 4140 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 +4249 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 4359 y(not)32 +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 4468 y(used.)58 b(If)36 b(no)g Fq(jobsp)s(ec)41 b +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 4578 y(jobs;)28 b(the)f(`)p +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 +4688 y(jobs.)150 4849 y Fs(suspend)870 4985 y(suspend)46 +b([-f])630 5121 y Ft(Susp)s(end)31 b(the)i(execution)h(of)g(this)f +(shell)g(un)m(til)h(it)g(receiv)m(es)h(a)e Fs(SIGCONT)f +Ft(signal.)50 b(A)33 b(login)630 5230 y(shell)24 b(cannot)h(b)s(e)e +(susp)s(ended;)h(the)g(`)p Fs(-f)p Ft(')g(option)g(can)h(b)s(e)e(used)g +(to)i(o)m(v)m(erride)g(this)f(and)f(force)630 5340 y(the)31 +b(susp)s(ension.)p eop end +%%Page: 92 98 +TeXDict begin 92 97 bop 150 -116 a Ft(92)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 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 408 y(men)m(ts.)41 +b(They)30 b(m)m(ust)g(b)s(e)g(supplied)f(pro)s(cess)h +Fl(id)p Ft(s.)150 641 y Fr(7.3)68 b(Job)45 b(Con)l(trol)h(V)-11 +b(ariables)150 825 y Fs(auto_resume)630 935 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 1044 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 +1154 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 +1264 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 +1373 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 +1483 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 1592 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 1702 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 1812 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 +1921 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(89\).)64 +b(If)37 b(set)h(to)h(an)m(y)630 2031 y(other)32 b(v)-5 +b(alue,)32 b(the)g(supplied)e(string)i(m)m(ust)f(b)s(e)g(a)h(pre\014x)f +(of)h(a)g(stopp)s(ed)e(job's)i(name;)g(this)630 2140 +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: 93 99 +TeXDict begin 93 98 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(93)150 299 y Fo(8)80 +b(Command)54 b(Line)f(Editing)150 640 y Ft(This)28 b(c)m(hapter)i +(describ)s(es)e(the)h(basic)g(features)h(of)f(the)g Fl(gnu)f +Ft(command)h(line)g(editing)h(in)m(terface.)42 b(Com-)150 +749 y(mand)c(line)i(editing)f(is)g(pro)m(vided)g(b)m(y)g(the)g +(Readline)h(library)-8 b(,)41 b(whic)m(h)e(is)g(used)f(b)m(y)h(sev)m +(eral)h(di\013eren)m(t)150 859 y(programs,)34 b(including)e(Bash.)49 +b(Command)32 b(line)i(editing)f(is)g(enabled)g(b)m(y)g(default)g(when)f +(using)h(an)g(in-)150 969 y(teractiv)m(e)c(shell,)f(unless)e(the)h(`)p +Fs(--noediting)p Ft(')d(option)k(is)e(supplied)g(at)h(shell)g(in)m(v)m +(o)s(cation.)42 b(Line)26 b(editing)150 1078 y(is)i(also)h(used)e(when) +h(using)f(the)h(`)p Fs(-e)p Ft(')g(option)h(to)g(the)f +Fs(read)f Ft(builtin)h(command)f(\(see)i(Section)g(4.2)h([Bash)150 +1188 y(Builtins],)37 b(page)f(41\).)57 b(By)36 b(default,)h(the)e(line) +h(editing)g(commands)f(are)h(similar)f(to)i(those)e(of)h(emacs.)150 +1297 y(A)f(vi-st)m(yle)h(line)f(editing)g(in)m(terface)h(is)e(also)i(a) +m(v)-5 b(ailable.)55 b(Line)34 b(editing)h(can)g(b)s(e)f(enabled)g(at)h +(an)m(y)g(time)150 1407 y(using)28 b(the)i(`)p Fs(-o)g(emacs)p +Ft(')d(or)i(`)p Fs(-o)h(vi)p Ft(')f(options)g(to)h(the)f +Fs(set)f Ft(builtin)h(command)g(\(see)h(Section)f(4.3.1)i([The)150 +1517 y(Set)g(Builtin],)g(page)g(51\),)h(or)e(disabled)g(using)g(the)h +(`)p Fs(+o)f(emacs)p Ft(')f(or)h(`)p Fs(+o)g(vi)p Ft(')g(options)h(to)g +Fs(set)p Ft(.)150 1802 y Fr(8.1)68 b(In)l(tro)t(duction)45 +b(to)g(Line)h(Editing)150 1962 y Ft(The)30 b(follo)m(wing)i(paragraphs) +d(describ)s(e)h(the)h(notation)g(used)f(to)h(represen)m(t)f(k)m +(eystrok)m(es.)275 2132 y(The)35 b(text)i Fi(C-k)f Ft(is)g(read)g(as)h +(`Con)m(trol-K')g(and)f(describ)s(es)f(the)h(c)m(haracter)i(pro)s +(duced)d(when)g(the)h Fs(k)150 2242 y Ft(k)m(ey)31 b(is)g(pressed)e +(while)h(the)h(Con)m(trol)g(k)m(ey)g(is)g(depressed.)275 +2412 y(The)g(text)i Fi(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 2521 y(k)m(ey)i(\(if)f(y)m(ou)h(ha)m(v)m(e)g(one\))g(is)f +(depressed,)g(and)f(the)h Fs(k)g Ft(k)m(ey)h(is)f(pressed.)48 +b(The)32 b(Meta)j(k)m(ey)e(is)h(lab)s(eled)f Fs(ALT)150 +2631 y Ft(on)c(man)m(y)h(k)m(eyb)s(oards.)40 b(On)29 +b(k)m(eyb)s(oards)g(with)h(t)m(w)m(o)h(k)m(eys)f(lab)s(eled)g +Fs(ALT)e Ft(\(usually)i(to)g(either)g(side)g(of)g(the)150 +2740 y(space)h(bar\),)f(the)g Fs(ALT)f Ft(on)h(the)g(left)h(side)f(is)g +(generally)h(set)f(to)h(w)m(ork)f(as)g(a)h(Meta)g(k)m(ey)-8 +b(.)42 b(The)29 b Fs(ALT)g Ft(k)m(ey)i(on)150 2850 y(the)c(righ)m(t)h +(ma)m(y)g(also)g(b)s(e)f(con\014gured)f(to)i(w)m(ork)f(as)h(a)f(Meta)i +(k)m(ey)f(or)f(ma)m(y)h(b)s(e)e(con\014gured)h(as)g(some)h(other)150 +2960 y(mo)s(di\014er,)i(suc)m(h)g(as)g(a)h(Comp)s(ose)f(k)m(ey)h(for)f +(t)m(yping)h(accen)m(ted)h(c)m(haracters.)275 3130 y(If)23 +b(y)m(ou)i(do)f(not)h(ha)m(v)m(e)h(a)f(Meta)g(or)g Fs(ALT)e +Ft(k)m(ey)-8 b(,)27 b(or)e(another)f(k)m(ey)i(w)m(orking)e(as)h(a)g +(Meta)h(k)m(ey)-8 b(,)27 b(the)d(iden)m(tical)150 3239 +y(k)m(eystrok)m(e)30 b(can)f(b)s(e)f(generated)h(b)m(y)g(t)m(yping)g +Fs(ESC)e Fk(\014rst)p Ft(,)j(and)e(then)g(t)m(yping)h +Fs(k)p Ft(.)40 b(Either)28 b(pro)s(cess)g(is)g(kno)m(wn)150 +3349 y(as)j Fq(metafying)39 b Ft(the)30 b Fs(k)g Ft(k)m(ey)-8 +b(.)275 3519 y(The)39 b(text)j Fi(M-C-k)d 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 3629 y Fq(metafying)g Fi(C-k)p +Ft(.)275 3799 y(In)c(addition,)j(sev)m(eral)f(k)m(eys)g(ha)m(v)m(e)g +(their)f(o)m(wn)g(names.)58 b(Sp)s(eci\014cally)-8 b(,)38 +b Fs(DEL)p Ft(,)f Fs(ESC)p Ft(,)g Fs(LFD)p Ft(,)g Fs(SPC)p +Ft(,)g Fs(RET)p Ft(,)150 3908 y(and)d Fs(TAB)f Ft(all)j(stand)e(for)g +(themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init) +h(\014le)f(\(see)i(Section)f(8.3)150 4018 y([Readline)27 +b(Init)g(File],)i(page)e(96\).)41 b(If)26 b(y)m(our)h(k)m(eyb)s(oard)f +(lac)m(ks)i(a)f Fs(LFD)f Ft(k)m(ey)-8 b(,)29 b(t)m(yping)e +Fs(C-j)e Ft(will)i(pro)s(duce)f(the)150 4128 y(desired)k(c)m(haracter.) +42 b(The)30 b Fs(RET)g Ft(k)m(ey)h(ma)m(y)g(b)s(e)e(lab)s(eled)i +Fs(Return)e Ft(or)h Fs(Enter)f Ft(on)h(some)h(k)m(eyb)s(oards.)150 +4413 y Fr(8.2)68 b(Readline)47 b(In)l(teraction)150 4573 +y Ft(Often)32 b(during)g(an)g(in)m(teractiv)m(e)j(session)e(y)m(ou)g(t) +m(yp)s(e)g(in)f(a)h(long)g(line)g(of)f(text,)j(only)d(to)i(notice)g +(that)f(the)150 4682 y(\014rst)f(w)m(ord)g(on)g(the)g(line)h(is)g +(missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g +(a)g(set)g(of)f(commands)g(for)150 4792 y(manipulating)e(the)g(text)h +(as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h +(just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150 +4902 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29 +b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m +(ou)h(mo)m(v)m(e)g(the)g(cursor)150 5011 y(to)35 b(the)f(place)i(that)e +(needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g +(the)f(corrections.)54 b(Then,)150 5121 y(when)24 b(y)m(ou)h(are)g +(satis\014ed)g(with)g(the)g(line,)i(y)m(ou)e(simply)f(press)g +Fs(RET)p Ft(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e +(at)h(the)h(end)150 5230 y(of)33 b(the)h(line)g(to)g(press)e +Fs(RET)p Ft(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g +(of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 5340 +y(within)c(the)g(line.)p eop end +%%Page: 94 100 +TeXDict begin 94 99 bop 150 -116 a Ft(94)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fj(8.2.1)63 b(Readline)40 +b(Bare)h(Essen)m(tials)150 446 y Ft(In)31 b(order)h(to)h(en)m(ter)g(c)m +(haracters)g(in)m(to)g(the)g(line,)g(simply)e(t)m(yp)s(e)i(them.)46 +b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i(app)s(ears)150 +555 y(where)e(the)h(cursor)e(w)m(as,)j(and)e(then)g(the)h(cursor)e(mo)m +(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47 b(If)32 +b(y)m(ou)h(mist)m(yp)s(e)g(a)150 665 y(c)m(haracter,)f(y)m(ou)f(can)g +(use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)f +(delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)275 806 +y(Sometimes)i(y)m(ou)g(ma)m(y)h(mist)m(yp)s(e)e(a)i(c)m(haracter,)g +(and)e(not)i(notice)g(the)f(error)f(un)m(til)h(y)m(ou)g(ha)m(v)m(e)h(t) +m(yp)s(ed)150 916 y(sev)m(eral)e(other)f(c)m(haracters.)42 +b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h +Fi(C-b)d Ft(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150 +1026 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31 +b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g +(with)f Fi(C-f)p Ft(.)275 1167 y(When)i(y)m(ou)h(add)f(text)h(in)f(the) +h(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m +(haracters)h(to)g(the)e(righ)m(t)150 1277 y(of)d(the)g(cursor)f(are)h +(`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h +(that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150 +1386 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m +(haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled) +150 1496 y(bac)m(k')24 b(to)f(\014ll)g(in)f(the)h(blank)f(space)i +(created)f(b)m(y)g(the)g(remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39 +b(A)23 b(list)g(of)g(the)g(bare)f(essen)m(tials)150 1605 +y(for)30 b(editing)h(the)g(text)g(of)g(an)f(input)f(line)i(follo)m(ws.) +150 1775 y Fi(C-b)336 b Ft(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m +(haracter.)150 1941 y Fi(C-f)336 b Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(one) +h(c)m(haracter.)150 2108 y Fs(DEL)e Ft(or)i Fs(Backspace)630 +2217 y Ft(Delete)i(the)d(c)m(haracter)i(to)f(the)g(left)g(of)f(the)h +(cursor.)150 2384 y Fi(C-d)336 b Ft(Delete)33 b(the)d(c)m(haracter)i +(underneath)d(the)i(cursor.)150 2550 y(Prin)m(ting)g(c)m(haracters)630 +2660 y(Insert)f(the)g(c)m(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g +(cursor.)150 2826 y Fi(C-_)e Ft(or)i Fi(C-x)e(C-u)630 +2936 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 3045 y(line.)150 3215 y(\(Dep)s(ending)29 +b(on)h(y)m(our)f(con\014guration,)i(the)e Fs(Backspace)e +Ft(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the) +150 3324 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g +Fs(DEL)g Ft(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i +(underneath)d(the)h(cursor,)i(lik)m(e)150 3434 y Fi(C-d)p +Ft(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g +(the)f(cursor.\))150 3640 y Fj(8.2.2)63 b(Readline)40 +b(Mo)m(v)m(emen)m(t)h(Commands)150 3787 y Ft(The)27 b(ab)s(o)m(v)m(e)i +(table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f +(y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150 +3897 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m +(enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g +(in)h(addition)150 4006 y(to)j Fi(C-b)p Ft(,)f Fi(C-f)p +Ft(,)g Fi(C-d)p Ft(,)h(and)e Fs(DEL)p Ft(.)54 b(Here)35 +b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h +(the)150 4116 y(line.)150 4286 y Fi(C-a)336 b Ft(Mo)m(v)m(e)32 +b(to)g(the)e(start)h(of)g(the)f(line.)150 4452 y Fi(C-e)336 +b Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 +4618 y Fi(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)g(comp)s(osed)g(of)h(letters)h(and)d(digits.) +150 4785 y Fi(M-b)336 b Ft(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m +(ord.)150 4951 y Fi(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 Fi(C-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m +(haracter,)j(while)d Fi(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: 95 101 +TeXDict begin 95 100 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(95)150 299 y Fj(8.2.3)63 +b(Readline)40 b(Killing)i(Commands)150 446 y Fq(Killing)35 +b Ft(text)28 b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i +(but)e(to)h(sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f +(usually)150 555 y(b)m(y)g Fq(y)m(anking)35 b Ft(\(re-inserting\))28 +b(it)g(bac)m(k)f(in)m(to)h(the)f(line.)40 b(\(`Cut')27 +b(and)g(`paste')h(are)f(more)g(recen)m(t)h(jargon)f(for)150 +665 y(`kill')32 b(and)d(`y)m(ank'.\))275 801 y(If)g(the)i(description)f +(for)g(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g(text,)h(then)e(y)m +(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 911 y(can)g(get)g(the)g +(text)g(bac)m(k)g(in)f(a)h(di\013eren)m(t)g(\(or)g(the)f(same\))h +(place)h(later.)275 1047 y(When)23 b(y)m(ou)g(use)g(a)h(kill)g +(command,)g(the)g(text)g(is)f(sa)m(v)m(ed)i(in)e(a)g +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 1157 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g(killed)h(text)g +(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f(bac)m(k,)h(y)m +(ou)g(get)g(it)f(all.)43 b(The)150 1267 y(kill)33 b(ring)f(is)g(not)h +(line)g(sp)s(eci\014c;)g(the)g(text)g(that)g(y)m(ou)g(killed)f(on)h(a)f +(previously)g(t)m(yp)s(ed)h(line)f(is)h(a)m(v)-5 b(ailable)150 +1376 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac)m(k)g(later,)h(when)d(y)m(ou) +i(are)g(t)m(yping)f(another)h(line.)275 1513 y(Here)f(is)h(the)f(list)h +(of)g(commands)f(for)g(killing)h(text.)150 1675 y Fi(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 1836 +y Fi(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 1946 y(end)j(of)g(the)h(next)f(w)m(ord.)41 +b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used) +f(b)m(y)g Fi(M-f)p Ft(.)150 2107 y Fi(M-DEL)240 b Ft(Kill)31 +b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,) +h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630 +2217 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8 +b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m +(y)630 2326 y Fi(M-b)p Ft(.)150 2487 y Fi(C-w)336 b Ft(Kill)35 +b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55 +b(This)34 b(is)h(di\013eren)m(t)h(than)e Fi(M-DEL)630 +2597 y Ft(b)s(ecause)c(the)h(w)m(ord)f(b)s(oundaries)f(di\013er.)275 +2759 y(Here)42 b(is)f(ho)m(w)h(to)g 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 2869 y(recen)m(tly-killed)33 +b(text)e(from)f(the)g(kill)i(bu\013er.)150 3031 y Fi(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 +3192 y Fi(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 3302 y(command)30 b(is)h Fi(C-y)e Ft(or)h +Fi(M-y)p Ft(.)150 3503 y Fj(8.2.4)63 b(Readline)40 b(Argumen)m(ts)150 +3650 y Ft(Y)-8 b(ou)40 b(can)f(pass)g(n)m(umeric)f(argumen)m(ts)i(to)f +(Readline)h(commands.)67 b(Sometimes)39 b(the)g(argumen)m(t)h(acts)150 +3760 y(as)g(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g +Fk(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 3869 y(pass)33 b(a)h(negativ)m(e)i(argumen) +m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m +(ard)f(direction,)i(that)150 3979 y(command)g(will)h(act)g(in)f(a)h +(bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g +(text)g(bac)m(k)g(to)g(the)g(start)g(of)150 4088 y(the)31 +b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fs(M--)f(C-k)p +Ft('.)275 4225 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g +(argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i +(digits)e(b)s(efore)150 4334 y(the)j(command.)42 b(If)30 +b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h +(\(`)p Fs(-)p Ft('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150 +4444 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m +(e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h +(started,)i(y)m(ou)150 4554 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f +(of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40 +b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fi(C-d)150 +4663 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 4773 y(c)m(haracters)32 +b(on)e(the)h(input)e(line.)150 4974 y Fj(8.2.5)63 b(Searc)m(hing)40 +b(for)i(Commands)g(in)f(the)g(History)150 5121 y Ft(Readline)35 +b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)e(the)i +(command)f(history)g(\(see)h(Section)g(9.1)150 5230 y([Bash)i(History)h +(F)-8 b(acilities],)42 b(page)37 b(121\))i(for)d(lines)h(con)m(taining) +i(a)e(sp)s(eci\014ed)f(string.)60 b(There)36 b(are)i(t)m(w)m(o)150 +5340 y(searc)m(h)31 b(mo)s(des:)40 b Fq(incremen)m(tal)35 +b Ft(and)30 b Fq(non-incremen)m(tal)p Ft(.)p eop end +%%Page: 96 102 +TeXDict begin 96 101 bop 150 -116 a Ft(96)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(Incremen)m(tal)26 b(searc)m(hes)h(b)s +(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e(t)m(yping)i(the)g +(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150 408 y(c)m(haracter)37 +b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s(ed,)g(Readline)g +(displa)m(ys)g(the)f(next)h(en)m(try)g(from)e(the)i(history)150 +518 y(matc)m(hing)25 b(the)f(string)g(t)m(yp)s(ed)g(so)g(far.)39 +b(An)23 b(incremen)m(tal)j(searc)m(h)e(requires)g(only)g(as)g(man)m(y)g +(c)m(haracters)i(as)150 628 y(needed)i(to)i(\014nd)d(the)i(desired)f +(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m +(ard)f(in)f(the)h(history)g(for)f(a)i(particular)150 +737 y(string,)g(t)m(yp)s(e)f Fi(C-r)p Ft(.)40 b(T)m(yping)29 +b Fi(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 847 +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 956 y(searc)m(h.)71 b(If)40 b(that)h(v)-5 b(ariable)41 +b(has)f(not)h(b)s(een)e(assigned)i(a)f(v)-5 b(alue,)44 +b(the)c Fs(ESC)g Ft(and)f Fi(C-J)h Ft(c)m(haracters)i(will)150 +1066 y(terminate)h(an)g(incremen)m(tal)g(searc)m(h.)78 +b Fi(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 1176 y(original)30 b(line.)41 +b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f(history)g(en)m +(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 1285 +y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 1428 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 Fi(C-r)e Ft(or)h Fi(C-s)f +Ft(as)h(appropriate.)43 b(This)150 1537 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 +1647 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i +(sequence)f(b)s(ound)e(to)i(a)g(Readline)h(command)e(will)h(terminate)h +(the)150 1757 y(searc)m(h)26 b(and)f(execute)i(that)f(command.)39 +b(F)-8 b(or)26 b(instance,)h(a)f Fs(RET)f Ft(will)g(terminate)i(the)f +(searc)m(h)g(and)e(accept)150 1866 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 1976 +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 +2119 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 Fi(C-r)p +Ft(s)c(are)i(t)m(yp)s(ed)g(without)150 2228 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 +2338 y(used.)275 2480 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 2590 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 2700 y(con)m(ten)m(ts)32 +b(of)f(the)f(curren)m(t)g(line.)150 2944 y Fr(8.3)68 +b(Readline)47 b(Init)e(File)150 3104 y Ft(Although)f(the)g(Readline)g +(library)f(comes)i(with)e(a)h(set)h(of)f(Emacs-lik)m(e)h(k)m +(eybindings)f(installed)g(b)m(y)150 3213 y(default,)26 +b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren)m(t)f(set)g(of)g(k) +m(eybindings.)38 b(An)m(y)25 b(user)f(can)h(customize)h(programs)150 +3323 y(that)45 b(use)f(Readline)h(b)m(y)f(putting)g(commands)g(in)g(an) +g Fq(inputrc)49 b Ft(\014le,)g(con)m(v)m(en)m(tionally)e(in)d(his)g +(home)150 3433 y(directory)-8 b(.)59 b(The)35 b(name)i(of)f(this)g +(\014le)g(is)g(tak)m(en)h(from)f(the)g(v)-5 b(alue)37 +b(of)f(the)g(shell)h(v)-5 b(ariable)36 b Fs(INPUTRC)p +Ft(.)56 b(If)150 3542 y(that)33 b(v)-5 b(ariable)33 b(is)g(unset,)f +(the)h(default)f(is)h(`)p Fs(~/.inputrc)p Ft('.)44 b(If)32 +b(that)h(\014le)f(do)s(es)g(not)h(exist)g(or)g(cannot)g(b)s(e)150 +3652 y(read,)e(the)f(ultimate)i(default)e(is)h(`)p Fs(/etc/inputrc)p +Ft('.)275 3794 y(When)e(a)h(program)f(whic)m(h)h(uses)f(the)h(Readline) +g(library)f(starts)h(up,)f(the)h(init)g(\014le)f(is)h(read,)g(and)f +(the)150 3904 y(k)m(ey)i(bindings)e(are)i(set.)275 4047 +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 4156 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g +(it.)150 4364 y Fj(8.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 +4511 y Ft(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w) +m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41 +b(lines)h(are)150 4620 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)150 +4730 y(conditional)e(constructs)f(\(see)g(Section)h(8.3.2)g +([Conditional)g(Init)e(Constructs],)j(page)e(102\).)64 +b(Other)150 4839 y(lines)31 b(denote)g(v)-5 b(ariable)31 +b(settings)g(and)f(k)m(ey)h(bindings.)150 5011 y(V)-8 +b(ariable)32 b(Settings)630 5121 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e +(the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h +(the)g(v)-5 b(alues)41 b(of)630 5230 y(v)-5 b(ariables)34 +b(in)f(Readline)i(using)e(the)g Fs(set)g Ft(command)g(within)g(the)h +(init)g(\014le.)50 b(The)33 b(syn)m(tax)630 5340 y(is)d(simple:)p +eop end +%%Page: 97 103 +TeXDict begin 97 102 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(97)870 299 y Fs(set)47 +b Fi(variable)56 b(value)630 445 y Ft(Here,)29 b(for)e(example,)h(is)g +(ho)m(w)f(to)h(c)m(hange)g(from)f(the)g(default)h(Emacs-lik)m(e)h(k)m +(ey)f(binding)e(to)630 555 y(use)k Fs(vi)g Ft(line)h(editing)g +(commands:)870 701 y Fs(set)47 b(editing-mode)d(vi)630 +847 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 +956 y(to)c(case.)42 b(Unrecognized)31 b(v)-5 b(ariable)31 +b(names)g(are)f(ignored.)630 1103 y(Bo)s(olean)c(v)-5 +b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f(set)i(to)g(on)f(or)g +(o\013)7 b(\))25 b(are)h(set)f(to)h(on)f(if)g(the)g(v)-5 +b(alue)26 b(is)630 1212 y(n)m(ull)e(or)g(empt)m(y)-8 +b(,)27 b Fq(on)d Ft(\(case-insensitiv)m(e\),)29 b(or)24 +b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v) +-5 b(ariable)630 1322 y(b)s(eing)30 b(set)h(to)g(o\013.)630 +1468 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 1577 y(See)31 b(Section)g(4.2)g([Bash)g(Builtins],)g(page) +g(41.)630 1724 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 1906 y Fs(bell-style)1110 2016 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 2125 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 2235 y(`)p Fs(visible)p Ft(',)32 +b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g(one)g(is)g(a)m(v)-5 +b(ailable.)51 b(If)33 b(set)g(to)1110 2345 y(`)p Fs(audible)p +Ft(')j(\(the)i(default\),)i(Readline)e(attempts)g(to)h(ring)e(the)g +(terminal's)1110 2454 y(b)s(ell.)630 2637 y Fs(bind-tty-special-chars) +1110 2746 y Ft(If)45 b(set)h(to)f(`)p Fs(on)p Ft(',)50 +b(Readline)45 b(attempts)i(to)f(bind)d(the)j(con)m(trol)g(c)m +(haracters)1110 2856 y(treated)36 b(sp)s(ecially)h(b)m(y)e(the)h(k)m +(ernel's)g(terminal)g(driv)m(er)f(to)h(their)f(Readline)1110 +2966 y(equiv)-5 b(alen)m(ts.)630 3148 y Fs(comment-begin)1110 +3258 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 3367 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 3550 y Fs(completion-ignore-case) +1110 3660 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 +3769 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 +3952 y Fs(completion-prefix-displa)o(y-le)o(ngth)1110 +4061 y Ft(The)g(length)g(in)g(c)m(haracters)i(of)f(the)f(common)h +(pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110 4171 +y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s +(di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 4281 +y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e +(longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 4390 +y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible) +f(completions.)630 4573 y Fs(completion-query-items)1110 +4682 y Ft(The)c(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h +(that)g(determines)f(when)f(the)i(user)1110 4792 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 4902 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 5011 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 +5121 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 5230 y(greater)26 b(than)f(or)f(equal)i(to)f(0.)40 +b(A)24 b(negativ)m(e)j(v)-5 b(alue)26 b(means)e(Readline)i(should)1110 +5340 y(nev)m(er)31 b(ask.)41 b(The)29 b(default)i(limit)g(is)g +Fs(100)p Ft(.)p eop end +%%Page: 98 104 +TeXDict begin 98 103 bop 150 -116 a Ft(98)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(convert-meta)1110 +408 y Ft(If)22 b(set)g(to)h(`)p 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 +518 y(to)33 b(an)e Fl(asci)r(i)h Ft(k)m(ey)h(sequence)f(b)m(y)g +(stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)1110 +628 y(an)24 b Fs(ESC)g Ft(c)m(haracter,)j(con)m(v)m(erting)f(them)f(to) +g(a)g(meta-pre\014xed)f(k)m(ey)h(sequence.)1110 737 y(The)30 +b(default)g(v)-5 b(alue)31 b(is)g(`)p Fs(on)p Ft('.)630 +896 y Fs(disable-completion)1110 1005 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 1115 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 +1224 y(to)31 b Fs(self-insert)p Ft(.)38 b(The)30 b(default)g(is)h(`)p +Fs(off)p Ft('.)630 1383 y Fs(editing-mode)1110 1492 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 1602 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 1711 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 1821 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 1979 y Fs +(echo-control-characters)1110 2089 y Ft(When)g(set)h(to)g(`)p +Fs(on)p Ft(',)f(on)g(op)s(erating)h(systems)f(that)h(indicate)g(they)g +(supp)s(ort)1110 2198 y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m +(haracter)h(corresp)s(onding)d(to)j(a)f(signal)g(generated)1110 +2308 y(from)e(the)g(k)m(eyb)s(oard.)41 b(The)30 b(default)g(is)h(`)p +Fs(on)p Ft('.)630 2466 y Fs(enable-keypad)1110 2576 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 2685 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 2795 y(The)j(default)g(is)h(`)p +Fs(off)p Ft('.)630 2953 y Fs(enable-meta-key)1110 3063 +y Ft(When)40 b(set)g(to)g(`)p Fs(on)p Ft(',)j(Readline)d(will)g(try)g +(to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 3173 +y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h(is)g +(called.)76 b(On)41 b(man)m(y)1110 3282 y(terminals,)c(the)e(meta)h(k)m +(ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56 +b(The)1110 3392 y(default)31 b(is)f(`)p Fs(on)p Ft('.)630 +3550 y Fs(expand-tilde)1110 3660 y Ft(If)d(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 3769 y(w)m(ord)i(completion.)42 +b(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)630 3927 +y Fs(history-preserve-point)1110 4037 y Ft(If)41 b(set)h(to)h(`)p +Fs(on)p Ft(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f +(p)s(oin)m(t)f(\(the)1110 4147 y(curren)m(t)35 b(cursor)g(p)s +(osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g +(line)1110 4256 y(retriev)m(ed)h(with)f Fs(previous-history)c +Ft(or)37 b Fs(next-history)p Ft(.)55 b(The)36 b(default)1110 +4366 y(is)30 b(`)p Fs(off)p Ft('.)630 4524 y Fs(history-size)1110 +4634 y Ft(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g +(en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 4743 +y(list.)53 b(If)34 b(set)h(to)g(zero,)i(the)d(n)m(um)m(b)s(er)g(of)g +(en)m(tries)h(in)f(the)h(history)f(list)h(is)g(not)1110 +4853 y(limited.)630 5011 y Fs(horizontal-scroll-mode)1110 +5121 y Ft(This)g(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 5230 y(means)26 b(that)h(the)f(text)h +(of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m +(tally)1110 5340 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i +(are)g(longer)h(than)e(the)h(width)f(of)h(the)p eop end +%%Page: 99 105 +TeXDict begin 99 104 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(99)1110 299 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 408 y(v)-5 b(ariable)31 +b(is)g(set)f(to)i(`)p Fs(off)p Ft('.)630 567 y Fs(input-meta)1110 +676 y Ft(If)f(set)g(to)h(`)p 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 +786 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 896 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 1005 +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 1163 y Fs(isearch-terminators)1110 1273 +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 1383 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 +1492 y(\(see)42 b(Section)f(8.2.5)i([Searc)m(hing],)i(page)c(95\).)73 +b(If)41 b(this)g(v)-5 b(ariable)41 b(has)g(not)1110 1602 +y(b)s(een)35 b(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h +Fs(ESC)d Ft(and)h Fi(C-J)g Ft(will)h(terminate)g(an)1110 +1711 y(incremen)m(tal)c(searc)m(h.)630 1870 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 1979 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 2089 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 2198 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 +2308 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 2418 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 2576 +y Fs(mark-directories)1110 2685 y Ft(If)38 b(set)g(to)h(`)p +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 2795 y(The)30 b(default)g(is)h(`)p +Fs(on)p Ft('.)630 2953 y Fs(mark-modified-lines)1110 +3063 y Ft(This)k(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 +3173 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 +3282 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Fs(off)p Ft(')g(b)m(y)g +(default.)630 3440 y Fs(mark-symlinked-directori)o(es)1110 +3550 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 +3660 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 +3769 y(directories)p Ft(\).)38 b(The)30 b(default)g(is)h(`)p +Fs(off)p Ft('.)630 3927 y Fs(match-hidden-files)1110 +4037 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 4147 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 +4256 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 +4366 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 +4524 y Fs(output-meta)1110 4634 y Ft(If)35 b(set)h(to)g(`)p +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 4743 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 +4853 y(default)31 b(is)f(`)p Fs(off)p Ft('.)630 5011 +y Fs(page-completions)1110 5121 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 +5230 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 +5340 y(b)m(y)e(default.)p eop end +%%Page: 100 106 +TeXDict begin 100 105 bop 150 -116 a Ft(100)2527 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(print-completions-horizo)o(ntal)o +(ly)1110 408 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 +518 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 628 y(The)30 b(default)g(is)h(`)p +Fs(off)p Ft('.)630 788 y Fs(revert-all-at-newline)1110 +897 y Ft(If)e(set)h(to)g(`)p Fs(on)p Ft(',)g(Readline)g(will)g(undo)f +(all)h(c)m(hanges)h(to)f(history)g(lines)f(b)s(efore)1110 +1007 y(returning)f(when)f Fs(accept-line)f Ft(is)j(executed.)41 +b(By)29 b(default,)g(history)g(lines)1110 1117 y(ma)m(y)42 +b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i(individual)e(undo)g(lists)h +(across)g(calls)h(to)1110 1226 y Fs(readline)p Ft(.)38 +b(The)30 b(default)h(is)f(`)p Fs(off)p Ft('.)630 1386 +y Fs(show-all-if-ambiguous)1110 1496 y Ft(This)f(alters)i(the)f +(default)g(b)s(eha)m(vior)g(of)g(the)h(completion)g(functions.)40 +b(If)29 b(set)1110 1606 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 1715 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 1825 y(The)30 +b(default)g(v)-5 b(alue)31 b(is)g(`)p Fs(off)p Ft('.)630 +1985 y Fs(show-all-if-unmodified)1110 2094 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 2204 y(fashion)25 b(similar)g(to)h +Fq(sho)m(w-all-if-am)m(biguous)t Ft(.)41 b(If)24 b(set)i(to)f(`)p +Fs(on)p Ft(',)i(w)m(ords)d(whic)m(h)1110 2314 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 2423 y(tial)43 b(completion)h(\(the)f(p)s(ossible) +f(completions)h(don't)f(share)g(a)h(common)1110 2533 +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 2642 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 2803 y Fs(skip-completed-text)1110 2912 y Ft(If)i(set)i(to)f +(`)p Fs(on)p Ft(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s +(eha)m(vior)f(when)f(in-)1110 3022 y(serting)d(a)h(single)g(matc)m(h)f +(in)m(to)h(the)g(line.)40 b(It's)30 b(only)f(activ)m(e)i(when)d(p)s +(erform-)1110 3131 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f +(w)m(ord.)53 b(If)35 b(enabled,)g(readline)g(do)s(es)1110 +3241 y(not)41 b(insert)f(c)m(haracters)i(from)e(the)h(completion)h +(that)f(matc)m(h)g(c)m(haracters)1110 3351 y(after)c(p)s(oin)m(t)g(in)g +(the)g(w)m(ord)f(b)s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g +(w)m(ord)1110 3460 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g +(duplicated.)45 b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110 +3570 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g +(after)h(the)g(`)p Fs(e)p Ft(')f(in)1110 3679 y(`)p Fs(Makefile)p +Ft(')c(will)i(result)f(in)g(`)p Fs(Makefile)p Ft(')f(rather)h(than)h(`) +p Fs(Makefilefile)p Ft(',)1110 3789 y(assuming)d(there)g(is)h(a)f +(single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5 +b(alue)1110 3898 y(is)30 b(`)p Fs(off)p Ft('.)630 4059 +y Fs(visible-stats)1110 4168 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 4278 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 4438 y(Key)f(Bindings)630 4548 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 +4657 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)h(the)g(command)f(that)i +(y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 b(The)27 b(follo)m(wing)630 +4767 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 +4876 y(and)30 b(a)h(short)f(description)g(of)h(what)f(the)g(command)h +(do)s(es.)630 5011 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 +5121 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 +5230 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 +b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g +(and)630 5340 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m +(terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72 +b(The)40 b(name)h(of)p eop end +%%Page: 101 107 +TeXDict begin 101 106 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(101)630 299 y(the)35 +b(k)m(ey)g(can)g(b)s(e)f(expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,) +h(dep)s(ending)d(on)h(what)h(y)m(ou)g(\014nd)e(most)630 +408 y(comfortable.)630 538 y(In)i(addition)h(to)h(command)f(names,)i +(readline)e(allo)m(ws)h(k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f +(string)630 648 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 778 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 887 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 997 +y(Builtins],)31 b(page)g(41.)630 1147 y Fq(k)m(eyname)5 +b Ft(:)42 b Fq(function-name)35 b Ft(or)c Fq(macro)1110 +1257 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 +1387 y Fs(Control-u:)45 b(universal-argument)1350 1496 +y(Meta-Rubout:)f(backward-kill-word)1350 1606 y(Control-o:)h(">)i +(output")1110 1736 y Ft(In)38 b(the)h(ab)s(o)m(v)m(e)h(example,)h +Fi(C-u)d Ft(is)h(b)s(ound)d(to)k(the)e(function)h Fs(universal-)1110 +1845 y(argument)p Ft(,)f Fi(M-DEL)e Ft(is)i(b)s(ound)e(to)i(the)g +(function)g Fs(backward-kill-word)p Ft(,)1110 1955 y(and)g +Fi(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 2064 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 2194 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 +2304 y(cessing)22 b(this)g(k)m(ey)g(binding)e(syn)m(tax:)37 +b Fq(DEL)p Ft(,)22 b Fq(ESC)8 b Ft(,)20 b Fq(ESCAPE)5 +b Ft(,)21 b Fq(LFD)5 b Ft(,)22 b Fq(NEW-)1110 2414 y(LINE)5 +b Ft(,)31 b Fq(RET)7 b Ft(,)29 b Fq(RETURN)10 b Ft(,)30 +b Fq(R)m(UBOUT)7 b Ft(,)31 b Fq(SP)-8 b(A)m(CE)5 b Ft(,)31 +b Fq(SPC)8 b Ft(,)29 b(and)h Fq(T)-8 b(AB)5 b Ft(.)630 +2564 y Fs(")p Fq(k)m(eyseq)r Fs(")p Ft(:)41 b Fq(function-name)36 +b Ft(or)30 b Fq(macro)1110 2673 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 2783 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 2892 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 3002 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 3112 y(recognized.)1350 +3242 y Fs("\\C-u":)46 b(universal-argument)1350 3351 +y("\\C-x\\C-r":)f(re-read-init-file)1350 3461 y("\\e[11~":)g("Function) +h(Key)g(1")1110 3591 y Ft(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74 +b Fi(C-u)64 b Ft(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110 +3700 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 Fi(C-x)1110 3810 +y(C-r)p Ft(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f +Fs(re-read-init-file)p Ft(,)c(and)j(`)p Fs(ESC)h([)g(1)g(1)1110 +3919 y(~)p Ft(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p +Fs(Function)e(Key)g(1)p Ft('.)630 4070 y(The)g(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 4179 y(k)m(ey)i(sequences:)630 +4329 y Fi(\\C-)336 b Ft(con)m(trol)32 b(pre\014x)630 +4479 y Fi(\\M-)336 b Ft(meta)31 b(pre\014x)630 4630 y +Fi(\\e)384 b Ft(an)30 b(escap)s(e)h(c)m(haracter)630 +4780 y Fi(\\\\)384 b Ft(bac)m(kslash)630 4930 y Fi(\\)p +Fs(")g(")p Ft(,)30 b(a)h(double)f(quotation)i(mark)630 +5080 y Fi(\\')384 b Fs(')p Ft(,)30 b(a)h(single)g(quote)g(or)f(ap)s +(ostrophe)630 5230 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 5340 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)p +eop end +%%Page: 102 108 +TeXDict begin 102 107 bop 150 -116 a Ft(102)2527 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(\\a)384 b Ft(alert)31 +b(\(b)s(ell\))630 460 y Fs(\\b)384 b Ft(bac)m(kspace)630 +621 y Fs(\\d)g Ft(delete)630 782 y Fs(\\f)g Ft(form)30 +b(feed)630 943 y Fs(\\n)384 b Ft(newline)630 1104 y Fs(\\r)g +Ft(carriage)32 b(return)630 1266 y Fs(\\t)384 b Ft(horizon)m(tal)32 +b(tab)630 1427 y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)630 +1588 y Fs(\\)p Fi(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 1697 y(three)c(digits\))630 +1858 y Fs(\\x)p Fi(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 1968 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e +(digits\))630 2129 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 2239 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 2348 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 2458 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 2568 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i +(mak)m(e)h(`)p Fi(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 2703 y Fs("\\C-x\\\\":)45 +b("\\\\")150 2904 y Fj(8.3.2)63 b(Conditional)41 b(Init)g(Constructs) +150 3051 y Ft(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f +(in)g(spirit)f(to)i(the)f(conditional)h(compilation)g(features)f(of)150 +3160 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g +(bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s +(erformed)f(as)i(the)150 3270 y(result)f(of)h(tests.)41 +b(There)30 b(are)h(four)f(parser)f(directiv)m(es)j(used.)150 +3432 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 3542 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 3651 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 +3812 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)j(is)e(used)f(to)h(test)h(whether)e(Readline) +1110 3922 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 +4031 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 4141 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 4251 y(in)k Fs(emacs)f Ft(mo)s(de.)630 +4412 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)f(terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 +4521 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 4631 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)1110 4741 +y(b)s(oth)k(the)h(full)g(name)g(of)g(the)g(terminal)h(and)e(the)i(p)s +(ortion)e(of)h(the)g(terminal)1110 4850 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 +4960 y Fs(sun-cmd)p Ft(,)c(for)h(instance.)630 5121 y +Fs(application)1110 5230 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 5340 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)p eop +end +%%Page: 103 109 +TeXDict begin 103 108 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(103)1110 299 y Fq(name)5 +b Ft(,)25 b(and)d(y)m(ou)h(can)g(test)h(for)e(a)h(particular)h(v)-5 +b(alue.)38 b(This)22 b(could)h(b)s(e)f(used)g(to)1110 +408 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 518 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 628 y(the)e(curren)m(t)f(or)g(previous)g(w)m(ord)g(in)g +(Bash:)1350 762 y Fs($if)47 b(Bash)1350 872 y(#)g(Quote)g(the)g +(current)f(or)h(previous)e(word)1350 981 y("\\C-xq":)h +("\\eb\\"\\ef\\"")1350 1091 y($endif)150 1250 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 1410 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 1569 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 1679 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 1788 y(`)p Fs(/etc/inputrc)p Ft(':)870 1923 +y Fs($include)46 b(/etc/inputrc)150 2122 y Fj(8.3.3)63 +b(Sample)41 b(Init)g(File)150 2269 y Ft(Here)27 b(is)f(an)h(example)g +(of)f(an)h Fq(inputrc)k Ft(\014le.)39 b(This)26 b(illustrates)h(k)m(ey) +h(binding,)e(v)-5 b(ariable)27 b(assignmen)m(t,)i(and)150 +2379 y(conditional)j(syn)m(tax.)p eop end +%%Page: 104 110 +TeXDict begin 104 109 bop 150 -116 a Ft(104)2527 b(Bash)31 +b(Reference)g(Man)m(ual)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 +2929 y(#"\\M-OD":)379 b(backward-char)390 3039 y(#"\\M-OC":)g +(forward-char)390 3148 y(#"\\M-OA":)g(previous-history)390 +3258 y(#"\\M-OB":)g(next-history)390 3367 y(#)390 3477 +y(#)47 b(Arrow)g(keys)f(in)i(ANSI)e(mode)390 3587 y(#)390 +3696 y("\\M-[D":)380 b(backward-char)390 3806 y("\\M-[C":)g +(forward-char)390 3915 y("\\M-[A":)g(previous-history)390 +4025 y("\\M-[B":)g(next-history)390 4134 y(#)390 4244 +y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode)390 +4354 y(#)390 4463 y(#"\\M-\\C-OD":)331 b(backward-char)390 +4573 y(#"\\M-\\C-OC":)g(forward-char)390 4682 y(#"\\M-\\C-OA":)g +(previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390 +4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) +390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 +5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end +%%Page: 105 111 +TeXDict begin 105 110 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(105)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 +(backslash)e(\(testing)h(backslash)f(escapes)390 2381 +y(#)i(in)h(sequences)d(and)i(macros\))390 2491 y("\\C-x\\\\":)e("\\\\") +390 2600 y(#)i(Quote)g(the)g(current)f(or)h(previous)e(word)390 +2710 y("\\C-xq":)h("\\eb\\"\\ef\\"")390 2819 y(#)h(Add)g(a)h(binding)e +(to)h(refresh)f(the)h(line,)f(which)g(is)h(unbound)390 +2929 y("\\C-xr":)f(redraw-current-line)390 3039 y(#)h(Edit)g(variable)f +(on)h(current)f(line.)390 3148 y("\\M-\\C-v":)f +("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-)o(a\\C-)o(y=")390 3258 +y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h +(available)390 3587 y(set)f(bell-style)e(visible)390 +3806 y(#)i(don't)g(strip)f(characters)f(to)i(7)h(bits)e(when)h(reading) +390 3915 y(set)g(input-meta)e(on)390 4134 y(#)i(allow)g(iso-latin1)e +(characters)g(to)i(be)g(inserted)f(rather)390 4244 y(#)h(than)g +(converted)e(to)j(prefix-meta)c(sequences)390 4354 y(set)j +(convert-meta)d(off)390 4573 y(#)j(display)f(characters)f(with)i(the)g +(eighth)f(bit)h(set)g(directly)390 4682 y(#)g(rather)g(than)f(as)h +(meta-prefixed)e(characters)390 4792 y(set)i(output-meta)e(on)390 +5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f +(completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g +(he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f +(completion-query-items)42 b(150)p eop end +%%Page: 106 112 +TeXDict begin 106 111 bop 150 -116 a Ft(106)2527 b(Bash)31 +b(Reference)g(Man)m(ual)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 1075 y Fr(8.4)68 b(Bindable)45 b(Readline)i(Commands) +150 1235 y Ft(This)32 b(section)h(describ)s(es)f(Readline)h(commands)f +(that)h(ma)m(y)h(b)s(e)d(b)s(ound)g(to)i(k)m(ey)g(sequences.)48 +b(Y)-8 b(ou)33 b(can)150 1344 y(list)40 b(y)m(our)f(k)m(ey)i(bindings)d +(b)m(y)h(executing)i Fs(bind)29 b(-P)39 b Ft(or,)j(for)d(a)h(more)g +(terse)g(format,)i(suitable)e(for)f(an)150 1454 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(41.\))41 b(Command)28 b(names)h(without) +150 1563 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 1696 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 +1805 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)g(and)150 1915 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f +Fq(region)p Ft(.)150 2110 y Fj(8.4.1)63 b(Commands)42 +b(F)-10 b(or)41 b(Mo)m(ving)150 2280 y Fs(beginning-of-line)26 +b(\(C-a\))630 2390 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 2545 y Fs(end-of-line)d(\(C-e\))630 +2655 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 +2810 y Fs(forward-char)c(\(C-f\))630 2920 y Ft(Mo)m(v)m(e)32 +b(forw)m(ard)e(a)h(c)m(haracter.)150 3075 y Fs(backward-char)c(\(C-b\)) +630 3185 y Ft(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150 +3340 y Fs(forward-word)d(\(M-f\))630 3450 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)i(and)630 +3559 y(digits.)150 3715 y Fs(backward-word)27 b(\(M-b\))630 +3824 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)g(w)m(ord.)50 b(W)-8 b(ords)34 +b(are)g(comp)s(osed)630 3934 y(of)d(letters)g(and)f(digits.)150 +4089 y Fs(shell-forward-word)25 b(\(\))630 4199 y Ft(Mo)m(v)m(e)30 +b(forw)m(ard)e(to)h(the)f(end)f(of)h(the)h(next)f(w)m(ord.)40 +b(W)-8 b(ords)28 b(are)g(delimited)h(b)m(y)f(non-quoted)630 +4308 y(shell)j(metac)m(haracters.)150 4464 y Fs(shell-backward-word)25 +b(\(\))630 4573 y Ft(Mo)m(v)m(e)37 b(bac)m(k)e(to)h(the)f(start)g(of)g +(the)g(curren)m(t)g(or)f(previous)h(w)m(ord.)53 b(W)-8 +b(ords)35 b(are)g(delimited)630 4683 y(b)m(y)30 b(non-quoted)h(shell)f +(metac)m(haracters.)150 4838 y Fs(clear-screen)d(\(C-l\))630 +4948 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 +5057 y(of)k(the)f(screen.)150 5213 y Fs(redraw-current-line)25 +b(\(\))630 5322 y Ft(Refresh)30 b(the)g(curren)m(t)h(line.)41 +b(By)30 b(default,)h(this)f(is)h(un)m(b)s(ound.)p eop +end +%%Page: 107 113 +TeXDict begin 107 112 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(107)150 299 y Fj(8.4.2)63 +b(Commands)42 b(F)-10 b(or)41 b(Manipulating)h(The)f(History)150 +473 y Fs(accept-line)27 b(\(Newline)h(or)i(Return\))630 +582 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 692 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)630 802 y Ft(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 911 y(its)g(original)g(state.) +150 1075 y Fs(previous-history)26 b(\(C-p\))630 1184 +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 1348 y Fs(next-history)d +(\(C-n\))630 1457 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 +1621 y Fs(beginning-of-history)25 b(\(M-<\))630 1730 +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 1894 y Fs(end-of-history)26 b(\(M->\))630 2004 +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 +2167 y Fs(reverse-search-history)24 b(\(C-r\))630 2277 +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 +2386 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 2550 y Fs(forward-search-history)24 +b(\(C-s\))630 2659 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 2769 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 2932 y Fs +(non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 +b(\(M-p\))630 3042 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 3152 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 +3261 y(user.)150 3425 y Fs(non-incremental-forward-)o(sear)o(ch-h)o +(ist)o(ory)24 b(\(M-n\))630 3534 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 3644 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 3754 y(user.)150 3917 y Fs(history-search-forward)d(\(\))630 +4027 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 +4136 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 4246 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150 +4409 y Fs(history-search-backward)24 b(\(\))630 4519 +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 +4629 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 4738 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150 +4902 y Fs(yank-nth-arg)c(\(M-C-y\))630 5011 y Ft(Insert)37 +b(the)g(\014rst)f(argumen)m(t)i(to)f(the)h(previous)e(command)h +(\(usually)g(the)g(second)g(w)m(ord)630 5121 y(on)32 +b(the)g(previous)f(line\))i(at)f(p)s(oin)m(t.)46 b(With)32 +b(an)g(argumen)m(t)g Fq(n)p Ft(,)g(insert)g(the)g Fq(n)p +Ft(th)f(w)m(ord)g(from)630 5230 y(the)k(previous)f(command)h(\(the)g(w) +m(ords)g(in)f(the)h(previous)g(command)f(b)s(egin)h(with)f(w)m(ord)630 +5340 y(0\).)69 b(A)40 b(negativ)m(e)h(argumen)m(t)f(inserts)g(the)f +Fq(n)p Ft(th)g(w)m(ord)g(from)g(the)h(end)f(of)h(the)f(previous)p +eop end +%%Page: 108 114 +TeXDict begin 108 113 bop 150 -116 a Ft(108)2527 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(command.)48 b(Once)33 +b(the)g(argumen)m(t)h Fq(n)e Ft(is)h(computed,)h(the)f(argumen)m(t)g +(is)g(extracted)i(as)e(if)630 408 y(the)e(`)p Fs(!)p +Fi(n)11 b Ft(')29 b(history)i(expansion)f(had)g(b)s(een)f(sp)s +(eci\014ed.)150 584 y Fs(yank-last-arg)e(\(M-.)i(or)h(M-_\))630 +693 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 803 +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 +913 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 +1022 y(last)d(argumen)m(t)f(of)g(eac)m(h)h(line)f(in)f(turn.)41 +b(The)30 b(history)h(expansion)f(facilities)j(are)e(used)f(to)630 +1132 y(extract)i(the)e(last)i(argumen)m(t,)f(as)f(if)h(the)f(`)p +Fs(!$)p Ft(')g(history)h(expansion)f(had)g(b)s(een)f(sp)s(eci\014ed.) +150 1347 y Fj(8.4.3)63 b(Commands)42 b(F)-10 b(or)41 +b(Changing)g(T)-10 b(ext)150 1527 y Fs(delete-char)27 +b(\(C-d\))630 1636 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 1746 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 1855 y Fs(delete-char)p Ft(,)28 b(then)i(return)f +Fl(eof)p Ft(.)150 2031 y Fs(backward-delete-char)c(\(Rubout\))630 +2140 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 +2250 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150 +2425 y Fs(forward-backward-delete-)o(char)24 b(\(\))630 +2535 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 +2644 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 +2754 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 +2929 y Fs(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 3039 +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 +3148 y(sequences)d(lik)m(e)g Fi(C-q)p Ft(,)f(for)g(example.)150 +3324 y Fs(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o(\))630 +3433 y Ft(Insert)g(y)m(ourself.)150 3609 y Fs(transpose-chars)c +(\(C-t\))630 3718 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 3828 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 3937 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 4047 y(ha)m(v)m(e)32 +b(no)e(e\013ect.)150 4222 y Fs(transpose-words)c(\(M-t\))630 +4332 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 4441 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 4551 y(last)j(t)m(w)m(o)h(w)m +(ords)e(on)g(the)h(line.)150 4726 y Fs(upcase-word)c(\(M-u\))630 +4836 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 +4946 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 5121 y Fs(downcase-word)d(\(M-l\))630 +5230 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 5340 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.)p eop end +%%Page: 109 115 +TeXDict begin 109 114 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(109)150 299 y Fs(capitalize-word) +26 b(\(M-c\))630 408 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 518 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 671 y Fs(overwrite-mode)26 +b(\(\))630 780 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 890 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 999 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 1109 +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.)630 +1240 y(In)e(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 +1350 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 +1459 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 1590 y(By)h(default,)f(this)h +(command)f(is)g(un)m(b)s(ound.)150 1783 y Fj(8.4.4)63 +b(Killing)42 b(And)e(Y)-10 b(anking)150 1951 y Fs(kill-line)28 +b(\(C-k\))630 2061 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 2213 y Fs(backward-kill-line)25 +b(\(C-x)30 b(Rubout\))630 2323 y Ft(Kill)h(bac)m(kw)m(ard)g(to)g(the)f +(b)s(eginning)g(of)g(the)h(line.)150 2476 y Fs(unix-line-discard)26 +b(\(C-u\))630 2585 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 +2738 y Fs(kill-whole-line)c(\(\))630 2847 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 +2957 y(this)30 b(is)h(un)m(b)s(ound.)150 3109 y Fs(kill-word)d(\(M-d\)) +630 3219 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 3329 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 +b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fs(forward-word)p +Ft(.)150 3481 y Fs(backward-kill-word)25 b(\(M-DEL\))630 +3591 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 3743 y Fs(shell-kill-word)d(\(\))630 +3853 y Ft(Kill)k(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f +(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h +(the)g(end)630 3963 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 +b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fs +(shell-forward-word)p Ft(.)150 4115 y Fs(backward-kill-word)25 +b(\(\))630 4225 y Ft(Kill)d(the)h(w)m(ord)e(b)s(ehind)g(p)s(oin)m(t.)38 +b(W)-8 b(ord)22 b(b)s(oundaries)f(are)h(the)g(same)h(as)f +Fs(shell-backward-)630 4334 y(word)p Ft(.)150 4487 y +Fs(unix-word-rubout)k(\(C-w\))630 4596 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 4706 y(text)g(is)g(sa)m(v) +m(ed)g(on)g(the)f(kill-ring.)150 4859 y Fs(unix-filename-rubout)25 +b(\(\))630 4968 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 5078 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 +5230 y Fs(delete-horizontal-space)24 b(\(\))630 5340 +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.)p eop +end +%%Page: 110 116 +TeXDict begin 110 115 bop 150 -116 a Ft(110)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(kill-region)c(\(\))630 +408 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 +579 y Fs(copy-region-as-kill)25 b(\(\))630 689 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 799 y(By)31 b(default,)f(this)h(command)f(is)g(un)m(b)s(ound.) +150 969 y Fs(copy-backward-word)25 b(\(\))630 1079 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 +1189 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 +1359 y Fs(copy-forward-word)26 b(\(\))630 1469 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 +1579 y(same)f(as)f Fs(forward-word)p Ft(.)38 b(By)30 +b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)150 +1749 y Fs(yank)f(\(C-y\))630 1859 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 2030 y Fs(yank-pop)d(\(M-y\))630 2139 +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 +2249 y(command)30 b(is)h Fs(yank)e Ft(or)h Fs(yank-pop)p +Ft(.)150 2460 y Fj(8.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m +(ts)150 2637 y Fs(digit-argument)26 b(\()p Fi(M-0)p Fs(,)j +Fi(M-1)p Fs(,)h(...)f Fi(M--)p Fs(\))630 2747 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 2857 y Fi(M--)j Ft(starts)i(a)g(negativ)m(e)i +(argumen)m(t.)150 3027 y Fs(universal-argument)25 b(\(\))630 +3137 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 3247 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 +3356 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 +3466 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 +3575 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 +3685 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 +3795 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 +3904 y(mak)m(es)d(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)i(second)e +(time)i(mak)m(es)f(the)g(argumen)m(t)g(coun)m(t)h(six-)630 +4014 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 4224 y Fj(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 4402 y Fs(complete)28 b(\(TAB\))630 +4512 y Ft(A)m(ttempt)c(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g +(b)s(efore)f(p)s(oin)m(t.)39 b(The)22 b(actual)i(completion)630 +4621 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 +4731 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 4840 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 4950 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 5060 y(attempted.)150 5230 y Fs +(possible-completions)25 b(\(M-?\))630 5340 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.)p eop end +%%Page: 111 117 +TeXDict begin 111 116 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(111)150 299 y Fs +(insert-completions)25 b(\(M-*\))630 408 y Ft(Insert)30 +b(all)h(completions)h(of)f(the)g(text)g(b)s(efore)f(p)s(oin)m(t)h(that) +g(w)m(ould)f(ha)m(v)m(e)i(b)s(een)e(generated)630 518 +y(b)m(y)g Fs(possible-completions)p Ft(.)150 682 y Fs(menu-complete)d +(\(\))630 792 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 902 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 +1011 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 +1121 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 +1230 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 1340 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 1450 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g +(list.)65 b(This)38 b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s +(ound)e(to)630 1559 y Fs(TAB)p Ft(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m +(y)i(default.)150 1724 y Fs(menu-complete-backward)24 +b(\(\))630 1833 y Ft(Iden)m(tical)36 b(to)g Fs(menu-complete)p +Ft(,)d(but)h(mo)m(v)m(es)j(bac)m(kw)m(ard)e(through)f(the)i(list)f(of)g +(p)s(ossible)630 1943 y(completions,)d(as)e(if)h Fs(menu-complete)26 +b Ft(had)k(b)s(een)g(giv)m(en)h(a)g(negativ)m(e)i(argumen)m(t.)150 +2107 y Fs(delete-char-or-list)25 b(\(\))630 2217 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 2326 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 +2436 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 2600 y Fs(complete-filename)c(\(M-/\))630 +2710 y Ft(A)m(ttempt)32 b(\014lename)e(completion)i(on)e(the)h(text)g +(b)s(efore)f(p)s(oin)m(t.)150 2874 y Fs(possible-filename-comple)o +(tion)o(s)24 b(\(C-x)30 b(/\))630 2984 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 3148 y Fs(complete-username)e(\(M-~\)) +630 3258 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 +3422 y Fs(possible-username-comple)o(tion)o(s)24 b(\(C-x)30 +b(~\))630 3532 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 3696 y Fs(complete-variable)h(\(M-$\))630 +3806 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 +3970 y Fs(possible-variable-comple)o(tion)o(s)24 b(\(C-x)30 +b($\))630 4080 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 4189 y(v)-5 b(ariable.)150 4354 y Fs(complete-hostname)26 +b(\(M-@\))630 4463 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 +4628 y Fs(possible-hostname-comple)o(tion)o(s)24 b(\(C-x)30 +b(@\))630 4737 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 4902 y Fs(complete-command)h(\(M-!\))630 +5011 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 +5121 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 5230 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 5340 y(order.)p +eop end +%%Page: 112 118 +TeXDict begin 112 117 bop 150 -116 a Ft(112)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(possible-command-complet)o(ions)24 +b(\(C-x)29 b(!\))630 408 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 518 y(name.)150 675 y Fs(dynamic-complete-history)e +(\(M-TAB\))630 784 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 894 y(from)e(the)g(history)h(list)g(for)f(p)s(ossible)g(completion) +i(matc)m(hes.)150 1051 y Fs(dabbrev-expand)26 b(\(\))630 +1160 y Ft(A)m(ttempt)i(men)m(u)e(completion)i(on)f(the)g(text)g(b)s +(efore)f(p)s(oin)m(t,)i(comparing)f(the)g(text)h(against)630 +1270 y(lines)j(from)e(the)i(history)f(list)h(for)g(p)s(ossible)e +(completion)j(matc)m(hes.)150 1427 y Fs(complete-into-braces)25 +b(\(M-{\))630 1536 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 +1646 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 1755 y(pansion],)30 b(page)h(18\).)150 1952 +y Fj(8.4.7)63 b(Keyb)s(oard)41 b(Macros)150 2122 y Fs(start-kbd-macro) +26 b(\(C-x)j(\(\))630 2232 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.)150 2389 y Fs(end-kbd-macro)d(\(C-x)i(\)\))630 +2498 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 2608 y(de\014nition.)150 2765 y Fs(call-last-kbd-macro)c +(\(C-x)k(e\))630 2874 y Ft(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard) +f(macro)h(de\014ned,)f(b)m(y)h(making)f(the)g(c)m(haracters)i(in)e(the) +630 2984 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 3180 y Fj(8.4.8)63 b(Some)41 b(Miscellaneous)i +(Commands)150 3351 y Fs(re-read-init-file)26 b(\(C-x)j(C-r\))630 +3460 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 3570 y(assignmen)m(ts)31 b(found)e(there.)150 +3727 y Fs(abort)g(\(C-g\))630 3836 y Ft(Ab)s(ort)d(the)h(curren)m(t)f +(editing)h(command)f(and)g(ring)h(the)f(terminal's)h(b)s(ell)g(\(sub)5 +b(ject)26 b(to)i(the)630 3946 y(setting)j(of)g Fs(bell-style)p +Ft(\).)150 4103 y Fs(do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p +Fi(x)11 b Fs(,)29 b(...)o(\))630 4212 y Ft(If)e(the)h(meta\014ed)g(c)m +(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 4322 y(corresp)s(onding) +g(upp)s(ercase)h(c)m(haracter.)150 4479 y Fs(prefix-meta)d(\(ESC\))630 +4588 y Ft(Metafy)39 b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 +b(This)37 b(is)g(for)h(k)m(eyb)s(oards)f(without)g(a)h(meta)g(k)m(ey)-8 +b(.)630 4698 y(T)m(yping)30 b(`)p Fs(ESC)g(f)p Ft(')g(is)h(equiv)-5 +b(alen)m(t)31 b(to)g(t)m(yping)g Fi(M-f)p Ft(.)150 4854 +y Fs(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 4964 y Ft(Incremen)m(tal)h +(undo,)f(separately)h(remem)m(b)s(ered)f(for)g(eac)m(h)i(line.)150 +5121 y Fs(revert-line)27 b(\(M-r\))630 5230 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 +5340 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f(b)s(eginning.)p +eop end +%%Page: 113 119 +TeXDict begin 113 118 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(113)150 299 y Fs(tilde-expand)27 +b(\(M-&\))630 408 y Ft(P)m(erform)j(tilde)h(expansion)g(on)f(the)g +(curren)m(t)h(w)m(ord.)150 555 y Fs(set-mark)d(\(C-@\))630 +664 y Ft(Set)33 b(the)g(mark)f(to)i(the)f(p)s(oin)m(t.)48 +b(If)32 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h(mark)g +(is)f(set)630 774 y(to)f(that)g(p)s(osition.)150 920 +y Fs(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630 +1029 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 1139 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 1285 +y Fs(character-search)26 b(\(C-]\))630 1395 y Ft(A)f(c)m(haracter)h(is) +f(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g(o)s +(ccurrence)g(of)g(that)g(c)m(haracter.)630 1504 y(A)30 +b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s +(ccurrences.)150 1650 y Fs(character-search-backwar)o(d)24 +b(\(M-C-]\))630 1760 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 1870 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f +(searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150 +2016 y Fs(skip-csi-sequence)d(\(\))630 2125 y Ft(Read)i(enough)f(c)m +(haracters)h(to)g(consume)f(a)h(m)m(ulti-k)m(ey)h(sequence)f(suc)m(h)f +(as)g(those)h(de\014ned)630 2235 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g +(and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m +(trol)g(Sequence)630 2345 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59 +b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Fs("\\)p +Ft(e[)p Fs(")p Ft(,)g(k)m(eys)f(pro-)630 2454 y(ducing)31 +b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e +(explicitly)j(b)s(ound)c(to)i(a)h(readline)630 2564 y(command,)f +(instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f +(editing)h(bu\013er.)44 b(This)31 b(is)630 2673 y(un)m(b)s(ound)d(b)m +(y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)150 +2819 y Fs(insert-comment)26 b(\(M-#\))630 2929 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 3039 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 3148 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 3258 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 3367 +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 3477 +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 +3587 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 +3696 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 +3806 y(the)31 b(line)f(will)h(b)s(e)f(executed)h(b)m(y)f(the)h(shell.) +150 3952 y Fs(dump-functions)26 b(\(\))630 4061 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 4171 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 4281 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 +4427 y Fs(dump-variables)26 b(\(\))630 4536 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 +4646 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 +4756 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 4902 y Fs(dump-macros)c(\(\))630 5011 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 +5121 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e +(supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630 +5230 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e +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 5340 y(default.)p eop end +%%Page: 114 120 +TeXDict begin 114 119 bop 150 -116 a Ft(114)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(glob-complete-word)25 +b(\(M-g\))630 408 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 518 y(asterisk)d(implicitly)h(app)s(ended.)37 b(This)23 +b(pattern)i(is)f(used)g(to)h(generate)h(a)e(list)h(of)g(matc)m(hing)630 +628 y(\014le)30 b(names)h(for)f(p)s(ossible)g(completions.)150 +791 y Fs(glob-expand-word)c(\(C-x)j(*\))630 900 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 1010 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 1120 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 1283 y Fs(glob-list-expansions)25 b(\(C-x)k(g\))630 +1392 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 +1502 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 1611 y(is)c(app)s(ended)f(b)s(efore)h(pathname)g +(expansion.)150 1775 y Fs(display-shell-version)25 b(\(C-x)k(C-v\))630 +1884 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 2047 y Fs(shell-expand-line)c +(\(M-C-e\))630 2157 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 2266 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 +2376 y(page)e(17\).)150 2539 y Fs(history-expand-line)25 +b(\(M-^\))630 2649 y Ft(P)m(erform)30 b(history)h(expansion)f(on)g(the) +h(curren)m(t)f(line.)150 2812 y Fs(magic-space)d(\(\))630 +2921 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 +3031 y([History)31 b(In)m(teraction],)i(page)e(123\).)150 +3194 y Fs(alias-expand-line)26 b(\(\))630 3304 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(79\).)150 3467 y Fs(history-and-alias-expand)o +(-lin)o(e)24 b(\(\))630 3576 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 +3740 y Fs(insert-last-argument)25 b(\(M-.)k(or)h(M-_\))630 +3849 y Ft(A)g(synon)m(ym)g(for)g Fs(yank-last-arg)p Ft(.)150 +4012 y Fs(operate-and-get-next)25 b(\(C-o\))630 4122 +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 +4231 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 4395 y +Fs(edit-and-execute-command)24 b(\(C-xC-e\))630 4504 +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 +4614 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 4723 y(editor,)31 b(in)f(that)h(order.)150 +4961 y Fr(8.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 5121 +y Ft(While)32 b(the)g(Readline)g(library)f(do)s(es)g(not)h(ha)m(v)m(e)h +(a)f(full)f(set)h(of)g Fs(vi)f Ft(editing)h(functions,)f(it)h(do)s(es)g +(con)m(tain)150 5230 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f +(the)g(line.)52 b(The)34 b(Readline)g 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 5340 y(the)e Fl(posix)e +Ft(1003.2)k(standard.)p eop end +%%Page: 115 121 +TeXDict begin 115 120 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(115)275 299 y(In)35 +b(order)g(to)i(switc)m(h)f(in)m(teractiv)m(ely)j(b)s(et)m(w)m(een)d +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 408 y(emacs)p Ft(')43 b(and)h(`)p +Fs(set)30 b(-o)f(vi)p Ft(')44 b(commands)g(\(see)i(Section)f(4.3.1)h +([The)e(Set)h(Builtin],)j(page)e(51\).)83 b(The)150 518 +y(Readline)31 b(default)g(is)f Fs(emacs)f Ft(mo)s(de.)275 +651 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 760 y(had)f(t)m(yp)s(ed)g(an)g(`)p +Fs(i)p Ft('.)41 b(Pressing)29 b Fs(ESC)f Ft(switc)m(hes)i(y)m(ou)g(in)m +(to)h(`command')e(mo)s(de,)h(where)e(y)m(ou)i(can)g(edit)g(the)150 +870 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 979 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 +1208 y Fr(8.6)68 b(Programmable)47 b(Completion)150 1367 +y Ft(When)25 b(w)m(ord)g(completion)i(is)f(attempted)g(for)g(an)f +(argumen)m(t)h(to)g(a)g(command)f(for)h(whic)m(h)f(a)h(completion)150 +1477 y(sp)s(eci\014cation)40 b(\(a)h Fq(compsp)s(ec)6 +b Ft(\))39 b(has)h(b)s(een)f(de\014ned)f(using)h(the)h +Fs(complete)d Ft(builtin)j(\(see)g(Section)h(8.7)150 +1586 y([Programmable)h(Completion)f(Builtins],)k(page)d(117\),)j(the)c +(programmable)g(completion)i(facilities)150 1696 y(are)31 +b(in)m(v)m(ok)m(ed.)275 1828 y(First,)23 b(the)e(command)g(name)g(is)h +(iden)m(ti\014ed.)37 b(If)21 b(a)g(compsp)s(ec)g(has)g(b)s(een)f +(de\014ned)g(for)h(that)h(command,)150 1938 y(the)44 +b(compsp)s(ec)g(is)g(used)f(to)h(generate)i(the)e(list)g(of)g(p)s +(ossible)g(completions)h(for)e(the)h(w)m(ord.)81 b(If)44 +b(the)150 2048 y(command)36 b(w)m(ord)g(is)g(the)g(empt)m(y)h(string)f +(\(completion)i(attempted)f(at)g(the)g(b)s(eginning)e(of)h(an)h(empt)m +(y)150 2157 y(line\),)28 b(an)m(y)e(compsp)s(ec)f(de\014ned)g(with)g +(the)h(`)p Fs(-E)p Ft(')f(option)i(to)f Fs(complete)e +Ft(is)h(used.)39 b(If)25 b(the)h(command)f(w)m(ord)150 +2267 y(is)i(a)h(full)e(pathname,)i(a)g(compsp)s(ec)e(for)h(the)g(full)g +(pathname)g(is)g(searc)m(hed)h(for)f(\014rst.)39 b(If)26 +b(no)h(compsp)s(ec)g(is)150 2376 y(found)22 b(for)g(the)h(full)g +(pathname,)h(an)f(attempt)h(is)f(made)g(to)g(\014nd)f(a)h(compsp)s(ec)f +(for)h(the)g(p)s(ortion)f(follo)m(wing)150 2486 y(the)34 +b(\014nal)g(slash.)53 b(If)34 b(those)g(searc)m(hes)i(do)e(not)g +(result)h(in)f(a)g(compsp)s(ec,)h(an)m(y)g(compsp)s(ec)f(de\014ned)f +(with)150 2595 y(the)e(`)p Fs(-D)p Ft(')f(option)h(to)g +Fs(complete)d Ft(is)i(used)g(as)g(the)h(default.)275 +2728 y(Once)j(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 2838 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 2947 y([Commands)30 b(F)-8 b(or)31 b(Completion],)g(page)g +(110\))h(is)f(p)s(erformed.)275 3080 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 +3189 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 +3299 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 3408 y(Section)31 b(5.2)h([Bash)e(V)-8 +b(ariables],)33 b(page)e(61,)g(for)f(a)h(description)g(of)f +Fs(FIGNORE)p Ft(.)275 3541 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 3650 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)g(completed.)150 +3760 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 3870 y(v)-5 b(ariable)31 b(is)g(used.)275 +4002 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 4112 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 +4221 y(honored.)56 b(Eac)m(h)37 b(w)m(ord)e(is)h(then)f(expanded)g +(using)h(brace)g(expansion,)h(tilde)f(expansion,)h(parameter)150 +4331 y(and)44 b(v)-5 b(ariable)46 b(expansion,)j(command)44 +b(substitution,)49 b(and)44 b(arithmetic)i(expansion,)j(as)c(describ)s +(ed)150 4440 y(ab)s(o)m(v)m(e)38 b(\(see)f(Section)h(3.5)g([Shell)e +(Expansions],)i(page)f(17\).)61 b(The)36 b(results)h(are)g(split)f +(using)h(the)f(rules)150 4550 y(describ)s(ed)29 b(ab)s(o)m(v)m(e)i +(\(see)f(Section)h(3.5.7)h([W)-8 b(ord)30 b(Splitting],)h(page)f(23\).) +42 b(The)30 b(results)f(of)h(the)g(expansion)150 4660 +y(are)f(pre\014x-matc)m(hed)h(against)g(the)f(w)m(ord)g(b)s(eing)f +(completed,)j(and)d(the)i(matc)m(hing)g(w)m(ords)e(b)s(ecome)i(the)150 +4769 y(p)s(ossible)g(completions.)275 4902 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 5011 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 5121 y(LINE)p Ft(,)42 b Fs(COMP_POINT)p +Ft(,)d Fs(COMP_KEY)p Ft(,)i(and)e Fs(COMP_TYPE)f Ft(v)-5 +b(ariables)41 b(are)f(assigned)g(v)-5 b(alues)41 b(as)f(describ)s(ed) +150 5230 y(ab)s(o)m(v)m(e)k(\(see)g(Section)f(5.2)h([Bash)f(V)-8 +b(ariables],)48 b(page)c(61\).)79 b(If)42 b(a)i(shell)f(function)f(is)h +(b)s(eing)f(in)m(v)m(ok)m(ed,)150 5340 y(the)37 b Fs(COMP_WORDS)d +Ft(and)i Fs(COMP_CWORD)e Ft(v)-5 b(ariables)38 b(are)f(also)h(set.)60 +b(When)37 b(the)g(function)f(or)h(command)p eop end +%%Page: 116 122 +TeXDict begin 116 121 bop 150 -116 a Ft(116)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y(is)42 b(in)m(v)m(ok)m(ed,)k(the)41 +b(\014rst)g(argumen)m(t)h(is)g(the)g(name)f(of)h(the)g(command)f(whose) +h(argumen)m(ts)f(are)h(b)s(eing)150 408 y(completed,)d(the)d(second)g +(argumen)m(t)h(is)f(the)g(w)m(ord)g(b)s(eing)g(completed,)i(and)e(the)g +(third)f(argumen)m(t)i(is)150 518 y(the)28 b(w)m(ord)g(preceding)h(the) +f(w)m(ord)g(b)s(eing)g(completed)h(on)f(the)h(curren)m(t)f(command)g +(line.)40 b(No)29 b(\014ltering)g(of)150 628 y(the)i(generated)h +(completions)h(against)f(the)f(w)m(ord)g(b)s(eing)g(completed)h(is)f(p) +s(erformed;)f(the)h(function)g(or)150 737 y(command)f(has)g(complete)i +(freedom)e(in)g(generating)i(the)f(matc)m(hes.)275 871 +y(An)m(y)g(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 981 y(facilities,)50 +b(including)44 b(the)h Fs(compgen)d Ft(and)i Fs(compopt)e +Ft(builtins)i(describ)s(ed)f(b)s(elo)m(w)h(\(see)i(Section)f(8.7)150 +1090 y([Programmable)31 b(Completion)h(Builtins],)f(page)h(117\),)g(to) +g(generate)g(the)f(matc)m(hes.)42 b(It)31 b(m)m(ust)g(put)f(the)150 +1200 y(p)s(ossible)g(completions)h(in)f(the)h Fs(COMPREPLY)d +Ft(arra)m(y)j(v)-5 b(ariable.)275 1334 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 +1443 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 1553 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 1687 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 1797 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 1906 +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 2016 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 2125 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 2235 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 2369 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 2478 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 2588 y(as)e(the)f(list)h(of)g(p)s(ossible)f(completions.)275 +2722 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 2832 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 2941 y(is)h(attempted.)275 +3075 y(If)g(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 3185 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 3294 y(other)31 b(actions.)275 3428 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 3538 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 +3647 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 3757 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 3867 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)j(w)m(as)f(supplied)f +(to)150 3976 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 4086 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 4220 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 +4329 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 +4439 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 4548 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.)275 4682 y(There)25 +b(is)i(some)g(supp)s(ort)e(for)h(dynamically)h(mo)s(difying)f +(completions.)40 b(This)26 b(is)g(most)h(useful)f(when)150 +4792 y(used)37 b(in)h(com)m(bination)h(with)e(a)i(default)f(completion) +h(sp)s(eci\014ed)e(with)h(`)p Fs(-D)p Ft('.)63 b(It's)38 +b(p)s(ossible)f(for)h(shell)150 4902 y(functions)28 b(executed)h(as)f +(completion)i(handlers)d(to)i(indicate)g(that)g(completion)g(should)e +(b)s(e)h(retried)g(b)m(y)150 5011 y(returning)j(an)i(exit)g(status)f +(of)h(124.)48 b(If)31 b(a)i(shell)f(function)g(returns)f(124,)k(and)c +(c)m(hanges)j(the)e(compsp)s(ec)150 5121 y(asso)s(ciated)43 +b(with)e(the)g(command)g(on)g(whic)m(h)g(completion)i(is)e(b)s(eing)g +(attempted)h(\(supplied)e(as)i(the)150 5230 y(\014rst)29 +b(argumen)m(t)h(when)e(the)i(function)f(is)g(executed\),)j +(programmable)d(completion)i(restarts)f(from)f(the)150 +5340 y(b)s(eginning,)40 b(with)e(an)h(attempt)g(to)h(\014nd)d(a)i +(compsp)s(ec)f(for)g(that)h(command.)65 b(This)38 b(allo)m(ws)i(a)f +(set)g(of)p eop end +%%Page: 117 123 +TeXDict begin 117 122 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(117)150 299 y(completions)33 +b(to)f(b)s(e)g(built)f(dynamically)i(as)f(completion)h(is)f(attempted,) +h(rather)f(than)f(b)s(eing)g(loaded)150 408 y(all)g(at)g(once.)275 +564 y(F)-8 b(or)38 b(instance,)h(assuming)e(that)h(there)f(is)h(a)f +(library)g(of)g(compsp)s(ecs,)i(eac)m(h)g(k)m(ept)e(in)g(a)h(\014le)f +(corre-)150 673 y(sp)s(onding)g(to)j(the)f(name)f(of)h(the)g(command,)i +(the)e(follo)m(wing)h(default)f(completion)h(function)e(w)m(ould)150 +783 y(load)31 b(completions)g(dynamically:)390 938 y +Fs(_completion_loader\(\))390 1048 y({)390 1157 y(.)47 +b("/etc/bash_completion.d/$1)o(.sh")41 b(>/dev/null)k(2>&1)i(&&)g +(return)f(124)390 1267 y(})390 1376 y(complete)g(-D)h(-F)g +(_completion_loader)150 1640 y Fr(8.7)68 b(Programmable)47 +b(Completion)f(Builtins)150 1799 y Ft(Tw)m(o)27 b(builtin)g(commands)g +(are)g(a)m(v)-5 b(ailable)29 b(to)f(manipulate)g(the)f(programmable)g +(completion)h(facilities.)150 1990 y Fs(compgen)870 2134 +y(compgen)46 b([)p Fi(option)11 b Fs(])45 b([)p Fi(word)11 +b Fs(])630 2279 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 2389 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 2498 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 +2608 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 2718 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 2862 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 +2972 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 3082 +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 3191 y(b)s(e)d(displa)m(y)m(ed.)630 +3336 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 3446 y(generated.)150 3626 y Fs(complete)870 +3770 y(complete)46 b([-abcdefgjksuv])d([-o)k Fi(comp-option)11 +b Fs(])44 b([-DE])i([-A)h Fi(action)11 b Fs(])46 b([-)870 +3880 y(G)h Fi(globpat)11 b Fs(])46 b([-W)g Fi(wordlist)11 +b Fs(])870 3990 y([-F)47 b Fi(function)11 b Fs(])45 b([-C)i +Fi(command)11 b Fs(])45 b([-X)i Fi(filterpat)11 b Fs(])870 +4099 y([-P)47 b Fi(prefix)11 b Fs(])45 b([-S)i Fi(suffix)11 +b Fs(])45 b Fi(name)58 b Fs([)p Fi(name)f Fs(...)o(])870 +4209 y(complete)46 b(-pr)g([-DE])h([)p Fi(name)57 b Fs(...)o(])630 +4354 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 4463 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 4573 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 4682 y(remo)m(v)m(es)29 +b(a)e(completion)i(sp)s(eci\014cation)e(for)g(eac)m(h)i +Fq(name)5 b Ft(,)28 b(or,)g(if)f(no)g Fq(name)5 b Ft(s)27 +b(are)h(supplied,)630 4792 y(all)46 b(completion)h(sp)s +(eci\014cations.)87 b(The)45 b(`)p Fs(-D)p Ft(')h(option)g(indicates)g +(that)g(the)g(remaining)630 4902 y(options)35 b(and)f(actions)h(should) +f(apply)g(to)h(the)g(\\default")g(command)f(completion;)k(that)630 +5011 y(is,)25 b(completion)g(attempted)g(on)e(a)h(command)f(for)g(whic) +m(h)h(no)f(completion)i(has)e(previously)630 5121 y(b)s(een)28 +b(de\014ned.)39 b(The)27 b(`)p Fs(-E)p Ft(')i(option)g(indicates)g +(that)g(the)g(remaining)f(options)h(and)f(actions)630 +5230 y(should)i(apply)i(to)g(\\empt)m(y")g(command)g(completion;)h +(that)f(is,)g(completion)h(attempted)630 5340 y(on)d(a)h(blank)f(line.) +p eop end +%%Page: 118 124 +TeXDict begin 118 123 bop 150 -116 a Ft(118)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(115\).)42 b(The)30 b(`)p Fs(-D)p Ft(')h(option)f(tak)m +(es)i(precedence)f(o)m(v)m(er)h(`)p Fs(-E)p Ft('.)630 +656 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 +766 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 +875 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 +985 y(is)h(in)m(v)m(ok)m(ed.)630 1151 y Fs(-o)g Fi(comp-option)1110 +1261 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 +1370 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 +1480 y(b)s(e)j(one)g(of:)1110 1646 y Fs(bashdefault)1590 +1756 y Ft(P)m(erform)d(the)h(rest)f(of)h(the)g(default)f(Bash)h +(completions)g(if)g(the)1590 1866 y(compsp)s(ec)i(generates)i(no)e +(matc)m(hes.)1110 2032 y Fs(default)144 b Ft(Use)22 b(Readline's)g +(default)g(\014lename)g(completion)g(if)g(the)g(comp-)1590 +2142 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110 +2308 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 2418 y(generates)32 +b(no)e(matc)m(hes.)1110 2584 y Fs(filenames)1590 2694 +y Ft(T)-8 b(ell)40 b(Readline)f(that)h(the)f(compsp)s(ec)f(generates)j +(\014lenames,)1590 2803 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 +2913 y(adding)d(a)h(slash)f(to)h(directory)g(names)f(quoting)h(sp)s +(ecial)g(c)m(har-)1590 3022 y(acters,)39 b(or)d(suppressing)f(trailing) +i(spaces\).)59 b(This)35 b(option)i(is)1590 3132 y(in)m(tended)30 +b(to)g(b)s(e)g(used)f(with)g(shell)i(functions)e(sp)s(eci\014ed)g(with) +1590 3242 y(`)p Fs(-F)p Ft('.)1110 3408 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 3518 y(w)m(ords)30 b(completed)h(at)g(the) +g(end)f(of)g(the)h(line.)1110 3684 y Fs(plusdirs)96 b +Ft(After)30 b(an)m(y)h(matc)m(hes)g(de\014ned)d(b)m(y)i(the)g(compsp)s +(ec)g(are)g(gener-)1590 3794 y(ated,)g(directory)f(name)g(completion)i +(is)d(attempted)i(and)f(an)m(y)1590 3903 y(matc)m(hes)j(are)e(added)g +(to)h(the)g(results)f(of)g(the)h(other)g(actions.)630 +4070 y Fs(-A)f Fi(action)1110 4179 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 4289 y(completions:)1110 +4455 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 +4622 y Fs(arrayvar)96 b Ft(Arra)m(y)31 b(v)-5 b(ariable)31 +b(names.)1110 4788 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 +4898 y(Readline)h(Commands],)f(page)h(106\).)1110 5064 +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 5174 +y(as)31 b(`)p Fs(-b)p Ft('.)1110 5340 y Fs(command)144 +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('.)p eop end +%%Page: 119 125 +TeXDict begin 119 124 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(119)1110 299 y Fs(directory)1590 +408 y Ft(Directory)32 b(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 573 y Fs(disabled)96 +b Ft(Names)31 b(of)g(disabled)f(shell)g(builtins.)1110 +737 y Fs(enabled)144 b Ft(Names)31 b(of)g(enabled)f(shell)g(builtins.) +1110 902 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 +1011 y(\014ed)d(as)g(`)p Fs(-e)p Ft('.)1110 1176 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 1340 y Fs(function)96 b +Ft(Names)31 b(of)g(shell)f(functions.)1110 1504 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 1669 y Fs(helptopic)1590 +1778 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 1888 y(tion)31 +b(4.2)g([Bash)g(Builtins],)g(page)g(41\).)1110 2052 y +Fs(hostname)96 b Ft(Hostnames,)89 b(as)76 b(tak)m(en)h(from)f(the)g +(\014le)h(sp)s(eci\014ed)e(b)m(y)1590 2162 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 2271 y(V)-8 b(ariables],)32 b(page)f(61\).)1110 +2436 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 +2545 y(\014ed)f(as)g(`)p Fs(-j)p Ft('.)1110 2710 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 +2874 y Fs(running)144 b Ft(Names)31 b(of)g(running)d(jobs,)i(if)h(job)f +(con)m(trol)h(is)g(activ)m(e.)1110 3039 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 3203 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 +3313 y(\(see)g(Section)h(4.3.1)g([The)e(Set)g(Builtin],)i(page)f(51\).) +1110 3477 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 +3587 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(41\).) +1110 3751 y Fs(signal)192 b Ft(Signal)31 b(names.)1110 +3915 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 4080 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 4244 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 +4354 y(`)p Fs(-v)p Ft('.)630 4518 y Fs(-G)30 b Fi(globpat)1110 +4628 y Ft(The)39 b(\014lename)h(expansion)g(pattern)g +Fq(globpat)j Ft(is)d(expanded)f(to)h(generate)1110 4737 +y(the)31 b(p)s(ossible)e(completions.)630 4902 y Fs(-W)h +Fi(wordlist)1110 5011 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 5121 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 5230 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 5340 y(w)m(ord)f(b)s(eing)g(completed.)p +eop end +%%Page: 120 126 +TeXDict begin 120 125 bop 150 -116 a Ft(120)2527 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(-C)f Fi(command)1110 +408 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 518 y(used)e(as)g(the)h +(p)s(ossible)f(completions.)630 677 y Fs(-F)g Fi(function)1110 +787 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 897 +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 1006 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.)630 1166 y Fs(-X)30 b Fi(filterpat)1110 1275 +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 1385 +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 1494 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 1604 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 1714 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 1873 y Fs(-P)g +Fi(prefix)1110 1983 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 +2092 y(all)c(other)g(options)g(ha)m(v)m(e)g(b)s(een)f(applied.)630 +2252 y Fs(-S)g Fi(suffix)1110 2361 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 2471 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630 +2630 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 +2740 y(than)31 b(`)p Fs(-p)p Ft(')g(or)g(`)p Fs(-r)p +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 2849 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 +2959 y(or)f(an)h(error)f(o)s(ccurs)g(adding)g(a)g(completion)i(sp)s +(eci\014cation.)150 3118 y Fs(compopt)870 3253 y(compopt)46 +b([-o)h Fi(option)11 b Fs(])45 b([-DE])h([+o)h Fi(option)11 +b Fs(])46 b([)p Fi(name)11 b Fs(])630 3387 y Ft(Mo)s(dify)33 +b(completion)h(options)g(for)f(eac)m(h)h Fq(name)39 b +Ft(according)34 b(to)g(the)f Fq(option)p Ft(s,)i(or)e(for)g(the)630 +3497 y(curren)m(tly-execution)46 b(completion)f(if)f(no)f +Fq(name)5 b Ft(s)44 b(are)h(supplied.)80 b(If)43 b(no)h +Fq(option)p Ft(s)h(are)630 3606 y(giv)m(en,)30 b(displa)m(y)e(the)g +(completion)h(options)g(for)e(eac)m(h)i Fq(name)34 b +Ft(or)27 b(the)i(curren)m(t)e(completion.)630 3716 y(The)f(p)s(ossible) +g(v)-5 b(alues)27 b(of)f Fq(option)h Ft(are)g(those)g(v)-5 +b(alid)26 b(for)g(the)h Fs(complete)d Ft(builtin)i(describ)s(ed)630 +3826 y(ab)s(o)m(v)m(e.)40 b(The)23 b(`)p Fs(-D)p Ft(')i(option)f +(indicates)h(that)g(the)f(remaining)g(options)h(should)e(apply)h(to)h +(the)630 3935 y(\\default")33 b(command)f(completion;)i(that)f(is,)g +(completion)g(attempted)g(on)f(a)g(command)630 4045 y(for)c(whic)m(h)f +(no)h(completion)h(has)f(previously)g(b)s(een)f(de\014ned.)38 +b(The)28 b(`)p Fs(-E)p Ft(')g(option)g(indicates)630 +4154 y(that)c(the)g(remaining)g(options)g(should)e(apply)h(to)i(\\empt) +m(y")g(command)e(completion;)k(that)630 4264 y(is,)k(completion)g +(attempted)h(on)e(a)h(blank)f(line.)630 4399 y(The)g(`)p +Fs(-D)p Ft(')g(option)h(tak)m(es)h(precedence)f(o)m(v)m(er)g(`)p +Fs(-E)p Ft('.)630 4533 y(The)23 b(return)g(v)-5 b(alue)25 +b(is)f(true)g(unless)f(an)h(in)m(v)-5 b(alid)24 b(option)h(is)f +(supplied,)g(an)g(attempt)h(is)f(made)630 4643 y(to)32 +b(mo)s(dify)f(the)g(options)h(for)f(a)h Fq(name)k Ft(for)31 +b(whic)m(h)g(no)g(completion)i(sp)s(eci\014cation)f(exists,)630 +4752 y(or)e(an)h(output)f(error)g(o)s(ccurs.)p eop end +%%Page: 121 127 +TeXDict begin 121 126 bop 150 -116 a Ft(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(121)150 +299 y Fo(9)80 b(Using)53 b(History)g(In)l(teractiv)l(ely)150 +572 y Ft(This)42 b(c)m(hapter)h(describ)s(es)f(ho)m(w)g(to)h(use)g(the) +f Fl(gnu)h Ft(History)g(Library)e(in)m(teractiv)m(ely)-8 +b(,)50 b(from)42 b(a)h(user's)150 681 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 +791 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 1042 +y Fr(9.1)68 b(Bash)45 b(History)h(F)-11 b(acilities)150 +1202 y Ft(When)40 b(the)h(`)p Fs(-o)30 b(history)p Ft(')38 +b(option)j(to)g(the)g Fs(set)e Ft(builtin)h(is)h(enabled)f(\(see)h +(Section)g(4.3.1)i([The)d(Set)150 1311 y(Builtin],)32 +b(page)g(51\),)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 +1421 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 +1531 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 1640 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 1750 +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 1859 y(v)-5 b(ariables)31 b Fs(HISTIGNORE)d +Ft(and)h Fs(HISTCONTROL)p Ft(.)275 2007 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 2116 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 2226 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 2336 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 2445 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)j(option)g(is)g(set)150 2555 y(\(see)22 b(Section)g(4.2)g +([Bash)g(Builtins],)h(page)f(41\),)j(the)c(lines)g(are)h(app)s(ended)d +(to)j(the)f(history)g(\014le,)j(otherwise)150 2664 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 2774 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 2883 +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 3031 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 3140 y(en)m(try)d(is)h(written)f(to)h(the)f +(history)h(\014le,)f(mark)m(ed)h(with)f(the)g(history)g(commen)m(t)h(c) +m(haracter.)43 b(When)30 b(the)150 3250 y(history)22 +b(\014le)h(is)g(read,)h(lines)f(b)s(eginning)e(with)i(the)f(history)h +(commen)m(t)g(c)m(haracter)h(follo)m(w)m(ed)h(immediately)150 +3360 y(b)m(y)30 b(a)h(digit)g(are)g(in)m(terpreted)g(as)f(timestamps)h +(for)f(the)h(previous)f(history)g(line.)275 3507 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 +3617 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 3726 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 3836 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 +3945 y(History],)31 b(page)h(107\).)275 4093 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 +4202 y Fs(HISTCONTROL)25 b Ft(and)j Fs(HISTIGNORE)e Ft(v)-5 +b(ariables)29 b(ma)m(y)h(b)s(e)d(set)j(to)f(cause)g(the)g(shell)f(to)i +(sa)m(v)m(e)g(only)f(a)g(subset)150 4312 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 4421 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 4531 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 4641 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 4750 +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(41,)h(for)e(a)h(description)f(of)h +Fs(shopt)p Ft(.)150 5002 y Fr(9.2)68 b(Bash)45 b(History)h(Builtins)150 +5161 y Ft(Bash)31 b(pro)m(vides)f(t)m(w)m(o)i(builtin)e(commands)g +(whic)m(h)g(manipulate)g(the)h(history)f(list)h(and)f(history)g +(\014le.)150 5340 y Fs(fc)p eop end +%%Page: 122 128 +TeXDict begin 122 127 bop 150 -116 a Ft(122)2527 b(Bash)31 +b(Reference)g(Man)m(ual)870 299 y Fs(fc)47 b([-e)g Fi(ename)11 +b Fs(])46 b([-lnr])g([)p Fi(first)11 b Fs(])45 b([)p +Fi(last)11 b Fs(])870 408 y(fc)47 b(-s)g([)p Fi(pat)11 +b Fs(=)p Fi(rep)g Fs(])45 b([)p Fi(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\).)38 b(If)26 b Fq(last)k Ft(is)c(not)h(sp)s +(eci\014ed)f(it)h(is)g(set)g(to)g Fq(\014rst)r 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.)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)s +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(79\).)150 +2703 y Fs(history)870 2833 y(history)46 b([)p Fi(n)11 +b Fs(])870 2943 y(history)46 b(-c)870 3052 y(history)g(-d)h +Fi(offset)870 3162 y Fs(history)f([-anrw])g([)p Fi(filename)11 +b Fs(])870 3271 y(history)46 b(-ps)h Fi(arg)630 3402 +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.) +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 Fi(offset)1110 +4600 y Ft(Delete)25 b(the)f(history)f(en)m(try)g(at)h(p)s(osition)f +Fq(o\013set)r Ft(.)39 b Fq(o\013set)26 b Ft(should)c(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: 123 129 +TeXDict begin 123 128 bop 150 -116 a Ft(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(123)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 573 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 +739 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 +848 y(the)d(standard)f(output,)i(without)f(storing)g(the)g(results)g +(in)g(the)g(history)g(list.)630 1013 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)h(list)g(as)f(a)h(single)g(en)m(try)-8 b(.)630 +1178 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)g(is)h(used,)g(if)f Fq(\014lename)30 b +Ft(is)24 b(giv)m(en,)j(then)630 1288 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 1397 y(used.)150 1638 y Fr(9.3)68 b(History)46 +b(Expansion)150 1798 y Ft(The)f(History)h(library)e(pro)m(vides)i(a)f +(history)g(expansion)g(feature)h(that)g(is)f(similar)h(to)g(the)f +(history)150 1907 y(expansion)g(pro)m(vided)f(b)m(y)h +Fs(csh)p Ft(.)83 b(This)44 b(section)i(describ)s(es)e(the)h(syn)m(tax)h +(used)e(to)i(manipulate)f(the)150 2017 y(history)30 b(information.)275 +2157 y(History)h(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g(the)h +(history)f(list)h(in)m(to)g(the)g(input)f(stream,)h(making)150 +2266 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 +2376 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g +(quic)m(kly)-8 b(.)275 2516 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 2626 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 +2735 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 2845 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 2955 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 3064 +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 +3174 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 3283 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 +3423 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 +3533 y(page)32 b(41\))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 3643 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 3752 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 3862 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 3971 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 4081 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 +4191 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 4300 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 4410 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 4519 +y(Readline.)275 4659 y(The)33 b(shell)h(allo)m(ws)h(con)m(trol)h(of)e +(the)g(v)-5 b(arious)34 b(c)m(haracters)h(used)f(b)m(y)f(the)h(history) +g(expansion)g(mec)m(h-)150 4769 y(anism)h(with)g(the)g +Fs(histchars)d Ft(v)-5 b(ariable,)38 b(as)d(explained)g(ab)s(o)m(v)m(e) +i(\(see)f(Section)f(5.2)i([Bash)e(V)-8 b(ariables],)150 +4879 y(page)32 b(61\).)44 b(The)31 b(shell)g(uses)g(the)g(history)g +(commen)m(t)i(c)m(haracter)f(to)g(mark)f(history)g(timestamps)h(when) +150 4988 y(writing)e(the)h(history)f(\014le.)150 5193 +y Fj(9.3.1)63 b(Ev)m(en)m(t)39 b(Designators)150 5340 +y Ft(An)30 b(ev)m(en)m(t)i(designator)f(is)f(a)h(reference)g(to)g(a)g +(command)f(line)h(en)m(try)f(in)g(the)h(history)f(list.)p +eop end +%%Page: 124 130 +TeXDict begin 124 129 bop 150 -116 a Ft(124)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 680 y Fs(!)p Fi(n)384 +b Ft(Refer)30 b(to)i(command)e(line)g Fq(n)p Ft(.)150 +841 y Fs(!-)p Fi(n)336 b Ft(Refer)30 b(to)i(the)e(command)g +Fq(n)g Ft(lines)h(bac)m(k.)150 1003 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 1164 y Fs(!)p Fi(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)8 b Ft(.)150 1326 y Fs(!?)p Fi(string)j +Fs([?])630 1436 y Ft(Refer)33 b(to)h(the)f(most)g(recen)m(t)h(command)f +(con)m(taining)h Fq(string)8 b Ft(.)48 b(The)33 b(trailing)h(`)p +Fs(?)p Ft(')f(ma)m(y)h(b)s(e)630 1545 y(omitted)d(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 1707 y Fs(^)p Fi(string1)11 b Fs(^)p Fi(string2)g +Fs(^)630 1816 y Ft(Quic)m(k)31 b(Substitution.)43 b(Rep)s(eat)31 +b(the)g(last)h(command,)g(replacing)f Fq(string1)39 b +Ft(with)31 b Fq(string2)7 b Ft(.)630 1926 y(Equiv)-5 +b(alen)m(t)31 b(to)g Fs(!!:s/)p Fi(string1)11 b Fs(/)p +Fi(string2)g Fs(/)p Ft(.)150 2088 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 +2289 y Fj(9.3.2)63 b(W)-10 b(ord)41 b(Designators)150 +2436 y Ft(W)-8 b(ord)27 b(designators)h(are)g(used)e(to)i(select)h +(desired)d(w)m(ords)h(from)f(the)i(ev)m(en)m(t.)41 b(A)27 +b(`)p Fs(:)p Ft(')g(separates)h(the)f(ev)m(en)m(t)150 +2546 y(sp)s(eci\014cation)38 b(from)e(the)h(w)m(ord)f(designator.)61 +b(It)37 b(ma)m(y)h(b)s(e)e(omitted)i(if)e(the)h(w)m(ord)g(designator)g +(b)s(egins)150 2655 y(with)30 b(a)g(`)p Fs(^)p Ft(',)g(`)p +Fs($)p Ft(',)g(`)p Fs(*)p Ft(',)h(`)p Fs(-)p Ft(',)f(or)g(`)p +Fs(\045)p Ft('.)41 b(W)-8 b(ords)30 b(are)g(n)m(um)m(b)s(ered)e(from)i +(the)g(b)s(eginning)f(of)h(the)g(line,)g(with)g(the)150 +2765 y(\014rst)f(w)m(ord)f(b)s(eing)h(denoted)h(b)m(y)f(0)h(\(zero\).) +41 b(W)-8 b(ords)30 b(are)g(inserted)f(in)m(to)h(the)g(curren)m(t)f +(line)g(separated)h(b)m(y)150 2874 y(single)h(spaces.)275 +3011 y(F)-8 b(or)31 b(example,)150 3174 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 +3283 y(mand)30 b(is)g(rep)s(eated)g(in)g(toto.)150 3445 +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 +3555 y(to)31 b Fs(!$)p Ft(.)150 3716 y Fs(!fi:2)240 b +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 3826 +y(letters)j Fs(fi)p Ft(.)275 3988 y(Here)e(are)h(the)g(w)m(ord)f +(designators:)150 4151 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,)h +(this)e(is)g(the)h(command)f(w)m(ord.)150 4313 y Fi(n)432 +b Ft(The)30 b Fq(n)p Ft(th)g(w)m(ord.)150 4474 y Fs(^)432 +b Ft(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m(ord)g(1.)150 +4636 y Fs($)432 b Ft(The)30 b(last)h(argumen)m(t.)150 +4798 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 Fi(string)11 b Fs(?)p +Ft(')28 b(searc)m(h.)150 4959 y Fi(x)11 b Fs(-)p Fi(y)325 +b Ft(A)30 b(range)h(of)g(w)m(ords;)f(`)p Fs(-)p Fi(y)11 +b Ft(')30 b(abbreviates)h(`)p Fs(0-)p Fi(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: 125 131 +TeXDict begin 125 130 bop 150 -116 a Ft(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(125)150 +299 y Fi(x)11 b Fs(*)373 b Ft(Abbreviates)31 b(`)p Fi(x)11 +b Fs(-$)p Ft(')150 458 y Fi(x)g Fs(-)373 b Ft(Abbreviates)31 +b(`)p Fi(x)11 b Fs(-$)p Ft(')29 b(lik)m(e)j(`)p Fi(x)11 +b Fs(*)p Ft(',)30 b(but)g(omits)h(the)f(last)h(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 927 y Fj(9.3.3)63 +b(Mo)s(di\014ers)150 1073 y Ft(After)29 b(the)g(optional)g(w)m(ord)g +(designator,)g(y)m(ou)g(can)g(add)f(a)h(sequence)g(of)g(one)g(or)f +(more)h(of)g(the)f(follo)m(wing)150 1183 y(mo)s(di\014ers,)h(eac)m(h)j +(preceded)e(b)m(y)g(a)h(`)p Fs(:)p Ft('.)150 1342 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 1502 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 1661 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 +Fi(suffix)11 b Ft(',)28 b(lea)m(ving)33 b(the)d(basename.)150 +1821 y Fs(e)432 b Ft(Remo)m(v)m(e)32 b(all)f(but)f(the)h(trailing)g +(su\016x.)150 1980 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 2139 y Fs(q)432 b +Ft(Quote)31 b(the)f(substituted)g(w)m(ords,)g(escaping)h(further)e +(substitutions.)150 2299 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 2408 y(and)d(newlines.)150 +2568 y Fs(s/)p Fi(old)11 b Fs(/)p Fi(new)g Fs(/)630 2677 +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 2787 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 2897 y(single)j(bac)m(kslash.)40 +b(If)27 b(`)p Fs(&)p Ft(')g(app)s(ears)g(in)g Fq(new)8 +b Ft(,)27 b(it)h(is)f(replaced)h(b)m(y)f Fq(old)t Ft(.)39 +b(A)27 b(single)h(bac)m(kslash)630 3006 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 3116 y(the)31 +b(input)e(line.)150 3275 y Fs(&)432 b Ft(Rep)s(eat)31 +b(the)f(previous)g(substitution.)150 3435 y Fs(g)150 +3544 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 3654 y(with)30 b(`)p Fs(s)p Ft(',)h(as)f(in)h +Fs(gs/)p Fi(old)11 b Fs(/)p Fi(new)g Fs(/)p Ft(,)26 b(or)k(with)h(`)p +Fs(&)p Ft('.)150 3813 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: 126 132 +TeXDict begin 126 131 bop eop end +%%Page: 127 133 +TeXDict begin 127 132 bop 150 -116 a Ft(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(127)150 299 y Fo(10)80 +b(Installing)52 b(Bash)150 556 y Ft(This)31 b(c)m(hapter)h(pro)m(vides) +g(basic)g(instructions)f(for)g(installing)i(Bash)f(on)f(the)h(v)-5 +b(arious)31 b(supp)s(orted)f(plat-)150 665 y(forms.)40 +b(The)28 b(distribution)h(supp)s(orts)e(the)j Fl(gnu)f +Ft(op)s(erating)h(systems,)f(nearly)h(ev)m(ery)g(v)m(ersion)f(of)h +(Unix,)150 775 y(and)d(sev)m(eral)j(non-Unix)d(systems)h(suc)m(h)g(as)g +(BeOS)g(and)f(In)m(terix.)40 b(Other)28 b(indep)s(enden)m(t)e(p)s(orts) +h(exist)i(for)150 884 y Fl(ms-dos)p Ft(,)h Fl(os/2)p +Ft(,)g(and)g(Windo)m(ws)g(platforms.)150 1128 y Fr(10.1)68 +b(Basic)45 b(Installation)150 1288 y Ft(These)30 b(are)h(installation)h +(instructions)e(for)h(Bash.)275 1430 y(The)e(simplest)i(w)m(a)m(y)g(to) +g(compile)h(Bash)e(is:)199 1572 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 +1681 y(Bash)c(for)f(y)m(our)h(system.)54 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 1791 y(need)21 b(to)g(t)m(yp)s(e)g(`)p +Fs(sh)30 b(./configure)p Ft(')18 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 +1901 y Ft(itself.)330 2039 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 2149 y(features)e(it)g(is)f(c)m(hec) +m(king)i(for.)199 2287 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 2425 +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 2563 +y(4.)61 b(T)m(yp)s(e)36 b(`)p Fs(make)29 b(install)p +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 +2673 y(pages)31 b(and)f(Info)g(\014le.)275 2844 y(The)20 +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 +2953 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 3063 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 +3172 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 +3282 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 3392 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 3501 +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 3611 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 3720 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 +3862 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 3972 y(stands,)30 b(t)m(yp)s(e)390 4114 y Fs(bash-2.04$)45 +b(./configure)g(--help)150 4256 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 4398 +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 +4508 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 4617 y Fs(bash-maintainers@gnu.org)24 b Ft(so)30 +b(they)h(can)g(b)s(e)e(considered)i(for)f(the)g(next)h(release.)275 +4760 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 4869 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 +4979 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)h(kind)f(of)g(computer\),)h(t)m +(yp)s(e)g(`)p Fs(make)e(distclean)p Ft('.)p eop end +%%Page: 128 134 +TeXDict begin 128 133 bop 150 -116 a Ft(128)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(10.2)68 b(Compilers)46 +b(and)f(Options)150 458 y Ft(Some)28 b(systems)h(require)f(un)m(usual)f +(options)i(for)f(compilation)i(or)f(linking)f(that)h(the)g +Fs(configure)d Ft(script)150 568 y(do)s(es)32 b(not)g(kno)m(w)g(ab)s +(out.)44 b(Y)-8 b(ou)33 b(can)f(giv)m(e)h Fs(configure)d +Ft(initial)j(v)-5 b(alues)32 b(for)g(v)-5 b(ariables)32 +b(b)m(y)g(setting)h(them)150 677 y(in)k(the)g(en)m(vironmen)m(t.)62 +b(Using)38 b(a)f(Bourne-compatible)i(shell,)g(y)m(ou)f(can)g(do)f(that) +h(on)f(the)g(command)150 787 y(line)31 b(lik)m(e)g(this:)390 +920 y Fs(CC=c89)46 b(CFLAGS=-O2)f(LIBS=-lposix)g(./configure)275 +1053 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)h(lik)m(e)h(this:)390 +1186 y Fs(env)47 b(CPPFLAGS=-I/usr/local/in)o(clud)o(e)42 +b(LDFLAGS=-s)j(./configure)275 1318 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 1548 y Fr(10.3)68 b(Compiling)46 b(F)-11 +b(or)45 b(Multiple)g(Arc)l(hitectures)150 1707 y Ft(Y)-8 +b(ou)27 b(can)g(compile)g(Bash)g(for)f(more)h(than)f(one)h(kind)f(of)g +(computer)h(at)g(the)g(same)g(time,)h(b)m(y)e(placing)i(the)150 +1817 y(ob)5 b(ject)31 b(\014les)f(for)g(eac)m(h)i(arc)m(hitecture)f(in) +f(their)g(o)m(wn)h(directory)-8 b(.)41 b(T)-8 b(o)31 +b(do)f(this,)g(y)m(ou)h(m)m(ust)f(use)g(a)g(v)m(ersion)150 +1926 y(of)25 b Fs(make)f Ft(that)h(supp)s(orts)f(the)h +Fs(VPATH)e Ft(v)-5 b(ariable,)27 b(suc)m(h)e(as)g(GNU)h +Fs(make)p Ft(.)37 b Fs(cd)25 b Ft(to)h(the)f(directory)g(where)g(y)m +(ou)150 2036 y(w)m(an)m(t)34 b(the)f(ob)5 b(ject)34 b(\014les)f(and)f +(executables)i(to)g(go)g(and)e(run)g(the)h Fs(configure)d +Ft(script)j(from)g(the)g(source)150 2145 y(directory)-8 +b(.)41 b(Y)-8 b(ou)27 b(ma)m(y)h(need)f(to)g(supply)f(the)h(`)p +Fs(--srcdir=PATH)p Ft(')d(argumen)m(t)k(to)g(tell)g Fs(configure)c +Ft(where)150 2255 y(the)36 b(source)g(\014les)f(are.)57 +b Fs(configure)33 b Ft(automatically)39 b(c)m(hec)m(ks)e(for)e(the)h +(source)g(co)s(de)f(in)h(the)f(directory)150 2364 y(that)c +Fs(configure)d Ft(is)i(in)g(and)g(in)g(`..'.)275 2497 +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,)24 b(y)m(ou)e(can)f(compile)h(Bash)150 +2607 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 2716 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 2849 y(Alternativ)m(ely)-8 +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 2959 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 3068 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 3178 +y(directory)31 b(`)p Fs(/usr/gnu/src/bash-2.0)p Ft(':)390 +3311 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 3444 y +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 +3553 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 3782 +y Fr(10.4)68 b(Installation)47 b(Names)150 3942 y Ft(By)27 +b(default,)h(`)p Fs(make)i(install)p Ft(')25 b(will)j(install)g(in)m +(to)g(`)p Fs(/usr/local/bin)p Ft(',)c(`)p Fs(/usr/local/man)p +Ft(',)h(etc.)40 b(Y)-8 b(ou)150 4051 y(can)31 b(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)i(option)150 +4161 y(`)p Fs(--prefix=)p Fi(PATH)11 b Ft(',)35 b(or)h(b)m(y)g(sp)s +(ecifying)g(a)h(v)-5 b(alue)37 b(for)f(the)h Fs(DESTDIR)d +Ft(`)p Fs(make)p Ft(')i(v)-5 b(ariable)37 b(when)f(running)150 +4271 y(`)p Fs(make)29 b(install)p Ft('.)275 4403 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 +4513 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 Fi(PATH)11 b Ft(',)150 4623 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 4732 y(Do)s(cumen)m(tation)32 b(and)e(other)h +(data)g(\014les)f(will)h(still)g(use)f(the)h(regular)f(pre\014x.)150 +4961 y Fr(10.5)68 b(Sp)t(ecifying)45 b(the)g(System)h(T)l(yp)t(e)150 +5121 y Ft(There)f(ma)m(y)g(b)s(e)f(some)i(features)f +Fs(configure)e Ft(can)i(not)g(\014gure)g(out)g(automatically)-8 +b(,)52 b(but)44 b(need)h(to)150 5230 y(determine)36 b(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 +5340 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)h(`)p +Fs(--host=TYPE)p Ft(')p eop end +%%Page: 129 135 +TeXDict begin 129 134 bop 150 -116 a Ft(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(129)150 299 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 408 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 539 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 764 y Fr(10.6)68 b(Sharing)45 b(Defaults)150 +924 y Ft(If)d(y)m(ou)i(w)m(an)m(t)g(to)f(set)h(default)f(v)-5 +b(alues)43 b(for)g Fs(configure)d Ft(scripts)j(to)h(share,)i(y)m(ou)d +(can)g(create)i(a)e(site)150 1033 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 1143 y(file)p Ft(,)43 b(and)e Fs(prefix)p +Ft(.)73 b Fs(configure)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 +1252 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)k(v)-5 b(ari-)150 +1362 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 1472 y(script,)31 b(but)e(not)i(all)g +Fs(configure)d Ft(scripts)i(do.)150 1697 y Fr(10.7)68 +b(Op)t(eration)46 b(Con)l(trols)150 1856 y Fs(configure)28 +b Ft(recognizes)k(the)e(follo)m(wing)i(options)f(to)g(con)m(trol)h(ho)m +(w)e(it)h(op)s(erates.)150 2008 y Fs(--cache-file=)p +Fi(file)630 2117 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 2227 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 2379 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 2531 y Fs(--quiet)150 +2641 y(--silent)150 2750 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 2902 y Fs(--srcdir=)p Fi(dir)630 3012 y Ft(Lo)s(ok)i(for)f +(the)h(Bash)g(source)f(co)s(de)h(in)f(directory)h Fq(dir)7 +b Ft(.)44 b(Usually)32 b Fs(configure)d Ft(can)i(deter-)630 +3121 y(mine)f(that)h(directory)g(automatically)-8 b(.)150 +3273 y Fs(--version)630 3383 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,)j(and)f(exit.)275 3535 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 3644 +y(--help)p Ft(')29 b(prin)m(ts)h(the)g(complete)i(list.)150 +3869 y Fr(10.8)68 b(Optional)46 b(F)-11 b(eatures)150 +4029 y Ft(The)24 b(Bash)g Fs(configure)e Ft(has)h(a)i(n)m(um)m(b)s(er)e +(of)h(`)p Fs(--enable-)p Fi(feature)11 b Ft(')20 b(options,)26 +b(where)d Fq(feature)30 b Ft(indicates)150 4138 y(an)f(optional)i(part) +e(of)g(Bash.)41 b(There)28 b(are)i(also)g(sev)m(eral)h(`)p +Fs(--with-)p Fi(package)11 b Ft(')25 b(options,)30 b(where)f +Fq(pac)m(k)-5 b(age)150 4248 y Ft(is)32 b(something)h(lik)m(e)h(`)p +Fs(bash-malloc)p Ft(')c(or)i(`)p Fs(purify)p Ft('.)45 +b(T)-8 b(o)33 b(turn)e(o\013)i(the)f(default)h(use)f(of)g(a)h(pac)m(k) +-5 b(age,)35 b(use)150 4357 y(`)p Fs(--without-)p Fi(package)11 +b Ft('.)36 b(T)-8 b(o)29 b(con\014gure)g(Bash)h(without)f(a)g(feature)h +(that)g(is)f(enabled)g(b)m(y)g(default,)h(use)150 4467 +y(`)p Fs(--disable-)p Fi(feature)11 b Ft('.)275 4598 +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 4707 y Ft(recognizes.)150 +4859 y Fs(--with-afs)630 4969 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 +5121 y Fs(--with-bash-malloc)630 5230 y Ft(Use)31 b(the)g(Bash)f(v)m +(ersion)i(of)e Fs(malloc)f Ft(in)h(the)h(directory)g(`)p +Fs(lib/malloc)p Ft('.)39 b(This)30 b(is)h(not)g(the)630 +5340 y(same)h Fs(malloc)e Ft(that)j(app)s(ears)e(in)g +Fl(gnu)h Ft(lib)s(c,)g(but)f(an)h(older)f(v)m(ersion)i(originally)g +(deriv)m(ed)p eop end +%%Page: 130 136 +TeXDict begin 130 135 bop 150 -116 a Ft(130)2527 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(from)h(the)h(4.2)g +Fl(bsd)f Fs(malloc)p Ft(.)45 b(This)31 b Fs(malloc)g +Ft(is)i(v)m(ery)f(fast,)i(but)e(w)m(astes)h(some)g(space)g(on)630 +408 y(eac)m(h)g(allo)s(cation.)48 b(This)31 b(option)i(is)f(enabled)g +(b)m(y)g(default.)46 b(The)31 b(`)p Fs(NOTES)p Ft(')g(\014le)h(con)m +(tains)i(a)630 518 y(list)29 b(of)f(systems)f(for)h(whic)m(h)g(this)g +(should)e(b)s(e)i(turned)e(o\013,)j(and)f Fs(configure)d +Ft(disables)j(this)630 628 y(option)j(automatically)i(for)d(a)h(n)m(um) +m(b)s(er)e(of)i(systems.)150 798 y Fs(--with-curses)630 +907 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 +1017 y(if)f(y)m(our)h(system)f(has)g(an)h(inadequate)g(or)f(incomplete) +i(termcap)e(database.)150 1187 y Fs(--with-gnu-malloc)630 +1297 y Ft(A)g(synon)m(ym)g(for)g Fs(--with-bash-malloc)p +Ft(.)150 1467 y Fs(--with-installed-readlin)o(e[=)p Fi(P)o(REFI)o(X)11 +b Fs(])630 1576 y Ft(De\014ne)26 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 1686 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(5.0)h(and)630 +1796 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 1905 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 +2015 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 +2124 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 2234 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 2344 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 2453 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 +2563 y(library)c(in)g Fq(PREFIX)9 b Ft(/)p Fs(lib)p Ft(\).)150 +2733 y Fs(--with-purify)630 2843 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 3013 y Fs(--enable-minimal-config)630 +3122 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 +3298 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 3407 y(than)k(c)m(hanging)h(run-time)f +(features.)150 3583 y Fs(--enable-largefile)630 3693 +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 3802 +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 3912 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 4021 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 4191 y Fs(--enable-profiling)630 4301 +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 +4411 y(b)m(y)g Fs(gprof)f Ft(eac)m(h)j(time)f(it)g(is)f(executed.)150 +4581 y Fs(--enable-static-link)630 4690 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 4800 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 4976 +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 +5085 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 Fi(feature)11 +b Ft('.)275 5230 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 5340 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.)p eop end +%%Page: 131 137 +TeXDict begin 131 136 bop 150 -116 a Ft(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(131)150 299 y Fs(--enable-alias)630 +408 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 +518 y(tion)31 b(6.6)g([Aliases],)i(page)e(79\).)150 692 +y Fs(--enable-arith-for-comma)o(nd)630 801 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 +911 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 +1084 y Fs(--enable-array-variables)630 1194 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 1303 y(ra)m(ys],)c(page)g(80\).)150 +1477 y Fs(--enable-bang-history)630 1587 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 1696 y(teraction],)c(page)e +(123\).)150 1870 y Fs(--enable-brace-expansion)630 1979 +y Ft(Include)40 b Fs(csh)p Ft(-lik)m(e)h(brace)f(expansion)g(\()h +Fs(b{a,b}c)d Fp(7!)i Fs(bac)30 b(bbc)39 b Ft(\).)71 b(See)40 +b(Section)h(3.5.1)630 2089 y([Brace)32 b(Expansion],)e(page)h(18,)h +(for)e(a)g(complete)i(description.)150 2262 y Fs +(--enable-casemod-attribu)o(tes)630 2372 y Ft(Include)37 +b(supp)s(ort)g(for)g(case-mo)s(difying)i(attributes)g(in)e(the)h +Fs(declare)e Ft(builtin)i(and)f(as-)630 2482 y(signmen)m(t)29 +b(statemen)m(ts.)41 b(V)-8 b(ariables)30 b(with)e(the)g +Fq(upp)s(ercase)k Ft(attribute,)e(for)e(example,)i(will)630 +2591 y(ha)m(v)m(e)i(their)e(v)-5 b(alues)31 b(con)m(v)m(erted)h(to)f +(upp)s(ercase)e(up)s(on)g(assignmen)m(t.)150 2765 y Fs +(--enable-casemod-expansi)o(on)630 2874 y Ft(Include)h(supp)s(ort)e +(for)i(case-mo)s(difying)i(w)m(ord)e(expansions.)150 +3048 y Fs(--enable-command-timing)630 3157 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 3267 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 +3377 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 3550 y Fs(--enable-cond-command)630 3660 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 3769 y(tional)c +(Constructs],)e(page)h(10\).)150 3943 y Fs(--enable-cond-regexp)630 +4052 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 +4162 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 +4271 y(structs],)31 b(page)g(10\).)150 4445 y Fs(--enable-coprocesses) +630 4555 y Ft(Include)23 b(supp)s(ort)f(for)i(copro)s(cesses)g(and)f +(the)h Fs(coproc)e Ft(reserv)m(ed)i(w)m(ord)g(\(see)h(Section)f(3.2.2) +630 4664 y([Pip)s(elines],)31 b(page)g(8\).)150 4838 +y Fs(--enable-debugger)630 4947 y Ft(Include)f(supp)s(ort)e(for)i(the)h +(bash)f(debugger)g(\(distributed)g(separately\).)150 +5121 y Fs(--enable-directory-stack)630 5230 y Ft(Include)j(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 +5340 y Ft(builtins)d(\(see)h(Section)g(6.8)h([The)e(Directory)i(Stac)m +(k],)g(page)f(81\).)p eop end +%%Page: 132 138 +TeXDict begin 132 137 bop 150 -116 a Ft(132)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(--enable-disabled-builti)o(ns)630 +408 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 518 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(41,)630 628 y(for)e(details)i(of)e(the)h +Fs(builtin)d Ft(and)i Fs(enable)e Ft(builtin)i(commands.)150 +783 y Fs(--enable-dparen-arithmet)o(ic)630 892 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 1002 y(Constructs],)30 +b(page)h(10\).)150 1157 y Fs(--enable-extended-glob)630 +1267 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 +1377 y(under)29 b(Section)i(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i +(page)e(24.)150 1532 y Fs(--enable-extended-glob-d)o(efau)o(lt)630 +1641 y Ft(Set)40 b(the)g(default)g(v)-5 b(alue)41 b(of)f(the)g +Fq(extglob)j Ft(shell)d(option)g(describ)s(ed)f(ab)s(o)m(v)m(e)i(under) +d(Sec-)630 1751 y(tion)31 b(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g +(55)g(to)h(b)s(e)d(enabled.)150 1906 y Fs(--enable-help-builtin)630 +2016 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 2125 y(Section)31 b(4.2)h([Bash)e(Builtins],)i(page)f +(41\).)150 2281 y Fs(--enable-history)630 2390 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 2500 y(tion)h(9.1)g([Bash)g +(History)g(F)-8 b(acilities],)34 b(page)d(121\).)150 +2655 y Fs(--enable-job-control)630 2765 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(89\),)h(if)630 2874 y(the)f(op)s(erating)f(system)h +(supp)s(orts)d(them.)150 3029 y Fs(--enable-multibyte)630 +3139 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 +3249 y(the)h(necessary)f(supp)s(ort.)150 3404 y Fs +(--enable-net-redirection)o(s)630 3513 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 Fi(host)11 b Fs(/)p Fi(port)630 3623 y +Ft(and)29 b Fs(/dev/udp/)p Fi(host)11 b Fs(/)p Fi(port)34 +b Ft(when)28 b(used)g(in)h(redirections)h(\(see)g(Section)g(3.6)g +([Redirec-)630 3733 y(tions],)h(page)g(26\).)150 3888 +y Fs(--enable-process-substit)o(utio)o(n)630 3998 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 4107 y(page)31 b(23\))h(if)e(the)h(op)s +(erating)f(system)h(pro)m(vides)f(the)h(necessary)g(supp)s(ort.)150 +4262 y Fs(--enable-progcomp)630 4372 y Ft(Enable)d(the)g(programmable)g +(completion)i(facilities)g(\(see)f(Section)g(8.6)g([Programmable)630 +4482 y(Completion],)i(page)h(115\).)42 b(If)30 b(Readline)h(is)f(not)h +(enabled,)f(this)h(option)g(has)f(no)g(e\013ect.)150 +4637 y Fs(--enable-prompt-string-d)o(ecod)o(ing)630 4746 +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 +4856 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 4966 y(Prompt],)30 +b(page)h(82,)h(for)e(a)h(complete)h(list)f(of)f(prompt)g(string)g +(escap)s(e)h(sequences.)150 5121 y Fs(--enable-readline)630 +5230 y Ft(Include)d(supp)s(ort)f(for)h(command-line)h(editing)g(and)f +(history)g(with)g(the)h(Bash)g(v)m(ersion)g(of)630 5340 +y(the)i(Readline)g(library)f(\(see)h(Chapter)f(8)g([Command)g(Line)g +(Editing],)h(page)g(93\).)p eop end +%%Page: 133 139 +TeXDict begin 133 138 bop 150 -116 a Ft(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(133)150 299 y Fs(--enable-restricted)630 +408 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 +518 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 +628 y(page)31 b(84,)h(for)e(a)g(description)h(of)f(restricted)h(mo)s +(de.)150 787 y Fs(--enable-select)630 897 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 1006 y(Section)c(3.2.4.2)i +([Conditional)e(Constructs],)g(page)g(10\).)150 1166 +y Fs(--enable-separate-helpfi)o(les)630 1275 y Ft(Use)h(external)h +(\014les)f(for)g(the)g(do)s(cumen)m(tation)h(displa)m(y)m(ed)f(b)m(y)g +(the)g Fs(help)f Ft(builtin)h(instead)630 1385 y(of)f(storing)f(the)h +(text)g(in)m(ternally)-8 b(.)150 1544 y Fs(--enable-single-help-str)o +(ings)630 1654 y Ft(Store)40 b(the)g(text)h(displa)m(y)m(ed)g(b)m(y)e +(the)i Fs(help)d Ft(builtin)i(as)g(a)g(single)h(string)f(for)f(eac)m(h) +i(help)630 1763 y(topic.)54 b(This)33 b(aids)i(in)f(translating)h(the)g +(text)g(to)g(di\013eren)m(t)g(languages.)54 b(Y)-8 b(ou)35 +b(ma)m(y)g(need)630 1873 y(to)c(disable)g(this)f(if)g(y)m(our)h +(compiler)g(cannot)f(handle)g(v)m(ery)h(long)g(string)f(literals.)150 +2032 y Fs(--enable-strict-posix-de)o(faul)o(t)630 2142 +y Ft(Mak)m(e)c(Bash)f Fl(posix)p Ft(-conforman)m(t)g(b)m(y)f(default)h +(\(see)g(Section)h(6.11)g([Bash)f(POSIX)e(Mo)s(de],)630 +2252 y(page)31 b(84\).)150 2411 y Fs(--enable-usg-echo-defaul)o(t)630 +2521 y Ft(A)f(synon)m(ym)g(for)g Fs(--enable-xpg-echo-default)p +Ft(.)150 2680 y Fs(--enable-xpg-echo-defaul)o(t)630 2790 +y Ft(Mak)m(e)c(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 +2899 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 3009 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 +3118 y(in)41 b(the)h(Single)g(Unix)f(Sp)s(eci\014cation,)k(v)m(ersion)e +(3.)74 b(See)42 b(Section)g(4.2)h([Bash)f(Builtins],)630 +3228 y(page)31 b(41,)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 3387 +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 3497 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 3606 +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 3716 y(information)c(ab)s(out)f(its)h(e\013ect.)p +eop end +%%Page: 134 140 +TeXDict begin 134 139 bop eop end +%%Page: 135 141 +TeXDict begin 135 140 bop 150 -116 a Ft(App)s(endix)29 +b(A:)h(Rep)s(orting)h(Bugs)2299 b(135)150 299 y Fo(App)t(endix)52 +b(A)81 b(Rep)t(orting)53 b(Bugs)150 533 y Ft(Please)33 +b(rep)s(ort)e(all)h(bugs)f(y)m(ou)h(\014nd)e(in)i(Bash.)44 +b(But)32 b(\014rst,)g(y)m(ou)g(should)e(mak)m(e)j(sure)e(that)h(it)g +(really)h(is)f(a)150 643 y(bug,)d(and)g(that)h(it)g(app)s(ears)f(in)g +(the)h(latest)h(v)m(ersion)f(of)g(Bash.)40 b(The)29 b(latest)j(v)m +(ersion)e(of)f(Bash)h(is)f(alw)m(a)m(ys)150 752 y(a)m(v)-5 +b(ailable)33 b(for)d(FTP)g(from)g Fs(ftp://ftp.gnu.org/pub/gn)o(u/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)e +(mailed)i(to)g 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.ramey@case.edu)p Ft(.)p eop end +%%Page: 136 142 +TeXDict begin 136 141 bop eop end +%%Page: 137 143 +TeXDict begin 137 142 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(137)150 141 y Fo(App)t(endix)58 +b(B)81 b(Ma)9 b(jor)54 b(Di\013erences)d(F)-13 b(rom)54 +b(The)g(Bourne)1088 299 y(Shell)150 530 y Ft(Bash)26 +b(implemen)m(ts)h(essen)m(tially)g(the)g(same)f(grammar,)h(parameter)f +(and)g(v)-5 b(ariable)27 b(expansion,)g(redirec-)150 +640 y(tion,)i(and)e(quoting)g(as)h(the)g(Bourne)f(Shell.)40 +b(Bash)27 b(uses)g(the)h Fl(posix)f Ft(standard)f(as)i(the)g(sp)s +(eci\014cation)g(of)150 749 y(ho)m(w)34 b(these)h(features)g(are)g(to)g +(b)s(e)f(implemen)m(ted.)53 b(There)34 b(are)h(some)g(di\013erences)g +(b)s(et)m(w)m(een)g(the)g(tradi-)150 859 y(tional)e(Bourne)e(shell)h +(and)f(Bash;)i(this)f(section)g(quic)m(kly)h(details)g(the)e +(di\013erences)h(of)g(signi\014cance.)46 b(A)150 969 +y(n)m(um)m(b)s(er)24 b(of)h(these)h(di\013erences)f(are)h(explained)f +(in)g(greater)h(depth)f(in)g(previous)f(sections.)40 +b(This)25 b(section)150 1078 y(uses)33 b(the)i(v)m(ersion)f(of)g +Fs(sh)f Ft(included)g(in)h(SVR4.2)h(\(the)f(last)h(v)m(ersion)f(of)g +(the)g(historical)i(Bourne)d(shell\))150 1188 y(as)e(the)f(baseline)h +(reference.)225 1322 y 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 +1431 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(84\).)225 1565 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 +(71\).)225 1699 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 +(93\))i(and)330 1809 y(the)h Fs(bind)e Ft(builtin.)225 +1943 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 +2052 y(grammable)39 b(Completion],)i(page)e(115\),)i(and)d(builtin)g +(commands)f Fs(complete)p Ft(,)h Fs(compgen)p Ft(,)h(and)330 +2162 y Fs(compopt)p Ft(,)29 b(to)i(manipulate)g(it.)225 +2296 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(121\))i(and)d(the)330 2405 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 +2515 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 2649 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 2759 +y(page)31 b(123\).)225 2892 y Fp(\017)60 b Ft(Bash)33 +b(has)g(one-dimensional)h(arra)m(y)f(v)-5 b(ariables)34 +b(\(see)g(Section)g(6.7)g([Arra)m(ys],)g(page)g(80\),)h(and)e(the)330 +3002 y(appropriate)39 b(v)-5 b(ariable)40 b(expansions)f(and)g +(assignmen)m(t)h(syn)m(tax)g(to)g(use)f(them.)67 b(Sev)m(eral)40 +b(of)g(the)330 3112 y(Bash)32 b(builtins)f(tak)m(e)j(options)e(to)h +(act)g(on)e(arra)m(ys.)46 b(Bash)32 b(pro)m(vides)g(a)g(n)m(um)m(b)s +(er)f(of)h(built-in)f(arra)m(y)330 3221 y(v)-5 b(ariables.)225 +3355 y 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 3465 y(the)26 b(text)h(b)s(et)m(w)m(een)g(the)g +(single)f(quotes,)i(is)e(supp)s(orted)f(\(see)i(Section)g(3.1.2.4)h +([ANSI-C)e(Quoting],)330 3574 y(page)31 b(6\).)225 3708 +y 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 3818 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 3927 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 4037 y(\(see)g(Section)h(3.1.2.5)g([Lo)s(cale)g(T)-8 +b(ranslation],)32 b(page)f(7\).)225 4171 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 4281 y(tion)33 b(3.2.2)i([Pip)s(elines],)f(page)g(8\).)49 +b(V)-8 b(ery)33 b(useful)f(when)g(an)h Fs(if)f Ft(statemen)m(t)j(needs) +d(to)i(act)g(only)f(if)330 4390 y(a)k(test)h(fails.)60 +b(The)36 b(Bash)g(`)p Fs(-o)30 b(pipefail)p Ft(')35 b(option)i(to)h +Fs(set)d Ft(will)i(cause)g(a)g(pip)s(eline)g(to)g(return)f(a)330 +4500 y(failure)31 b(status)f(if)h(an)m(y)f(command)g(fails.)225 +4634 y 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)h(\(see)g(Section)g +(3.2.2)g([Pip)s(elines],)330 4743 y(page)g(8\).)52 b(The)33 +b(displa)m(y)i(of)f(the)g(timing)g(statistics)i(ma)m(y)f(b)s(e)e(con)m +(trolled)j(with)e(the)g Fs(TIMEFORMAT)330 4853 y Ft(v)-5 +b(ariable.)225 4987 y Fp(\017)60 b Ft(Bash)23 b(implemen)m(ts)g(the)h +Fs(for)29 b(\(\()h Fi(expr1)39 b Fs(;)30 b Fi(expr2)40 +b Fs(;)30 b Fi(expr3)39 b Fs(\)\))23 b Ft(arithmetic)h(for)e(command,)j +(sim-)330 5096 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 +5230 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 5340 y(men)m(us)f(\(see)h(Section)g(3.2.4.2)i +([Conditional)e(Constructs],)g(page)g(10\).)p eop end +%%Page: 138 144 +TeXDict begin 138 143 bop 150 -116 a Ft(138)2527 b(Bash)31 +b(Reference)g(Man)m(ual)225 299 y Fp(\017)60 b Ft(Bash)40 +b(includes)g(the)g Fs([[)g Ft(comp)s(ound)e(command,)43 +b(whic)m(h)c(mak)m(es)i(conditional)h(testing)f(part)f(of)330 +408 y(the)f(shell)g(grammar)g(\(see)h(Section)f(3.2.4.2)j([Conditional) +d(Constructs],)i(page)f(10\),)i(including)330 518 y(optional)32 +b(regular)e(expression)g(matc)m(hing.)225 653 y Fp(\017)60 +b Ft(Bash)31 b(pro)m(vides)f(optional)h(case-insensitiv)m(e)i(matc)m +(hing)f(for)e(the)g Fs(case)g Ft(and)f Fs([[)h Ft(constructs.)225 +789 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(18\))h(and)d(tilde)330 +898 y(expansion)k(\(see)i(Section)f(3.5.2)h([Tilde)f(Expansion],)f +(page)h(19\).)225 1034 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 +1143 y([Aliases],)32 b(page)f(79\).)225 1279 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 1388 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 +1498 y(metic],)h(page)f(78\).)225 1633 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 +1743 y(pro)s(cesses.)38 b(The)23 b(Bourne)g(shell)g(do)s(es)g(not)g +(normally)g(do)g(this)g(unless)g(the)g(v)-5 b(ariables)24 +b(are)f(explicitly)330 1852 y(mark)m(ed)30 b(using)g(the)h +Fs(export)e Ft(command.)225 1988 y Fp(\017)60 b Ft(Bash)26 +b(supp)s(orts)d(the)j(`)p Fs(+=)p Ft(')f(assignmen)m(t)i(op)s(erator,)g +(whic)m(h)e(app)s(ends)f(to)i(the)g(v)-5 b(alue)26 b(of)f(the)h(v)-5 +b(ariable)330 2097 y(named)30 b(on)g(the)h(left)g(hand)e(side.)225 +2233 y Fp(\017)60 b Ft(Bash)36 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 2342 y(leading)f(or)f +(trailing)h(substrings)e(from)g(v)-5 b(ariable)35 b(v)-5 +b(alues)35 b(\(see)g(Section)g(3.5.3)g([Shell)g(P)m(arameter)330 +2452 y(Expansion],)30 b(page)h(19\).)225 2587 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 +2697 y(tion)31 b(3.5.3)h([Shell)f(P)m(arameter)g(Expansion],)f(page)i +(19\).)225 2832 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 2942 y(of)43 b(length)g +Fq(length)p Ft(,)j(b)s(eginning)c(at)i Fq(o\013set)r +Ft(,)j(is)42 b(presen)m(t)h(\(see)h(Section)f(3.5.3)i([Shell)e(P)m +(arameter)330 3051 y(Expansion],)30 b(page)h(19\).)225 +3187 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)j Fq(pattern)e Ft(and)f(replaces)330 3296 +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 +3406 y(Expansion],)h(page)h(19\).)225 3541 y Fp(\017)60 +b Ft(The)32 b(expansion)g Fs(${!)p Fi(prefix)p Fs(})p +Fi(*)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 3651 y(ables)36 b(whose)f(names)h +(b)s(egin)f(with)g Fq(pre\014x)6 b Ft(,)36 b(is)g(a)m(v)-5 +b(ailable)38 b(\(see)e(Section)h(3.5.3)g([Shell)f(P)m(arameter)330 +3761 y(Expansion],)30 b(page)h(19\).)225 3896 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 4006 y(Expansion],)30 b(page)h(19\).)225 +4141 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 +Fi(num)11 b Fs(})p Ft(.)225 4276 y Fp(\017)60 b Ft(The)27 +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 +4386 y(mand)38 b(Substitution],)k(page)e(22\),)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 4495 y(implemen)m(ted)31 b(for)f(bac)m(kw)m(ards)h +(compatibilit)m(y\).)225 4631 y Fp(\017)60 b Ft(Bash)31 +b(has)f(pro)s(cess)g(substitution)g(\(see)h(Section)g(3.5.6)h([Pro)s +(cess)f(Substitution],)f(page)h(23\).)225 4766 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 +4876 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 +4985 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 5095 y Fs(BASH_VERSINFO)p Ft(\).)37 b(See)31 +b(Section)g(5.2)h([Bash)e(V)-8 b(ariables],)33 b(page)e(61,)g(for)f +(details.)225 5230 y Fp(\017)60 b Ft(The)44 b Fs(IFS)f +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 5340 +y(Section)29 b(3.5.7)h([W)-8 b(ord)29 b(Splitting],)h(page)f(23\).)41 +b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h(hole.)p +eop end +%%Page: 139 145 +TeXDict begin 139 144 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(139)225 299 y Fp(\017)60 +b Ft(Bash)38 b(implemen)m(ts)g(the)g(full)g(set)g(of)g +Fl(posix)f Ft(\014lename)h(expansion)g(op)s(erators,)i(including)d +Fq(c)m(har-)330 408 y(acter)i(classes)t Ft(,)h Fq(equiv)-5 +b(alence)39 b(classes)t Ft(,)h(and)d Fq(collating)j(sym)m(b)s(ols)g +Ft(\(see)f(Section)f(3.5.8)h([Filename)330 518 y(Expansion],)30 +b(page)h(24\).)225 660 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 769 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(24\).)225 +911 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 1021 y(the)31 +b(t)m(w)m(o)g(name)g(spaces.)225 1163 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 1272 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(41\).)225 1414 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 1524 +y(functions)36 b(\(see)h(Section)g(3.7.4)h([En)m(vironmen)m(t],)h(page) +e(31\).)60 b(In)35 b Fs(sh)p Ft(,)j(all)f(v)-5 b(ariable)37 +b(assignmen)m(ts)330 1633 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 1775 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 1885 y(output)30 b(redirection)h(op)s(erators)g +(\(see)g(Section)g(3.6)h([Redirections],)g(page)f(26\).)225 +2027 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 2136 +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 +2246 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(26\).)225 2388 +y Fp(\017)60 b Ft(Bash)21 b(includes)f(the)h(`)p Fs(<<<)p +Ft(')g(redirection)g(op)s(erator,)i(allo)m(wing)g(a)e(string)f(to)i(b)s +(e)e(used)g(as)h(the)g(standard)330 2497 y(input)29 b(to)j(a)e +(command.)225 2639 y Fp(\017)60 b Ft(Bash)29 b(implemen)m(ts)h(the)f(`) +p Fs([n]<&)p Fi(word)11 b Ft(')26 b(and)j(`)p Fs([n]>&)p +Fi(word)11 b Ft(')26 b(redirection)k(op)s(erators,)g(whic)m(h)e(mo)m(v) +m(e)330 2749 y(one)j(\014le)f(descriptor)g(to)h(another.)225 +2890 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 3000 y(\(see)31 b(Section)h(3.6)f +([Redirections],)h(page)f(26\).)225 3142 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 +3251 y(rection)e(op)s(erators)g(\(see)g(Section)g(3.6)h +([Redirections],)g(page)f(26\).)225 3393 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 3503 y(rection)39 +b(\(see)h(Section)f(4.3.1)h([The)e(Set)h(Builtin],)i(page)e(51\).)66 +b(The)38 b(`)p Fs(>|)p Ft(')h(redirection)g(op)s(erator)330 +3612 y(ma)m(y)31 b(b)s(e)f(used)f(to)i(o)m(v)m(erride)h +Fs(noclobber)p Ft(.)225 3754 y Fp(\017)60 b Ft(The)34 +b(Bash)g Fs(cd)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(35\))h(eac)m(h)330 +3864 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 4006 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 +4115 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 4225 y(\(see)f(Section)h(4.2)f([Bash)g(Builtins],)g +(page)g(41\).)225 4367 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 4476 y(p)s(erformed)29 +b(\(see)i(Section)g(4.2)h([Bash)f(Builtins],)g(page)g(41\).)225 +4618 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 4728 y([Bash)31 +b(Builtins],)g(page)g(41\).)225 4869 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 +4979 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 +5089 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(35\).)225 5230 +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 5340 y(Section)i(3.3)h([Shell)e(F)-8 +b(unctions],)32 b(page)f(14\).)p eop end +%%Page: 140 146 +TeXDict begin 140 145 bop 150 -116 a Ft(140)2527 b(Bash)31 +b(Reference)g(Man)m(ual)225 299 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)h(can)g(tak)m(e)i(a)f(`)p Fs(-f)p +Ft(')f(option)h(to)g(act)g(on)330 408 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 +518 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 628 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 765 y Fp(\017)60 b Ft(The)42 b(Bash)h Fs(hash)f +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 874 y(ev)m(en)30 b(when)e(that)h +(\014lename)g(cannot)h(b)s(e)e(found)g(b)m(y)h(searc)m(hing)g(the)g +Fs($PATH)p Ft(,)g(using)f(`)p Fs(hash)h(-p)p Ft(')g(\(see)330 +984 y(Section)i(4.1)h([Bourne)e(Shell)g(Builtins],)h(page)h(35\).)225 +1121 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 1230 y(Builtins],)j(page)g(41\).)225 +1367 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 1477 y(Builtins],)31 b(page)g(41\).)225 +1614 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(41\))g(will)f(read)g(a)g +(line)g(ending)330 1724 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)330 +1833 y(argumen)m(ts)k(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 1943 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 2052 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 2162 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 2271 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 +2381 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 2491 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 +2628 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 2737 y Fs(source)c Ft(builtins)g(\(see)j +(Section)f(4.1)g([Bourne)g(Shell)f(Builtins],)h(page)g(35\).)225 +2874 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 2984 y(Section)c(4.3.2)g([The)f(Shopt)f +(Builtin],)k(page)d(55\),)k(and)39 b(allo)m(ws)i(these)f(options)h(to)f +(b)s(e)f(set)i(and)330 3093 y(unset)30 b(at)h(shell)g(in)m(v)m(o)s +(cation)h(\(see)f(Section)h(6.1)f([In)m(v)m(oking)g(Bash],)g(page)h +(71\).)225 3230 y Fp(\017)60 b Ft(Bash)45 b(has)f(m)m(uc)m(h)g(more)h +(optional)h(b)s(eha)m(vior)e(con)m(trollable)j(with)e(the)f +Fs(set)g Ft(builtin)g(\(see)h(Sec-)330 3340 y(tion)31 +b(4.3.1)h([The)e(Set)h(Builtin],)g(page)g(51\).)225 3477 +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 3587 y(forming)f(an)g(execution)i(trace) +f(\(see)h(Section)f(4.3.1)h([The)e(Set)h(Builtin],)g(page)g(51\).)225 +3724 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(35\))g(is)f(sligh)m(tly)h +(di\013eren)m(t,)330 3833 y(as)23 b(it)g(implemen)m(ts)f(the)h +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 3943 y(of)31 +b(argumen)m(ts.)225 4080 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 4189 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 4299 y(the)31 b(bash)e(debugger.)225 +4436 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(35\))h(allo)m(ws)g(a)e +Fs(DEBUG)330 4545 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 4655 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 4765 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 4874 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 4984 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 +5093 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 5230 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(35\))g(allo)m(ws)g(an)f Fs(ERR)f Ft(pseudo-)330 +5340 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)p eop end +%%Page: 141 147 +TeXDict begin 141 146 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(141)330 299 y(are)40 b(executed)g(after)g +(a)f(simple)h(command)f(fails,)j(with)d(a)h(few)f(exceptions.)68 +b(The)39 b Fs(ERR)g Ft(trap)g(is)330 408 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 +518 y(enabled.)330 650 y(The)g Fs(trap)g Ft(builtin)h(\(see)g(Section)h +(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(35\))g(allo)m(ws)g(a)g +Fs(RETURN)330 760 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 869 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 979 +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 1088 y(functions)k(unless)h(the)g(function)f(has)h +(b)s(een)f(giv)m(en)i(the)f Fs(trace)e Ft(attribute)j(or)e(the)h +Fs(functrace)330 1198 y Ft(option)31 b(has)f(b)s(een)g(enabled)g(using) +g(the)g Fs(shopt)f Ft(builtin.)225 1330 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 +1440 y(it)h(\014nds)e(\(see)i(Section)g(4.2)h([Bash)e(Builtins],)i +(page)f(41\).)225 1571 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 1681 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 1791 y(Shell)30 b(Builtins],)h(page)h +(35\).)225 1923 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 +2032 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(81\).)56 b(Bash)35 +b(also)330 2142 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 2274 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 2383 y(activ)m(e)33 b(\(see)e(Section)g +(6.9)h([Prin)m(ting)e(a)h(Prompt],)g(page)g(82\).)225 +2515 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 2625 y(page)31 b(84\);)h(the)f(SVR4.2)g(shell)f(restricted)h(mo)s +(de)f(is)h(to)s(o)g(limited.)225 2757 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 2866 y([Job)h(Con)m(trol)h(Builtins],)g(page)g(90\))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 2976 y(shell)f(exits)g(as)f(the)h(result)f(of)h(a)f +Fs(SIGHUP)p Ft(.)225 3108 y Fp(\017)60 b Ft(Bash)31 b(includes)f(a)g(n) +m(um)m(b)s(er)f(of)i(features)g(to)g(supp)s(ort)d(a)j(separate)g +(debugger)f(for)h(shell)f(scripts.)225 3240 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 3350 y(Bash.)225 3482 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 3613 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)32 +b(or)e(p)s(erform)f(shell)i(accoun)m(ting.)225 3745 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)31 b(lik)m(e)h(Bash)e(uses)g +Fs(TMOUT)p Ft(.)150 3900 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(71.)150 4127 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)150 +4287 y Ft(Since)33 b(Bash)h(is)f(a)g(completely)i(new)e(implemen)m +(tation,)j(it)e(do)s(es)e(not)i(su\013er)e(from)h(man)m(y)g(of)h(the)f +(limi-)150 4396 y(tations)f(of)e(the)h(SVR4.2)g(shell.)41 +b(F)-8 b(or)31 b(instance:)225 4528 y Fp(\017)60 b Ft(Bash)32 +b(do)s(es)f(not)h(fork)f(a)h(subshell)e(when)h(redirecting)h(in)m(to)h +(or)e(out)h(of)g(a)g(shell)f(con)m(trol)i(structure)330 +4638 y(suc)m(h)d(as)h(an)f Fs(if)g Ft(or)g Fs(while)f +Ft(statemen)m(t.)225 4770 y Fp(\017)60 b Ft(Bash)29 b(do)s(es)f(not)h +(allo)m(w)h(un)m(balanced)f(quotes.)41 b(The)28 b(SVR4.2)h(shell)g +(will)g(silen)m(tly)i(insert)d(a)h(needed)330 4879 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 +4989 y(to-\014nd)h(errors.)225 5121 y Fp(\017)60 b Ft(The)45 +b(SVR4.2)h(shell)f(uses)g(a)g(baro)s(que)g(memory)g(managemen)m(t)i(sc) +m(heme)e(based)g(on)g(trapping)330 5230 y Fs(SIGSEGV)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 +5340 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(.)p eop end +%%Page: 142 148 +TeXDict begin 142 147 bop 150 -116 a Ft(142)2527 b(Bash)31 +b(Reference)g(Man)m(ual)225 299 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 408 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 518 y(threshold)30 b(v)-5 b(alue,)31 +b(commonly)g(100.)42 b(This)29 b(can)i(lead)g(to)g(unexp)s(ected)f +(results.)225 653 y 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 787 y +Fp(\017)60 b 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)35 +b(to)330 897 y(b)s(e)30 b(unset.)225 1031 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 1166 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 +1275 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 1385 y(if)f(the)h(second)f(argumen)m(t)h(b)s +(egins)f(with)g(a)h(`)p Fs(-)p Ft('.)225 1519 y Fp(\017)60 +b Ft(The)26 b(SVR4.2)i(shell)f(exits)g(a)g(script)g(if)g(an)m(y)g +(builtin)f(fails;)j(Bash)e(exits)g(a)g(script)g(only)g(if)g(one)g(of)g +(the)330 1629 y Fl(posix)34 b Ft(sp)s(ecial)h(builtins)f(fails,)i(and)e +(only)h(for)f(certain)h(failures,)h(as)f(en)m(umerated)g(in)f(the)h +Fl(posix)330 1738 y Ft(standard.)225 1873 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: 143 149 +TeXDict begin 143 148 bop 150 -116 a Ft(App)s(endix)29 +b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 +b(143)150 299 y Fo(App)t(endix)52 b(C)81 b(GNU)54 b(F)-13 +b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Ft(V)-8 +b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 +635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fp(\015)e +Ft(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 +b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 +y Fs(http://fsf.org/)390 964 y Ft(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f +(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 +1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f +(is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 +1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g +(a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 +1450 y(useful)29 b(do)s(cumen)m(t)h 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 1559 y(to)f(cop)m(y)g(and)f +(redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i +(either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 +b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f +(the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 +y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g +(considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 +1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) +h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 +b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 +2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g +(sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 +2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) +e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 +b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h +(for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 +2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) +65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 +2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) +m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g +(to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g +(for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 +b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i +(a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h +(License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d +(is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 +b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 +b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i +(in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 +y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) +h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 +3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f +(a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d +(in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j +(conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 +3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h +(or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g +(a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 +b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 +b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 +3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) +m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 +b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f +(con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f +(of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s +(di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 +y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) +f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f +(the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e +(the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f +(Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m +(erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) +m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f +(that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 +b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 +4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) +h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 +b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e +(historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 +b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i +(commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s +(osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 +b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g +(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 +5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 +b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s +(cumen)m(t)g(is)g(released)p eop end +%%Page: 144 150 +TeXDict begin 144 149 bop 150 -116 a Ft(144)2527 b(Bash)31 +b(Reference)g(Man)m(ual)330 299 y(under)26 b(this)i(License.)40 +b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h +(de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 +y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 +b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) +e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 +b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) +-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 +669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) +g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 +b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) +j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f +(Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 +b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 +b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m +(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m +(ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g +(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 +b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s +(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g +(public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s +(cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) +f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g +(generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g +(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 +y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g +(formatters)f(or)g(for)g(automatic)i(translation)f(to)330 +1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) +g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g +(otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g +(whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f +(arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g +(subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 +b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 +b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g +(substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g +(is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i +(\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) +-8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fl(asci)r(i)g +Ft(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j +(LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j +Ff(SGML)f Ft(or)f Ff(XML)g Ft(using)g(a)g(publicly)330 +2504 y(a)m(v)-5 b(ailable)42 b Ff(DTD)p Ft(,)g(and)d +(standard-conforming)h(simple)g Ff(HTML)p Ft(,)g(P)m(ostScript)h(or)f +Ff(PDF)g Ft(designed)330 2614 y(for)e(h)m(uman)g(mo)s(di\014cation.)65 +b(Examples)38 b(of)h(transparen)m(t)f(image)i(formats)e(include)g +Ff(PNG)p Ft(,)h Ff(X)n(CF)330 2724 y Ft(and)h Ff(JPG)p +Ft(.)g(Opaque)h(formats)g(include)f(proprietary)g(formats)h(that)h(can) +f(b)s(e)f(read)g(and)h(edited)330 2833 y(only)54 b(b)m(y)f(proprietary) +h(w)m(ord)f(pro)s(cessors,)59 b Ff(SGML)54 b Ft(or)f +Ff(XML)h Ft(for)g(whic)m(h)f(the)h Ff(DTD)g Ft(and/or)330 +2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g(generally)i(a)m(v)-5 +b(ailable,)71 b(and)60 b(the)h(mac)m(hine-generated)j +Ff(HTML)p Ft(,)330 3052 y(P)m(ostScript)31 b(or)f Ff(PDF)h +Ft(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s(cessors)g(for)g(output) +g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i +(means,)e(for)f(a)h(prin)m(ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f +(itself,)h(plus)e(suc)m(h)f(follo)m(wing)330 3313 y(pages)28 +b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 +b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f(in)h +(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g +(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e(title)j(page)e +(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i +(near)e(the)h(most)g(prominen)m(t)g(app)s(earance)f(of)h(the)g(w)m +(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h +(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h +(an)m(y)f(p)s(erson)g(or)h(en)m(tit)m(y)h(that)f(distributes)f(copies)i +(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 +4052 y(A)f(section)h(\\En)m(titled)g(XYZ")f(means)f(a)h(named)g +(subunit)e(of)h(the)h(Do)s(cumen)m(t)h(whose)e(title)i(either)330 +4162 y(is)d(precisely)g(XYZ)g(or)f(con)m(tains)i(XYZ)f(in)f(paren)m +(theses)i(follo)m(wing)g(text)g(that)f(translates)h(XYZ)e(in)330 +4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g +(sp)s(eci\014c)g(section)h(name)f(men)m(tioned)h(b)s(elo)m(w,)g(suc)m +(h)330 4381 y(as)i(\\Ac)m(kno)m(wledgemen)m(ts",)33 b(\\Dedications",)e +(\\Endorsemen)m(ts",)e(or)f(\\History".\))42 b(T)-8 b(o)29 +b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g +(section)g(when)f(y)m(ou)h(mo)s(dify)e(the)i(Do)s(cumen)m(t)h(means)e +(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g +(according)g(to)g(this)g(de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t) +i(ma)m(y)f(include)f(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to) +g(the)g(notice)h(whic)m(h)e(states)i(that)330 4861 y(this)34 +b(License)g(applies)g(to)h(the)f(Do)s(cumen)m(t.)52 b(These)33 +b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 +4970 y(b)s(e)k(included)g(b)m(y)g(reference)h(in)g(this)f(License,)j +(but)d(only)h(as)g(regards)f(disclaiming)i(w)m(arran)m(ties:)330 +5080 y(an)m(y)e(other)g(implication)i(that)e(these)g(W)-8 +b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g +(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h +(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 +b(COPYING)p eop end +%%Page: 145 151 +TeXDict begin 145 150 bop 150 -116 a Ft(App)s(endix)29 +b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 +b(145)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h +(the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h +(or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 +b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j +(and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e +(License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e +(in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h +(other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f +(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 +737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h +(the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 +847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 +b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d +(copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f +(n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g +(the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 +y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g +(conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g +(publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 +y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 +b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g +(that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 +1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f +(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 +1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i +(the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 +b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m +(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 +b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 +b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 +2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) +m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f +(the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 +b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i +(with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e +(prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g +(other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 +2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) +m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) +330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d +(b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 +2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e +(either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g +(legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f +(ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) +g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 +2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 +y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f +(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 +3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g +(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) +330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h +(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d +(whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e +(has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m +(ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 +b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g +(added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h +(option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e +(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g +(Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 +b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 +3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s +(cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h +(time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i +(\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h +(of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 +4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g +(con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 +4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s +(er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m +(vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g +(the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 +b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) +h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) +e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) +m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f +(V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 +b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 +b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f +(licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h +(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s +(ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 +b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s +(di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 +b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e +(an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 +5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m +(ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 +b(,)p eop end +%%Page: 146 152 +TeXDict begin 146 151 bop 150 -116 a Ft(146)2527 b(Bash)31 +b(Reference)g(Man)m(ual)510 299 y(b)s(e)g(listed)h(in)f(the)g(History)h +(section)g(of)g(the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 +b(ma)m(y)g(use)f(the)g(same)h(title)h(as)510 408 y(a)e(previous)f(v)m +(ersion)g(if)h(the)f(original)i(publisher)d(of)h(that)h(v)m(ersion)g +(giv)m(es)h(p)s(ermission.)360 545 y(B.)61 b(List)31 +b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h(one)g(or)f(more)h(p)s +(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c(for)510 +655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g(Mo)s +(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h(\014v)m +(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s(cumen)m +(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g(few)m +(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g(y)m +(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 +b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g +(publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 +b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 +b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) +363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i +(notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g +(other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 +y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g +(notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 +1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g +(form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 +1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f +(full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e +(required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f +(the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 +y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) +392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g +(\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g +(item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d +(authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 +b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 +b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e +(the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f +(title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s +(cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i +(then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m +(tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s +(cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m +(t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 +b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) +m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m +(t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 +b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 +y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) +m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h +(published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e +(the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) +d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s +(ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m +(titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k +(Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d +(preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) +h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m +(wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 +4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f +(in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 +b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 +b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 +4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 +b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 +b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 +4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 +4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f +(to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g +(in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 +b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g +(V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f +(app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g +(Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h +(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h +(designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 +b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p +eop end +%%Page: 147 153 +TeXDict begin 147 152 bop 150 -116 a Ft(App)s(endix)29 +b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 +b(147)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 +b(ersion's)36 b(license)g(notice.)57 b(These)330 408 +y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g +(section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) +i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g +(nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s +(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 +b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 +y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) +m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 +880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 +b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m +(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 +b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e +(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i +(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s +(di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f +(F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m +(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 +y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) +g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) +g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g +(same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m +(y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m +(y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g +(not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) +f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e +(publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 +1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s +(cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s +(ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g +(for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g +(Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 +b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m +(bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h +(released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g +(de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f +(v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 +y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s +(cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g +(as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) +g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 +b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m +(ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) +i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 +b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h +(single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m +(v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g +(but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f +(eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f +(at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g +(the)g(original)h(author)f(or)330 3455 y(publisher)23 +b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m +(um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 +3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h +(com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m +(bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g +(En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 +3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h +(En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 +4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 +b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 +b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m +(titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 +b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f +(collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g +(do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k +(and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f +(the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) +g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 +b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 +b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g +(of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 +4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 +b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h +(collection,)i(and)d(distribute)g(it)h(individu-)330 +5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g +(a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 +5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g +(other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 +5340 y(that)d(do)s(cumen)m(t.)p eop end +%%Page: 148 154 +TeXDict begin 148 153 bop 150 -116 a Ft(148)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 441 y(A)d(compilation)i +(of)e(the)g(Do)s(cumen)m(t)h(or)f(its)g(deriv)-5 b(ativ)m(es)30 +b(with)d(other)i(separate)g(and)e(indep)s(enden)m(t)330 +551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h(on)f(a)g(v)m +(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g(is)h(called) +330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i(resulting)e +(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g(the)330 +770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m +(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 +b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g +(aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g +(other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h +(not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h +(Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 +b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f +(these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 +y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f +(of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m +(er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m +(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h +(aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 +b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f +(in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 +1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f +(brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 +b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) +i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e +(translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h +(terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 +b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f +(sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i +(holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 +b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 +b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 +2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 +b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f +(License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) +h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 +b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 +y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g +(License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 +2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 +b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f +(translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f +(License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m +(ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 +b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m +(kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 +3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m +(e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 +3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 +b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 +b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h +(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 +b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g +(cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 +3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) +i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 +3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i +(of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h +(particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h +(\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g +(cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h +(terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 +b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 +b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h +(reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 +y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d +(license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h +(reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h +(holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g +(reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m +(ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f +(License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 +4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g +(violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h +(of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 +b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h +(terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 +b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g +(under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) +330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g +(reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f +(the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f +(an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end +%%Page: 149 155 +TeXDict begin 149 154 bop 150 -116 a Ft(App)s(endix)29 +b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560 +b(149)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE) +330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 +b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g +(the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 +b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 +b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 +653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f +(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 +762 y(See)c Fs(http://www.gnu.org/copy)o(left)o(/)p Ft(.)330 +897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g +(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 +b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g +(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h +(\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 +b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i +(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 +1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m +(ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g +(b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 +b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s +(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 +y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m +(ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) +h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 +b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f +(can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f +(License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) +m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m +(tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g +(for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 +2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) +e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 +2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m +(table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h +(facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g +(w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i +(edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 +b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s +(oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 +2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m +(orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 +2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m +(ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 +2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) +g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 +2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 +b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) +f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g +(organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e +(or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h +(as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 +3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h +(licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 +3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h +(License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 +3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f +(part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) +330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j +(w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s +(er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h +(Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) +g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g +(time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) +330 4005 y(eligible)h(for)e(relicensing.)p eop end +%%Page: 150 156 +TeXDict begin 150 155 bop 150 -116 a Ft(150)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g +(this)h(License)f(for)g(y)l(our)g(do)t(cumen)l(ts)150 +458 y Ft(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g +(y)m(ou)f(ha)m(v)m(e)i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f +(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g +(follo)m(wing)i(cop)m(yrigh)m(t)g(and)e(license)h(notices)g(just)f +(after)h(the)g(title)h(page:)468 680 y Fe(Copyright)42 +b(\(C\))79 b Fd(year)88 b(your)40 b(name)9 b Fe(.)468 +767 y(Permission)42 b(is)e(granted)g(to)g(copy,)h(distribute)g(and/or)g +(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g +(GNU)g(Free)g(Documentation)i(License,)f(Version)g(1.3)468 +941 y(or)f(any)g(later)g(version)h(published)h(by)d(the)h(Free)g +(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f +(no)f(Front-Cover)h(Texts,)g(and)f(no)f(Back-Cover)468 +1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f(license)i(is)f(included)h +(in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation) +h(License''.)275 1337 y 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 1447 y(\\with)6 b(.)22 b(.)g(.)12 +b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 1559 +y Fe(with)40 b(the)g(Invariant)h(Sections)g(being)g Fd(list)f(their)g +(titles)9 b Fe(,)41 b(with)547 1646 y(the)f(Front-Cover)i(Texts)e +(being)g Fd(list)9 b Fe(,)40 b(and)g(with)g(the)g(Back-Cover)i(Texts) +547 1733 y(being)e Fd(list)9 b Fe(.)275 1868 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 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g +(alternativ)m(es)i(to)e(suit)f(the)h(situation.)275 2112 +y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g +(examples)g(of)f(program)f(co)s(de,)j(w)m(e)e(recommend)g(releasing)150 +2222 y(these)44 b(examples)f(in)g(parallel)h(under)e(y)m(our)h(c)m +(hoice)i(of)e(free)g(soft)m(w)m(are)h(license,)k(suc)m(h)43 +b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s +(ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p +eop end +%%Page: 151 157 +TeXDict begin 151 156 bop 150 -116 a Ft(App)s(endix)29 +b(D:)i(Indexes)2623 b(151)150 299 y Fo(App)t(endix)52 +b(D)81 b(Indexes)150 631 y Fr(D.1)68 b(Index)45 b(of)g(Shell)g(Builtin) +g(Commands)150 868 y(.)150 984 y Fe(.)13 b Fc(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)39 b Fb(35)150 1218 y Fr(:)150 1335 +y Fe(:)13 b Fc(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)39 +b Fb(35)150 1579 y Fr([)150 1695 y Fe([)13 b Fc(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)39 b Fb(39)150 1938 y Fr(A)150 2055 +y Fe(alias)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)46 b Fb(41)150 +2289 y Fr(B)150 2405 y Fe(bg)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)37 b Fb(90)150 2493 y Fe(bind)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +49 b Fb(41)150 2580 y Fe(break)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)46 +b Fb(35)150 2668 y Fe(builtin)15 b Fc(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 +b Fb(43)150 2902 y Fr(C)150 3019 y Fe(caller)17 b Fc(:)e(:)e(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +43 b Fb(43)150 3106 y Fe(cd)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)37 b Fb(36)150 3194 y Fe(command)15 b Fc(:)f(:)f(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 +b Fb(43)150 3281 y Fe(compgen)12 b Fc(:)j(:)e(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)39 b +Fb(117)150 3368 y Fe(complete)10 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(117)150 +3456 y Fe(compopt)12 b Fc(:)j(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)39 b Fb(120)150 3543 +y Fe(continue)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 b Fb(36)150 3778 y +Fr(D)150 3894 y Fe(declare)15 b Fc(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 b +Fb(43)150 3982 y Fe(dirs)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(81)150 4069 y Fe(disown)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 +b Fb(91)150 4303 y Fr(E)150 4420 y Fe(echo)23 b Fc(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(45)150 4507 y Fe(enable)17 +b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(45)150 4595 y Fe(eval)23 +b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(36)150 4682 y +Fe(exec)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(36)150 +4770 y Fe(exit)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(36)150 4857 y Fe(export)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 +b Fb(36)150 5110 y Fr(F)150 5227 y Fe(fc)8 b Fc(:)14 +b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)35 b Fb(121)150 5314 +y Fe(fg)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)37 +b Fb(90)2025 868 y Fr(G)2025 988 y Fe(getopts)15 b Fc(:)f(:)f(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 +b Fb(37)2025 1250 y Fr(H)2025 1370 y Fe(hash)23 b Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(37)2025 1459 y Fe(help)23 +b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(46)2025 1549 +y Fe(history)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(122)2025 1811 +y Fr(J)2025 1931 y Fe(jobs)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 +b Fb(90)2025 2193 y Fr(K)2025 2313 y Fe(kill)23 b Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(91)2025 2557 y Fr(L)2025 +2677 y Fe(let)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(46)2025 2766 y Fe(local)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 +b Fb(46)2025 2856 y Fe(logout)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(46)2025 3118 y Fr(M)2025 3238 y Fe(mapfile)15 b +Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)41 b Fb(46)2025 3500 y Fr(P)2025 3620 +y Fe(popd)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(82)2025 +3710 y Fe(printf)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(47)2025 +3799 y Fe(pushd)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b +Fb(82)2025 3888 y Fe(pwd)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(38)2025 4150 y Fr(R)2025 4270 y Fe(read)23 b Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(47)2025 4360 y Fe(readarray)9 +b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)36 b Fb(49)2025 4449 y Fe(readonly)12 b Fc(:)j(:)e(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 +b Fb(38)2025 4538 y Fe(return)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(38)2025 4782 y Fr(S)2025 4902 y Fe(set)8 b Fc(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 b Fb(51)2025 4991 +y Fe(shift)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(38)2025 +5080 y Fe(shopt)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b +Fb(55)2025 5169 y Fe(source)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(49)2025 5259 y Fe(suspend)15 b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 +b Fb(91)p eop end +%%Page: 152 158 +TeXDict begin 152 157 bop 150 -116 a Ft(152)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(T)150 428 y Fe(test)23 +b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(39)150 522 y +Fe(times)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)46 b Fb(40)150 +616 y Fe(trap)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(40)150 709 y Fe(type)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(49)150 803 y Fe(typeset)15 b Fc(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 +b Fb(49)2025 299 y Fr(U)2025 415 y Fe(ulimit)17 b Fc(:)d(:)g(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +44 b Fb(49)2025 502 y Fe(umask)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 +b Fb(41)2025 590 y Fe(unalias)15 b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 +b Fb(51)2025 677 y Fe(unset)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 +b Fb(41)2025 910 y Fr(W)2025 1026 y Fe(wait)23 b Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(91)150 1259 y Fr(D.2)68 +b(Index)45 b(of)g(Shell)g(Reserv)l(ed)h(W)-11 b(ords)150 +1495 y(!)150 1612 y Fe(!)15 b Fc(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)42 b Fb(8)150 1855 y Fr([)150 1971 y Fe([[)10 +b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(12)150 +2220 y Fr(])150 2337 y Fe(]])10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)37 b Fb(12)150 2579 y Fa({)150 2695 y Fe({)13 b Fc(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)39 b Fb(13)150 2938 y Fa(})150 +3054 y Fe(})13 b Fc(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)39 +b Fb(13)150 3296 y Fr(C)150 3412 y Fe(case)23 b Fc(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(10)150 3646 y Fr(D)150 +3762 y Fe(do)12 b Fc(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 +b Fb(9)150 3849 y Fe(done)7 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(9)150 4083 y Fr(E)150 4199 y Fe(elif)23 b Fc(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(10)2025 1495 y Fe(else)23 +b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(10)2025 1586 +y Fe(esac)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(10)2025 +1838 y Fr(F)2025 1961 y Fe(fi)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)37 b Fb(10)2025 2052 y Fe(for)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)34 b Fb(10)2025 2143 y Fe(function)12 b Fc(:)j(:)e(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 +b Fb(14)2025 2394 y Fr(I)2025 2518 y Fe(if)10 b Fc(:)k(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)37 b Fb(10)2025 2608 y Fe(in)10 b +Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(10)2025 +2860 y Fr(S)2025 2983 y Fe(select)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(11)2025 3235 y Fr(T)2025 3358 y Fe(then)23 b Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(10)2025 3449 y Fe(time)7 +b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)34 b Fb(8)2025 +3701 y Fr(U)2025 3824 y Fe(until)23 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 +b Fb(9)2025 4076 y Fr(W)2025 4199 y Fe(while)23 b Fc(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(9)150 4431 y Fr(D.3)68 +b(P)l(arameter)47 b(and)d(V)-11 b(ariable)46 b(Index)150 +4668 y(!)150 4794 y Fe(!)13 b Fc(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)39 b Fb(17)150 5054 y Fr(#)150 5180 y Fe(#)13 b Fc(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)39 b Fb(17)2025 4668 y Fr($)2025 +4794 y Fe($)13 b Fc(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 +b Fb(17)2025 5067 y Fr(*)2025 5192 y Fe(*)13 b Fc(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(16)p eop end +%%Page: 153 159 +TeXDict begin 153 158 bop 150 -116 a Ft(App)s(endix)29 +b(D:)i(Indexes)2623 b(153)150 299 y Fr(-)150 415 y Fe(-)13 +b Fc(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)39 b Fb(17)150 +649 y Fr(?)150 765 y Fe(?)13 b Fc(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)39 b Fb(17)150 999 y Fr(@)150 1115 y Fe(@)13 b +Fc(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)39 b Fb(16)p +159 1349 41 6 v 150 1465 a Fe(_)13 b Fc(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)39 b Fb(17)150 1699 y Fr(0)150 1815 y Fe(0)13 +b Fc(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)39 b Fb(17)150 +2049 y Fr(A)150 2166 y Fe(auto_resume)24 b Fc(:)13 b(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(92)150 +2409 y Fr(B)150 2525 y Fe(BASH)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(61)150 2612 y Fe(BASH_ALIASES)22 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(62)150 2700 +y Fe(BASH_ARGC)9 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(62)150 2787 y +Fe(BASH_ARGV)9 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(62)150 2874 y Fe(BASH_CMDS)9 +b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)36 b Fb(62)150 2962 y Fe(BASH_COMMAND)22 +b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 +b Fb(62)150 3049 y Fe(BASH_ENV)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 b +Fb(62)150 3137 y Fe(BASH_EXECUTION_STRING)13 b Fc(:)18 +b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)39 b Fb(62)150 3224 y Fe(BASH_LINENO)24 +b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +48 b Fb(63)150 3311 y Fe(BASH_REMATCH)22 b Fc(:)13 b(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(63)150 +3399 y Fe(BASH_SOURCE)24 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(63)150 3486 y Fe(BASH_SUBSHELL)16 +b Fc(:)g(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 +b Fb(63)150 3573 y Fe(BASH_VERSINFO)16 b Fc(:)g(:)e(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(63)150 3661 y Fe(BASH_VERSION)22 +b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 +b Fb(63)150 3748 y Fe(BASH_XTRACEFD)16 b Fc(:)g(:)e(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(63)150 3835 y Fe(BASHOPTS)12 +b Fc(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)38 b Fb(62)150 3923 y Fe(BASHPID)15 b +Fc(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)41 b Fb(62)150 4010 y Fe(bell-style)7 +b Fc(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)33 b Fb(97)150 4098 y Fe(bind-tty-special-chars)10 +b Fc(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(97)150 4350 y Fr(C)150 +4466 y Fe(CDPATH)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(61)150 +4554 y Fe(COLUMNS)15 b Fc(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 b Fb(64)150 +4641 y Fe(comment-begin)16 b Fc(:)g(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)43 b Fb(97)150 4728 y Fe(COMP_CWORD)7 +b Fc(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)33 b Fb(64)150 4816 y Fe(COMP_KEY)12 b Fc(:)j(:)e(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 +b Fb(64)150 4903 y Fe(COMP_LINE)9 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b +Fb(64)150 4991 y Fe(COMP_POINT)7 b Fc(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)33 b Fb(64)150 +5078 y Fe(COMP_TYPE)9 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(64)150 5165 +y Fe(COMP_WORDBREAKS)11 b Fc(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)38 b Fb(64)150 5253 y Fe(COMP_WORDS)7 b Fc(:)15 +b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +33 b Fb(64)150 5340 y Fe(completion-prefix-display-len)q(gth)25 +b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(97)2025 +299 y Fe(completion-query-items)10 b Fc(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)37 +b Fb(97)2025 387 y Fe(COMPREPLY)9 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b +Fb(65)2025 475 y Fe(convert-meta)21 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(98)2025 713 y +Fr(D)2025 831 y Fe(DIRSTACK)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(65)2025 +919 y Fe(disable-completion)25 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +47 b Fb(98)2025 1175 y Fr(E)2025 1293 y Fe(editing-mode)21 +b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 +b Fb(98)2025 1381 y Fe(EMACS)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 +b Fb(65)2025 1470 y Fe(enable-keypad)16 b Fc(:)g(:)d(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(98)2025 1558 y +Fe(EUID)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(65)2025 +1646 y Fe(expand-tilde)21 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(98)2025 1902 y Fr(F)2025 +2020 y Fe(FCEDIT)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(65)2025 +2108 y Fe(FIGNORE)15 b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(65)2025 +2196 y Fe(FUNCNAME)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(65)2025 2434 +y Fr(G)2025 2552 y Fe(GLOBIGNORE)7 b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(65)2025 +2640 y Fe(GROUPS)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(65)2025 +2878 y Fr(H)2025 2996 y Fe(histchars)9 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 +b Fb(65)2025 3084 y Fe(HISTCMD)15 b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 +b Fb(66)2025 3172 y Fe(HISTCONTROL)24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)48 b Fb(66)2025 +3260 y Fe(HISTFILE)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(66)2025 3348 +y Fe(HISTFILESIZE)21 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)45 b Fb(66)2025 3436 y Fe(HISTIGNORE)7 +b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)33 b Fb(66)2025 3525 y Fe(history-preserve-point)10 +b Fc(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)37 b Fb(98)2025 3613 y Fe(history-size)21 +b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 +b Fb(98)2025 3701 y Fe(HISTSIZE)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b +Fb(66)2025 3789 y Fe(HISTTIMEFORMAT)14 b Fc(:)i(:)d(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(66)2025 3877 y Fe(HOME)23 +b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(61)2025 3965 +y Fe(horizontal-scroll-mode)10 b Fc(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)37 +b Fb(98)2025 4053 y Fe(HOSTFILE)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b +Fb(67)2025 4141 y Fe(HOSTNAME)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b +Fb(67)2025 4230 y Fe(HOSTTYPE)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b +Fb(67)2025 4467 y Fr(I)2025 4585 y Fe(IFS)8 b Fc(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 b Fb(61)2025 4673 +y Fe(IGNOREEOF)9 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(67)2025 4761 y +Fe(input-meta)7 b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(99)2025 4850 y Fe(INPUTRC)15 +b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)41 b Fb(67)2025 4938 y Fe(isearch-terminators)18 +b Fc(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(99)2025 5175 +y Fr(K)2025 5293 y Fe(keymap)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(99)p eop end +%%Page: 154 160 +TeXDict begin 154 159 bop 150 -116 a Ft(154)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(L)150 415 y Fe(LANG)23 +b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(67)150 502 y +Fe(LC_ALL)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(67)150 589 +y Fe(LC_COLLATE)7 b Fc(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)33 b Fb(67)150 676 y Fe(LC_CTYPE)12 +b Fc(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)38 b Fb(67)150 764 y Fe(LC_MESSAGES)13 +b Fc(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 +b Fb(7,)26 b(67)150 851 y Fe(LC_NUMERIC)7 b Fc(:)15 b(:)e(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)33 +b Fb(67)150 938 y Fe(LINENO)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 +b Fb(67)150 1025 y Fe(LINES)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)46 +b Fb(67)150 1258 y Fr(M)150 1374 y Fe(MACHTYPE)12 b Fc(:)j(:)e(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 +b Fb(67)150 1461 y Fe(MAIL)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(61)150 1549 y Fe(MAILCHECK)9 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b +Fb(68)150 1636 y Fe(MAILPATH)12 b Fc(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 b Fb(61)150 +1723 y Fe(mark-modified-lines)18 b Fc(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 +b Fb(99)150 1810 y Fe(mark-symlinked-directories)18 b +Fc(:)g(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(99)150 1897 y Fe(match-hidden-files)25 b Fc(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(99)150 1985 y +Fe(meta-flag)9 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(99)150 2236 y Fr(O)150 +2352 y Fe(OLDPWD)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(68)150 +2439 y Fe(OPTARG)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(61)150 +2526 y Fe(OPTERR)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(68)150 +2614 y Fe(OPTIND)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(61)150 +2701 y Fe(OSTYPE)17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(68)150 +2788 y Fe(output-meta)24 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(99)150 3040 y Fr(P)150 +3156 y Fe(page-completions)9 b Fc(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)35 b Fb(99)150 3243 y Fe(PATH)23 b Fc(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(61)150 3330 y Fe(PIPESTATUS)7 +b Fc(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)33 b Fb(68)150 3417 y Fe(POSIXLY_CORRECT)11 b +Fc(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 +b Fb(68)150 3504 y Fe(PPID)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(68)150 3592 y Fe(PROMPT_COMMAND)14 b Fc(:)i(:)d(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(68)2025 299 y Fe(PROMPT_DIRTRIM)14 +b Fc(:)i(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 +b Fb(68)2025 387 y Fe(PS1)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(61)2025 475 y Fe(PS2)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(61)2025 563 y Fe(PS3)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(68)2025 651 y Fe(PS4)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(68)2025 739 y Fe(PWD)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(68)2025 977 y Fr(R)2025 1095 y Fe(RANDOM)17 b Fc(:)d(:)g(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)44 b Fb(68)2025 1183 y Fe(REPLY)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 +b Fb(68)2025 1271 y Fe(revert-all-at-newline)11 b Fc(:)18 +b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)38 b Fb(100)2025 1508 y Fr(S)2025 1626 +y Fe(SECONDS)15 b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(69)2025 1714 +y Fe(SHELL)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(69)2025 +1802 y Fe(SHELLOPTS)9 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(69)2025 1890 +y Fe(SHLVL)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(69)2025 +1978 y Fe(show-all-if-ambiguous)11 b Fc(:)18 b(:)13 b(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 +b Fb(100)2025 2067 y Fe(show-all-if-unmodified)8 b Fc(:)18 +b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)35 b Fb(100)2025 2155 y Fe(skip-completed-text)16 +b Fc(:)h(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(100)2025 2411 y Fr(T)2025 +2529 y Fe(TEXTDOMAIN)9 b Fc(:)15 b(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(7)2025 2617 +y Fe(TEXTDOMAINDIR)21 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)46 b Fb(7)2025 2705 y Fe(TIMEFORMAT)7 +b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)33 b Fb(69)2025 2793 y Fe(TMOUT)21 b Fc(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)46 b Fb(69)2025 2881 y Fe(TMPDIR)17 +b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(70)2025 3119 y Fr(U)2025 +3236 y Fe(UID)8 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(70)2025 3474 y Fr(V)2025 3592 y Fe(visible-stats)14 +b Fc(:)i(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)41 +b Fb(100)150 3831 y Fr(D.4)68 b(F)-11 b(unction)44 b(Index)150 +4068 y(A)150 4195 y Fe(abort)27 b(\(C-g\))9 b Fc(:)14 +b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 +b Fb(112)150 4287 y Fe(accept-line)28 b(\(Newline)g(or)e(Return\))e +Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)50 b +Fb(107)150 4380 y Fe(alias-expand-line)29 b(\(\))21 b +Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(114)150 4659 y Fr(B)150 +4785 y Fe(backward-char)29 b(\(C-b\))23 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +49 b Fb(106)150 4878 y Fe(backward-delete-char)30 b(\(Rubout\))14 +b Fc(:)h(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 +b Fb(108)150 4970 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))16 +b Fc(:)f(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(109)150 +5063 y Fe(backward-kill-word)30 b(\(\))18 b Fc(:)13 b(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 +b Fb(109)150 5155 y Fe(backward-kill-word)30 b(\(M-DEL\))23 +b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +49 b Fb(109)150 5248 y Fe(backward-word)29 b(\(M-b\))23 +b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)49 b Fb(106)150 5340 y +Fe(beginning-of-history)30 b(\(M-<\))23 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(107)2025 +4068 y Fe(beginning-of-line)29 b(\(C-a\))13 b Fc(:)h(:)f(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 +b Fb(106)2025 4329 y Fr(C)2025 4449 y Fe(call-last-kbd-macro)30 +b(\(C-x)c(e\))9 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)36 b Fb(112)2025 4538 y Fe(capitalize-word)29 +b(\(M-c\))18 b Fc(:)c(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(109)2025 4627 +y Fe(character-search)29 b(\(C-]\))15 b Fc(:)f(:)g(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 +b Fb(113)2025 4716 y Fe(character-search-backward)31 +b(\(M-C-]\))23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)48 +b Fb(113)2025 4806 y Fe(clear-screen)28 b(\(C-l\))8 b +Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(106)2025 +4895 y Fe(complete)27 b(\(TAB\))20 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)45 b Fb(110)2025 4984 y Fe(complete-command)29 +b(\(M-!\))15 b Fc(:)f(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(111)2025 5073 +y Fe(complete-filename)29 b(\(M-/\))13 b Fc(:)h(:)f(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 +b Fb(111)2025 5162 y Fe(complete-hostname)29 b(\(M-@\))13 +b Fc(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)40 b Fb(111)2025 5251 y Fe(complete-into-braces)30 +b(\(M-{\))23 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)49 b Fb(112)2025 5340 y Fe(complete-username)29 +b(\(M-~\))13 b Fc(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(111)p eop end +%%Page: 155 161 +TeXDict begin 155 160 bop 150 -116 a Ft(App)s(endix)29 +b(D:)i(Indexes)2623 b(155)150 299 y Fe(complete-variable)29 +b(\(M-$\))13 b Fc(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(111)150 389 y Fe(copy-backward-word) +30 b(\(\))18 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(110)150 479 +y Fe(copy-forward-word)29 b(\(\))21 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 +b Fb(110)150 569 y Fe(copy-region-as-kill)30 b(\(\))15 +b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)42 b Fb(110)150 836 y Fr(D)150 958 y +Fe(dabbrev-expand)29 b(\(\))11 b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +38 b Fb(112)150 1048 y Fe(delete-char)28 b(\(C-d\))11 +b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(108)150 +1138 y Fe(delete-char-or-list)30 b(\(\))15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)42 +b Fb(111)150 1228 y Fe(delete-horizontal-space)31 b(\(\))22 +b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +49 b Fb(109)150 1318 y Fe(digit-argument)29 b(\()p Fd(M-0)p +Fe(,)e Fd(M-1)p Fe(,)f(...)g Fd(M--)p Fe(\))d Fc(:)13 +b(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(110)150 1408 y Fe +(display-shell-version)30 b(\(C-x)d(C-v\))16 b Fc(:)e(:)f(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(114)150 1499 y Fe(do-uppercase-version) +30 b(\(M-a,)d(M-b,)f(M-)p Fd(x)9 b Fe(,)27 b(...\))325 +1586 y Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)48 b Fb(112)150 1676 +y Fe(downcase-word)29 b(\(M-l\))23 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)49 +b Fb(108)150 1766 y Fe(dump-functions)29 b(\(\))11 b +Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(113)150 +1856 y Fe(dump-macros)28 b(\(\))19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)45 b Fb(113)150 1946 y Fe(dump-variables)29 +b(\(\))11 b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 +b Fb(113)150 2036 y Fe(dynamic-complete-history)31 b(\(M-TAB\))7 +b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(112)150 +2303 y Fr(E)150 2425 y Fe(edit-and-execute-command)e(\(C-xC-e\))23 +b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)48 b Fb(114)150 +2515 y Fe(end-kbd-macro)29 b(\(C-x)d(\)\))7 b Fc(:)14 +b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)34 b Fb(112)150 2605 y Fe(end-of-history)29 +b(\(M->\))21 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(107)150 +2695 y Fe(end-of-line)28 b(\(C-e\))11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)38 b Fb(106)150 2785 y Fe(exchange-point-and-mark)31 +b(\(C-x)26 b(C-x\))11 b Fc(:)j(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)38 +b Fb(113)150 3052 y Fr(F)150 3174 y Fe(forward-backward-delete-char)32 +b(\(\))9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 +b Fb(108)150 3264 y Fe(forward-char)28 b(\(C-f\))8 b +Fc(:)15 b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(106)150 +3354 y Fe(forward-search-history)c(\(C-s\))17 b Fc(:)d(:)f(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(107)150 3445 +y Fe(forward-word)28 b(\(M-f\))8 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)35 b Fb(106)150 3701 y Fr(G)150 3823 y Fe(glob-complete-word)30 +b(\(M-g\))10 b Fc(:)k(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(114)150 3913 y Fe(glob-expand-word)29 +b(\(C-x)e(*\))17 b Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(114)150 4003 y Fe +(glob-list-expansions)30 b(\(C-x)d(g\))7 b Fc(:)13 b(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(114)150 4270 +y Fr(H)150 4392 y Fe(history-and-alias-expand-line)f(\(\))7 +b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(114)150 +4482 y Fe(history-expand-line)d(\(M-^\))8 b Fc(:)14 b(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(114)150 4572 y Fe(history-search-backward)d(\(\))22 +b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +49 b Fb(107)150 4662 y Fe(history-search-forward)31 b(\(\))8 +b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)34 b Fb(107)150 4929 y Fr(I)150 5051 y Fe(insert-comment)29 +b(\(M-#\))21 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(113)150 +5141 y Fe(insert-completions)30 b(\(M-*\))10 b Fc(:)k(:)f(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 +b Fb(111)150 5231 y Fe(insert-last-argument)30 b(\(M-.)d(or)f(M-_\))18 +b Fc(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(114)2025 +299 y Fr(K)2025 416 y Fe(kill-line)27 b(\(C-k\))16 b +Fc(:)f(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(109)2025 +503 y Fe(kill-region)28 b(\(\))19 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)45 b Fb(110)2025 591 y Fe(kill-whole-line)29 +b(\(\))8 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b +Fb(109)2025 678 y Fe(kill-word)27 b(\(M-d\))16 b Fc(:)f(:)e(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(109)2025 921 y Fr(M)2025 +1038 y Fe(magic-space)28 b(\(\))19 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)45 b Fb(114)2025 1126 y Fe(menu-complete)28 +b(\(\))13 b Fc(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 +b Fb(111)2025 1213 y Fe(menu-complete-backward)30 b(\(\))8 +b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)34 b Fb(111)2025 1467 y Fr(N)2025 1584 y Fe(next-history)28 +b(\(C-n\))8 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 +b Fb(107)2025 1671 y Fe(non-incremental-forward-search)q(-hist)q(ory)d +(\(M-n\))2200 1758 y Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)49 b +Fb(107)2025 1846 y Fe(non-incremental-reverse-search)q(-hist)q(ory)32 +b(\(M-p\))2200 1933 y Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)49 b +Fb(107)2025 2168 y Fr(O)2025 2285 y Fe(operate-and-get-next)30 +b(\(C-o\))23 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)49 b Fb(114)2025 2372 y Fe(overwrite-mode)29 +b(\(\))11 b Fc(:)i(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 +b Fb(109)2025 2615 y Fr(P)2025 2732 y Fe(possible-command-completions) +32 b(\(C-x)26 b(!\))21 b Fc(:)13 b(:)g(:)h(:)f(:)47 b +Fb(112)2025 2820 y Fe(possible-completions)30 b(\(M-?\))23 +b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +49 b Fb(110)2025 2907 y Fe(possible-filename-completions)32 +b(\(C-x)26 b(/\))18 b Fc(:)c(:)f(:)g(:)45 b Fb(111)2025 +2995 y Fe(possible-hostname-completions)32 b(\(C-x)26 +b(@\))18 b Fc(:)c(:)f(:)g(:)45 b Fb(111)2025 3082 y Fe +(possible-username-completions)32 b(\(C-x)26 b(~\))18 +b Fc(:)c(:)f(:)g(:)45 b Fb(111)2025 3170 y Fe +(possible-variable-completions)32 b(\(C-x)26 b($\))18 +b Fc(:)c(:)f(:)g(:)45 b Fb(111)2025 3258 y Fe(prefix-meta)28 +b(\(ESC\))11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 +b Fb(112)2025 3345 y Fe(previous-history)29 b(\(C-p\))15 +b Fc(:)f(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)42 b Fb(107)2025 3599 y Fr(Q)2025 3715 +y Fe(quoted-insert)28 b(\(C-q)f(or)f(C-v\))19 b Fc(:)14 +b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)46 +b Fb(108)2025 3969 y Fr(R)2025 4086 y Fe(re-read-init-file)29 +b(\(C-x)e(C-r\))9 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)36 b Fb(112)2025 4173 y Fe(redraw-current-line)30 +b(\(\))15 b Fc(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(106)2025 4261 y Fe +(reverse-search-history)30 b(\(C-r\))17 b Fc(:)e(:)e(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 b Fb(107)2025 4348 y Fe(revert-line)28 +b(\(M-r\))11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 +b Fb(112)2025 4592 y Fr(S)2025 4708 y Fe(self-insert)28 +b(\(a,)e(b,)g(A,)g(1,)g(!,)g(...)q(\))7 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(108)2025 4796 y Fe(set-mark)27 +b(\(C-@\))20 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 +b Fb(113)2025 4883 y Fe(shell-backward-word)30 b(\(\))15 +b Fc(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)42 b Fb(106)2025 4971 y Fe(shell-expand-line)29 +b(\(M-C-e\))8 b Fc(:)14 b(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)34 b Fb(114)2025 5059 y Fe(shell-forward-word)29 +b(\(\))18 b Fc(:)c(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(106)2025 5146 +y Fe(shell-kill-word)29 b(\(\))8 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)35 b Fb(109)2025 5234 y Fe(skip-csi-sequence)29 b(\(\))21 +b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(113)2025 5321 y Fe(start-kbd-macro) +29 b(\(C-x)d(\(\))20 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)46 b Fb(112)p eop +end +%%Page: 156 162 +TeXDict begin 156 161 bop 150 -116 a Ft(156)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(T)150 415 y Fe(tilde-expand)d +(\(M-&\))8 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 +b Fb(113)150 502 y Fe(transpose-chars)29 b(\(C-t\))18 +b Fc(:)c(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)44 b Fb(108)150 590 y Fe(transpose-words)29 +b(\(M-t\))18 b Fc(:)c(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(108)150 842 +y Fr(U)150 958 y Fe(undo)27 b(\(C-_)f(or)g(C-x)g(C-u\))c +Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(112)150 1046 y Fe +(universal-argument)30 b(\(\))18 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 +b Fb(110)150 1133 y Fe(unix-filename-rubout)30 b(\(\))13 +b Fc(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)39 b Fb(109)2025 299 y Fe(unix-line-discard)29 +b(\(C-u\))13 b Fc(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(109)2025 389 y Fe(unix-word-rubout) +29 b(\(C-w\))15 b Fc(:)f(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(109)2025 478 +y Fe(upcase-word)28 b(\(M-u\))11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)38 b Fb(108)2025 743 y Fr(Y)2025 864 y Fe(yank)26 +b(\(C-y\))12 b Fc(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)39 b Fb(110)2025 954 y Fe(yank-last-arg)28 +b(\(M-.)f(or)f(M-_\))19 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)46 b Fb(108)2025 1043 y Fe(yank-nth-arg)28 +b(\(M-C-y\))22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(107)2025 +1133 y Fe(yank-pop)27 b(\(M-y\))20 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)45 b Fb(110)150 1366 y Fr(D.5)68 +b(Concept)45 b(Index)150 1625 y(A)150 1743 y Fb(alias)27 +b(expansion)18 b Fc(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)44 b Fb(79)150 1831 y(arithmetic)26 b(ev)l(aluation)16 +b Fc(:)e(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(78)150 1919 +y(arithmetic)26 b(expansion)d Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 +b Fb(23)150 2007 y(arithmetic,)27 b(shell)17 b Fc(:)d(:)f(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fb(78)150 2095 y(arra)n(ys)15 +b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b Fb(80)150 2348 y Fr(B)150 +2466 y Fb(bac)n(kground)9 b Fc(:)j(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(89)150 2554 y(Bash)26 +b(con\014guration)d Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(127)150 2642 y(Bash)26 b(installation)c Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)46 b Fb(127)150 +2729 y(Bourne)26 b(shell)13 b Fc(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(5)150 2817 +y(brace)26 b(expansion)20 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)47 b Fb(18)150 2905 y(builtin)9 b Fc(:)k(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)36 b Fb(3)150 3142 y Fr(C)150 3260 y Fb(command)26 +b(editing)15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 +b Fb(94)150 3348 y(command)26 b(execution)d Fc(:)13 b(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)49 b Fb(30)150 3435 y(command)26 b(expansion)16 +b Fc(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)42 b Fb(29)150 +3523 y(command)26 b(history)12 b Fc(:)h(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)39 b Fb(121)150 3611 y(command)26 b(searc)n(h)10 +b Fc(:)j(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 +b Fb(30)150 3699 y(command)26 b(substitution)15 b Fc(:)e(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)41 b Fb(22)150 3787 y(command)26 b(timing)7 +b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 +b Fb(8)150 3875 y(commands,)26 b(comp)r(ound)18 b Fc(:)c(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)45 b Fb(9)150 3963 y(commands,)26 b(conditional)d +Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(10)150 4051 y(commands,)26 +b(grouping)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 +b Fb(13)150 4139 y(commands,)26 b(lists)6 b Fc(:)15 b(:)e(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(8)150 +4227 y(commands,)26 b(lo)r(oping)18 b Fc(:)d(:)e(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)45 b Fb(9)150 4315 y(commands,)26 b(pip)r(elines)12 +b Fc(:)i(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(8)150 +4403 y(commands,)26 b(shell)15 b Fc(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)42 b Fb(7)150 4491 y(commands,)26 +b(simple)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 +b Fb(8)150 4579 y(commen)n(ts,)26 b(shell)7 b Fc(:)15 +b(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 +b Fb(7)150 4667 y(completion)27 b(builtins)15 b Fc(:)e(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)42 b Fb(117)150 4755 y(con\014guration)15 +b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)42 +b Fb(127)150 4842 y(con)n(trol)26 b(op)r(erator)21 b +Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 +b Fb(3)150 4930 y(copro)r(cess)12 b Fc(:)i(:)g(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b +Fb(14)150 5184 y Fr(D)150 5301 y Fb(directory)26 b(stac)n(k)c +Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)49 +b Fb(81)2025 1625 y Fr(E)2025 1745 y Fb(editing)26 b(command)g(lines)13 +b Fc(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)39 b Fb(94)2025 1834 +y(en)n(vironmen)n(t)12 b Fc(:)g(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(31)2025 1923 y(ev)l(aluation,)26 +b(arithmetic)e Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)49 b +Fb(78)2025 2012 y(ev)n(en)n(t)24 b(designators)14 b Fc(:)h(:)e(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)41 b Fb(123)2025 2101 y(execution)25 +b(en)n(vironmen)n(t)11 b Fc(:)i(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)37 +b Fb(30)2025 2190 y(exit)25 b(status)18 b Fc(:)c(:)f(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)45 b Fb(3,)26 +b(32)2025 2279 y(expansion)20 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(17)2025 +2368 y(expansion,)26 b(arithmetic)12 b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)38 b Fb(23)2025 2457 y(expansion,)26 b(brace)10 b +Fc(:)j(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 +b Fb(18)2025 2546 y(expansion,)26 b(\014lename)12 b Fc(:)h(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)38 b Fb(24)2025 2635 y(expansion,)26 +b(parameter)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)40 +b Fb(19)2025 2724 y(expansion,)26 b(pathname)18 b Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)45 b Fb(24)2025 2813 y(expansion,)26 +b(tilde)8 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)34 b Fb(19)2025 2902 y(expressions,)27 b(arithmetic)7 +b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(78)2025 2991 +y(expressions,)27 b(conditional)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 +b Fb(76)2025 3250 y Fr(F)2025 3369 y Fb(\014eld)15 b +Fc(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)42 b Fb(3)2025 3458 +y(\014lename)15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)42 b Fb(3)2025 +3547 y(\014lename)26 b(expansion)c Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)49 b Fb(24)2025 3636 y(foreground)23 b Fc(:)13 +b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +49 b Fb(89)2025 3725 y(functions,)26 b(shell)21 b Fc(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)47 +b Fb(14)2025 3984 y Fr(H)2025 4104 y Fb(history)25 b(builtins)14 +b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)41 +b Fb(121)2025 4193 y(history)25 b(ev)n(en)n(ts)19 b Fc(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)46 +b Fb(123)2025 4282 y(history)25 b(expansion)8 b Fc(:)14 +b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(123)2025 +4371 y(history)25 b(list)c Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)47 b Fb(121)2025 4460 +y(History)-6 b(,)25 b(ho)n(w)h(to)g(use)13 b Fc(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)40 b Fb(120)2025 4719 y Fr(I)2025 4838 y +Fb(iden)n(ti\014er)22 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)50 b Fb(3)2025 +4927 y(initialization)28 b(\014le,)e(readline)13 b Fc(:)h(:)f(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +40 b Fb(96)2025 5016 y(installation)13 b Fc(:)i(:)e(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)40 b Fb(127)2025 +5105 y(in)n(teraction,)26 b(readline)c Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)47 b Fb(93)2025 5194 y(in)n(teractiv)n(e)26 +b(shell)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)40 +b Fb(73,)27 b(75)2025 5283 y(in)n(ternationalization)14 +b Fc(:)h(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b +Fb(7)p eop end +%%Page: 157 163 +TeXDict begin 157 162 bop 150 -116 a Ft(App)s(endix)29 +b(D:)i(Indexes)2623 b(157)150 299 y Fr(J)150 415 y Fb(job)16 +b Fc(:)e(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)43 b Fb(3)150 +503 y(job)26 b(con)n(trol)13 b Fc(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)40 b Fb(3,)26 b(89)150 753 +y Fr(K)150 870 y Fb(kill)g(ring)21 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 +b Fb(95)150 957 y(killing)27 b(text)19 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)46 b +Fb(95)150 1208 y Fr(L)150 1324 y Fb(lo)r(calization)14 +b Fc(:)i(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)41 b Fb(7)150 1412 y(login)27 b(shell)17 b +Fc(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)44 b Fb(73)150 1662 y Fr(M)150 1779 y Fb(matc)n(hing,)26 +b(pattern)20 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 +b Fb(24)150 1866 y(metac)n(haracter)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(3)150 2100 +y Fr(N)150 2217 y Fb(name)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)40 +b Fb(3)150 2304 y(nativ)n(e)25 b(languages)13 b Fc(:)i(:)e(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)40 b Fb(7)150 2391 +y(notation,)27 b(readline)9 b Fc(:)k(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)35 b Fb(94)150 2642 y Fr(O)150 2759 y Fb(op)r(erator,)27 +b(shell)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)43 b Fb(3)150 3009 y Fr(P)150 3126 y Fb(parameter)26 +b(expansion)7 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)34 +b Fb(19)150 3213 y(parameters)17 b Fc(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)43 b Fb(15)150 +3300 y(parameters,)27 b(p)r(ositional)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)44 b Fb(16)150 3388 y(parameters,)27 b(sp)r(ecial)18 +b Fc(:)c(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)44 b Fb(16)150 +3475 y(pathname)25 b(expansion)12 b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)38 b Fb(24)150 3563 y(pattern)25 b(matc)n(hing)14 +b Fc(:)g(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)40 +b Fb(24)150 3650 y(pip)r(eline)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)50 +b Fb(8)150 3737 y(POSIX)17 b Fc(:)12 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 +b Fb(3)150 3825 y(POSIX)25 b(Mo)r(de)11 b Fc(:)i(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(84)150 +3912 y(pro)r(cess)27 b(group)9 b Fc(:)k(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)36 b Fb(3)150 4000 y(pro)r(cess)27 +b(group)e(ID)d Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)49 b Fb(3)150 4087 y(pro)r(cess)27 b(substitution)21 +b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 b Fb(23)150 +4175 y(programmable)27 b(completion)20 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)46 +b Fb(115)150 4262 y(prompting)11 b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)37 b Fb(82)2025 +299 y Fr(Q)2025 419 y Fb(quoting)10 b Fc(:)j(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)37 +b Fb(6)2025 508 y(quoting,)26 b(ANSI)13 b Fc(:)e(:)j(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(6)2025 +768 y Fr(R)2025 888 y Fb(Readline,)26 b(ho)n(w)g(to)g(use)7 +b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(92)2025 +977 y(redirection)7 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)33 b Fb(26)2025 1066 +y(reserv)n(ed)25 b(w)n(ord)7 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34 b Fb(3)2025 1155 +y(restricted)26 b(shell)8 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)35 b Fb(84)2025 1244 y(return)25 +b(status)c Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)48 b Fb(4)2025 1487 y Fr(S)2025 1607 y +Fb(shell)26 b(arithmetic)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)37 b Fb(78)2025 1696 y(shell)26 b(function)12 +b Fc(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)38 +b Fb(14)2025 1785 y(shell)26 b(script)c Fc(:)13 b(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b +Fb(33)2025 1874 y(shell)26 b(v)l(ariable)18 b Fc(:)c(:)f(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)45 b Fb(15)2025 +1964 y(shell,)26 b(in)n(teractiv)n(e)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)40 b Fb(75)2025 2053 y(signal)7 +b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)34 b Fb(4)2025 2142 +y(signal)27 b(handling)17 b Fc(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)44 b Fb(32)2025 2231 y(sp)r(ecial)27 +b(builtin)10 b Fc(:)j(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +37 b Fb(4,)26 b(59)2025 2320 y(startup)f(\014les)d Fc(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 +b Fb(73)2025 2409 y(susp)r(ending)25 b(jobs)6 b Fc(:)14 +b(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 +b Fb(89)2025 2669 y Fr(T)2025 2789 y Fb(tilde)26 b(expansion)18 +b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)45 +b Fb(19)2025 2878 y(tok)n(en)11 b Fc(:)h(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)38 +b Fb(4)2025 2967 y(translation,)27 b(nativ)n(e)e(languages)13 +b Fc(:)i(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)40 b Fb(7)2025 3227 y Fr(V)2025 3347 y Fb(v)l(ariable,)26 +b(shell)8 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)34 b Fb(15)2025 3436 y(v)l(ariables,)27 b(readline)21 +b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)47 +b Fb(97)2025 3695 y Fr(W)2025 3815 y Fb(w)n(ord)21 b +Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(4)2025 3904 +y(w)n(ord)26 b(splitting)21 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(23)2025 4164 y Fr(Y)2025 +4284 y Fb(y)n(anking)25 b(text)9 b Fc(:)j(:)h(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)35 b Fb(95)p eop +end +%%Page: 158 164 +TeXDict begin 158 163 bop eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/doc/bashref.texi b/doc/bashref.texi new file mode 100644 index 0000000..bf8e3d0 --- /dev/null +++ b/doc/bashref.texi @@ -0,0 +1,7931 @@ +\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--2009 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.3 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 are free to copy and modify +this GNU manual. Buying copies from GNU Press supports the FSF in +developing GNU and promoting software freedom.'' + +@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:: What job control is and how Bash allows you + to use it. +* Command Line Editing:: Chapter describing the command line + editing features. +* Using History Interactively:: Command History Expansion +* Installing Bash:: How to build and install Bash on your system. +* Reporting Bugs:: How to report bugs in Bash. +* Major Differences From The Bourne Shell:: A terse list of the differences + between Bash and historical + versions of /bin/sh. +* GNU Free Documentation License:: Copying and sharing this documentation. +* Indexes:: Various indexes for this manual. +@end menu +@end ifnottex + +@node Introduction +@chapter Introduction +@menu +* What is Bash?:: A short description of Bash. +* What is a shell?:: A brief introduction to shells. +@end menu + +@node What is Bash? +@section What is Bash? + +Bash is the shell, or command language interpreter, +for the @sc{gnu} operating system. +The name is an acronym for the @samp{Bourne-Again SHell}, +a pun on Stephen Bourne, the author of the direct ancestor of +the current Unix shell @code{sh}, +which appeared in the Seventh Edition Bell Labs Research version +of Unix. + +Bash is largely compatible with @code{sh} and incorporates useful +features from the Korn shell @code{ksh} and the C shell @code{csh}. +It is intended to be a conformant implementation of the @sc{ieee} +@sc{posix} Shell and Tools portion of the @sc{ieee} @sc{posix} +specification (@sc{ieee} Standard 1003.1). +It offers functional improvements over @code{sh} for both interactive and +programming use. + +While the @sc{gnu} operating system provides other shells, including +a version of @code{csh}, Bash is the default shell. +Like other @sc{gnu} software, Bash is quite portable. It currently runs +on nearly every version of Unix and a few other operating systems @minus{} +independently-supported ports exist for @sc{ms-dos}, @sc{os/2}, +and Windows platforms. + +@node What is a shell? +@section What is a shell? + +At its base, a shell is simply a macro processor that executes +commands. The term macro processor means functionality where text +and symbols are expanded to create larger expressions. + +A Unix shell is both a command interpreter and a programming +language. As a command interpreter, the shell provides the user +interface to the rich set of @sc{gnu} utilities. The programming +language features allow these utilities to be combined. +Files containing commands can be created, and become +commands themselves. These new commands have the same status as +system commands in directories such as @file{/bin}, allowing users +or groups to establish custom environments to automate their common +tasks. + +Shells may be used interactively or non-interactively. In +interactive mode, they accept input typed from the keyboard. +When executing non-interactively, shells execute commands read +from a file. + +A shell allows execution of @sc{gnu} commands, both synchronously and +asynchronously. +The shell waits for synchronous commands to complete before accepting +more input; asynchronous commands continue to execute in parallel +with the shell while it reads and executes additional commands. +The @dfn{redirection} constructs permit +fine-grained control of the input and output of those commands. +Moreover, the shell allows control over the contents of commands' +environments. + +Shells also provide a small set of built-in +commands (@dfn{builtins}) implementing functionality impossible +or inconvenient to obtain via separate utilities. +For example, @code{cd}, @code{break}, @code{continue}, and +@code{exec}) cannot be implemented outside of the shell because +they directly manipulate the shell itself. +The @code{history}, @code{getopts}, @code{kill}, or @code{pwd} +builtins, among others, could be implemented in separate utilities, +but they are more convenient to use as builtin commands. +All of the shell builtins are described in +subsequent sections. + +While executing commands is essential, most of the power (and +complexity) of shells is due to their embedded programming +languages. Like any high-level language, the shell provides +variables, flow control constructs, quoting, and functions. + +Shells offer features geared specifically for +interactive use rather than to augment the programming language. +These interactive features include job control, command line +editing, command history and aliases. Each of these features is +described in this manual. + +@node Definitions +@chapter Definitions +These definitions are used throughout the remainder of this manual. + +@table @code + +@item POSIX +@cindex POSIX +A family of open system standards based on Unix. Bash +is primarily concerned with the Shell and Utilities portion of the +@sc{posix} 1003.1 standard. + +@item blank +A space or tab character. + +@item builtin +@cindex builtin +A command that is implemented internally by the shell itself, rather +than by an executable program somewhere in the file system. + +@item control operator +@cindex control operator +A @code{token} that performs a control function. It is a @code{newline} +or one of the following: +@samp{||}, @samp{&&}, @samp{&}, @samp{;}, @samp{;;}, +@samp{|}, @samp{|&}, @samp{(}, 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. +Operators contain at least one unquoted @code{metacharacter}. + +@item process group +@cindex process group +A collection of related processes each having the same process +group @sc{id}. + +@item process group ID +@cindex process group ID +A unique identifier that represents a @code{process group} +during its lifetime. + +@item reserved word +@cindex reserved word +A @code{word} that has a special meaning to the shell. Most reserved +words introduce shell flow control constructs, such as @code{for} and +@code{while}. + +@item return status +@cindex return status +A synonym for @code{exit status}. + +@item signal +@cindex signal +A mechanism by which a process may be notified by the kernel +of an event occurring in the system. + +@item special builtin +@cindex special builtin +A shell builtin command that has been classified as special by the +@sc{posix} standard. + +@item token +@cindex token +A sequence of characters considered a single unit by the shell. +It is either a @code{word} or an @code{operator}. + +@item word +@cindex word +A sequence of characters treated as a unit by the shell. +Words may not include unquoted @code{metacharacters}. +@end table + +@node Basic Shell Features +@chapter Basic Shell Features +@cindex Bourne shell + +Bash is an acronym for @samp{Bourne-Again SHell}. +The Bourne shell is +the traditional Unix shell originally written by Stephen Bourne. +All of the Bourne shell builtin commands are available in Bash, +The rules for evaluation and quoting are taken from the @sc{posix} +specification for the `standard' Unix shell. + +This chapter briefly summarizes the shell's `building blocks': +commands, control structures, shell functions, shell @i{parameters}, +shell expansions, +@i{redirections}, which are a way to direct input and output from +and to named files, and how the shell executes commands. + +@menu +* Shell Syntax:: What your input means to the shell. +* Shell Commands:: The types of commands you can use. +* Shell Functions:: Grouping commands by name. +* Shell Parameters:: How the shell stores values. +* Shell Expansions:: How Bash expands parameters and the various + expansions available. +* Redirections:: A way to control where input and output go. +* Executing Commands:: What happens when you run a command. +* Shell Scripts:: Executing files of shell commands. +@end menu + +@node Shell Syntax +@section Shell Syntax +@menu +* Shell Operation:: The basic operation of the shell. +* Quoting:: How to remove the special meaning from characters. +* Comments:: How to specify comments. +@end menu + +When the shell reads input, it proceeds through a +sequence of operations. If the input indicates the beginning of a +comment, the shell ignores the comment symbol (@samp{#}), and the rest +of that line. + +Otherwise, roughly speaking, the shell reads its input and +divides the input into words and operators, employing the quoting rules +to select which meanings to assign various words and characters. + +The shell then parses these tokens into commands and other constructs, +removes the special meaning of certain words or characters, expands +others, redirects input and output as needed, executes the specified +command, waits for the command's exit status, and makes that exit status +available for further inspection or processing. + +@node Shell Operation +@subsection Shell Operation + +The following is a brief description of the shell's operation when it +reads and executes a command. Basically, the shell does the +following: + +@enumerate +@item +Reads its input from a file (@pxref{Shell Scripts}), from a string +supplied as an argument to the @option{-c} invocation option +(@pxref{Invoking Bash}), or from the user's terminal. + +@item +Breaks the input into words and operators, obeying the quoting rules +described in @ref{Quoting}. These tokens are separated by +@code{metacharacters}. Alias expansion is performed by this step +(@pxref{Aliases}). + +@item +Parses the tokens into simple and compound commands +(@pxref{Shell Commands}). + +@item +Performs the various shell expansions (@pxref{Shell Expansions}), breaking +the expanded tokens into lists of filenames (@pxref{Filename Expansion}) +and commands and arguments. + +@item +Performs any necessary redirections (@pxref{Redirections}) and removes +the redirection operators and their operands from the argument list. + +@item +Executes the command (@pxref{Executing Commands}). + +@item +Optionally waits for the command to complete and collects its exit +status (@pxref{Exit Status}). + +@end enumerate + +@node Quoting +@subsection Quoting +@cindex quoting +@menu +* Escape Character:: How to remove the special meaning from a single + character. +* Single Quotes:: How to inhibit all interpretation of a sequence + of characters. +* Double Quotes:: How to suppress most of the interpretation of a + sequence of characters. +* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings. +* Locale Translation:: How to translate strings into different languages. +@end menu + +Quoting is used to remove the special meaning of certain +characters or words to the shell. Quoting can be used to +disable special treatment for special characters, to prevent +reserved words from being recognized as such, and to prevent +parameter expansion. + +Each of the shell metacharacters (@pxref{Definitions}) +has special meaning to the shell and must be quoted if it is to +represent itself. +When the command history expansion facilities are being used +(@pxref{History Interaction}), the +@var{history expansion} character, usually @samp{!}, must be quoted +to prevent history expansion. @xref{Bash History Facilities}, for +more details concerning history expansion. + +There are three quoting mechanisms: the +@var{escape character}, single quotes, and double quotes. + +@node Escape Character +@subsubsection Escape Character +A non-quoted backslash @samp{\} is the Bash escape character. +It preserves the literal value of the next character that follows, +with the exception of @code{newline}. If a @code{\newline} pair +appears, and the backslash itself is not quoted, the @code{\newline} +is treated as a line continuation (that is, it is removed from +the input stream and effectively ignored). + +@node Single Quotes +@subsubsection Single Quotes + +Enclosing characters in single quotes (@samp{'}) preserves the literal value +of each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a backslash. + +@node Double Quotes +@subsubsection Double Quotes + +Enclosing characters in double quotes (@samp{"}) preserves the literal value +of all characters within the quotes, with the exception of +@samp{$}, @samp{`}, @samp{\}, +and, when history expansion is enabled, @samp{!}. +The characters @samp{$} and @samp{`} +retain their special meaning within double quotes (@pxref{Shell Expansions}). +The backslash retains its special meaning only when followed by one of +the following characters: +@samp{$}, @samp{`}, @samp{"}, @samp{\}, or @code{newline}. +Within double quotes, backslashes that are followed by one of these +characters are removed. Backslashes preceding characters without a +special meaning are left unmodified. +A double quote may be quoted within double quotes by preceding it with +a backslash. +If enabled, history expansion will be performed unless an @samp{!} +appearing in double quotes is escaped using a backslash. +The backslash preceding the @samp{!} is not removed. + +The special parameters @samp{*} and @samp{@@} have special meaning +when in double quotes (@pxref{Shell Parameter Expansion}). + +@node ANSI-C Quoting +@subsubsection ANSI-C Quoting +@cindex quoting, ANSI + +Words of the form @code{$'@var{string}'} are treated specially. The +word expands to @var{string}, with backslash-escaped characters replaced +as specified by the ANSI C standard. Backslash escape sequences, if +present, are decoded as follows: + +@table @code +@item \a +alert (bell) +@item \b +backspace +@item \e +@itemx \E +an escape character (not ANSI C) +@item \f +form feed +@item \n +newline +@item \r +carriage return +@item \t +horizontal tab +@item \v +vertical tab +@item \\ +backslash +@item \' +single quote +@item \" +double quote +@item \@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{The Shopt Builtin}), +a word beginning with @samp{#} +causes that word and all remaining characters on that line to +be ignored. An interactive shell without the @code{interactive_comments} +option enabled does not allow comments. The @code{interactive_comments} +option is on by default in interactive shells. +@xref{Interactive Shells}, for a description of what makes +a shell interactive. + +@node Shell Commands +@section Shell Commands +@cindex commands, shell + +A simple shell command such as @code{echo a b c} consists of the command +itself followed by arguments, separated by spaces. + +More complex shell commands are composed of simple commands arranged together +in a variety of ways: in a pipeline in which the output of one command +becomes the input of a second, in a loop or conditional construct, or in +some other grouping. + +@menu +* Simple Commands:: The most common type of command. +* Pipelines:: Connecting the input and output of several + commands. +* Lists:: How to execute commands sequentially. +* Compound Commands:: Shell commands for control flow. +* Coprocesses:: Two-way communication between commands. +@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 one of +the control operators @samp{|} or @samp{|&}. + +@rwindex time +@rwindex ! +@cindex command timing +The format for a pipeline is +@example +[@code{time} [@code{-p}]] [@code{!}] @var{command1} [ [@code{|} or @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. This +connection is performed before any redirections specified by the +command. + +If @samp{|&} is used, the standard error of @var{command1} is connected to +@var{command2}'s standard input through the pipe; it is shorthand for +@code{2>&1 |}. This implicit redirection of the standard error is +performed after any redirections specified by the command. + +The reserved word @code{time} causes timing statistics +to be printed for the pipeline once it finishes. +The statistics currently consist of elapsed (wall-clock) time and +user and system time consumed by the command's execution. +The @option{-p} option changes the output format to that specified +by @sc{posix}. +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, unless the @code{pipefail} option is enabled +(@pxref{The Set Builtin}). +If @code{pipefail} is enabled, the pipeline's return status is the +value of the last (rightmost) command to exit with a non-zero status, +or zero if all commands exit successfully. +If the reserved word @samp{!} precedes the pipeline, the +exit status is the logical negation of the exit status as described +above. +The shell waits for all commands in the pipeline to terminate before +returning a value. + +@node Lists +@subsection Lists of Commands +@cindex commands, lists + +A @code{list} is a sequence of one or more pipelines separated by one +of the operators @samp{;}, @samp{&}, @samp{&&}, or @samp{||}, +and optionally terminated by one of @samp{;}, @samp{&}, or a +@code{newline}. + +Of these list operators, @samp{&&} and @samp{||} +have equal precedence, followed by @samp{;} and @samp{&}, +which have equal precedence. + +A sequence of one or more newlines may appear in a @code{list} +to delimit commands, equivalent to a semicolon. + +If a command is terminated by the control operator @samp{&}, +the shell executes the command asynchronously in a subshell. +This is known as executing the command in the @var{background}. +The shell does not wait for the command to finish, and the return +status is 0 (true). +When job control is not active (@pxref{Job Control}), +the standard input for asynchronous commands, in the absence of any +explicit redirections, is redirected from @code{/dev/null}. + +Commands separated by a @samp{;} are executed sequentially; the shell +waits for each command to terminate in turn. The return status is the +exit status of the last command executed. + +@sc{and} and @sc{or} lists are sequences of one or more pipelines +separated by the control operators @samp{&&} and @samp{||}, +respectively. @sc{and} and @sc{or} lists are executed with left +associativity. + +An @sc{and} list has the form +@example +@var{command1} && @var{command2} +@end example + +@noindent +@var{command2} is executed if, and only if, @var{command1} +returns an exit status of zero. + +An @sc{or} list has the form +@example +@var{command1} || @var{command2} +@end example + +@noindent +@var{command2} is executed if, and only if, @var{command1} +returns a non-zero exit status. + +The return status of +@sc{and} and @sc{or} lists is the exit status of the last command +executed in the list. + +@node Compound Commands +@subsection Compound Commands +@cindex commands, compound + +@menu +* Looping Constructs:: Shell commands for iterative action. +* Conditional Constructs:: Shell commands for conditional execution. +* Command Grouping:: Ways to group commands. +@end menu + +Compound commands are the shell programming constructs. +Each construct begins with a reserved word or control operator and is +terminated by a corresponding reserved word or operator. +Any redirections (@pxref{Redirections}) associated with a compound command +apply to all commands within that compound command unless explicitly overridden. + +Bash provides looping constructs, conditional commands, and mechanisms +to group commands and execute them as a unit. + +@node Looping Constructs +@subsubsection Looping Constructs +@cindex commands, looping + +Bash supports the following looping constructs. + +Note that wherever a @samp{;} appears in the description of a +command's syntax, it may be replaced with one or more newlines. + +@table @code +@item until +@rwindex until +@rwindex do +@rwindex done +The syntax of the @code{until} command is: +@example +until @var{test-commands}; do @var{consequent-commands}; done +@end example +Execute @var{consequent-commands} as long as +@var{test-commands} has an exit status which is not zero. +The return status is the exit status of the last command executed +in @var{consequent-commands}, or zero if none was executed. + +@item while +@rwindex while +The syntax of the @code{while} command is: +@example +while @var{test-commands}; do @var{consequent-commands}; done +@end example + +Execute @var{consequent-commands} as long as +@var{test-commands} has an exit status of zero. +The return status is the exit status of the last command executed +in @var{consequent-commands}, or zero if none was executed. + +@item for +@rwindex for +The syntax of the @code{for} command is: + +@example +for @var{name} [ [in [@var{words} @dots{}] ] ; ] do @var{commands}; done +@end example +Expand @var{words}, 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 +@subsubsection Conditional Constructs +@cindex commands, conditional + +@table @code +@item if +@rwindex if +@rwindex then +@rwindex else +@rwindex elif +@rwindex fi +The syntax of the @code{if} command is: + +@example +if @var{test-commands}; then + @var{consequent-commands}; +[elif @var{more-test-commands}; then + @var{more-consequents};] +[else @var{alternate-consequents};] +fi +@end example + +The @var{test-commands} list is executed, and if its return status is zero, +the @var{consequent-commands} list is executed. +If @var{test-commands} returns a non-zero status, each @code{elif} list +is executed in turn, and if its exit status is zero, +the corresponding @var{more-consequents} is executed and the +command completes. +If @samp{else @var{alternate-consequents}} is present, and +the final command in the final @code{if} or @code{elif} clause +has a non-zero exit status, then @var{alternate-consequents} is executed. +The return status is the exit status of the last command executed, or +zero if no condition tested true. + +@item case +@rwindex case +@rwindex in +@rwindex esac +The syntax of the @code{case} command is: + +@example +@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}. +If the shell option @code{nocasematch} +(see the description of @code{shopt} in @ref{The Shopt Builtin}) +is enabled, the match is performed without regard to the case +of alphabetic characters. +The @samp{|} is used to separate multiple patterns, and the @samp{)} +operator terminates a pattern list. +A list of patterns and an associated command-list is known +as a @var{clause}. + +Each clause must be terminated with @samp{;;}, @samp{;&}, or @samp{;;&}. +The @var{word} undergoes tilde expansion, parameter expansion, command +substitution, arithmetic expansion, and quote removal before matching is +attempted. Each @var{pattern} undergoes tilde expansion, parameter +expansion, command substitution, and arithmetic expansion. + +There may be an arbitrary number of @code{case} clauses, each terminated +by a @samp{;;}, @samp{;&}, or @samp{;;&}. +The first pattern that matches determines the +command-list that is executed. + +Here is an example using @code{case} in a script that could be used to +describe one interesting feature of an animal: + +@example +echo -n "Enter the name of an animal: " +read ANIMAL +echo -n "The $ANIMAL has " +case $ANIMAL in + horse | dog | cat) echo -n "four";; + man | kangaroo ) echo -n "two";; + *) echo -n "an unknown number of";; +esac +echo " legs." +@end example + +@noindent + +If the @samp{;;} operator is used, no subsequent matches are attempted after +the first pattern match. +Using @samp{;&} in place of @samp{;;} causes execution to continue with +the @var{command-list} associated with the next clause, if any. +Using @samp{;;&} in place of @samp{;;} causes the shell to test the patterns +in the next clause, if any, and execute any associated @var{command-list} +on a successful match. + +The return status is zero if no @var{pattern} is matched. Otherwise, the +return status is the exit status of the @var{command-list} executed. + +@item select +@rwindex select + +The @code{select} construct allows the easy generation of menus. +It has almost the same syntax as the @code{for} command: + +@example +select @var{name} [in @var{words} @dots{}]; do @var{commands}; done +@end example + +The list of words following @code{in} is expanded, generating a list +of items. The set of expanded words is printed on the standard +error output stream, each preceded by a number. If the +@samp{in @var{words}} is omitted, the positional parameters are printed, +as if @samp{in "$@@"} had been specified. +The @env{PS3} prompt is then displayed and a line is read from the +standard input. +If the line consists of a number corresponding to one of the displayed +words, then the value of @var{name} is set to that word. +If the line is empty, the words and prompt are displayed again. +If @code{EOF} is read, the @code{select} command completes. +Any other value read causes @var{name} to be set to null. +The line read is saved in the variable @env{REPLY}. + +The @var{commands} are executed after each selection until a +@code{break} command is executed, at which +point the @code{select} command completes. + +Here is an example that allows the user to pick a filename from the +current directory, and displays the name and index of the file +selected. + +@example +select fname in *; +do + echo you picked $fname \($REPLY\) + break; +done +@end example + +@item ((@dots{})) +@example +(( @var{expression} )) +@end example + +The arithmetic @var{expression} is evaluated according to the rules +described below (@pxref{Shell Arithmetic}). +If the value of the expression is non-zero, the return status is 0; +otherwise the return status is 1. This is exactly equivalent to +@example +let "@var{expression}" +@end example +@noindent +@xref{Bash Builtins}, for a full description of the @code{let} builtin. + +@item [[@dots{}]] +@rwindex [[ +@rwindex ]] +@example +[[ @var{expression} ]] +@end example + +Return a status of 0 or 1 depending on the evaluation of +the conditional expression @var{expression}. +Expressions are composed of the primaries described below in +@ref{Bash Conditional Expressions}. +Word splitting and filename expansion are not performed on the words +between the @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 used with @samp{[[}, The @samp{<} and @samp{>} operators sort +lexicographically using the current locale. + +When the @samp{==} and @samp{!=} operators are used, the string to the +right of the operator is considered a pattern and matched according +to the rules described below in @ref{Pattern Matching}. +If the shell option @code{nocasematch} +(see the description of @code{shopt} in @ref{The Shopt Builtin}) +is enabled, the match is performed without regard to the case +of alphabetic characters. +The return value is 0 if the string matches (@samp{==}) or does not +match (@samp{!=})the pattern, and 1 otherwise. +Any part of the pattern may be quoted to force it to be matched as a +string. + +An additional binary operator, @samp{=~}, is available, with the same +precedence as @samp{==} and @samp{!=}. +When it is used, the string to the right of the operator is considered +an extended regular expression and matched accordingly (as in @i{regex}3)). +The return value is 0 if the string matches +the pattern, and 1 otherwise. +If the regular expression is syntactically incorrect, the conditional +expression's return value is 2. +If the shell option @code{nocasematch} +(see the description of @code{shopt} in @ref{The Shopt Builtin}) +is enabled, the match is performed without regard to the case +of alphabetic characters. +Any part of the pattern may be quoted to force it to be matched as a +string. +Substrings matched by parenthesized subexpressions within the regular +expression are saved in the array variable @code{BASH_REMATCH}. +The element of @code{BASH_REMATCH} with index 0 is the portion of the string +matching the entire regular expression. +The element of @code{BASH_REMATCH} with index @var{n} is the portion of the +string matching the @var{n}th parenthesized subexpression. + +Expressions may be combined using the following operators, listed +in decreasing order of precedence: + +@table @code +@item ( @var{expression} ) +Returns the value of @var{expression}. +This may be used to override the normal precedence of operators. + +@item ! @var{expression} +True if @var{expression} is false. + +@item @var{expression1} && @var{expression2} +True if both @var{expression1} and @var{expression2} are true. + +@item @var{expression1} || @var{expression2} +True if either @var{expression1} or @var{expression2} is true. +@end table +@noindent +The @code{&&} and @code{||} operators do not evaluate @var{expression2} if the +value of @var{expression1} is sufficient to determine the return +value of the entire conditional expression. + +@end table + +@node Command Grouping +@subsubsection Grouping Commands +@cindex commands, grouping + +Bash provides two ways to group a list of commands to be executed +as a unit. When commands are grouped, redirections may be applied +to the entire command list. For example, the output of all the +commands in the list may be redirected to a single stream. + +@table @code +@item () +@example +( @var{list} ) +@end example + +Placing a list of commands between parentheses causes a subshell +environment to be created (@pxref{Command Execution Environment}), and each +of the commands in @var{list} to be executed in that subshell. Since the +@var{list} is executed in a subshell, variable assignments do not remain in +effect after the subshell completes. + +@item @{@} +@rwindex @{ +@rwindex @} +@example +@{ @var{list}; @} +@end example + +Placing a list of commands between curly braces causes the list to +be executed in the current shell context. No subshell is created. +The semicolon (or newline) following @var{list} is required. +@end table + +In addition to the creation of a subshell, there is a subtle difference +between these two constructs due to historical reasons. The braces +are @code{reserved words}, so they must be separated from the @var{list} +by @code{blank}s or other shell metacharacters. +The parentheses are @code{operators}, and are +recognized as separate tokens by the shell even if they are not separated +from the @var{list} by whitespace. + +The exit status of both of these constructs is the exit status of +@var{list}. + +@node Coprocesses +@subsection Coprocesses +@cindex coprocess + +A @code{coprocess} is a shell command preceded by the @code{coproc} +reserved word. +A coprocess is executed asynchronously in a subshell, as if the command +had been terminated with the @samp{&} control operator, with a two-way pipe +established between the executing shell and the coprocess. + +The format for a coprocess is: +@example +@code{coproc} [@var{NAME}] @var{command} [@var{redirections}] +@end example + +@noindent +This creates a coprocess named @var{NAME}. +If @var{NAME} is not supplied, the default name is @var{COPROC}. +@var{NAME} must not be supplied if @var{command} is a simple +command (@pxref{Simple Commands}); otherwise, it is interpreted as +the first word of the simple command. + +When the coproc is executed, the shell creates an array variable +(@pxref{Arrays}) +named @var{NAME} in the context of the executing shell. +The standard output of @var{command} +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to @var{NAME}[0]. +The standard input of @var{command} +is connected via a pipe to a file descriptor in the executing shell, +and that file descriptor is assigned to @var{NAME}[1]. +This pipe is established before any redirections specified by the +command (@pxref{Redirections}). +The file descriptors can be utilized as arguments to shell commands +and redirections using standard word expansions. + +The process id of the shell spawned to execute the coprocess is +available as the value of the variable @var{NAME}_PID. +The @code{wait} +builtin command may be used to wait for the coprocess to terminate. + +The return status of a coprocess is the exit status of @var{command}. + +@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{compound-command} [ @var{redirections} ] +@end example + +This defines a shell function named @var{name}. The reserved +word @code{function} is optional. +If the @code{function} reserved +word is supplied, the parentheses are optional. +The @var{body} of the function is the compound command +@var{compound-command} (@pxref{Compound Commands}). +That command is usually a @var{list} enclosed between @{ and @}, but +may be any compound command listed above. +@var{compound-command} is executed whenever @var{name} is specified as the +name of a command. +Any redirections (@pxref{Redirections}) associated with the shell function +are performed when the function is executed. + +A function definition may be deleted using the @option{-f} option to the +@code{unset} builtin (@pxref{Bourne Shell Builtins}). + +The exit status of a function definition is zero unless a syntax error +occurs or a readonly function with the same name already exists. +When executed, the exit status of a function is the exit status of the +last command executed in the body. + +Note that for historical reasons, in the most common usage the curly braces +that surround the body of the function must be separated from the body by +@code{blank}s or newlines. +This is because the braces are reserved words and are only recognized +as such when they are separated from the command list +by whitespace or another shell metacharacter. +Also, when using the braces, the @var{list} must be terminated by a semicolon, +a @samp{&}, or a newline. + +When a function is executed, the arguments to the +function become the positional parameters +during its execution (@pxref{Positional Parameters}). +The special parameter @samp{#} that expands to the number of +positional parameters is updated to reflect the change. +Special parameter @code{0} is unchanged. +The first element of the @env{FUNCNAME} variable is set to the +name of the function while the function is executing. + +All other aspects of the shell execution +environment are identical between a function and its caller +with these exceptions: +the @env{DEBUG} and @env{RETURN} traps +are not inherited unless the function has been given the +@code{trace} attribute using the @code{declare} builtin or +the @code{-o functrace} option has been enabled with +the @code{set} builtin, +(in which case all functions inherit the @env{DEBUG} and @env{RETURN} traps), +and the @env{ERR} trap is not inherited unless the @code{-o errtrace} +shell option has been enabled. +@xref{Bourne Shell Builtins}, for the description of the +@code{trap} builtin. + +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{alias}, +@code{declare}, @code{typeset}, @code{export}, @code{readonly}, +and @code{local} builtin commands. + +In the context where an assignment statement is assigning a value +to a shell variable or array index (@pxref{Arrays}), the @samp{+=} +operator can be used to +append to or add to the variable's previous value. +When @samp{+=} is applied to a variable for which the integer attribute +has been set, @var{value} is evaluated as an arithmetic expression and +added to the variable's current value, which is also evaluated. +When @samp{+=} is applied to an array variable using compound assignment +(@pxref{Arrays}), the +variable's value is not unset (as it is when using @samp{=}), and new +values are appended to the array beginning at one greater than the array's +maximum index (for indexed arrays), or added as additional key-value pairs +in an associative array. +When applied to a string-valued variable, @var{value} is expanded and +appended to the variable's value. + +@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{}}. +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. +When there are no positional parameters, @code{"$@@"} and +@code{$@@} +expand to nothing (i.e., they are removed). + +@item # +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 pathname used to invoke the +shell or shell script being executed as passed in the environment +or argument list. +Subsequently, expands to the last argument to the previous command, +after expansion. +Also set to the full pathname used to invoke each command executed +and placed in the environment exported to that command. +When checking mail, this parameter holds the name of the mail file. +@end vtable + +@node Shell Expansions +@section Shell Expansions +@cindex expansion + +Expansion is performed on the command line after it has been split into +@code{token}s. There are seven kinds of expansion performed: +@itemize @bullet +@item brace expansion +@item tilde expansion +@item parameter and variable expansion +@item command substitution +@item arithmetic expansion +@item word splitting +@item filename expansion +@end itemize + +@menu +* Brace Expansion:: Expansion of expressions within braces. +* Tilde Expansion:: Expansion of the ~ character. +* Shell Parameter Expansion:: How Bash expands variables to their values. +* Command Substitution:: Using the output of a command as an argument. +* Arithmetic Expansion:: How to use arithmetic in shell expansions. +* Process Substitution:: A way to write and read to and from a + command. +* Word Splitting:: How the results of expansion are split into separate + arguments. +* Filename Expansion:: A shorthand for specifying filenames matching patterns. +* Quote Removal:: How and when quote characters are removed from + words. +@end menu + +The order of expansions is: brace expansion, tilde expansion, +parameter, 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 seqeunce expression +between a pair of braces, +followed by an optional @var{postscript}. +The preamble is prefixed to each string contained within the braces, and +the postscript is then appended to each resulting string, expanding left +to right. + +Brace expansions may be nested. +The results of each expanded string are not sorted; left to right order +is preserved. +For example, +@example +bash$ echo a@{d,c,b@}e +ade ace abe +@end example + +A sequence expression takes the form @code{@{@var{x}..@var{y}[..@var{incr}]@}}, +where @var{x} and @var{y} are either integers or single characters, +and @var{incr}, an optional increment, is an integer. +When integers are supplied, the expression expands to each number between +@var{x} and @var{y}, inclusive. +Supplied integers may be prefixed with @samp{0} to force each term to have the +same width. When either @var{x} or @var{y} begins with a zero, the shell +attempts to force all generated terms to contain the same number of digits, +zero-padding where necessary. +When characters are supplied, the expression expands to each character +lexicographically between @var{x} and @var{y}, inclusive. Note that +both @var{x} and @var{y} must be of the same type. +When the increment is supplied, it is used as the difference between +each term. The default increment is 1 or -1 as appropriate. + +Brace expansion is performed before any other expansions, +and any characters special to other expansions are preserved +in the result. It is strictly textual. Bash +does not apply any syntactic interpretation to the context of the +expansion or the text between the braces. +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 the first @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, using the form described +below, Bash tests for a parameter that is unset or null. +Omitting the colon results in a test only for a parameter that is unset. +Put another way, if the colon is included, +the operator tests for both @var{parameter}'s existence and that its value +is not null; if the colon is omitted, the operator tests only for existence. + +@table @code + +@item $@{@var{parameter}:@minus{}@var{word}@} +If @var{parameter} is unset or null, the expansion of +@var{word} is substituted. Otherwise, the value of +@var{parameter} is substituted. + +@item $@{@var{parameter}:=@var{word}@} +If @var{parameter} +is unset or null, the expansion of @var{word} +is assigned to @var{parameter}. +The value of @var{parameter} is then substituted. +Positional parameters and special parameters may not be assigned to +in this way. + +@item $@{@var{parameter}:?@var{word}@} +If @var{parameter} +is null or unset, the expansion of @var{word} (or a message +to that effect if @var{word} +is not present) is written to the standard error and the shell, if it +is not interactive, exits. Otherwise, the value of @var{parameter} is +substituted. + +@item $@{@var{parameter}:+@var{word}@} +If @var{parameter} +is null or unset, nothing is substituted, otherwise the expansion of +@var{word} is substituted. + +@item $@{@var{parameter}:@var{offset}@} +@itemx $@{@var{parameter}:@var{offset}:@var{length}@} +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 indexed array name subscripted +by @samp{@@} or @samp{*}, the result is the @var{length} +members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}. +A negative @var{offset} is taken relative to one greater than the maximum +index of the specified array. +Substring expansion applied to an associative array produces undefined +results. + +Note that a negative offset must be separated from the colon by at least +one space to avoid being confused with the @samp{:-} expansion. +Substring indexing is zero-based unless the positional parameters +are used, in which case the indexing starts at 1 by default. +If @var{offset} is 0, and the positional parameters are used, @code{$@@} is +prefixed to the list. + +@item $@{!@var{prefix}*@} +@itemx $@{!@var{prefix}@@@} +Expands to the names of variables whose names begin with @var{prefix}, +separated by the first character of the @env{IFS} special variable. +When @samp{@@} is used and the expansion appears within double quotes, each +variable name expands to a separate word. + +@item $@{!@var{name}[@@]@} +@itemx $@{!@var{name}[*]@} +If @var{name} is an array variable, expands to the list of array indices +(keys) assigned in @var{name}. +If @var{name} is not an array, expands to 0 if @var{name} is set and null +otherwise. +When @samp{@@} is used and the expansion appears within double quotes, each +key expands to a separate word. + +@item $@{#@var{parameter}@} +The length in characters of the expanded value of @var{parameter} is +substituted. +If @var{parameter} is @samp{*} or @samp{@@}, the value substituted +is the number of positional parameters. +If @var{parameter} is an array name subscripted by @samp{*} or @samp{@@}, +the value substituted is the number of elements in the array. + +@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}@} + +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}. +If @var{pattern} begins with @samp{/}, all matches of @var{pattern} are +replaced with @var{string}. Normally only the first match is replaced. +If @var{pattern} begins with @samp{#}, it must match at the beginning +of the expanded value of @var{parameter}. +If @var{pattern} begins with @samp{%}, it must match at the end +of the expanded value of @var{parameter}. +If @var{string} is null, matches of @var{pattern} are deleted +and the @code{/} following @var{pattern} may be omitted. +If @var{parameter} is @samp{@@} or @samp{*}, +the substitution operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If @var{parameter} +is an array variable subscripted with @samp{@@} or @samp{*}, +the substitution operation is applied to each member of the +array in turn, and the expansion is the resultant list. + +@item $@{@var{parameter}^@var{pattern}@} +@itemx $@{@var{parameter}^^@var{pattern}@} +@itemx $@{@var{parameter},@var{pattern}@} +@itemx $@{@var{parameter},,@var{pattern}@} +This expansion modifies the case of alphabetic characters in @var{parameter}. +The @var{pattern} is expanded to produce a pattern just as in +filename expansion. +The @samp{^} operator converts lowercase letters matching @var{pattern} +to uppercase; the @samp{,} operator converts matching uppercase letters +to lowercase. +The @samp{^^} and @samp{,,} expansions convert each matched character in the +expanded value; the @samp{^} and @samp{,} expansions match and convert only +the first character in the expanded value. +If @var{pattern} is omitted, it is treated like a @samp{?}, which matches +every character. +If @var{parameter} is @samp{@@} or @samp{*}, +the case modification operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If @var{parameter} +is an array variable subscripted with @samp{@@} or @samp{*}, +the case modification operation is applied to each member of the +array in turn, and the expansion is the resultant list. + +@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{}, +the default, then sequences of +@code{ }, @code{}, and @code{} +at the beginning and end of the results of the previous +expansions are ignored, and any sequence of @env{IFS} +characters not at the beginning or end serves to delimit words. +If @env{IFS} has a value other than the default, then sequences of +the whitespace characters @code{space} 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 @code{failglob} shell option is set, and no matches are found, +an error message is printed and the command is not executed. +If the shell option @code{nocaseglob} is enabled, the match is performed +without regard to the case of alphabetic characters. + +When a pattern is used for filename expansion, the character @samp{.} +at the start of a filename or immediately following a slash +must be matched explicitly, unless the shell option @code{dotglob} is set. +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{The Shopt Builtin}, +for a description of the @code{nocaseglob}, @code{nullglob}, +@code{failglob}, and @code{dotglob} options. + +The @env{GLOBIGNORE} +shell variable may be used to restrict the set of 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. +When the @code{globstar} shell option is enabled, and @samp{*} is used in +a filename expansion context, two adjacent @samp{*}s used as a single +pattern will match all files and zero or more directories and +subdirectories. +If followed by a @samp{/}, two adjacent @samp{*}s will match only +directories and subdirectories. +@item ? +Matches any single character. +@item [@dots{}] +Matches any one of the enclosed characters. A pair of characters +separated by a hyphen denotes a @var{range expression}; +any character that 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} standard: +@example +alnum alpha ascii blank cntrl digit graph lower +print punct space upper word xdigit +@end example +@noindent +A character class matches any character belonging to that class. +The @code{word} character class matches letters, digits, and the character +@samp{_}. + +Within @samp{[} and @samp{]}, an @var{equivalence class} can be +specified using the syntax @code{[=}@var{c}@code{=]}, which +matches all characters with the same collation weight (as defined +by the current locale) as the character @var{c}. + +Within @samp{[} and @samp{]}, the syntax @code{[.}@var{symbol}@code{.]} +matches the collating symbol @var{symbol}. +@end table + +If the @code{extglob} shell option is enabled using the @code{shopt} +builtin, several extended pattern matching operators are recognized. +In the following description, a @var{pattern-list} is a list of one +or more patterns separated by a @samp{|}. +Composite patterns may be formed using one or more of the following +sub-patterns: + +@table @code +@item ?(@var{pattern-list}) +Matches zero or one occurrence of the given patterns. + +@item *(@var{pattern-list}) +Matches zero or more occurrences of the given patterns. + +@item +(@var{pattern-list}) +Matches one or more occurrences of the given patterns. + +@item @@(@var{pattern-list}) +Matches one of the given patterns. + +@item !(@var{pattern-list}) +Matches anything except one of the given patterns. +@end table + +@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. + +Each redirection that may be preceded by a file descriptor number +may instead be preceded by a word of the form @{@var{varname}@}. +In this case, for each redirection operator except +>&- and <&-, the shell will allocate a file descriptor greater +than 10 and assign it to @{@var{varname}@}. If >&- or <&- is preceded +by @{@var{varname}@}, the value of @var{varname} defines the file +descriptor to close. + +In the following descriptions, if the file descriptor number is +omitted, and the first character of the redirection operator is +@samp{<}, the redirection refers to the standard input (file +descriptor 0). If the first character of the redirection operator +is @samp{>}, the redirection refers to the standard output (file +descriptor 1). + +The word following the redirection operator in the following +descriptions, unless otherwise noted, is subjected to brace expansion, +tilde expansion, parameter expansion, command substitution, arithmetic +expansion, quote removal, filename expansion, and word splitting. +If it expands to more than one word, Bash reports an error. + +Note that the order of redirections is significant. For example, +the command +@example +ls > @var{dirlist} 2>&1 +@end example +@noindent +directs both standard output (file descriptor 1) and standard error +(file descriptor 2) to the file @var{dirlist}, while the command +@example +ls 2>&1 > @var{dirlist} +@end example +@noindent +directs only the standard output to file @var{dirlist}, +because the standard error was made a copy of the standard output +before the standard output was redirected to @var{dirlist}. + +Bash handles several filenames specially when they are used in +redirections, as described in the following table: + +@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. + +Redirections using file descriptors greater than 9 should be used with +care, as they may conflict with file descriptors the shell uses +internally. + +@subsection Redirecting Input +Redirection of input causes the file whose name results from +the expansion of @var{word} +to be opened for reading on file descriptor @code{n}, +or the standard input (file descriptor 0) if @code{n} +is not specified. + +The general format for redirecting input is: +@example +[@var{n}]<@var{word} +@end example + +@subsection Redirecting Output +Redirection of output causes the file whose name results from +the expansion of @var{word} +to be opened for writing on file descriptor @var{n}, +or the standard output (file descriptor 1) if @var{n} +is not specified. If the file does not exist it is created; +if it does exist it is truncated to zero size. + +The general format for redirecting output is: +@example +[@var{n}]>[|]@var{word} +@end example + +If the redirection operator is @samp{>}, and the @code{noclobber} +option to the @code{set} builtin has been enabled, the redirection +will fail if the file whose name results from the expansion of +@var{word} exists and is a regular file. +If the redirection operator is @samp{>|}, or the redirection operator is +@samp{>} and the @code{noclobber} option is not enabled, the redirection +is attempted even if the file named by @var{word} exists. + +@subsection Appending Redirected Output +Redirection of output in this fashion +causes the file whose name results from +the expansion of @var{word} +to be opened for appending on file descriptor @var{n}, +or the standard output (file descriptor 1) if @var{n} +is not specified. If the file does not exist it is created. + +The general format for appending output is: +@example +[@var{n}]>>@var{word} +@end example + +@subsection Redirecting Standard Output and Standard Error +This construct allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be redirected to the file whose name is the +expansion of @var{word}. + +There are two formats for redirecting standard output and +standard error: +@example +&>@var{word} +@end example +@noindent +and +@example +>&@var{word} +@end example +@noindent +Of the two forms, the first is preferred. +This is semantically equivalent to +@example +>@var{word} 2>&1 +@end example + +@subsection Appending Standard Output and Standard Error +This construct allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be appended to the file whose name is the +expansion of @var{word}. + +The format for appending standard output and standard error is: +@example +&>>@var{word} +@end example +@noindent +This is semantically equivalent to +@example +>>@var{word} 2>&1 +@end example + +@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 searches for a defined shell +function named @code{command_not_found_handle}. +If that function exists, it is invoked with the original command and +the original command's arguments as its arguments, and the function's +exit status becomes the exit status of the shell. +If that function is not defined, the shell prints an error +message and returns an exit status of 127. + +@item +If the search is successful, or if the command name contains +one or more slashes, the shell executes the named program in +a separate execution environment. +Argument 0 is set to the name given, and the remaining arguments +to the command are set to the arguments supplied, if any. + +@item +If this execution fails because the file is not in executable +format, and the file is not a directory, it is assumed to be a +@var{shell script} and the shell executes it as described in +@ref{Shell Scripts}. + +@item +If the command was not begun asynchronously, the shell waits for +the command to complete and collects its exit status. + +@end enumerate + +@node Command Execution Environment +@subsection Command Execution Environment +@cindex execution environment + +The shell has an @var{execution environment}, which consists of the +following: + +@itemize @bullet +@item +open files inherited by the shell at invocation, as modified by +redirections supplied to the @code{exec} builtin + +@item +the current working directory as set by @code{cd}, @code{pushd}, or +@code{popd}, or inherited by the shell at invocation + +@item +the file creation mode mask as set by @code{umask} or inherited from +the shell's parent + +@item +current traps set by @code{trap} + +@item +shell parameters that are set by variable assignment or with @code{set} +or inherited from the shell's parent in the environment + +@item +shell functions defined during execution or inherited from the shell's +parent in the environment + +@item +options enabled at invocation (either by default or with command-line +arguments) or by @code{set} + +@item +options enabled by @code{shopt} (@pxref{The Shopt Builtin}) + +@item +shell aliases defined with @code{alias} (@pxref{Aliases}) + +@item +various process @sc{id}s, including those of background jobs +(@pxref{Lists}), the value of @code{$$}, and the value of +@env{$PPID} + +@end itemize + +When a simple command other than a builtin or shell function +is to be executed, it +is invoked in a separate execution environment that consists of +the following. Unless otherwise noted, the values are inherited +from the shell. + +@itemize @bullet +@item +the shell's open files, plus any modifications and additions specified +by redirections to the command + +@item +the current working directory + +@item +the file creation mode mask + +@item +shell variables and functions marked for export, along with variables +exported for the command, passed in the environment (@pxref{Environment}) + +@item +traps caught by the shell are reset to the values inherited from the +shell's parent, and traps ignored by the shell are ignored + +@end itemize + +A command invoked in this separate environment cannot affect the +shell's execution environment. + +Command substitution, commands grouped with parentheses, +and asynchronous commands are invoked in a +subshell environment that is a duplicate of the shell environment, +except that traps caught by the shell are reset to the values +that the shell inherited from its parent at invocation. Builtin +commands that are invoked as part of a pipeline are also executed +in a subshell environment. Changes made to the subshell environment +cannot affect the shell's execution environment. + +Subshells spawned to execute command substitutions inherit the value of +the @option{-e} option from the parent shell. When not in @sc{posix} mode, +Bash clears the @option{-e} option in such subshells. + +If a command is followed by a @samp{&} and job control is not active, the +default standard input for the command is the empty file @file{/dev/null}. +Otherwise, the invoked command inherits the file descriptors of the calling +shell as modified by redirections. + +@node Environment +@subsection Environment +@cindex environment + +When a program is invoked it is given an array of strings +called the @var{environment}. +This is a list of name-value pairs, of the form @code{name=value}. + +Bash provides several ways to manipulate the environment. +On invocation, the shell scans its own environment and +creates a parameter for each name found, automatically marking +it for @var{export} +to child processes. Executed commands inherit the environment. +The @code{export} and @samp{declare -x} +commands allow parameters and functions to be added to and +deleted from the environment. If the value of a parameter +in the environment is modified, the new value becomes part +of the environment, replacing the old. The environment +inherited by any executed command consists of the shell's +initial environment, whose values may be modified in the shell, +less any pairs removed by the @code{unset} and @samp{export -n} +commands, plus any additions via the @code{export} and +@samp{declare -x} commands. + +The environment for any simple command +or function may be augmented temporarily by prefixing it with +parameter assignments, as described in @ref{Shell Parameters}. +These assignment statements affect only the environment seen +by that command. + +If the @option{-k} option is set (@pxref{The Set Builtin}), then all +parameter assignments are placed in the environment for a command, +not just those that precede the command name. + +When Bash invokes an external command, the variable @samp{$_} +is set to the full path name of the command and passed to that +command in its environment. + +@node Exit Status +@subsection Exit Status +@cindex exit status + +The exit status of an executed command is the value returned by the +@var{waitpid} system call or equivalent function. Exit statuses +fall between 0 and 255, though, as explained below, the shell may +use values above 125 specially. Exit statuses from shell builtins and +compound commands are also limited to this range. Under certain +circumstances, the shell will use special values to indicate specific +failure modes. + +For the shell's purposes, a command which exits with a +zero exit status has succeeded. +A non-zero exit status indicates failure. +This seemingly counter-intuitive scheme is used so there +is one well-defined way to indicate success and a variety of +ways to indicate various failure modes. +When a command terminates on a fatal signal whose number is @var{N}, +Bash uses the value 128+@var{N} as the exit status. + +If a command is not found, the child process created to +execute it returns a status of 127. If a command is found +but is not executable, the return status is 126. + +If a command fails because of an error during expansion or redirection, +the exit status is greater than zero. + +The exit status is used by the Bash conditional commands +(@pxref{Conditional Constructs}) and some of the list +constructs (@pxref{Lists}). + +All of the Bash builtins return an exit status of zero if they succeed +and a non-zero status on failure, so they may be used by the +conditional and list constructs. +All builtins return an exit status of 2 to indicate incorrect usage. + +@node Signals +@subsection Signals +@cindex signal handling + +When Bash is interactive, in the absence of any traps, it ignores +@code{SIGTERM} (so that @samp{kill 0} does not kill an interactive shell), +and @code{SIGINT} +is caught and handled (so that the @code{wait} builtin is interruptible). +When Bash receives a @code{SIGINT}, it breaks out of any executing loops. +In all cases, Bash ignores @code{SIGQUIT}. +If job control is in effect (@pxref{Job Control}), Bash +ignores @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. + +Non-builtin commands started by Bash have signal handlers set to the +values inherited by the shell from its parent. +When job control is not in effect, asynchronous commands +ignore @code{SIGINT} and @code{SIGQUIT} in addition to these inherited +handlers. +Commands run as a result of +command substitution ignore the keyboard-generated job control signals +@code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. + +The shell exits by default upon receipt of a @code{SIGHUP}. +Before exiting, an interactive shell resends the @code{SIGHUP} to +all jobs, running or stopped. +Stopped jobs are sent @code{SIGCONT} to ensure that they receive +the @code{SIGHUP}. +To prevent the shell from sending the @code{SIGHUP} signal to a +particular job, it should be removed +from the jobs table with the @code{disown} +builtin (@pxref{Job Control Builtins}) or marked +to not receive @code{SIGHUP} using @code{disown -h}. + +If the @code{huponexit} shell option has been set with @code{shopt} +(@pxref{The Shopt Builtin}), Bash sends a @code{SIGHUP} to all jobs when +an interactive login shell exits. + +If Bash is waiting for a command to complete and receives a signal +for which a trap has been set, the trap will not be executed until +the command completes. +When Bash is waiting for an asynchronous +command via the @code{wait} builtin, the reception of a signal for +which a trap has been set will cause the @code{wait} builtin to return +immediately with an exit status greater than 128, immediately after +which the trap is executed. + +@node Shell Scripts +@section Shell Scripts +@cindex shell script + +A shell script is a text file containing shell commands. When such +a file is used as the first non-option argument when invoking Bash, +and neither the @option{-c} nor @option{-s} option is supplied +(@pxref{Invoking Bash}), +Bash reads and executes commands from the file, then exits. This +mode of operation creates a non-interactive shell. The shell first +searches for the file in the current directory, and looks in the +directories in @env{$PATH} if not found there. + +When Bash runs +a shell script, it sets the special parameter @code{0} to the name +of the file, rather than the name of the shell, and the positional +parameters are set to the remaining arguments, if any are given. +If no additional arguments are supplied, the positional parameters +are unset. + +A shell script may be made executable by using the @code{chmod} command +to turn on the execute bit. When Bash finds such a file while +searching the @env{$PATH} for a command, it spawns a subshell to +execute it. In other words, executing +@example +filename @var{arguments} +@end example +@noindent +is equivalent to executing +@example +bash filename @var{arguments} +@end example + +@noindent +if @code{filename} is an executable shell script. +This subshell reinitializes itself, so that the effect is as if a +new shell had been invoked to interpret the script, with the +exception that the locations of commands remembered by the parent +(see the description of @code{hash} in @ref{Bourne Shell Builtins}) +are retained by the child. + +Most versions of Unix make this a part of the operating system's command +execution mechanism. If the first line of a script begins with +the two characters @samp{#!}, the remainder of the line specifies +an interpreter for the program. +Thus, you can specify Bash, @code{awk}, Perl, or some other +interpreter and write the rest of the script file in that language. + +The arguments to the interpreter +consist of a single optional argument following the interpreter +name on the first line of the script file, followed by the name of +the script file, followed by the rest of the arguments. Bash +will perform this action on operating systems that do not handle it +themselves. Note that some older versions of Unix limit the interpreter +name and argument to a maximum of 32 characters. + +Bash scripts often begin with @code{#! /bin/bash} (assuming that +Bash has been installed in @file{/bin}), since this ensures that +Bash will be used to interpret the script, even if it is executed +under another shell. + +@node Shell Builtin Commands +@chapter Shell Builtin Commands + +@menu +* Bourne Shell Builtins:: Builtin commands inherited from the Bourne + Shell. +* Bash Builtins:: Table of builtins specific to Bash. +* Modifying Shell Behavior:: Builtins to modify shell attributes and + optional behavior. +* Special Builtins:: Builtin commands classified specially by + POSIX. +@end menu + +Builtin commands are contained within the shell itself. +When the name of a builtin command is used as the first word of +a simple command (@pxref{Simple Commands}), the shell executes +the command directly, without invoking another program. +Builtin commands are necessary to implement functionality impossible +or inconvenient to obtain with separate utilities. + +This section briefly describes the builtins which Bash inherits from +the Bourne Shell, as well as the builtin commands which are unique +to or have been extended in Bash. + +Several builtin commands are described in other chapters: builtin +commands which provide the Bash interface to the job control +facilities (@pxref{Job Control Builtins}), the directory stack +(@pxref{Directory Stack Builtins}), the command history +(@pxref{Bash History Builtins}), and the programmable completion +facilities (@pxref{Programmable Completion Builtins}). + +Many of the builtins have been extended by @sc{posix} or Bash. + +Unless otherwise noted, each builtin command documented as accepting +options preceded by @samp{-} accepts @samp{--} +to signify the end of the options. +The @code{:}, @code{true}, @code{false}, and @code{test} +builtins do not accept options and do not treat @samp{--} specially. +The @code{exit}, @code{logout}, @code{break}, @code{continue}, @code{let}, +and @code{shift} builtins accept and process arguments beginning +with @samp{-} without requiring @samp{--}. +Other builtins that accept arguments but are not specified as accepting +options interpret arguments beginning with @samp{-} as invalid options and +require @samp{--} to prevent this interpretation. + +@node Bourne Shell Builtins +@section Bourne Shell Builtins + +The following shell builtin commands are inherited from the Bourne Shell. +These commands are implemented as specified by the @sc{posix} standard. + +@table @code +@item : @r{(a colon)} +@btindex : +@example +: [@var{arguments}] +@end example +Do nothing beyond expanding @var{arguments} and performing redirections. +The return status is zero. + +@item . @r{(a period)} +@btindex . +@example +. @var{filename} [@var{arguments}] +@end example +Read and execute commands from the @var{filename} argument in the +current shell context. If @var{filename} does not contain a slash, +the @env{PATH} variable is used to find @var{filename}. +When Bash is not in @sc{posix} mode, the current directory is searched +if @var{filename} is not found in @env{$PATH}. +If any @var{arguments} are supplied, they become the positional +parameters when @var{filename} is executed. Otherwise the positional +parameters are unchanged. +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}. + +If a non-empty directory name from @env{CDPATH} is used, or if +@samp{-} is the first argument, and the directory change is +successful, the absolute pathname of the new working directory is +written to the standard output. + +The return status is zero if the directory is successfully changed, +non-zero otherwise. + +@item continue +@btindex continue +@example +continue [@var{n}] +@end example +Resume the next iteration of an enclosing @code{for}, @code{while}, +@code{until}, or @code{select} loop. +If @var{n} is supplied, the execution of the @var{n}th enclosing loop +is resumed. +@var{n} must be greater than or equal to 1. +The return status is zero unless @var{n} is not greater than or equal to 1. + +@item eval +@btindex eval +@example +eval [@var{arguments}] +@end example +The arguments are concatenated together into a single command, which is +then read and executed, and its exit status returned as the exit status +of @code{eval}. +If there are no arguments or only empty arguments, the return status is +zero. + +@item exec +@btindex exec +@example +exec [-cl] [-a @var{name}] [@var{command} [@var{arguments}]] +@end example +If @var{command} +is supplied, it replaces the shell without creating a new process. +If the @option{-l} option is supplied, the shell places a dash at the +beginning of the zeroth argument passed to @var{command}. +This is what the @code{login} program does. +The @option{-c} option causes @var{command} to be executed with an empty +environment. +If @option{-a} is supplied, the shell passes @var{name} as the zeroth +argument to @var{command}. +If 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 [-aApf] [@var{name}[=@var{value}]] @dots{} +@end example +Mark each @var{name} as readonly. +The values of these names may not be changed by subsequent assignment. +If the @option{-f} option is supplied, each @var{name} refers to a shell +function. +The @option{-a} option means each @var{name} refers to an indexed +array variable; the @option{-A} option means each @var{name} refers +to an associative array variable. +If 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}. +Parameters represented by the numbers @code{$#} to @code{$#}-@var{n}+1 +are unset. +@var{n} must be a non-negative number less than or equal to @code{$#}. +If @var{n} is zero or greater than @code{$#}, the positional parameters +are not changed. +If @var{n} is not supplied, it is assumed to be 1. +The return status is zero unless @var{n} is greater than @code{$#} or +less than zero, non-zero otherwise. + +@item test +@itemx [ +@btindex test +@btindex [ +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}. +@code{test} does not accept any options, nor does it accept and ignore +an argument of @option{--} as signifying the end of options. + +When the @code{[} form is used, the last argument to the command must +be a @code{]}. + +Expressions may be combined using the following operators, listed in +decreasing order of precedence. +The evaluation depends on the number of arguments; see below. + +@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. +The @samp{-a} and @samp{-o} operators are considered binary operators +when there are three arguments. +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. + +@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 (and +there is a single @var{sigspec}) or +equal to @samp{-}, each specified signal's disposition is reset +to the value it had when the shell was started. +If @var{arg} is the null string, then the signal specified by +each @var{sigspec} is ignored by the shell and commands it invokes. +If @var{arg} is not present and @option{-p} has been supplied, +the shell displays the trap commands associated with each @var{sigspec}. +If no arguments are supplied, or +only @option{-p} is given, @code{trap} prints the list of commands +associated with each signal number in a form that may be reused as +shell input. +The @option{-l} option causes the shell to print a list of signal names +and their corresponding numbers. +Each @var{sigspec} is either a signal name or a signal number. +Signal names are case insensitive and the @code{SIG} prefix is optional. + +If a @var{sigspec} +is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits. +If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed +before every simple command, @code{for} command, @code{case} command, +@code{select} command, every arithmetic @code{for} command, and before +the first command executes in a shell function. +Refer to the description of the @code{extdebug} option to the +@code{shopt} builtin (@pxref{The Shopt Builtin}) for details of its +effect on the @code{DEBUG} trap. +If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed +each time a shell function or a script executed with the @code{.} or +@code{source} builtins finishes executing. + +If a @var{sigspec} is @code{ERR}, the command @var{arg} +is executed whenever a simple command has a non-zero exit status, +subject to the following conditions. +The @code{ERR} trap is not executed if the failed command is part of the +command list immediately following an @code{until} or @code{while} keyword, +part of the test following the @code{if} or @code{elif} reserved words, +part of a command executed in a @code{&&} or @code{||} list, +or if the command's return +status is being inverted using @code{!}. +These are the same conditions obeyed by the @code{errexit} option. + +Signals ignored upon entry to the shell cannot be trapped or reset. +Trapped signals that are not being ignored are reset to their original +values in a subshell or subshell environment when one is created. + +The return status is zero unless a @var{sigspec} does not specify a +valid signal. + +@item umask +@btindex umask +@example +umask [-p] [-S] [@var{mode}] +@end example +Set the shell process's file creation mask to @var{mode}. If +@var{mode} begins with a digit, it is interpreted as an octal number; +if not, it is interpreted as a symbolic mode mask similar +to that accepted by the @code{chmod} command. If @var{mode} is +omitted, the current value of the mask is printed. If the @option{-S} +option is supplied without a @var{mode} argument, the mask is printed +in a symbolic format. +If the @option{-p} option is supplied, and @var{mode} +is omitted, the output is in a form that may be reused as input. +The return status is zero if the mode is successfully changed or if +no @var{mode} argument is supplied, and non-zero otherwise. + +Note that when the mode is interpreted as an octal number, each number +of the umask is subtracted from @code{7}. Thus, a umask of @code{022} +results in permissions of @code{755}. + +@item unset +@btindex unset +@example +unset [-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} 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 +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. +When @var{shell-command} is executed, the shell sets the +@code{READLINE_LINE} variable to the contents of the Readline line +buffer and the @code{READLINE_POINT} variable to the current location +of the insertion point. +If the executed command changes the value of @code{READLINE_LINE} or +@code{READLINE_POINT}, those new values will be reflected in the +editing state. +@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 [-aAfFilrtux] [-p] [@var{name}[=@var{value}] @dots{}] +@end example + +Declare variables and give them attributes. If no @var{name}s +are given, then display the values of variables instead. + +The @option{-p} option will display the attributes and values of each +@var{name}. +When @option{-p} is used with @var{name} arguments, additional options +are ignored. + +When @option{-p} is supplied without @var{name} arguments, @code{declare} +will display the attributes and values of all variables having the +attributes specified by the additional options. +If no other options are supplied with @option{-p}, @code{declare} will +display the attributes and values of all shell variables. The @option{-f} +option will restrict the display to shell functions. + +The @option{-F} option inhibits the display of function definitions; +only the function name and attributes are printed. +If the @code{extdebug} shell option is enabled using @code{shopt} +(@pxref{The Shopt Builtin}), the source file name and line number where +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 indexed array variable (@pxref{Arrays}). + +@item -A +Each @var{name} is an associative array variable (@pxref{Arrays}). + +@item -f +Use function names only. + +@item -i +The variable is to be treated as +an integer; arithmetic evaluation (@pxref{Shell Arithmetic}) is +performed when the variable is assigned a value. + +@item -l +When the variable is assigned a value, all upper-case characters are +converted to lower-case. +The upper-case attribute is disabled. + +@item -r +Make @var{name}s readonly. These names cannot then be assigned values +by subsequent assignment statements or unset. + +@item -t +Give each @var{name} the @code{trace} attribute. +Traced functions inherit the @code{DEBUG} and @code{RETURN} traps from +the calling shell. +The trace attribute has no special meaning for variables. + +@item -u +When the variable is assigned a value, all lower-case characters are +converted to upper-case. +The lower-case attribute is disabled. + +@item -x +Mark each @var{name} for export to subsequent commands via +the environment. +@end table + +Using @samp{+} instead of @samp{-} turns off the attribute instead, +with the exceptions that @samp{+a} +may not be used to destroy an array variable and @samp{+r} will not +remove the readonly attribute. +When used in a function, @code{declare} makes each @var{name} local, +as with the @code{local} command. 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} does not interpret @option{--} to mean the end of options. + +@code{echo} interprets the following escape sequences: +@table @code +@item \a +alert (bell) +@item \b +backspace +@item \c +suppress further output +@item \e +escape +@item \f +form feed +@item \n +new line +@item \r +carriage return +@item \t +horizontal tab +@item \v +vertical tab +@item \\ +backslash +@item \0@var{nnn} +the eight-bit character whose value is the octal value @var{nnn} +(zero to three octal digits) +@item \x@var{HH} +the eight-bit character whose value is the hexadecimal value @var{HH} +(one or two hex digits) +@end table + +@item enable +@btindex enable +@example +enable [-a] [-dnps] [-f @var{filename}] [@var{name} @dots{}] +@end example +Enable and disable builtin shell commands. +Disabling a builtin allows a disk command which has the same name +as a shell builtin to be executed without specifying a full pathname, +even though the shell normally searches for builtins before disk commands. +If @option{-n} is used, the @var{name}s become disabled. Otherwise +@var{name}s are enabled. For example, to use the @code{test} binary +found via @env{$PATH} instead of the shell builtin version, type +@samp{enable -n test}. + +If the @option{-p} option is supplied, or no @var{name} arguments appear, +a list of shell builtins is printed. With no other arguments, the list +consists of all enabled shell builtins. +The @option{-a} option means to list +each builtin with an indication of whether or not it is enabled. + +The @option{-f} option means to load the new builtin command @var{name} +from shared object @var{filename}, on systems that support dynamic loading. +The @option{-d} option will delete a builtin loaded with @option{-f}. + +If there are no options, a list of the shell builtins is displayed. +The @option{-s} option restricts @code{enable} to the @sc{posix} special +builtins. If @option{-s} is used with @option{-f}, the new builtin becomes +a special builtin (@pxref{Special Builtins}). + +The return status is zero unless a @var{name} is not a shell builtin +or there is an error loading a new builtin from a shared object. + +@item help +@btindex help +@example +help [-dms] [@var{pattern}] +@end example +Display helpful information about builtin commands. +If @var{pattern} is specified, @code{help} gives detailed help +on all commands matching @var{pattern}, otherwise a list of +the builtins is printed. + +Options, if supplied, have the following meanings: + +@table @code +@item -d +Display a short description of each @var{pattern} +@item -m +Display the description of each @var{pattern} in a manpage-like format +@item -s +Display only a short usage synopsis for each @var{pattern} +@end table + +The return status is zero unless no command matches @var{pattern}. + +@item let +@btindex let +@example +let @var{expression} [@var{expression}] +@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 mapfile +@btindex mapfile +@example +mapfile [-n @var{count}] [-O @var{origin}] [-s @var{count}] [-t] [-u @var{fd}] [ +-C @var{callback}] [-c @var{quantum}] [@var{array}] +@end example +Read lines from the standard input into the indexed array variable @var{array}, +or from file descriptor @var{fd} +if the @option{-u} option is supplied. +The variable @code{MAPFILE} is the default @var{array}. +Options, if supplied, have the following meanings: +@table @code + +@item -n +Copy at most @var{count} lines. If @var{count} is 0, all lines are copied. +@item -O +Begin assigning to @var{array} at index @var{origin}. +The default index is 0. +@item -s +Discard the first @var{count} lines read. +@item -t +Remove a trailing newline from each line read. +@item -u +Read lines from file descriptor @var{fd} instead of the standard input. +@item -C +Evaluate @var{callback} each time @var{quantum}P lines are read. +The @option{-c} option specifies @var{quantum}. +@item -c +Specify the number of lines read between each call to @var{callback}. +@end table + +If @option{-C} is specified without @option{-c}, +the default quantum is 5000. +When @var{callback} is evaluated, it is supplied the index of the next +array element to be assigned as an additional argument. +@var{callback} is evaluated after the line is read but before the +array element is assigned. + +If not supplied with an explicit origin, @code{mapfile} will clear @var{array} +before assigning to it. + +@code{mapfile} returns successfully unless an invalid option or option +argument is supplied, @var{array} is invalid or unassignable, or @var{array} +is not an indexed array. + +@item printf +@btindex printf +@example +printf [-v @var{var}] @var{format} [@var{arguments}] +@end example +Write the formatted @var{arguments} to the standard output under the +control of the @var{format}. +The @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}, +(except that @samp{\c} terminates output, backslashes in +@samp{\'}, @samp{\"}, and @samp{\?} are not removed, and octal escapes +beginning with @samp{\0} may contain up to four digits), +and @samp{%q} causes @code{printf} to output the +corresponding @var{argument} in a format that can be reused as shell input. + +The @option{-v} option causes the output to be assigned to the variable +@var{var} rather than being printed to the standard output. + +The @var{format} is reused as necessary to consume all of the @var{arguments}. +If the @var{format} requires more @var{arguments} than are supplied, the +extra format specifications behave as if a zero value or null string, as +appropriate, had been supplied. The return value is zero on success, +non-zero on failure. + +@item read +@btindex read +@example +read [-ers] [-a @var{aname}] [-d @var{delim}] [-i @var{text}] [-n @var{nchars}] [-N @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}] +@end example +One line is read from the standard input, or from the file descriptor +@var{fd} supplied as an argument to the @option{-u} option, 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 (in which case the return code is greater than 128), 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. +Readline uses the current (or default, if line editing was not previously +active) editing settings. + +@item -i @var{text} +If Readline is being used to read the line, @var{text} is placed into +the editing buffer before editing begins. + +@item -n @var{nchars} +@code{read} returns after reading @var{nchars} characters rather than +waiting for a complete line of input, but honor a delimiter if fewer +than @var{nchars} characters are read before the delimiter. + +@item -N @var{nchars} +@code{read} returns after reading exactly @var{nchars} characters rather +than waiting for a complete line of input, unless EOF is encountered or +@code{read} times out. +Delimiter characters encountered in the input are +not treated specially and do not cause @code{read} to return until +@var{nchars} characters are read. + +@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. +@var{timeout} may be a decimal number with a fractional portion following +the decimal point. +This option is only effective if @code{read} is reading input from a +terminal, pipe, or other special file; it has no effect when reading +from regular files. +If @var{timeout} is 0, @code{read} returns success if input is available on +the specified file descriptor, failure otherwise. +The exit status is greater than 128 if the timeout is exceeded. + +@item -u @var{fd} +Read input from file descriptor @var{fd}. + +@end table + +@item readarray +@btindex readarray +@example +readarray [-n @var{count}] [-O @var{origin}] [-s @var{count}] [-t] [-u @var{fd}] [ +-C @var{callback}] [-c @var{quantum}] [@var{array}] +@end example +Read lines from the standard input into the indexed array variable @var{array}, +or from file descriptor @var{fd} +if the @option{-u} option is supplied. + +A synonym for @code{mapfile}. + +@item source +@btindex source +@example +source @var{filename} +@end example +A synonym for @code{.} (@pxref{Bourne Shell Builtins}). + +@item type +@btindex type +@example +type [-afptP] [@var{name} @dots{}] +@end example +For each @var{name}, indicate how it would be interpreted if used as a +command name. + +If the @option{-t} option is used, @code{type} prints a single word +which is one of @samp{alias}, @samp{function}, @samp{builtin}, +@samp{file} or @samp{keyword}, +if @var{name} is an alias, shell function, shell builtin, +disk file, or shell reserved word, respectively. +If the @var{name} is not found, then nothing is printed, and +@code{type} returns a failure status. + +If the @option{-p} option is used, @code{type} either returns the name +of the disk file that would be executed, or nothing if @option{-t} +would not return @samp{file}. + +The @option{-P} option forces a path search for each @var{name}, even if +@option{-t} would not return @samp{file}. + +If a command is hashed, @option{-p} and @option{-P} print the hashed value, +not necessarily the file that appears first in @code{$PATH}. + +If the @option{-a} option is used, @code{type} returns all of the places +that contain an executable named @var{file}. +This includes aliases and functions, if and only if the @option{-p} option +is not also used. + +If the @option{-f} option is used, @code{type} does not attempt to find +shell functions, as with the @code{command} builtin. + +The return status is zero if all of the @var{names} are found, non-zero +if any are not found. + +@item typeset +@btindex typeset +@example +typeset [-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 [-abcdefilmnpqrstuvxHST] [@var{limit}] +@end example +@code{ulimit} provides control over the resources available to processes +started by the shell, on systems that allow such control. If an +option is given, it is interpreted as follows: +@table @code +@item -S +Change and report the soft limit associated with a resource. + +@item -H +Change and report the hard limit associated with a resource. + +@item -a +All current limits are reported. + +@item -b +The maximum socket buffer size. + +@item -c +The maximum size of core files created. + +@item -d +The maximum size of a process's data segment. + +@item -e +The maximum scheduling priority ("nice"). + +@item -f +The maximum size of files written by the shell and its children. + +@item -i +The maximum number of pending signals. + +@item -l +The maximum size that may be locked into memory. + +@item -m +The maximum resident set size (many systems do not honor this limit). + +@item -n +The maximum number of open file descriptors (most systems do not +allow this value to be set). + +@item -p +The pipe buffer size. + +@item -q +The maximum number of bytes in POSIX message queues. + +@item -r +The maximum real-time scheduling priority. + +@item -s +The maximum stack size. + +@item -t +The maximum amount of cpu time in seconds. + +@item -u +The maximum number of processes available to a single user. + +@item -v +The maximum amount of virtual memory available to the process. + +@item -x +The maximum number of file locks. + +@item -T +The maximum number of threads. + +@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. +A hard limit cannot be increased by a non-root user once it is set; +a soft limit may be increased up to the value of the hard limit. +Otherwise, the current value of the soft limit for the specified resource +is printed, unless the @option{-H} option is supplied. +When setting new limits, if neither @option{-H} nor @option{-S} is supplied, +both the hard and soft limits are set. +If no option is given, then @option{-f} is assumed. Values are in 1024-byte +increments, except for @option{-t}, which is in seconds, @option{-p}, +which is in units of 512-byte blocks, 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 Modifying Shell Behavior +@section Modifying Shell Behavior + +@menu +* The Set Builtin:: Change the values of shell attributes and + positional parameters. +* The Shopt Builtin:: Modify shell optional behavior. +@end menu + +@node The Set Builtin +@subsection The Set Builtin + +This builtin is so complicated that it deserves its own section. @code{set} +allows you to change the values of shell options and set the positional +parameters, or to display the names and values of shell variables. + +@table @code +@item set +@btindex set +@example +set [--abefhkmnptuvxBCEHPT] [-o @var{option}] [@var{argument} @dots{}] +set [+abefhkmnptuvxBCEHPT] [+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 +for setting or resetting the currently-set variables. +Read-only variables cannot be reset. +In @sc{posix} mode, only shell variables are listed. + +When options are supplied, they set or unset shell attributes. +Options, if specified, have the following meanings: + +@table @code +@item -a +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 pipeline (@pxref{Pipelines}), which may consist +of a single simple command (@pxref{Simple Commands}), +a subshell command enclosed in parentheses (@pxref{Command Grouping}), +or one of the commands executed as part of a command list enclosed +by braces (@pxref{Command Grouping}) +returns a non-zero status. +The shell does not exit if the command that fails is part of the +command list immediately following a @code{while} or @code{until} keyword, +part of the test in an @code{if} statement, +part of any command executed in a @code{&&} or @code{||} list except +the command following the final @code{&&} or @code{||}, +any command in a pipeline but the last, +or if the command's return status is being inverted with @code{!}. +A trap on @code{ERR}, if set, is executed before the shell exits. + +This option applies to the shell environment and each subshell environment +separately (@pxref{Command Execution Environment}), and may cause +subshells to exit before executing all the commands in the subshell. + +@item -f +Disable filename expansion (globbing). + +@item -h +Locate and remember (hash) commands as they are looked up for execution. +This option is enabled by default. + +@item -k +All arguments in the form of assignment statements are placed +in the environment for a command, not just those that precede +the command name. + +@item -m +Job control is enabled (@pxref{Job Control}). + +@item -n +Read commands but do not execute them; this may be used to check a +script for syntax errors. +This option is ignored by interactive shells. + +@item -o @var{option-name} + +Set the option corresponding to @var{option-name}: + +@table @code +@item allexport +Same as @code{-a}. + +@item braceexpand +Same as @code{-B}. + +@item emacs +Use an @code{emacs}-style line editing interface (@pxref{Command Line Editing}). +This also affects the editing interface used for @code{read -e}. + +@item errexit +Same as @code{-e}. + +@item errtrace +Same as @code{-E}. + +@item functrace +Same as @code{-T}. + +@item hashall +Same as @code{-h}. + +@item histexpand +Same as @code{-H}. + +@item history +Enable command history, as described in @ref{Bash History Facilities}. +This option is on by default in interactive shells. + +@item ignoreeof +An interactive shell will not exit upon reading EOF. + +@item keyword +Same as @code{-k}. + +@item monitor +Same as @code{-m}. + +@item noclobber +Same as @code{-C}. + +@item noexec +Same as @code{-n}. + +@item noglob +Same as @code{-f}. + +@item nolog +Currently ignored. + +@item notify +Same as @code{-b}. + +@item nounset +Same as @code{-u}. + +@item onecmd +Same as @code{-t}. + +@item physical +Same as @code{-P}. + +@item pipefail +If set, the return value of a pipeline is the value of the last +(rightmost) command to exit with a non-zero status, or zero if all +commands in the pipeline exit successfully. +This option is disabled by default. + +@item posix +Change the behavior of Bash where the default operation differs +from the @sc{posix} standard to match the standard +(@pxref{Bash POSIX Mode}). +This is intended to make Bash behave as a strict superset of that +standard. + +@item privileged +Same as @code{-p}. + +@item verbose +Same as @code{-v}. + +@item vi +Use a @code{vi}-style line editing interface. +This also affects the editing interface used for @code{read -e}. + +@item xtrace +Same as @code{-x}. +@end table + +@item -p +Turn on privileged mode. +In this mode, the @env{$BASH_ENV} and @env{$ENV} files are not +processed, shell functions are not inherited from the environment, +and the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH} and @env{GLOBIGNORE} +variables, if they appear in the environment, are ignored. +If the shell is started with the effective user (group) id not equal to the +real user (group) id, and the @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 and parameters other than the special parameters +@samp{@@} or @samp{*} as an error when performing parameter expansion. +An error message will be written to the standard error, and a non-interactive +shell will exit. + +@item -v +Print shell input lines as they are read. + +@item -x +Print a trace of simple commands, @code{for} commands, @code{case} +commands, @code{select} commands, and arithmetic @code{for} commands +and their arguments or associated word lists after they are +expanded and before they are executed. The value of the @env{PS4} +variable is expanded and the resultant value is printed before +the command and its expanded arguments. + +@item -B +The shell will perform brace expansion (@pxref{Brace Expansion}). +This option is on by default. + +@item -C +Prevent output redirection using @samp{>}, @samp{>&}, and @samp{<>} +from overwriting existing files. + +@item -E +If set, any trap on @code{ERR} is inherited by shell functions, command +substitutions, and commands executed in a subshell environment. +The @code{ERR} trap is normally not inherited in such cases. + +@item -H +Enable @samp{!} style history substitution (@pxref{History Interaction}). +This option is on by default for interactive shells. + +@item -P +If set, do not 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} and @code{RETURN} are inherited by +shell functions, command substitutions, and commands executed +in a subshell environment. +The @code{DEBUG} and @code{RETURN} traps are normally not inherited +in such cases. + +@item -- +If no arguments follow this option, then the positional parameters are +unset. Otherwise, the positional parameters are set to the +@var{arguments}, even if some of them begin with a @samp{-}. + +@item - +Signal the end of options, cause all remaining @var{arguments} +to be assigned to the positional parameters. The @option{-x} +and @option{-v} options are turned off. +If there are no arguments, the positional parameters remain unchanged. +@end table + +Using @samp{+} rather than @samp{-} causes these options to be +turned off. The options can also be used upon invocation of the +shell. The current set of options may be found in @code{$-}. + +The remaining N @var{arguments} are positional parameters and are +assigned, in order, to @code{$1}, @code{$2}, @dots{} @code{$N}. +The special parameter @code{#} is set to N. + +The return status is always zero unless an invalid option is supplied. +@end table + +@node The Shopt Builtin +@subsection The Shopt Builtin + +This builtin allows you to change additional shell optional behavior. + +@table @code + +@item shopt +@btindex shopt +@example +shopt [-pqsu] [-o] [@var{optname} @dots{}] +@end example +Toggle the values of 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 autocd +If set, a command name that is the name of a directory is executed as if +it were the argument to the @code{cd} command. +This option is only used by interactive shells. + +@item cdable_vars +If this is set, an argument to the @code{cd} builtin command that +is not a directory is assumed to be the name of a variable whose +value is the directory to change to. + +@item cdspell +If set, minor errors in the spelling of a directory component in a +@code{cd} command will be corrected. +The errors checked for are transposed characters, +a missing character, and a character too many. +If a correction is found, the corrected path is printed, +and the command proceeds. +This option is only used by interactive shells. + +@item checkhash +If this is set, Bash checks that a command found in the hash +table exists before trying to execute it. If a hashed command no +longer exists, a normal path search is performed. + +@item checkjobs +If set, Bash lists the status of any stopped and running jobs before +exiting an interactive shell. If any jobs are running, this causes +the exit to be deferred until a second exit is attempted without an +intervening command (@pxref{Job Control}). +The shell always postpones exiting if any jobs are stopped. + +@item checkwinsize +If set, Bash checks the window size after each 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 compat31 +If set, Bash +changes its behavior to that of version 3.1 with respect to quoted +arguments to the conditional command's =~ operator. + +@item dirspell +If set, Bash +attempts spelling correction on directory names during word completion +if the directory name initially supplied does not exist. + +@item dotglob +If set, Bash includes filenames beginning with a `.' in +the results of filename expansion. + +@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. + +@item +@code{BASH_ARGC} and @code{BASH_ARGV} are updated as described in their +descriptions (@pxref{Bash Variables}). + +@item +Function tracing is enabled: command substitution, shell functions, and +subshells invoked with @code{( @var{command} )} inherit the +@code{DEBUG} and @code{RETURN} traps. + +@item +Error tracing is enabled: command substitution, shell functions, and +subshells invoked with @code{( @var{command} )} inherit the +@code{ERROR} trap. +@end enumerate + +@item extglob +If set, the extended pattern matching features described above +(@pxref{Pattern Matching}) are enabled. + +@item extquote +If set, @code{$'@var{string}'} and @code{$"@var{string}"} quoting is +performed within @code{$@{@var{parameter}@}} expansions +enclosed in double quotes. This option is enabled by default. + +@item failglob +If set, patterns which fail to match filenames during filename expansion +result in an expansion error. + +@item force_fignore +If set, the suffixes specified by the @env{FIGNORE} shell variable +cause words to be ignored when performing word completion even if +the ignored words are the only possible completions. +@xref{Bash Variables}, for a description of @env{FIGNORE}. +This option is enabled by default. + +@item globstar +If set, the pattern @samp{**} used in a filename expansion context will +match a files and zero or more directories and subdirectories. +If the pattern is followed by a @samp{/}, only directories and +subdirectories match. + +@item gnu_errfmt +If set, shell error messages are written in the standard @sc{gnu} error +message format. + +@item histappend +If set, the history list is appended to the file named by the value +of the @env{HISTFILE} +variable when the shell exits, rather than overwriting the file. + +@item histreedit +If set, and Readline +is being used, a user is given the opportunity to re-edit a +failed history substitution. + +@item histverify +If set, and Readline +is being used, the results of history substitution are not immediately +passed to the shell parser. Instead, the resulting line is loaded into +the Readline editing buffer, allowing further modification. + +@item hostcomplete +If set, and Readline is being used, Bash will attempt to perform +hostname completion when a word containing a @samp{@@} is being +completed (@pxref{Commands For Completion}). This option is enabled +by default. + +@item huponexit +If set, Bash will send @code{SIGHUP} to all jobs when an interactive +login shell exits (@pxref{Signals}). + +@item 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 nocasematch +If set, Bash matches patterns in a case-insensitive fashion when +performing matching while executing @code{case} or @code{[[} +conditional commands. + +@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 +parameter expansion, command substitution, arithmetic +expansion, and quote removal after being expanded +as described below (@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. + +@end table + +@node Special Builtins +@section Special Builtins +@cindex special builtin + +For historical reasons, the @sc{posix} standard has classified +several builtin commands as @emph{special}. +When Bash is executing in @sc{posix} mode, the special builtins +differ from other builtin commands in three respects: + +@enumerate +@item +Special builtins are found before shell functions during command lookup. + +@item +If a special builtin returns an error status, a non-interactive shell exits. + +@item +Assignment statements preceding the command stay in effect in the shell +environment after the command completes. +@end enumerate + +When Bash is not executing in @sc{posix} mode, these builtins behave no +differently than the rest of the Bash builtin commands. +The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}. + +These are the @sc{posix} special builtins: +@example +@w{break : . continue eval exec exit export readonly return set} +@w{shift trap unset} +@end example + +@node Shell Variables +@chapter Shell Variables + +@menu +* Bourne Shell Variables:: Variables which Bash uses in the same way + as the Bourne Shell. +* Bash Variables:: List of variables that exist in Bash. +@end menu + +This chapter describes the shell variables that Bash uses. +Bash automatically assigns default values to a number of variables. + +@node Bourne Shell Variables +@section Bourne Shell Variables + +Bash uses certain shell variables in the same way as the Bourne shell. +In some cases, Bash assigns a default value to the variable. + +@vtable @code + +@item CDPATH +A colon-separated list of directories used as a search path for +the @code{cd} builtin command. + +@item HOME +The current user's home directory; the default for the @code{cd} builtin +command. +The value of this variable is also used by tilde expansion +(@pxref{Tilde Expansion}). + +@item IFS +A list of characters that separate fields; used when the shell splits +words as part of expansion. + +@item MAIL +If this parameter is set to a filename 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 BASHOPTS +A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the @option{-s} option to the +@code{shopt} builtin command (@pxref{The Shopt Builtin}). +The options appearing in @env{BASHOPTS} are those reported +as @samp{on} by @samp{shopt}. +If this variable is in the environment when Bash +starts up, each shell option in the list will be enabled before +reading any startup files. This variable is readonly. + +@item BASHPID +Expands to the process id of the current Bash process. +This differs from @code{$$} under certain circumstances, such as subshells +that do not require Bash to be re-initialized. + +@item BASH_ALIASES +An associative array variable whose members correspond to the internal +list of aliases as maintained by the @code{alias} builtin +(@pxref{Bourne Shell Builtins}). +Elements added to this array appear in the alias list; unsetting array +elements cause aliases to be removed from the alias list. + +@item BASH_ARGC +An array variable whose values are the number of parameters in each +frame of the current bash execution call stack. The number of +parameters to the current subroutine (shell function or script executed +with @code{.} or @code{source}) is at the top of the stack. When a +subroutine is executed, the number of parameters passed is pushed onto +@code{BASH_ARGC}. +The shell sets @code{BASH_ARGC} only when in extended debugging mode +(see @ref{The Shopt Builtin} +for a description of the @code{extdebug} option to the @code{shopt} +builtin). + +@item BASH_ARGV +An array variable containing all of the parameters in the current bash +execution call stack. The final parameter of the last subroutine call +is at the top of the stack; the first parameter of the initial call is +at the bottom. When a subroutine is executed, the parameters supplied +are pushed onto @code{BASH_ARGV}. +The shell sets @code{BASH_ARGV} only when in extended debugging mode +(see @ref{The Shopt Builtin} +for a description of the @code{extdebug} option to the @code{shopt} +builtin). + +@item BASH_CMDS +An associative array variable whose members correspond to the internal +hash table of commands as maintained by the @code{hash} builtin +(@pxref{Bourne Shell Builtins}). +Elements added to this array appear in the hash table; unsetting array +elements cause commands to be removed from the hash table. + +@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]@}} was called (or @code{$@{BASH_LINENO[$i-1]@}} if +referenced within another shell function). +The corresponding source file name is @code{$@{BASH_SOURCE[$i]@}}. +Use @code{LINENO} to obtain the current line number. + +@item BASH_REMATCH +An array variable whose members are assigned by the @samp{=~} binary +operator to the @code{[[} conditional command +(@pxref{Conditional Constructs}). +The element with index 0 is the portion of the string +matching the entire regular expression. +The element with index @var{n} is the portion of the +string matching the @var{n}th parenthesized subexpression. +This variable is read-only. + +@item BASH_SOURCE +An array variable whose members are the source filenames 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 BASH_XTRACEFD +If set to an integer corresponding to a valid file descriptor, Bash +will write the trace output generated when @samp{set -x} +is enabled to that file descriptor. +This allows tracing output to be separated from diagnostic and error +messages. +The file descriptor is closed when @code{BASH_XTRACEFD} is unset or assigned +a new value. +Unsetting @code{BASH_XTRACEFD} or assigning it the empty string causes the +trace output to be sent to the standard error. +Note that setting @code{BASH_XTRACEFD} to 2 (the standard error file +descriptor) and then unsetting it will result in the standard error +being closed. + +@item 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_TYPE +Set to an integer value corresponding to the type of completion attempted +that caused a completion function to be called: +@var{TAB}, for normal completion, +@samp{?}, for listing completions after successive tabs, +@samp{!}, for listing alternatives on partial word completion, +@samp{@@}, to list completions if the word is not unmodified, +or +@samp{%}, for menu completion. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (@pxref{Programmable Completion}). + +@item COMP_KEY +The key (or final key of a key sequence) used to invoke the current +completion function. + +@item COMP_WORDBREAKS +The set of characters that the Readline library treats as word +separators when performing word completion. +If @code{COMP_WORDBREAKS} is unset, it loses its special properties, +even if it is subsequently reset. + +@item COMP_WORDS +An array variable consisting of the individual +words in the current command line. +The line is split into words as Readline would split it, using +@code{COMP_WORDBREAKS} as described above. +This variable is available only in shell functions invoked by the +programmable completion facilities (@pxref{Programmable Completion}). + +@item COMPREPLY +An array variable from which Bash reads the possible completions +generated by a shell function invoked by the programmable completion +facility (@pxref{Programmable Completion}). + +@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 @code{"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, by removing the oldest entries, +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 HISTTIMEFORMAT +If this variable is set and not null, its value is used as a format string +for @var{strftime} to print the time stamp associated with each history +entry displayed by the @code{history} builtin. +If this variable is set, time stamps are written to the history file so +they may be preserved across shell sessions. +This uses the history comment character to distinguish timestamps from +other history lines. + +@item HOSTFILE +Contains the name of a file in the same format as @file{/etc/hosts} that +should be read when the shell needs to complete a hostname. +The list of possible hostname completions may be changed while the shell +is running; +the next time hostname completion is attempted after the +value is changed, Bash adds the contents of the new file to the +existing list. +If @env{HOSTFILE} is set, but has no value, or does not name a readable file, +Bash attempts to read +@file{/etc/hosts} to obtain the list of possible hostname completions. +When @env{HOSTFILE} is unset, the hostname list is cleared. + +@item HOSTNAME +The name of the current host. + +@item HOSTTYPE +A string describing the machine Bash is running on. + +@item IGNOREEOF +Controls the action of the shell on receipt of an @code{EOF} character +as the sole input. If set, the value denotes the number +of consecutive @code{EOF} characters that can be read as the +first character on an input line +before the shell will exit. If the variable exists but does not +have a numeric value (or has no value) then the default is 10. +If the variable does not exist, then @code{EOF} signifies the end of +input to the shell. This is only in effect for interactive shells. + +@item INPUTRC +The name of the Readline initialization file, overriding the default +of @file{~/.inputrc}. + +@item 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 PROMPT_DIRTRIM +If set to a number greater than zero, the value is used as the number of +trailing directory components to retain when expanding the @code{\w} and +@code{\W} prompt string escapes (@pxref{Printing a Prompt}). +Characters removed are replaced with an ellipsis. + +@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 SHELL +The full pathname to the shell is kept in this environment variable. +If it is not set when the shell starts, +Bash assigns to it the full pathname of the current user's login shell. + +@item SHELLOPTS +A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the @option{-o} option to the +@code{set} builtin command (@pxref{The Set Builtin}). +The options appearing in @env{SHELLOPTS} are those reported +as @samp{on} by @samp{set -o}. +If this variable is in the environment when Bash +starts up, each shell option in the list will be enabled before +reading any startup files. This variable is readonly. + +@item SHLVL +Incremented by one each time a new instance of Bash is started. This is +intended to be a count of how deeply your Bash shells are nested. + +@item TIMEFORMAT +The value of this parameter is used as a format string specifying +how the timing information for pipelines prefixed with the @code{time} +reserved word should be displayed. +The @samp{%} character introduces an +escape sequence that is expanded to a time value or other +information. +The escape sequences and their meanings are as +follows; the braces denote optional portions. + +@table @code + +@item %% +A literal @samp{%}. + +@item %[@var{p}][l]R +The elapsed time in seconds. + +@item %[@var{p}][l]U +The number of CPU seconds spent in user mode. + +@item %[@var{p}][l]S +The number of CPU seconds spent in system mode. + +@item %P +The CPU percentage, computed as (%U + %S) / %R. +@end table + +The optional @var{p} is a digit specifying the precision, the number of +fractional digits after a decimal point. +A value of 0 causes no decimal point or fraction to be output. +At most three places after the decimal point may be specified; values +of @var{p} greater than 3 are changed to 3. +If @var{p} is not specified, the value 3 is used. + +The optional @code{l} specifies a longer format, including minutes, of +the form @var{MM}m@var{SS}.@var{FF}s. +The value of @var{p} determines whether or not the fraction is included. + +If this variable is not set, Bash acts as if it had the value +@example +@code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'} +@end example +If the value is null, no timing information is displayed. +A trailing newline is added when the format string is displayed. + +@item TMOUT +If set to a value greater than zero, @code{TMOUT} is treated as the +default timeout for the @code{read} builtin (@pxref{Bash Builtins}). +The @code{select} command (@pxref{Conditional Constructs}) terminates +if input does not arrive after @code{TMOUT} seconds when input is coming +from a terminal. + +In an interactive shell, the value is interpreted as +the number of seconds to wait for input after issuing the primary +prompt when the shell is interactive. +Bash terminates after that number of seconds if input does +not arrive. + +@item TMPDIR +If set, Bash uses its value as the name of a directory in which +Bash creates temporary files for the shell's use. + +@item UID +The numeric real user id of the current user. This variable is readonly. + +@end vtable + +@node Bash Features +@chapter Bash Features + +This 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{The Shopt Builtin} +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 output +in the @sc{gnu} @code{gettext} PO (portable object) file format. +Equivalent to @option{-D} except for the output format. + +@item --dump-strings +Equivalent to @option{-D}. + +@item --help +Display a usage message on standard output and exit successfully. + +@item --init-file @var{filename} +@itemx --rcfile @var{filename} +Execute commands from @var{filename} (instead of @file{~/.bashrc}) +in an interactive shell. + +@item --login +Equivalent to @option{-l}. + +@item --noediting +Do not use the @sc{gnu} Readline library (@pxref{Command Line Editing}) +to read command lines when the shell is interactive. + +@item --noprofile +Don't load the system-wide startup file @file{/etc/profile} +or any of the personal initialization files +@file{~/.bash_profile}, @file{~/.bash_login}, or @file{~/.profile} +when Bash is invoked as a login shell. + +@item --norc +Don't read the @file{~/.bashrc} initialization file in an +interactive shell. This is on by default if the shell is +invoked as @code{sh}. + +@item --posix +Change the behavior of Bash where the default operation differs +from the @sc{posix} standard to match the standard. This +is intended to make Bash behave as a strict superset of that +standard. @xref{Bash POSIX Mode}, for a description of the Bash +@sc{posix} mode. + +@item --restricted +Make the shell a restricted shell (@pxref{The Restricted Shell}). + +@item --verbose +Equivalent to @option{-v}. Print shell input lines as they're read. + +@item --version +Show version information for this instance of +Bash on the standard output and exit successfully. + +@end table + +There are several single-character options that may be supplied at +invocation which are not available with the @code{set} builtin. + +@table @code +@item -c @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 output. +These are the strings that +are subject to language translation when the current locale +is not @code{C} or @code{POSIX} (@pxref{Locale Translation}). +This implies the @option{-n} option; no commands will be executed. + +@item [-+]O [@var{shopt_option}] +@var{shopt_option} is one of the shell options accepted by the +@code{shopt} builtin (@pxref{The Shopt Builtin}). +If @var{shopt_option} is present, @option{-O} sets the value of that option; +@option{+O} unsets it. +If @var{shopt_option} is not supplied, the names and values of the shell +options accepted by @code{shopt} are printed on the standard output. +If the invocation option is @option{+O}, the output is displayed in a format +that may be reused as input. + +@item -- +A @code{--} signals the end of options and disables further option +processing. +Any arguments after the @code{--} are treated as filenames and arguments. + +@end table + +@cindex login shell +A @emph{login} shell is one whose first character of argument zero is +@samp{-}, or one invoked with the @option{--login} option. + +@cindex interactive shell +An @emph{interactive} shell is one started without non-option arguments, +unless @option{-s} is specified, +without specifying the @option{-c} option, and whose input and output are both +connected to terminals (as determined by @code{isatty(3)}), or one +started with the @option{-i} option. @xref{Interactive Shells}, for more +information. + +If arguments remain after option processing, and neither the +@option{-c} nor the @option{-s} +option has been supplied, the first argument is assumed to +be the name of a file containing shell commands (@pxref{Shell Scripts}). +When Bash is invoked in this fashion, @code{$0} +is set to the name of the file, and the positional parameters +are set to the remaining arguments. +Bash reads and executes commands from this file, then exits. +Bash's exit status is the exit status of the last command executed +in the script. If no commands are executed, the exit status is 0. + +@node Bash Startup Files +@section Bash Startup Files +@cindex startup files + +This section describes how Bash executes its startup files. +If any of the files exist but cannot be read, Bash reports an error. +Tildes are expanded in 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 with its standard input +connected to a a network connection, as if by the remote shell +daemon, usually @code{rshd}, or the secure shell daemon @code{sshd}. +If Bash determines it is being run in +this fashion, it reads and executes commands from @file{~/.bashrc}, if that +file exists and is readable. +It will not do this if invoked as @code{sh}. +The @option{--norc} option may be used to inhibit this behavior, and the +@option{--rcfile} option may be used to force another file to be read, but +@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}, @env{BASHOPTS}, @env{CDPATH}, and @env{GLOBIGNORE} +variables, if they appear in the environment, are ignored, and the effective +user id is set to the real user id. +If the @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 specifying the @option{-c} option, and +whose input and error output are both +connected to terminals (as determined by @code{isatty(3)}), +or one started with the @option{-i} option. + +An interactive shell generally reads from and writes to a user's +terminal. + +The @option{-s} invocation option may be used to set the positional parameters +when an interactive shell is started. + +@node Is this Shell Interactive? +@subsection Is this Shell Interactive? + +To determine within a startup script whether or not Bash is +running interactively, +test the value of the @samp{-} special parameter. +It contains @code{i} when the shell is interactive. For example: + +@example +case "$-" in +*i*) echo This shell is interactive ;; +*) echo This shell is not interactive ;; +esac +@end example + +Alternatively, startup scripts may examine the variable +@env{PS1}; it is unset in non-interactive shells, and set in +interactive shells. Thus: + +@example +if [ -z "$PS1" ]; then + echo This shell is not interactive +else + echo This shell is interactive +fi +@end example + +@node Interactive Shell Behavior +@subsection Interactive Shell Behavior + +When the shell is running interactively, it changes its behavior in +several ways. + +@enumerate +@item +Startup files are read and executed as described in @ref{Bash Startup Files}. + +@item +Job Control (@pxref{Job Control}) is enabled by default. When job +control is in effect, Bash ignores the keyboard-generated job control +signals @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. + +@item +Bash expands and displays @env{PS1} before reading the first line +of a command, and expands and displays @env{PS2} before reading the +second and subsequent lines of a multi-line command. + +@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{huponexit} shell option has been enabled (@pxref{Signals}). + +@item +The @option{-n} invocation option is ignored, and @samp{set -n} has +no effect (@pxref{The Set Builtin}). + +@item +Bash will check for mail periodically, depending on the values of the +@env{MAIL}, @env{MAILPATH}, and @env{MAILCHECK} shell variables +(@pxref{Bash Variables}). + +@item +Expansion errors due to references to unbound shell variables after +@samp{set -u} has been enabled will not cause the shell to exit +(@pxref{The Set Builtin}). + +@item +The shell will not exit on expansion errors caused by @var{var} being unset +or null in @code{$@{@var{var}:?@var{word}@}} expansions +(@pxref{Shell Parameter Expansion}). + +@item +Redirection errors encountered by shell builtins will not cause the +shell to exit. + +@item +When running in @sc{posix} mode, a special builtin returning an error +status will not cause the shell to exit (@pxref{Bash POSIX Mode}). + +@item +A failed @code{exec} will not cause the shell to exit +(@pxref{Bourne Shell Builtins}). + +@item +Parser syntax errors will not cause the shell to exit. + +@item +Simple spelling correction for directory arguments to the @code{cd} +builtin is enabled by default (see the description of the @code{cdspell} +option to the @code{shopt} builtin in @ref{The Shopt Builtin}). + +@item +The shell will check the value of the @env{TMOUT} variable and exit +if a command is not read within the specified number of seconds after +printing @env{$PS1} (@pxref{Bash Variables}). + +@end enumerate + +@node Bash Conditional Expressions +@section Bash Conditional Expressions +@cindex expressions, conditional + +Conditional expressions are used by the @code{[[} compound command +and the @code{test} and @code{[} builtin commands. + +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. + +When used with @samp{[[}, The @samp{<} and @samp{>} operators sort +lexicographically using the current locale. + +Unless otherwise specified, primaries that operate on files follow symbolic +links and operate on the target of the link, rather than the link itself. + +@table @code +@item -a @var{file} +True if @var{file} exists. + +@item -b @var{file} +True if @var{file} exists and is a block special file. + +@item -c @var{file} +True if @var{file} exists and is a character special file. + +@item -d @var{file} +True if @var{file} exists and is a directory. + +@item -e @var{file} +True if @var{file} exists. + +@item -f @var{file} +True if @var{file} exists and is a regular file. + +@item -g @var{file} +True if @var{file} exists and its set-group-id bit is set. + +@item -h @var{file} +True if @var{file} exists and is a symbolic link. + +@item -k @var{file} +True if @var{file} exists and its "sticky" bit is set. + +@item -p @var{file} +True if @var{file} exists and is a named pipe (FIFO). + +@item -r @var{file} +True if @var{file} exists and is readable. + +@item -s @var{file} +True if @var{file} exists and has a size greater than zero. + +@item -t @var{fd} +True if file descriptor @var{fd} is open and refers to a terminal. + +@item -u @var{file} +True if @var{file} exists and its set-user-id bit is set. + +@item -w @var{file} +True if @var{file} exists and is writable. + +@item -x @var{file} +True if @var{file} exists and is executable. + +@item -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} +@itemx @var{string1} = @var{string2} +True if the strings are equal. +@samp{=} should be used with the @code{test} command for @sc{posix} conformance. + +@item @var{string1} != @var{string2} +True if the strings are not equal. + +@item @var{string1} < @var{string2} +True if @var{string1} sorts before @var{string2} lexicographically. + +@item @var{string1} > @var{string2} +True if @var{string1} sorts after @var{string2} lexicographically. + +@item @var{arg1} OP @var{arg2} +@code{OP} is one of +@samp{-eq}, @samp{-ne}, @samp{-lt}, @samp{-le}, @samp{-gt}, or @samp{-ge}. +These arithmetic binary operators return true if @var{arg1} +is equal to, not equal to, less than, less than or equal to, +greater than, or greater than or equal to @var{arg2}, +respectively. @var{Arg1} and @var{arg2} +may be positive or negative integers. + +@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 interchangeably to represent numbers between 10 +and 35. + +Operators are evaluated in order of precedence. Sub-expressions in +parentheses are evaluated first and may override the precedence +rules above. + +@node Aliases +@section Aliases +@cindex alias expansion + +@var{Aliases} allow a string to be substituted for a word when it is used +as the first word of a simple command. +The shell maintains a list of aliases that may be set and unset with +the @code{alias} and @code{unalias} builtin commands. + +The first word of each simple command, if unquoted, is checked to see +if it has an alias. +If so, that word is replaced by the text of the alias. +The characters @samp{/}, @samp{$}, @samp{`}, @samp{=} and any of the +shell metacharacters or quoting characters listed above may not appear +in an alias name. +The replacement text may contain any valid +shell input, including shell metacharacters. +The first word of the replacement text is tested for +aliases, but a word that is identical to an alias being expanded +is not expanded a second time. +This means that one may alias @code{ls} to @code{"ls -F"}, +for instance, and Bash does not try to recursively expand the +replacement text. If the last character of the alias value is a +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{The Shopt Builtin}). + +The rules concerning the definition and use of aliases are +somewhat confusing. Bash +always reads at least one complete line +of input 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 indexed and associative array variables. +Any variable may be used as an indexed array; +the @code{declare} builtin will explicitly declare an array. +There is no maximum +limit on the size of an array, nor any requirement that members +be indexed or assigned contiguously. +Indexed arrays are referenced using integers (including arithmetic +expressions (@pxref{Shell Arithmetic}) and are zero-based; +associative arrays use arbitrary strings. + +An indexed 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. + +Associative arrays are created using +@example +declare -A @var{name}. +@end example + +Attributes may be +specified for an array variable using the @code{declare} and +@code{readonly} builtins. Each attribute applies to all members of +an array. + +Arrays are assigned to using compound assignments of the form +@example +name=(value@var{1} @dots{} value@var{n}) +@end example +@noindent +where each +@var{value} is of the form @code{[@var{subscript}]=}@var{string}. +Indexed array assignments do not require the bracket and subscript. +When assigning to indexed arrays, if +the optional subscript is supplied, that index is assigned to; +otherwise the index of the element assigned is the last index assigned +to by the statement plus one. Indexing starts at zero. + +When assigning to an associative array, the subscript is required. + +This syntax is also accepted by the @code{declare} +builtin. Individual array elements may be assigned to using the +@code{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. +If the double-quoted expansion occurs within a word, the expansion of +the first parameter is joined with the beginning part of the original +word, and the expansion of the last parameter is joined with the last +part of the original word. +This is analogous to the +expansion of the special parameters @samp{@@} and @samp{*}. +@code{$@{#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 with a subscript of 0. + +An array variable is considered set if a subscript has been assigned a +value. The null string is a valid value. + +The @code{unset} builtin is used to destroy arrays. +@code{unset} @var{name}[@var{subscript}] +destroys the array element at index @var{subscript}. +Care must be taken to avoid unwanted side effects caused by filename +expansion. +@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 indexed +array and a @option{-A} option to specify an associative 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 [-n] [@var{+N} | @var{-N} | @var{dir} ] +@end example + +Save the current directory on the top of the directory stack +and then @code{cd} to @var{dir}. +With no arguments, @code{pushd} exchanges the top two directories. + +@table @code +@item -n +Suppresses the normal change of directory when adding directories +to the stack, so that only the stack is manipulated. +@item +@var{N} +Brings the @var{N}th directory (counting from the left of the +list printed by @code{dirs}, starting with zero) to the top of +the list by rotating the stack. +@item -@var{N} +Brings the @var{N}th directory (counting from the right of the +list printed by @code{dirs}, starting with zero) to the top of +the list by rotating the stack. +@item @var{dir} +Makes 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, with @env{$HOME} abbreviated with a tilde +(uses the @env{$PROMPT_DIRTRIM} variable). +@item \W +The basename of @env{$PWD}, with @env{$HOME} abbreviated with a tilde. +@item \! +The history number of this command. +@item \# +The command number of this command. +@item \$ +If the effective uid is 0, @code{#}, otherwise @code{$}. +@item \@var{nnn} +The character whose ASCII code is the octal value @var{nnn}. +@item \\ +A backslash. +@item \[ +Begin a sequence of non-printing characters. This could be used to +embed a terminal control sequence into the prompt. +@item \] +End a sequence of non-printing characters. +@end table + +The command number and the history number are usually different: +the history number of a command is its position in the history +list, which may include commands restored from the history file +(@pxref{Bash History Facilities}), while the command number is +the position in the sequence of commands executed during the current +shell session. + +After the string is decoded, it is expanded via +parameter expansion, command substitution, arithmetic +expansion, and quote removal, subject to the value of the +@code{promptvars} shell option (@pxref{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} 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 +The @code{bg} builtin uses the required format to describe each job placed +in the background, which does not include an indication of whether the job +is the current or previous job. + +@item +Reserved words appearing in a context where reserved words are recognized +do not undergo alias expansion. + +@item +The @sc{posix} @env{PS1} and @env{PS2} expansions of @samp{!} to +the history number and @samp{!!} to @samp{!} are enabled, +and parameter expansion is performed on the values of @env{PS1} and +@env{PS2} regardless of the setting of the @code{promptvars} option. + +@item +The @sc{posix} startup files are executed (@env{$ENV}) rather than +the normal Bash files. + +@item +Tilde expansion is only performed on assignments preceding a command +name, rather than on all assignment statements on the line. + +@item +The default history file is @file{~/.sh_history} (this is the +default value of @env{$HISTFILE}). + +@item +The output of @samp{kill -l} prints all the signal names on a single line, +separated by spaces, without the @samp{SIG} prefix. + +@item +The @code{kill} builtin does not accept signal names with a @samp{SIG} +prefix. + +@item +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} special builtins are found before shell functions +during command lookup. + +@item +If a @sc{posix} special builtin returns an error status, a +non-interactive shell exits. The fatal errors are those listed in +the POSIX standard, and include things like passing incorrect options, +redirection errors, variable assignment errors for assignments preceding +the command name, and so on. + +@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} 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}. + +@item +The @code{trap} builtin displays signal names without the leading +@code{SIG}. + +@item +The @code{trap} builtin doesn't check the first argument for a possible +signal specification and revert the signal handling to the original +disposition if it is, unless that argument consists solely of digits and +is a valid signal number. If users want to reset the handler for a given +signal to the original disposition, they should use @samp{-} as the +first argument. + +@item +The @code{.} and @code{source} builtins do not search the current directory +for the filename argument if it is not found by searching @env{PATH}. + +@item +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{alias} builtin displays alias definitions, it does not +display them with a leading @samp{alias } unless the @option{-p} option +is supplied. + +@item +When the @code{set} builtin is invoked without options, it does not display +shell function names and definitions. + +@item +When the @code{set} builtin is invoked without options, it displays +variable values without quotes, unless they contain shell metacharacters, +even if the result contains nonprinting characters. + +@item +When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname +constructed from @code{$PWD} and the directory name supplied as an argument +does not refer to an existing directory, @code{cd} will fail instead of +falling back to @var{physical} mode. + +@item +When the @code{pwd} builtin is supplied the @option{-P} option, it resets +@code{$PWD} to a pathname containing no symlinks. + +@item +The @code{pwd} builtin verifies that the value it prints is the same as the +current directory, even if it is not asked to check the file system with the +@option{-P} option. + +@item +When listing the history, the @code{fc} builtin does not include an +indication of whether or not a history entry has been modified. + +@item +The default editor used by @code{fc} is @code{ed}. + +@item +The @code{type} and @code{command} builtins will not report a non-executable +file as having been found, though the shell will attempt to execute such a +file if it is the only so-named file found in @code{$PATH}. + +@item +The @code{vi} editing mode will invoke the @code{vi} editor directly when +the @samp{v} command is run, instead of checking @code{$VISUAL} and +@code{$EDITOR}. + +@item +When the @code{xpg_echo} option is enabled, Bash does not attempt to interpret +any arguments to @code{echo} as options. Each argument is displayed, after +escape characters are converted. + +@item +The @code{ulimit} builtin uses a block size of 512 bytes for the @option{-c} +and @option{-f} options. + +@item +The arrival of @code{SIGCHLD} when a trap is set on @code{SIGCHLD} does +not interrupt the @code{wait} builtin and cause it to return immediately. +The trap command is run once for each child that exits. + +@end enumerate + +There is other @sc{posix} behavior that Bash does not implement by +default even when in @sc{posix} mode. +Specifically: + +@enumerate + +@item +The @code{fc} builtin checks @code{$EDITOR} as a program to edit history +entries if @code{FCEDIT} is unset, rather than defaulting directly to +@code{ed}. @code{fc} uses @code{ed} if @code{EDITOR} is unset. + +@item +As noted above, Bash requires the @code{xpg_echo} option to be enabled for +the @code{echo} builtin to be fully conformant. + +@end enumerate + +Bash can be configured to be @sc{posix}-conformant by default, by specifying +the @option{--enable-strict-posix-default} to @code{configure} when building +(@pxref{Optional Features}). + +@node Job Control +@chapter Job Control + +This chapter discusses what job control is, how it works, and how +Bash allows you to access its facilities. + +@menu +* Job Control Basics:: How job control works. +* Job Control Builtins:: Bash builtin commands used to interact + with job control. +* Job Control Variables:: Variables Bash uses to customize job + control. +@end menu + +@node Job Control Basics +@section Job Control Basics +@cindex job control +@cindex foreground +@cindex background +@cindex suspending jobs + +Job control +refers to the ability to selectively stop (suspend) +the execution of processes and continue (resume) +their execution at a later point. A user typically employs +this facility via an interactive interface supplied jointly +by the operating system kernel's terminal driver and Bash. + +The shell associates a @var{job} with each pipeline. It keeps a +table of currently executing jobs, which may be listed with the +@code{jobs} command. When Bash starts a job +asynchronously, it prints a line that looks +like: +@example +[1] 25647 +@end example +@noindent +indicating that this job is job number 1 and that the process @sc{id} +of the last process in the pipeline associated with this job is +25647. All of the processes in a single pipeline are members of +the same job. Bash uses the @var{job} abstraction as the +basis for job control. + +To facilitate the implementation of the user interface to job +control, the operating system maintains the notion of a current terminal +process group @sc{id}. Members of this process group (processes whose +process group @sc{id} is equal to the current terminal process group +@sc{id}) receive keyboard-generated signals such as @code{SIGINT}. +These processes are said to be in the foreground. Background +processes are those whose process group @sc{id} differs from the +terminal's; such processes are immune to keyboard-generated +signals. Only foreground processes are allowed to read from or, if +the user so specifies with @code{stty tostop}, write to the terminal. +Background processes which attempt to +read from (write to when @code{stty tostop} is in effect) the +terminal are sent a @code{SIGTTIN} (@code{SIGTTOU}) +signal by the kernel's terminal driver, +which, unless caught, suspends the process. + +If the operating system on which Bash is running supports +job control, Bash contains facilities to use it. Typing the +@var{suspend} character (typically @samp{^Z}, Control-Z) while a +process is running causes that process to be stopped and returns +control to Bash. Typing the @var{delayed suspend} character +(typically @samp{^Y}, Control-Y) causes the process to be stopped +when it attempts to read input from the terminal, and control to +be returned to Bash. The user then manipulates the state of +this job, using the @code{bg} command to continue it in the +background, the @code{fg} command to continue it in the +foreground, or the @code{kill} command to kill it. A @samp{^Z} +takes effect immediately, and has the additional side effect of +causing pending output and typeahead to be discarded. + +There are a number of ways to refer to a job in the shell. The +character @samp{%} introduces a job specification (@var{jobspec}). + +Job number @code{n} may be referred to as @samp{%n}. +The symbols @samp{%%} and @samp{%+} refer to the shell's notion of the +current job, which is the last job stopped while it was in the foreground +or started in the background. +A single @samp{%} (with no accompanying job specification) also refers +to the current job. +The previous job may be referenced using @samp{%-}. +If there is only a single job, @samp{%+} and @samp{%-} can both be used +to refer to that job. +In output pertaining to jobs (e.g., the output of the @code{jobs} +command), the current job is always flagged with a @samp{+}, and the +previous job with a @samp{-}. + +A job may also be referred to +using a prefix of the name used to start it, or using a substring +that appears in its command line. For example, @samp{%ce} refers +to a stopped @code{ce} job. Using @samp{%?ce}, on the +other hand, refers to any job containing the string @samp{ce} in +its command line. If the prefix or substring matches more than one job, +Bash reports an error. + +Simply naming a job can be used to bring it into the foreground: +@samp{%1} is a synonym for @samp{fg %1}, bringing job 1 from the +background into the foreground. Similarly, @samp{%1 &} resumes +job 1 in the background, equivalent to @samp{bg %1} + +The shell learns immediately whenever a job changes state. +Normally, Bash waits until it is about to print a prompt +before reporting changes in a job's status so as to not interrupt +any other output. +If the @option{-b} option to the @code{set} builtin is enabled, +Bash reports such changes immediately (@pxref{The Set Builtin}). +Any trap on @code{SIGCHLD} is executed for each child process +that exits. + +If an attempt to exit Bash is made while jobs are stopped, (or running, if +the @code{checkjobs} option is enabled -- see @ref{The Shopt Builtin}), the +shell prints a warning message, and if the @code{checkjobs} option is +enabled, lists the jobs and their statuses. +The @code{jobs} command may then be used to inspect their status. +If a second attempt to exit is made without an intervening command, +Bash does not print another warning, and any stopped jobs are terminated. + +@node Job Control Builtins +@section Job Control Builtins + +@table @code + +@item bg +@btindex bg +@example +bg [@var{jobspec} @dots{}] +@end example +Resume each suspended job @var{jobspec} in the background, as if it +had been started with @samp{&}. +If @var{jobspec} is not supplied, the current job is used. +The return status is zero unless it is run when job control is not +enabled, or, when run with job control enabled, any +@var{jobspec} was not found or specifies a job +that was started without job control. + +@item fg +@btindex fg +@example +fg [@var{jobspec}] +@end example +Resume the job @var{jobspec} in the foreground and make it the current job. +If @var{jobspec} is not supplied, the current job is used. +The return status is that of the command placed into the foreground, +or non-zero if run when job control is disabled or, when run with +job control enabled, @var{jobspec} does not specify a valid job or +@var{jobspec} specifies a job that was started without job control. + +@item jobs +@btindex jobs +@example +jobs [-lnprs] [@var{jobspec}] +jobs -x @var{command} [@var{arguments}] +@end example + +The first form lists the active jobs. The options have the +following meanings: + +@table @code +@item -l +List process @sc{id}s in addition to the normal information. + +@item -n +Display information only about jobs that have changed status since +the user was last notified of their status. + +@item -p +List only the process @sc{id} of the job's process group leader. + +@item -r +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 case-insensitive signal name such as +@code{SIGINT} (with or without the @code{SIG} prefix) +or a signal number; @var{signum} is a signal number. +If @var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used. +The @option{-l} option lists the signal names. +If any arguments are supplied when @option{-l} is given, the names of the +signals corresponding to the arguments are listed, and the return status +is zero. +@var{exit_status} is a number specifying a signal number or the exit +status of a process terminated by a signal. +The 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 each process @sc{id} @var{pid} +or job specification @var{jobspec} exits and return the exit status of the +last command waited for. +If a job spec is given, all processes in the job are waited for. +If no arguments are given, all currently active child processes are +waited for, and the return status is zero. +If 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. +A login shell cannot be suspended; the @option{-f} +option can be used to override this and force the suspension. + +@end table + +When job control is not active, the @code{kill} and @code{wait} +builtins do not accept @var{jobspec} arguments. They must be +supplied process @sc{id}s. + +@node Job Control Variables +@section Job Control Variables + +@vtable @code + +@item auto_resume +This variable controls how the shell interacts with the user and +job control. If this variable exists then single word simple +commands without redirections are treated as candidates for resumption +of an existing job. There is no ambiguity allowed; if there is +more than one job beginning with the string typed, then +the most recently accessed job will be selected. +The name of a stopped job, in this context, is the command line +used to start it. If this variable is set to the value @samp{exact}, +the string supplied must match the name of a stopped job exactly; +if set to @samp{substring}, +the string supplied needs to match a substring of the name of a +stopped job. The @samp{substring} value provides functionality +analogous to the @samp{%?} job @sc{id} (@pxref{Job Control Basics}). +If set to any other value, the supplied string must +be a prefix of a stopped job's name; this provides functionality +analogous to the @samp{%} job @sc{id}. + +@end vtable + +@set readline-appendix +@set history-appendix +@cindex Readline, how to use +@include rluser.texi +@cindex History, how to use +@include hsuser.texi +@clear readline-appendix +@clear history-appendix + +@node Installing Bash +@chapter Installing Bash + +This chapter provides basic instructions for installing Bash on +the various supported platforms. The distribution supports the +@sc{gnu} operating systems, nearly every version of Unix, and several +non-Unix systems such as BeOS and Interix. +Other independent ports exist for +@sc{ms-dos}, @sc{os/2}, and Windows platforms. + +@menu +* Basic Installation:: Installation instructions. +* Compilers and Options:: How to set special options for various + systems. +* Compiling For Multiple Architectures:: How to compile Bash for more + than one kind of system from + the same source tree. +* Installation Names:: How to set the various paths used by the installation. +* Specifying the System Type:: How to configure Bash for a particular system. +* Sharing Defaults:: How to share default configuration values among GNU + programs. +* Operation Controls:: Options recognized by the configuration program. +* Optional Features:: How to enable and disable optional features when + building Bash. +@end menu + +@node Basic Installation +@section Basic Installation +@cindex installation +@cindex configuration +@cindex Bash installation +@cindex Bash configuration + +These are installation instructions for Bash. + +The simplest way to compile Bash is: + +@enumerate +@item +@code{cd} to the directory containing the source code and type +@samp{./configure} to configure Bash for your system. If you're +using @code{csh} on an old version of System V, you might need to +type @samp{sh ./configure} instead to prevent @code{csh} from trying +to execute @code{configure} itself. + +Running @code{configure} takes some time. +While running, it prints messages telling which features it is +checking for. + +@item +Type @samp{make} to compile Bash and build the @code{bashbug} bug +reporting script. + +@item +Optionally, type @samp{make tests} to run the Bash test suite. + +@item +Type @samp{make install} to install @code{bash} and @code{bashbug}. +This will also install the manual pages and Info file. + +@end enumerate + +The @code{configure} shell script attempts to guess correct +values for various system-dependent variables used during +compilation. It uses those values to create a @file{Makefile} in +each directory of the package (the top directory, the +@file{builtins}, @file{doc}, and @file{support} directories, +each directory under @file{lib}, and several others). It also creates a +@file{config.h} file containing system-dependent definitions. +Finally, it creates a shell script named @code{config.status} that you +can run in the future to recreate the current configuration, a +file @file{config.cache} that saves the results of its tests to +speed up reconfiguring, and a file @file{config.log} containing +compiler output (useful mainly for debugging @code{configure}). +If at some point +@file{config.cache} contains results you don't want to keep, you +may remove or edit it. + +To find out more about the options and arguments that the +@code{configure} script understands, type + +@example +bash-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 the directory @file{lib/malloc}. This is not the same +@code{malloc} that appears in @sc{gnu} libc, but an older version +originally derived from the 4.2 @sc{bsd} @code{malloc}. This @code{malloc} +is very fast, but wastes some space on each allocation. +This option is enabled by default. +The @file{NOTES} file contains a list of systems for +which this should be turned off, and @code{configure} disables this +option automatically for a number of systems. + +@item --with-curses +Use the curses library instead of the termcap library. This should +be supplied if your system has an inadequate or incomplete termcap +database. + +@item --with-gnu-malloc +A synonym for @code{--with-bash-malloc}. + +@item --with-installed-readline[=@var{PREFIX}] +Define this to make Bash link with a locally-installed version of Readline +rather than the version in @file{lib/readline}. This works only with +Readline 5.0 and later versions. If @var{PREFIX} is @code{yes} or not +supplied, @code{configure} uses the values of the make variables +@code{includedir} and @code{libdir}, which are subdirectories of @code{prefix} +by default, to find the installed version of Readline if it is not in +the standard system include and library directories. +If @var{PREFIX} is @code{no}, Bash links with the version in +@file{lib/readline}. +If @var{PREFIX} is set to any other value, @code{configure} treats it as +a directory pathname and looks for +the installed version of Readline in subdirectories of that directory +(include files in @var{PREFIX}/@code{include} and the library in +@var{PREFIX}/@code{lib}). + +@item --with-purify +Define this to use the Purify memory allocation checker from Rational +Software. + +@item --enable-minimal-config +This produces a shell with minimal features, close to the historical +Bourne shell. +@end table + +There are several @option{--enable-} options that alter how Bash is +compiled and linked, rather than changing run-time features. + +@table @code +@item --enable-largefile +Enable support for @uref{http://www.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-casemod-attributes +Include support for case-modifying attributes in the @code{declare} builtin +and assignment statements. Variables with the @var{uppercase} attribute, +for example, will have their values converted to uppercase upon assignment. + +@item --enable-casemod-expansion +Include support for case-modifying word expansions. + +@item --enable-command-timing +Include support for recognizing @code{time} as a reserved word and for +displaying timing statistics for the pipeline following @code{time} +(@pxref{Pipelines}). +This allows pipelines as well as shell builtins and functions to be timed. + +@item --enable-cond-command +Include support for the @code{[[} conditional command. +(@pxref{Conditional Constructs}). + +@item --enable-cond-regexp +Include support for matching POSIX regular expressions using the +@samp{=~} binary operator in the @code{[[} conditional command. +(@pxref{Conditional Constructs}). + +@item --enable-coprocesses +Include support for coprocesses and the @code{coproc} reserved word +(@pxref{Pipelines}). + +@item --enable-debugger +Include support for the bash debugger (distributed separately). + +@item --enable-directory-stack +Include support for a @code{csh}-like directory stack and the +@code{pushd}, @code{popd}, and @code{dirs} builtins +(@pxref{The Directory Stack}). + +@item --enable-disabled-builtins +Allow builtin commands to be invoked via @samp{builtin xxx} +even after @code{xxx} has been disabled using @samp{enable -n xxx}. +See @ref{Bash Builtins}, for details of the @code{builtin} and +@code{enable} builtin commands. + +@item --enable-dparen-arithmetic +Include support for the @code{((@dots{}))} command +(@pxref{Conditional Constructs}). + +@item --enable-extended-glob +Include support for the extended pattern matching features described +above under @ref{Pattern Matching}. + +@item --enable-extended-glob-default +Set the default value of the @var{extglob} shell option described +above under @ref{The Shopt Builtin} to be enabled. + +@item --enable-help-builtin +Include the @code{help} builtin, which displays help on shell builtins and +variables (@pxref{Bash Builtins}). + +@item --enable-history +Include command history and the @code{fc} and @code{history} +builtin commands (@pxref{Bash History Facilities}). + +@item --enable-job-control +This enables the job control features (@pxref{Job Control}), +if the operating system supports them. + +@item --enable-multibyte +This enables support for multibyte characters if the operating +system provides the necessary support. + +@item --enable-net-redirections +This enables the special handling of filenames of the form +@code{/dev/tcp/@var{host}/@var{port}} and +@code{/dev/udp/@var{host}/@var{port}} +when used in redirections (@pxref{Redirections}). + +@item --enable-process-substitution +This enables process substitution (@pxref{Process Substitution}) if +the operating system provides the necessary support. + +@item --enable-progcomp +Enable the programmable completion facilities +(@pxref{Programmable Completion}). +If Readline is not enabled, this option has no effect. + +@item --enable-prompt-string-decoding +Turn on the interpretation of a number of backslash-escaped characters +in the @env{$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-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-separate-helpfiles +Use external files for the documentation displayed by the @code{help} builtin +instead of storing the text internally. + +@item --enable-single-help-strings +Store the text displayed by the @code{help} builtin as a single string for +each help topic. This aids in translating the text to different languages. +You may need to disable this if your compiler cannot handle very long string +literals. + +@item --enable-strict-posix-default +Make Bash @sc{posix}-conformant by default (@pxref{Bash POSIX Mode}). + +@item --enable-usg-echo-default +A synonym for @code{--enable-xpg-echo-default}. + +@item --enable-xpg-echo-default +Make the @code{echo} builtin expand backslash-escaped characters by default, +without requiring the @option{-e} option. +This sets the default value of the @code{xpg_echo} shell option to @code{on}, +which makes the Bash @code{echo} behave more like the version specified in +the Single Unix Specification, version 3. +@xref{Bash Builtins}, for a description of the escape sequences that +@code{echo} recognizes. + +@end table + +The file @file{config-top.h} contains C Preprocessor +@samp{#define} statements for options which are not settable from +@code{configure}. +Some of these are not meant to be changed; beware of the consequences if +you do. +Read the comments associated with each definition for more +information about its effect. + +@node Reporting Bugs +@appendix Reporting Bugs + +Please report all bugs you find in Bash. +But first, you should +make sure that it really is a bug, and that it appears in the latest +version of Bash. +The latest version of Bash is always available for FTP from +@uref{ftp://ftp.gnu.org/pub/gnu/bash/}. + +Once you have determined that a bug actually exists, use the +@code{bashbug} command to submit a bug report. +If you have a fix, you are encouraged to mail that as well! +Suggestions and `philosophical' bug reports may be mailed +to @email{bug-bash@@gnu.org} or posted to the Usenet +newsgroup @code{gnu.bash.bug}. + +All bug reports should include: +@itemize @bullet +@item +The version number of Bash. +@item +The hardware and operating system. +@item +The compiler used to compile Bash. +@item +A description of the bug behaviour. +@item +A short script or `recipe' which exercises the bug and may be used +to reproduce it. +@end itemize + +@noindent +@code{bashbug} inserts the first three items automatically into +the template it provides for filing a bug report. + +Please send all reports concerning this manual to +@email{chet.ramey@@case.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} standard as the specification of +how these features are to be implemented. There are some +differences between the traditional Bourne shell and Bash; this +section quickly details the differences of significance. A +number of these differences are explained in greater depth in +previous sections. +This section uses the version of @code{sh} included in SVR4.2 (the +last version of the historical Bourne shell) as the baseline reference. + +@itemize @bullet + +@item +Bash is @sc{posix}-conformant, even where the @sc{posix} specification +differs from traditional @code{sh} behavior (@pxref{Bash POSIX Mode}). + +@item +Bash has multi-character invocation options (@pxref{Invoking Bash}). + +@item +Bash has command-line editing (@pxref{Command Line Editing}) and +the @code{bind} builtin. + +@item +Bash provides a programmable word completion mechanism +(@pxref{Programmable Completion}), and builtin commands +@code{complete}, @code{compgen}, and @code{compopt}, to +manipulate it. + +@item +Bash has command history (@pxref{Bash History Facilities}) and the +@code{history} and @code{fc} builtins to manipulate it. +The Bash history list maintains timestamp information and uses the +value of the @code{HISTTIMEFORMAT} variable to display it. + +@item +Bash implements @code{csh}-like history expansion +(@pxref{History Interaction}). + +@item +Bash has one-dimensional array variables (@pxref{Arrays}), and the +appropriate variable expansions and assignment syntax to use them. +Several of the Bash builtins take options to act on arrays. +Bash provides a number of built-in array variables. + +@item +The @code{$'@dots{}'} quoting syntax, which expands ANSI-C +backslash-escaped characters in the text between the single quotes, +is supported (@pxref{ANSI-C Quoting}). + +@item +Bash supports the @code{$"@dots{}"} quoting syntax to do +locale-specific translation of the characters between the double +quotes. The @option{-D}, @option{--dump-strings}, and @option{--dump-po-strings} +invocation options list the translatable strings found in a script +(@pxref{Locale Translation}). + +@item +Bash implements the @code{!} keyword to negate the return value of +a pipeline (@pxref{Pipelines}). +Very useful when an @code{if} statement needs to act only if a test fails. +The Bash @samp{-o pipefail} option to @code{set} will cause a pipeline to +return a failure status if any command fails. + +@item +Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}). +The display of the timing statistics may be controlled with the +@env{TIMEFORMAT} variable. + +@item +Bash implements the @code{for (( @var{expr1} ; @var{expr2} ; @var{expr3} ))} +arithmetic for command, similar to the C language (@pxref{Looping Constructs}). + +@item +Bash includes the @code{select} compound command, which allows the +generation of simple menus (@pxref{Conditional Constructs}). + +@item +Bash includes the @code{[[} compound command, which makes conditional +testing part of the shell grammar (@pxref{Conditional Constructs}), including +optional regular expression matching. + +@item +Bash provides optional case-insensitive matching for the @code{case} and +@code{[[} constructs. + +@item +Bash includes brace expansion (@pxref{Brace Expansion}) and tilde +expansion (@pxref{Tilde Expansion}). + +@item +Bash implements command aliases and the @code{alias} and @code{unalias} +builtins (@pxref{Aliases}). + +@item +Bash provides shell arithmetic, the @code{((} compound command +(@pxref{Conditional Constructs}), +and arithmetic expansion (@pxref{Shell Arithmetic}). + +@item +Variables present in the shell's initial environment are automatically +exported to child processes. The Bourne shell does not normally do +this unless the variables are explicitly marked using the @code{export} +command. + +@item +Bash supports the @samp{+=} assignment operator, which appends to the value +of the variable named on the left hand side. + +@item +Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%} +and @samp{##} expansions to remove leading or trailing substrings from +variable values (@pxref{Shell Parameter Expansion}). + +@item +The expansion @code{$@{#xx@}}, which returns the length of @code{$@{xx@}}, +is supported (@pxref{Shell Parameter Expansion}). + +@item +The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}}, +which expands to the substring of @code{var}'s value of length +@var{length}, beginning at @var{offset}, is present +(@pxref{Shell Parameter Expansion}). + +@item +The expansion +@code{$@{var/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}}, +which matches @var{pattern} and replaces it with @var{replacement} in +the value of @code{var}, is available (@pxref{Shell Parameter Expansion}). + +@item +The expansion @code{$@{!@var{prefix@}*}} expansion, which expands to +the names of all shell variables whose names begin with @var{prefix}, +is available (@pxref{Shell Parameter Expansion}). + +@item +Bash has @var{indirect} variable expansion using @code{$@{!word@}} +(@pxref{Shell Parameter Expansion}). + +@item +Bash can expand positional parameters beyond @code{$9} using +@code{$@{@var{num}@}}. + +@item +The @sc{posix} @code{$()} form of command substitution +is implemented (@pxref{Command Substitution}), +and preferred to the Bourne shell's @code{``} (which +is also implemented for backwards compatibility). + +@item +Bash has process substitution (@pxref{Process Substitution}). + +@item +Bash automatically assigns variables that provide information about the +current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host +(@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}), +and the instance of Bash that is running (@env{BASH}, +@env{BASH_VERSION}, and @env{BASH_VERSINFO}). @xref{Bash Variables}, +for details. + +@item +The @env{IFS} variable is used to split only the results of expansion, +not all words (@pxref{Word Splitting}). +This closes a longstanding shell security hole. + +@item +Bash implements the full set of @sc{posix} filename expansion operators, +including @var{character classes}, @var{equivalence classes}, and +@var{collating symbols} (@pxref{Filename Expansion}). + +@item +Bash implements extended pattern matching features when the @code{extglob} +shell option is enabled (@pxref{Pattern Matching}). + +@item +It is possible to have a variable and a function with the same name; +@code{sh} does not separate the two name spaces. + +@item +Bash functions are permitted to have local variables using the +@code{local} builtin, and thus useful recursive functions may be written +(@pxref{Bash Builtins}). + +@item +Variable assignments preceding commands affect only that command, even +builtins and functions (@pxref{Environment}). +In @code{sh}, all variable assignments +preceding commands are global unless the command is executed from the +file system. + +@item +Bash performs filename expansion on filenames specified as operands +to input and output redirection operators (@pxref{Redirections}). + +@item +Bash contains the @samp{<>} redirection operator, allowing a file to be +opened for both reading and writing, and the @samp{&>} redirection +operator, for directing standard output and standard error to the same +file (@pxref{Redirections}). + +@item +Bash includes the @samp{<<<} redirection operator, allowing a string to +be used as the standard input to a command. + +@item +Bash implements the @samp{[n]<&@var{word}} and @samp{[n]>&@var{word}} +redirection operators, which move one file descriptor to another. + +@item +Bash treats a number of filenames specially when they are +used in redirection operators (@pxref{Redirections}). + +@item +Bash can open network connections to arbitrary machines and services +with the redirection operators (@pxref{Redirections}). + +@item +The @code{noclobber} option is available to avoid overwriting existing +files with output redirection (@pxref{The Set Builtin}). +The @samp{>|} redirection operator may be used to override @code{noclobber}. + +@item +The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins}) +each take @option{-L} and @option{-P} options to switch between logical and +physical modes. + +@item +Bash allows a function to override a builtin with the same name, and provides +access to that builtin's functionality within the function via the +@code{builtin} and @code{command} builtins (@pxref{Bash Builtins}). + +@item +The @code{command} builtin allows selective disabling of functions +when command lookup is performed (@pxref{Bash Builtins}). + +@item +Individual builtins may be enabled or disabled using the @code{enable} +builtin (@pxref{Bash Builtins}). + +@item +The Bash @code{exec} builtin takes additional options that allow users +to control the contents of the environment passed to the executed +command, and what the zeroth argument to the command is to be +(@pxref{Bourne Shell Builtins}). + +@item +Shell functions may be exported to children via the environment +using @code{export -f} (@pxref{Shell Functions}). + +@item +The Bash @code{export}, @code{readonly}, and @code{declare} builtins can +take a @option{-f} option to act on shell functions, a @option{-p} option to +display variables with various attributes set in a format that can be +used as shell input, a @option{-n} option to remove various variable +attributes, and @samp{name=value} arguments to set variable attributes +and values simultaneously. + +@item +The Bash @code{hash} builtin allows a name to be associated with +an arbitrary filename, even when that filename cannot be found by +searching the @env{$PATH}, using @samp{hash -p} +(@pxref{Bourne Shell Builtins}). + +@item +Bash includes a @code{help} builtin for quick reference to shell +facilities (@pxref{Bash Builtins}). + +@item +The @code{printf} builtin is available to display formatted output +(@pxref{Bash Builtins}). + +@item +The Bash @code{read} builtin (@pxref{Bash Builtins}) +will read a line ending in @samp{\} with +the @option{-r} option, and will use the @env{REPLY} variable as a +default if no non-option arguments are supplied. +The Bash @code{read} builtin +also accepts a prompt string with the @option{-p} option and will use +Readline to obtain the line when given the @option{-e} option. +The @code{read} builtin also has additional options to control input: +the @option{-s} option will turn off echoing of input characters as +they are read, the @option{-t} option will allow @code{read} to time out +if input does not arrive within a specified number of seconds, the +@option{-n} option will allow reading only a specified number of +characters rather than a full line, and the @option{-d} option will read +until a particular character rather than newline. + +@item +The @code{return} builtin may be used to abort execution of scripts +executed with the @code{.} or @code{source} builtins +(@pxref{Bourne Shell Builtins}). + +@item +Bash includes the @code{shopt} builtin, for finer control of shell +optional capabilities (@pxref{The Shopt Builtin}), and allows these options +to be set and unset at shell invocation (@pxref{Invoking Bash}). + +@item +Bash has much more optional behavior controllable with the @code{set} +builtin (@pxref{The Set Builtin}). + +@item +The @samp{-x} (@code{xtrace}) option displays commands other than +simple commands when performing an execution trace +(@pxref{The Set Builtin}). + +@item +The @code{test} builtin (@pxref{Bourne Shell Builtins}) +is slightly different, as it implements the @sc{posix} algorithm, +which specifies the behavior based on the number of arguments. + +@item +Bash includes the @code{caller} builtin, which displays the context of +any active subroutine call (a shell function or a script executed with +the @code{.} or @code{source} builtins). This supports the bash +debugger. + +@item +The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a +@code{DEBUG} pseudo-signal specification, similar to @code{EXIT}. +Commands specified with a @code{DEBUG} trap are executed before every +simple command, @code{for} command, @code{case} command, +@code{select} command, every arithmetic @code{for} command, and before +the first command executes in a shell function. +The @code{DEBUG} trap is not inherited by shell functions unless the +function has been given the @code{trace} attribute or the +@code{functrace} option has been enabled using the @code{shopt} builtin. +The @code{extdebug} shell option has additional effects on the +@code{DEBUG} trap. + +The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an +@code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}. +Commands specified with an @code{ERR} trap are executed after a simple +command fails, with a few exceptions. +The @code{ERR} trap is not inherited by shell functions unless the +@code{-o errtrace} option to the @code{set} builtin is enabled. + +The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a +@code{RETURN} pseudo-signal specification, similar to +@code{EXIT} and @code{DEBUG}. +Commands specified with an @code{RETURN} trap are executed before +execution resumes after a shell function or a shell script executed with +@code{.} or @code{source} returns. +The @code{RETURN} trap is not inherited by shell functions unless the +function has been given the @code{trace} attribute or the +@code{functrace} option has been enabled using the @code{shopt} builtin. + +@item +The Bash @code{type} builtin is more extensive and gives more information +about the names it finds (@pxref{Bash Builtins}). + +@item +The Bash @code{umask} builtin permits a @option{-p} option to cause +the output to be displayed in the form of a @code{umask} command +that may be reused as input (@pxref{Bourne Shell Builtins}). + +@item +Bash implements a @code{csh}-like directory stack, and provides the +@code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it +(@pxref{The Directory Stack}). +Bash also makes the directory stack visible as the value of the +@env{DIRSTACK} shell variable. + +@item +Bash interprets special backslash-escaped characters in the prompt +strings when interactive (@pxref{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 +Bash includes a number of features to support a separate debugger for +shell scripts. + +@item +The SVR4.2 shell has two privilege-related builtins +(@code{mldmode} and @code{priv}) not present in Bash. + +@item +Bash does not have the @code{stop} or @code{newgrp} builtins. + +@item +Bash does not use the @env{SHACCT} variable or perform shell accounting. + +@item +The SVR4.2 @code{sh} uses a @env{TIMEOUT} variable like Bash uses +@env{TMOUT}. + +@end itemize + +@noindent +More features unique to Bash may be found in @ref{Bash Features}. + + +@appendixsec Implementation Differences From The SVR4.2 Shell + +Since Bash is a completely new implementation, it does not suffer from +many of the limitations of the SVR4.2 shell. For instance: + +@itemize @bullet + +@item +Bash does not fork a subshell when redirecting into or out of +a shell control structure such as an @code{if} or @code{while} +statement. + +@item +Bash does not allow unbalanced quotes. The SVR4.2 shell will silently +insert a needed closing quote at @code{EOF} under certain circumstances. +This can be the cause of some hard-to-find errors. + +@item +The SVR4.2 shell uses a baroque memory management scheme based on +trapping @code{SIGSEGV}. If the shell is started from a process with +@code{SIGSEGV} blocked (e.g., by using the @code{system()} C library +function call), it misbehaves badly. + +@item +In a questionable attempt at security, the SVR4.2 shell, +when invoked without the @option{-p} option, will alter its real +and effective @sc{uid} and @sc{gid} if they are less than some +magic threshold value, commonly 100. +This can lead to unexpected results. + +@item +The SVR4.2 shell does not allow users to trap @code{SIGSEGV}, +@code{SIGALRM}, or @code{SIGCHLD}. + +@item +The SVR4.2 shell does not allow the @env{IFS}, @env{MAILCHECK}, +@env{PATH}, @env{PS1}, or @env{PS2} variables to be unset. + +@item +The SVR4.2 shell treats @samp{^} as the undocumented equivalent of +@samp{|}. + +@item +Bash allows multiple option arguments when it is invoked (@code{-x -v}); +the SVR4.2 shell allows only one option argument (@code{-xv}). In +fact, some versions of the shell dump core if the second argument begins +with a @samp{-}. + +@item +The SVR4.2 shell exits a script if any builtin fails; Bash exits +a script only if one of the @sc{posix} special builtins fails, and +only for certain failures, as enumerated in the @sc{posix} standard. + +@item +The SVR4.2 shell behaves differently when invoked as @code{jsh} +(it turns on job control). +@end itemize + +@node GNU Free Documentation License +@appendix GNU Free Documentation License + +@include fdl.texi + +@node Indexes +@appendix Indexes + +@menu +* Builtin Index:: Index of Bash builtin commands. +* Reserved Word Index:: Index of Bash reserved words. +* Variable Index:: Quick reference helps you find the + variable you want. +* Function Index:: Index of bindable Readline functions. +* Concept Index:: General index for concepts described in + this manual. +@end menu + +@node Builtin Index +@appendixsec Index of Shell Builtin Commands +@printindex bt + +@node Reserved Word Index +@appendixsec Index of Shell Reserved Words +@printindex rw + +@node Variable Index +@appendixsec Parameter and Variable Index +@printindex vr + +@node Function Index +@appendixsec Function Index +@printindex fn + +@node Concept Index +@appendixsec Concept Index +@printindex cp + +@bye diff --git a/doc/builtins.0 b/doc/builtins.0 new file mode 100644 index 0000000..a721e38 --- /dev/null +++ b/doc/builtins.0 @@ -0,0 +1,1579 @@ +BASH_BUILTINS(1) BASH_BUILTINS(1) + + + +NNAAMMEE + bash, :, ., [, alias, bg, bind, break, builtin, caller, cd, command, + compgen, complete, compopt, continue, declare, dirs, disown, echo, + enable, eval, exec, exit, export, false, fc, fg, getopts, hash, help, + history, jobs, kill, let, local, logout, mapfile, popd, printf, pushd, + pwd, read, readonly, return, set, shift, shopt, source, suspend, test, + times, trap, true, type, typeset, ulimit, umask, unalias, unset, wait - + bash built-in commands, see bbaasshh(1) + +BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS + Unless otherwise noted, each builtin command documented in this section + as accepting options preceded by -- accepts ---- to signify the end of the + options. The ::, ttrruuee, ffaallssee, and tteesstt builtins do not accept options + and do not treat ---- specially. The eexxiitt, llooggoouutt, bbrreeaakk, ccoonnttiinnuuee, lleett, + and sshhiifftt builtins accept and process arguments beginning with -- with- + out requiring ----. Other builtins that accept arguments but are not + specified as accepting options interpret arguments beginning with -- as + invalid options and require ---- to prevent this interpretation. + :: [_a_r_g_u_m_e_n_t_s] + No effect; the command does nothing beyond expanding _a_r_g_u_m_e_n_t_s + and performing any specified redirections. A zero exit code is + returned. + + .. _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] + ssoouurrccee _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s] + Read and execute commands from _f_i_l_e_n_a_m_e in the current shell + environment and return the exit status of the last command exe- + cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash, file + names in PPAATTHH are used to find the directory containing _f_i_l_e_- + _n_a_m_e. The file searched for in PPAATTHH need not be executable. + When bbaasshh is not in _p_o_s_i_x _m_o_d_e, the current directory is + searched if no file is found in PPAATTHH. If the ssoouurrcceeppaatthh option + to the sshhoopptt builtin command is turned off, the PPAATTHH is not + searched. If any _a_r_g_u_m_e_n_t_s are supplied, they become the posi- + tional parameters when _f_i_l_e_n_a_m_e is executed. Otherwise the + positional parameters are unchanged. The return status is the + status of the last command exited within the script (0 if no + commands are executed), and false if _f_i_l_e_n_a_m_e is not found or + cannot be read. + + aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] + AAlliiaass with no arguments or with the --pp option prints the list of + aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output. When + arguments are supplied, an alias is defined for each _n_a_m_e whose + _v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word + to be checked for alias substitution when the alias is expanded. + For each _n_a_m_e in the argument list for which no _v_a_l_u_e is sup- + plied, the name and value of the alias is printed. AAlliiaass + returns true unless a _n_a_m_e is given for which no alias has been + defined. + + bbgg [_j_o_b_s_p_e_c ...] + Resume each suspended job _j_o_b_s_p_e_c in the background, as if it + had been started with &&. If _j_o_b_s_p_e_c is not present, the shell's + notion of the _c_u_r_r_e_n_t _j_o_b is used. bbgg _j_o_b_s_p_e_c returns 0 unless + run when job control is disabled or, when run with job control + enabled, any specified _j_o_b_s_p_e_c was not found or was started + without job control. + + bbiinndd [--mm _k_e_y_m_a_p] [--llppssvvPPSSVV] + bbiinndd [--mm _k_e_y_m_a_p] [--qq _f_u_n_c_t_i_o_n] [--uu _f_u_n_c_t_i_o_n] [--rr _k_e_y_s_e_q] + bbiinndd [--mm _k_e_y_m_a_p] --ff _f_i_l_e_n_a_m_e + bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d + bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e + bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d + Display current rreeaaddlliinnee key and function bindings, bind a key + sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee + variable. Each non-option argument is a command as it would + appear in _._i_n_p_u_t_r_c, but each binding or command must be passed + as a separate argument; e.g., '"\C-x\C-r": re-read-init-file'. + Options, if supplied, have the following meanings: + --mm _k_e_y_m_a_p + Use _k_e_y_m_a_p as the keymap to be affected by the subsequent + bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_- + _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, + and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is + equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. + --ll List the names of all rreeaaddlliinnee functions. + --pp Display rreeaaddlliinnee function names and bindings in such a + way that they can be re-read. + --PP List current rreeaaddlliinnee function names and bindings. + --ss Display rreeaaddlliinnee key sequences bound to macros and the + strings they output in such a way that they can be re- + read. + --SS Display rreeaaddlliinnee key sequences bound to macros and the + strings they output. + --vv Display rreeaaddlliinnee variable names and values in such a way + that they can be re-read. + --VV List current rreeaaddlliinnee variable names and values. + --ff _f_i_l_e_n_a_m_e + Read key bindings from _f_i_l_e_n_a_m_e. + --qq _f_u_n_c_t_i_o_n + Query about which keys invoke the named _f_u_n_c_t_i_o_n. + --uu _f_u_n_c_t_i_o_n + Unbind all keys bound to the named _f_u_n_c_t_i_o_n. + --rr _k_e_y_s_e_q + Remove any current binding for _k_e_y_s_e_q. + --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d + Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is + entered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets + the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- + lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT variable to the + current location of the insertion point. If the executed + command changes the value of RREEAADDLLIINNEE__LLIINNEE or RREEAADD-- + LLIINNEE__PPOOIINNTT, those new values will be reflected in the + editing state. + + The return value is 0 unless an unrecognized option is given or + an error occurred. + + bbrreeaakk [_n] + Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is + specified, break _n levels. _n must be >= 1. If _n is greater + than the number of enclosing loops, all enclosing loops are + exited. The return value is 0 unless _n is not greater than or + equal to 1. + + bbuuiillttiinn _s_h_e_l_l_-_b_u_i_l_t_i_n [_a_r_g_u_m_e_n_t_s] + Execute the specified shell builtin, passing it _a_r_g_u_m_e_n_t_s, and + return its exit status. This is useful when defining a function + whose name is the same as a shell builtin, retaining the func- + tionality of the builtin within the function. The ccdd builtin is + commonly redefined this way. The return status is false if + _s_h_e_l_l_-_b_u_i_l_t_i_n is not a shell builtin command. + + ccaalllleerr [_e_x_p_r] + Returns the context of any active subroutine call (a shell func- + tion or a script executed with the .. or ssoouurrccee builtins. With- + out _e_x_p_r, ccaalllleerr displays the line number and source filename of + the current subroutine call. If a non-negative integer is sup- + plied as _e_x_p_r, ccaalllleerr displays the line number, subroutine name, + and source file corresponding to that position in the current + execution call stack. This extra information may be used, for + example, to print a stack trace. The current frame is frame 0. + The return value is 0 unless the shell is not executing a sub- + routine call or _e_x_p_r does not correspond to a valid position in + the call stack. + + ccdd [--LL||--PP] [_d_i_r] + Change the current directory to _d_i_r. The variable HHOOMMEE is the + default _d_i_r. The variable CCDDPPAATTHH defines the search path for + the directory containing _d_i_r. Alternative directory names in + CCDDPPAATTHH are separated by a colon (:). A null directory name in + CCDDPPAATTHH is the same as the current directory, i.e., ``..''. If + _d_i_r begins with a slash (/), then CCDDPPAATTHH is not used. The --PP + option says to use the physical directory structure instead of + following symbolic links (see also the --PP option to the sseett + builtin command); the --LL option forces symbolic links to be fol- + lowed. An argument of -- is equivalent to $$OOLLDDPPWWDD. If a non- + empty directory name from CCDDPPAATTHH is used, or if -- is the first + argument, and the directory change is successful, the absolute + pathname of the new working directory is written to the standard + output. The return value is true if the directory was success- + fully changed; false otherwise. + + ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...] + Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function + lookup. Only builtin commands or commands found in the PPAATTHH are + executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is + performed using a default value for PPAATTHH that is guaranteed to + find all of the standard utilities. If either the --VV or --vv + option is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv + option causes a single word indicating the command or file name + used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a + more verbose description. If the --VV or --vv option is supplied, + the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If + neither option is supplied and an error occurred or _c_o_m_m_a_n_d can- + not be found, the exit status is 127. Otherwise, the exit sta- + tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d. + + ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d] + Generate possible completion matches for _w_o_r_d according to the + _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee + builtin with the exception of --pp and --rr, and write the matches + to the standard output. When using the --FF or --CC options, the + various shell variables set by the programmable completion + facilities, while available, will not have useful values. + + The matches will be generated in the same way as if the pro- + grammable completion code had generated them directly from a + completion specification with the same flags. If _w_o_r_d is speci- + fied, only those completions matching _w_o_r_d will be displayed. + + The return value is true unless an invalid option is supplied, + or no matches were generated. + + ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEE] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- + _p_a_t] [--WW _w_o_r_d_l_i_s_t] [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] + [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_f_i_x] _n_a_m_e [_n_a_m_e _._._.] + ccoommpplleettee --pprr [--DDEE] [_n_a_m_e ...] + Specify how arguments to each _n_a_m_e should be completed. If the + --pp option is supplied, or if no options are supplied, existing + completion specifications are printed in a way that allows them + to be reused as input. The --rr option removes a completion spec- + ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- + pletion specifications. The --DD option indicates that the + remaining options and actions should apply to the ``default'' + command completion; that is, completion attempted on a command + for which no completion has previously been defined. The --EE + option indicates that the remaining options and actions should + apply to ``empty'' command completion; that is, completion + attempted on a blank line. + + The process of applying these completion specifications when + word completion is attempted is described above under PPrroo-- + ggrraammmmaabbllee CCoommpplleettiioonn. + + Other options, if specified, have the following meanings. The + arguments to the --GG, --WW, and --XX options (and, if necessary, the + --PP and --SS options) should be quoted to protect them from expan- + sion before the ccoommpplleettee builtin is invoked. + --oo _c_o_m_p_-_o_p_t_i_o_n + The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- + spec's behavior beyond the simple generation of comple- + tions. _c_o_m_p_-_o_p_t_i_o_n may be one of: + bbaasshhddeeffaauulltt + Perform the rest of the default bbaasshh completions + if the compspec generates no matches. + ddeeffaauulltt Use readline's default filename completion if + the compspec generates no matches. + ddiirrnnaammeess + Perform directory name completion if the comp- + spec generates no matches. + ffiilleennaammeess + Tell readline that the compspec generates file- + names, so it can perform any filename-specific + processing (like adding a slash to directory + names, quoting special characters, or suppress- + ing trailing spaces). Intended to be used with + shell functions. + nnoossppaaccee Tell readline not to append a space (the + default) to words completed at the end of the + line. + pplluussddiirrss + After any matches defined by the compspec are + generated, directory name completion is + attempted and any matches are added to the + results of the other actions. + --AA _a_c_t_i_o_n + The _a_c_t_i_o_n may be one of the following to generate a + list of possible completions: + aalliiaass Alias names. May also be specified as --aa. + aarrrraayyvvaarr + Array variable names. + bbiinnddiinngg RReeaaddlliinnee key binding names. + bbuuiillttiinn Names of shell builtin commands. May also be + specified as --bb. + ccoommmmaanndd Command names. May also be specified as --cc. + ddiirreeccttoorryy + Directory names. May also be specified as --dd. + ddiissaabblleedd + Names of disabled shell builtins. + eennaabblleedd Names of enabled shell builtins. + eexxppoorrtt Names of exported shell variables. May also be + specified as --ee. + ffiillee File names. May also be specified as --ff. + ffuunnccttiioonn + Names of shell functions. + ggrroouupp Group names. May also be specified as --gg. + hheellppttooppiicc + Help topics as accepted by the hheellpp builtin. + hhoossttnnaammee + Hostnames, as taken from the file specified by + the HHOOSSTTFFIILLEE shell variable. + jjoobb Job names, if job control is active. May also + be specified as --jj. + kkeeyywwoorrdd Shell reserved words. May also be specified as + --kk. + rruunnnniinngg Names of running jobs, if job control is active. + sseerrvviiccee Service names. May also be specified as --ss. + sseettoopptt Valid arguments for the --oo option to the sseett + builtin. + sshhoopptt Shell option names as accepted by the sshhoopptt + builtin. + ssiiggnnaall Signal names. + ssttooppppeedd Names of stopped jobs, if job control is active. + uusseerr User names. May also be specified as --uu. + vvaarriiaabbllee + Names of all shell variables. May also be spec- + ified as --vv. + --GG _g_l_o_b_p_a_t + The pathname expansion pattern _g_l_o_b_p_a_t is expanded to + generate the possible completions. + --WW _w_o_r_d_l_i_s_t + The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS + special variable as delimiters, and each resultant word + is expanded. The possible completions are the members + of the resultant list which match the word being com- + pleted. + --CC _c_o_m_m_a_n_d + _c_o_m_m_a_n_d is executed in a subshell environment, and its + output is used as the possible completions. + --FF _f_u_n_c_t_i_o_n + The shell function _f_u_n_c_t_i_o_n is executed in the current + shell environment. When it finishes, the possible com- + pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY + array variable. + --XX _f_i_l_t_e_r_p_a_t + _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. + It is applied to the list of possible completions gener- + ated by the preceding options and arguments, and each + completion matching _f_i_l_t_e_r_p_a_t is removed from the list. + A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this + case, any completion not matching _f_i_l_t_e_r_p_a_t is removed. + --PP _p_r_e_f_i_x + _p_r_e_f_i_x is added at the beginning of each possible com- + pletion after all other options have been applied. + --SS _s_u_f_f_i_x + _s_u_f_f_i_x is appended to each possible completion after all + other options have been applied. + + The return value is true unless an invalid option is supplied, + an option other than --pp or --rr is supplied without a _n_a_m_e argu- + ment, an attempt is made to remove a completion specification + for a _n_a_m_e for which no specification exists, or an error occurs + adding a completion specification. + + ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEE] [++oo _o_p_t_i_o_n] [_n_a_m_e] + Modify completion options for each _n_a_m_e according to the + _o_p_t_i_o_ns, or for the currently-execution completion if no _n_a_m_es + are supplied. If no _o_p_t_i_o_ns are given, display the completion + options for each _n_a_m_e or the current completion. The possible + values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin + described above. The --DD option indicates that the remaining + options should apply to the ``default'' command completion; that + is, completion attempted on a command for which no completion + has previously been defined. The --EE option indicates that the + remaining options should apply to ``empty'' command completion; + that is, completion attempted on a blank line. + + The return value is true unless an invalid option is supplied, an + attempt is made to modify the options for a _n_a_m_e for which no comple- + tion specification exists, or an output error occurs. + + ccoonnttiinnuuee [_n] + Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or + sseelleecctt loop. If _n is specified, resume at the _nth enclosing + loop. _n must be >= 1. If _n is greater than the number of + enclosing loops, the last enclosing loop (the ``top-level'' + loop) is resumed. The return value is 0 unless _n is not greater + than or equal to 1. + + ddeeccllaarree [--aaAAffFFiillrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] + ttyyppeesseett [--aaAAffFFiillrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] + Declare variables and/or give them attributes. If no _n_a_m_es are + given then display the values of variables. The --pp option will + display the attributes and values of each _n_a_m_e. When --pp is used + with _n_a_m_e arguments, additional options are ignored. When --pp is + supplied without _n_a_m_e arguments, it will display the attributes + and values of all variables having the attributes specified by + the additional options. If no other options are supplied with + --pp, ddeeccllaarree will display the attributes and values of all shell + variables. The --ff option will restrict the display to shell + functions. The --FF option inhibits the display of function defi- + nitions; only the function name and attributes are printed. If + the eexxttddeebbuugg shell option is enabled using sshhoopptt, the source + file name and line number where the function is defined are dis- + played as well. The --FF option implies --ff. The following + options can be used to restrict output to variables with the + specified attribute or to give variables attributes: + --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss + above). + --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss + above). + --ff Use function names only. + --ii The variable is treated as an integer; arithmetic evalua- + tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when + the variable is assigned a value. + --ll When the variable is assigned a value, all upper-case + characters are converted to lower-case. The upper-case + attribute is disabled. + --rr Make _n_a_m_es readonly. These names cannot then be assigned + values by subsequent assignment statements or unset. + --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions + inherit the DDEEBBUUGG and RREETTUURRNN traps from the calling + shell. The trace attribute has no special meaning for + variables. + --uu When the variable is assigned a value, all lower-case + characters are converted to upper-case. The lower-case + attribute is disabled. + --xx Mark _n_a_m_es for export to subsequent commands via the + environment. + + Using `+' instead of `-' turns off the attribute instead, with + the exceptions that ++aa may not be used to destroy an array vari- + able and ++rr will not remove the readonly attribute. When used + in a function, makes each _n_a_m_e local, as with the llooccaall command. + If a variable name is followed by =_v_a_l_u_e, the value of the vari- + able is set to _v_a_l_u_e. The return value is 0 unless an invalid + option is encountered, an attempt is made to define a function + using ``-f foo=bar'', an attempt is made to assign a value to a + readonly variable, an attempt is made to assign a value to an + array variable without using the compound assignment syntax (see + AArrrraayyss above), one of the _n_a_m_e_s is not a valid shell variable + name, an attempt is made to turn off readonly status for a read- + only variable, an attempt is made to turn off array status for + an array variable, or an attempt is made to display a non-exis- + tent function with --ff. + + ddiirrss [[++_n]] [[--_n]] [[--ccppllvv]] + Without options, displays the list of currently remembered + directories. The default display is on a single line with + directory names separated by spaces. Directories are added to + the list with the ppuusshhdd command; the ppooppdd command removes + entries from the list. + ++_n Displays the _nth entry counting from the left of the list + shown by ddiirrss when invoked without options, starting with + zero. + --_n Displays the _nth entry counting from the right of the + list shown by ddiirrss when invoked without options, starting + with zero. + --cc Clears the directory stack by deleting all of the + entries. + --ll Produces a longer listing; the default listing format + uses a tilde to denote the home directory. + --pp Print the directory stack with one entry per line. + --vv Print the directory stack with one entry per line, pre- + fixing each entry with its index in the stack. + + The return value is 0 unless an invalid option is supplied or _n + indexes beyond the end of the directory stack. + + ddiissoowwnn [--aarr] [--hh] [_j_o_b_s_p_e_c ...] + Without options, each _j_o_b_s_p_e_c is removed from the table of + active jobs. If _j_o_b_s_p_e_c is not present, and neither --aa nor --rr + is supplied, the shell's notion of the _c_u_r_r_e_n_t _j_o_b is used. If + the --hh option is given, each _j_o_b_s_p_e_c is not removed from the ta- + ble, but is marked so that SSIIGGHHUUPP is not sent to the job if the + shell receives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is present, and neither + the --aa nor the --rr option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. + If no _j_o_b_s_p_e_c is supplied, the --aa option means to remove or mark + all jobs; the --rr option without a _j_o_b_s_p_e_c argument restricts + operation to running jobs. The return value is 0 unless a _j_o_b_- + _s_p_e_c does not specify a valid job. + + eecchhoo [--nneeEE] [_a_r_g ...] + Output the _a_r_gs, separated by spaces, followed by a newline. + The return status is always 0. If --nn is specified, the trailing + newline is suppressed. If the --ee option is given, interpreta- + tion of the following backslash-escaped characters is enabled. + The --EE option disables the interpretation of these escape char- + acters, even on systems where they are interpreted by default. + The xxppgg__eecchhoo shell option may be used to dynamically determine + whether or not eecchhoo expands these escape characters by default. + eecchhoo does not interpret ---- to mean the end of options. eecchhoo + interprets the following escape sequences: + \\aa alert (bell) + \\bb backspace + \\cc suppress further output + \\ee an escape character + \\ff form feed + \\nn new line + \\rr carriage return + \\tt horizontal tab + \\vv vertical tab + \\\\ backslash + \\00_n_n_n the eight-bit character whose value is the octal value + _n_n_n (zero to three octal digits) + \\xx_H_H the eight-bit character whose value is the hexadecimal + value _H_H (one or two hex digits) + + eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...] + Enable and disable builtin shell commands. Disabling a builtin + allows a disk command which has the same name as a shell builtin + to be executed without specifying a full pathname, even though + the shell normally searches for builtins before disk commands. + If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are + enabled. For example, to use the tteesstt binary found via the PPAATTHH + instead of the shell builtin version, run ``enable -n test''. + The --ff option means to load the new builtin command _n_a_m_e from + shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. + The --dd option will delete a builtin previously loaded with --ff. + If no _n_a_m_e arguments are given, or if the --pp option is supplied, + a list of shell builtins is printed. With no other option argu- + ments, the list consists of all enabled shell builtins. If --nn + is supplied, only disabled builtins are printed. If --aa is sup- + plied, the list printed includes all builtins, with an indica- + tion of whether or not each is enabled. If --ss is supplied, the + output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return + value is 0 unless a _n_a_m_e is not a shell builtin or there is an + error loading a new builtin from a shared object. + + eevvaall [_a_r_g ...] + The _a_r_gs are read and concatenated together into a single com- + mand. This command is then read and executed by the shell, and + its exit status is returned as the value of eevvaall. If there are + no _a_r_g_s, or only null arguments, eevvaall returns 0. + + eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]] + If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process + is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If + the --ll option is supplied, the shell places a dash at the begin- + ning of the zeroth argument passed to _c_o_m_m_a_n_d. This is what + _l_o_g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with + an empty environment. If --aa is supplied, the shell passes _n_a_m_e + as the zeroth argument to the executed command. If _c_o_m_m_a_n_d can- + not be executed for some reason, a non-interactive shell exits, + unless the shell option eexxeeccffaaiill is enabled, in which case it + returns failure. An interactive shell returns failure if the + file cannot be executed. If _c_o_m_m_a_n_d is not specified, any redi- + rections take effect in the current shell, and the return status + is 0. If there is a redirection error, the return status is 1. + + eexxiitt [_n] + Cause the shell to exit with a status of _n. If _n is omitted, + the exit status is that of the last command executed. A trap on + EEXXIITT is executed before the shell terminates. + + eexxppoorrtt [--ffnn] [_n_a_m_e[=_w_o_r_d]] ... + eexxppoorrtt --pp + The supplied _n_a_m_e_s are marked for automatic export to the envi- + ronment of subsequently executed commands. If the --ff option is + given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or + if the --pp option is supplied, a list of all names that are + exported in this shell is printed. The --nn option causes the + export property to be removed from each _n_a_m_e. If a variable + name is followed by =_w_o_r_d, the value of the variable is set to + _w_o_r_d. eexxppoorrtt returns an exit status of 0 unless an invalid + option is encountered, one of the _n_a_m_e_s is not a valid shell + variable name, or --ff is supplied with a _n_a_m_e that is not a func- + tion. + + ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t] + ffcc --ss [_p_a_t=_r_e_p] [_c_m_d] + Fix Command. In the first form, a range of commands from _f_i_r_s_t + to _l_a_s_t is selected from the history list. _F_i_r_s_t and _l_a_s_t may + be specified as a string (to locate the last command beginning + with that string) or as a number (an index into the history + list, where a negative number is used as an offset from the cur- + rent command number). If _l_a_s_t is not specified it is set to the + current command for listing (so that ``fc -l -10'' prints the + last 10 commands) and to _f_i_r_s_t otherwise. If _f_i_r_s_t is not spec- + ified it is set to the previous command for editing and -16 for + listing. + + The --nn option suppresses the command numbers when listing. The + --rr option reverses the order of the commands. If the --ll option + is given, the commands are listed on standard output. Other- + wise, the editor given by _e_n_a_m_e is invoked on a file containing + those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT + variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. + If neither variable is set, is used. When editing is complete, + the edited commands are echoed and executed. + + In the second form, _c_o_m_m_a_n_d is re-executed after each instance + of _p_a_t is replaced by _r_e_p. A useful alias to use with this is + ``r="fc -s"'', so that typing ``r cc'' runs the last command + beginning with ``cc'' and typing ``r'' re-executes the last com- + mand. + + If the first form is used, the return value is 0 unless an + invalid option is encountered or _f_i_r_s_t or _l_a_s_t specify history + lines out of range. If the --ee option is supplied, the return + value is the value of the last command executed or failure if an + error occurs with the temporary file of commands. If the second + form is used, the return status is that of the command re-exe- + cuted, unless _c_m_d does not specify a valid history line, in + which case ffcc returns failure. + + ffgg [_j_o_b_s_p_e_c] + Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. + If _j_o_b_s_p_e_c is not present, the shell's notion of the _c_u_r_r_e_n_t _j_o_b + is used. The return value is that of the command placed into + the foreground, or failure if run when job control is disabled + or, when run with job control enabled, if _j_o_b_s_p_e_c does not spec- + ify a valid job or _j_o_b_s_p_e_c specifies a job that was started + without job control. + + ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g_s] + ggeettooppttss is used by shell procedures to parse positional parame- + ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- + nized; if a character is followed by a colon, the option is + expected to have an argument, which should be separated from it + by white space. The colon and question mark characters may not + be used as option characters. Each time it is invoked, ggeettooppttss + places the next option in the shell variable _n_a_m_e, initializing + _n_a_m_e if it does not exist, and the index of the next argument to + be processed into the variable OOPPTTIINNDD. OOPPTTIINNDD is initialized to + 1 each time the shell or a shell script is invoked. When an + option requires an argument, ggeettooppttss places that argument into + the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automati- + cally; it must be manually reset between multiple calls to + ggeettooppttss within the same shell invocation if a new set of parame- + ters is to be used. + + When the end of options is encountered, ggeettooppttss exits with a + return value greater than zero. OOPPTTIINNDD is set to the index of + the first non-option argument, and nnaammee is set to ?. + + ggeettooppttss normally parses the positional parameters, but if more + arguments are given in _a_r_g_s, ggeettooppttss parses those instead. + + ggeettooppttss can report errors in two ways. If the first character + of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In + normal operation diagnostic messages are printed when invalid + options or missing option arguments are encountered. If the + variable OOPPTTEERRRR is set to 0, no error messages will be dis- + played, even if the first character of _o_p_t_s_t_r_i_n_g is not a colon. + + If an invalid option is seen, ggeettooppttss places ? into _n_a_m_e and, if + not silent, prints an error message and unsets OOPPTTAARRGG. If + ggeettooppttss is silent, the option character found is placed in + OOPPTTAARRGG and no diagnostic message is printed. + + If a required argument is not found, and ggeettooppttss is not silent, + a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a + diagnostic message is printed. If ggeettooppttss is silent, then a + colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option + character found. + + ggeettooppttss returns true if an option, specified or unspecified, is + found. It returns false if the end of options is encountered or + an error occurs. + + hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e] + For each _n_a_m_e, the full file name of the command is determined + by searching the directories in $$PPAATTHH and remembered. If the --pp + option is supplied, no path search is performed, and _f_i_l_e_n_a_m_e is + used as the full file name of the command. The --rr option causes + the shell to forget all remembered locations. The --dd option + causes the shell to forget the remembered location of each _n_a_m_e. + If the --tt option is supplied, the full pathname to which each + _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments are + supplied with --tt, the _n_a_m_e is printed before the hashed full + pathname. The --ll option causes output to be displayed in a for- + mat that may be reused as input. If no arguments are given, or + if only --ll is supplied, information about remembered commands is + printed. The return status is true unless a _n_a_m_e is not found + or an invalid option is supplied. + + hheellpp [--ddmmss] [_p_a_t_t_e_r_n] + Display helpful information about builtin commands. If _p_a_t_t_e_r_n + is specified, hheellpp gives detailed help on all commands matching + _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control + structures is printed. + --dd Display a short description of each _p_a_t_t_e_r_n + --mm Display the description of each _p_a_t_t_e_r_n in a manpage-like + format + --ss Display only a short usage synopsis for each _p_a_t_t_e_r_n + The return status is 0 unless no command matches _p_a_t_t_e_r_n. + + hhiissttoorryy [[_n]] + hhiissttoorryy --cc + hhiissttoorryy --dd _o_f_f_s_e_t + hhiissttoorryy --aannrrww [_f_i_l_e_n_a_m_e] + hhiissttoorryy --pp _a_r_g [_a_r_g _._._.] + hhiissttoorryy --ss _a_r_g [_a_r_g _._._.] + With no options, display the command history list with line num- + bers. Lines listed with a ** have been modified. An argument of + _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- + FFOORRMMAATT is set and not null, it is used as a format string for + _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- + played history entry. No intervening blank is printed between + the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is + supplied, it is used as the name of the history file; if not, + the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the + following meanings: + --cc Clear the history list by deleting all the entries. + --dd _o_f_f_s_e_t + Delete the history entry at position _o_f_f_s_e_t. + --aa Append the ``new'' history lines (history lines entered + since the beginning of the current bbaasshh session) to the + history file. + --nn Read the history lines not already read from the history + file into the current history list. These are lines + appended to the history file since the beginning of the + current bbaasshh session. + --rr Read the contents of the history file and use them as the + current history. + --ww Write the current history to the history file, overwrit- + ing the history file's contents. + --pp Perform history substitution on the following _a_r_g_s and + display the result on the standard output. Does not + store the results in the history list. Each _a_r_g must be + quoted to disable normal history expansion. + --ss Store the _a_r_g_s in the history list as a single entry. + The last command in the history list is removed before + the _a_r_g_s are added. + + If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- + tion associated with each history entry is written to the his- + tory file, marked with the history comment character. When the + history file is read, lines beginning with the history comment + character followed immediately by a digit are interpreted as + timestamps for the previous history line. The return value is 0 + unless an invalid option is encountered, an error occurs while + reading or writing the history file, an invalid _o_f_f_s_e_t is sup- + plied as an argument to --dd, or the history expansion supplied as + an argument to --pp fails. + + jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ] + jjoobbss --xx _c_o_m_m_a_n_d [ _a_r_g_s ... ] + The first form lists the active jobs. The options have the fol- + lowing meanings: + --ll List process IDs in addition to the normal information. + --pp List only the process ID of the job's process group + leader. + --nn Display information only about jobs that have changed + status since the user was last notified of their status. + --rr Restrict output to running jobs. + --ss Restrict output to stopped jobs. + + If _j_o_b_s_p_e_c is given, output is restricted to information about + that job. The return status is 0 unless an invalid option is + encountered or an invalid _j_o_b_s_p_e_c is supplied. + + If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in + _c_o_m_m_a_n_d or _a_r_g_s with the corresponding process group ID, and + executes _c_o_m_m_a_n_d passing it _a_r_g_s, returning its exit status. + + kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] [_p_i_d | _j_o_b_s_p_e_c] ... + kkiillll --ll [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s] + Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes + named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive + signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or + a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not + present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the + signal names. If any arguments are supplied when --ll is given, + the names of the signals corresponding to the arguments are + listed, and the return status is 0. The _e_x_i_t___s_t_a_t_u_s argument to + --ll is a number specifying either a signal number or the exit + status of a process terminated by a signal. kkiillll returns true + if at least one signal was successfully sent, or false if an + error occurs or an invalid option is encountered. + + lleett _a_r_g [_a_r_g ...] + Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH-- + MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett + returns 1; 0 is returned otherwise. + + llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ...] + For each argument, a local variable named _n_a_m_e is created, and + assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted + by ddeeccllaarree. When llooccaall is used within a function, it causes the + variable _n_a_m_e to have a visible scope restricted to that func- + tion and its children. With no operands, llooccaall writes a list of + local variables to the standard output. It is an error to use + llooccaall when not within a function. The return status is 0 unless + llooccaall is used outside a function, an invalid _n_a_m_e is supplied, + or _n_a_m_e is a readonly variable. + + llooggoouutt Exit a login shell. + + mmaappffiillee [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] + [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] + rreeaaddaarrrraayy [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] + [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] + Read lines from the standard input into the indexed array vari- + able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- + plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if + supplied, have the following meanings: + --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are + copied. + --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default + index is 0. + --ss Discard the first _c_o_u_n_t lines read. + --tt Remove a trailing newline from each line read. + --uu Read lines from file descriptor _f_d instead of the stan- + dard input. + --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The + --cc option specifies _q_u_a_n_t_u_m. + --cc Specify the number of lines read between each call to + _c_a_l_l_b_a_c_k. + + If --CC is specified without --cc, the default quantum is 5000. + When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next + array element to be assigned as an additional argument. _c_a_l_l_- + _b_a_c_k is evaluated after the line is read but before the array + element is assigned. + + If not supplied with an explicit origin, mmaappffiillee will clear + _a_r_r_a_y before assigning to it. + + mmaappffiillee returns successfully unless an invalid option or option + argument is supplied, _a_r_r_a_y is invalid or unassignable, or if + _a_r_r_a_y is not an indexed array. + + ppooppdd [-nn] [+_n] [-_n] + Removes entries from the directory stack. With no arguments, + removes the top directory from the stack, and performs a ccdd to + the new top directory. Arguments, if supplied, have the follow- + ing meanings: + --nn Suppresses the normal change of directory when removing + directories from the stack, so that only the stack is + manipulated. + ++_n Removes the _nth entry counting from the left of the list + shown by ddiirrss, starting with zero. For example: ``popd + +0'' removes the first directory, ``popd +1'' the second. + --_n Removes the _nth entry counting from the right of the list + shown by ddiirrss, starting with zero. For example: ``popd + -0'' removes the last directory, ``popd -1'' the next to + last. + + If the ppooppdd command is successful, a ddiirrss is performed as well, + and the return status is 0. ppooppdd returns false if an invalid + option is encountered, the directory stack is empty, a non-exis- + tent directory stack entry is specified, or the directory change + fails. + + pprriinnttff [--vv _v_a_r] _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s] + Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the + control of the _f_o_r_m_a_t. The _f_o_r_m_a_t is a character string which + contains three types of objects: plain characters, which are + simply copied to standard output, character escape sequences, + which are converted and copied to the standard output, and for- + mat specifications, each of which causes printing of the next + successive _a_r_g_u_m_e_n_t. In addition to the standard _p_r_i_n_t_f(1) for- + mats, %%bb causes pprriinnttff to expand backslash escape sequences in + the corresponding _a_r_g_u_m_e_n_t (except that \\cc terminates output, + backslashes in \\'', \\"", and \\?? are not removed, and octal escapes + beginning with \\00 may contain up to four digits), and %%qq causes + pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a format that can + be reused as shell input. + + The --vv option causes the output to be assigned to the variable + _v_a_r rather than being printed to the standard output. + + The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- + _m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s than are supplied, + the extra format specifications behave as if a zero value or + null string, as appropriate, had been supplied. The return + value is zero on success, non-zero on failure. + + ppuusshhdd [--nn] [+_n] [-_n] + ppuusshhdd [--nn] [_d_i_r] + Adds a directory to the top of the directory stack, or rotates + the stack, making the new top of the stack the current working + directory. With no arguments, exchanges the top two directories + and returns 0, unless the directory stack is empty. Arguments, + if supplied, have the following meanings: + --nn Suppresses the normal change of directory when adding + directories to the stack, so that only the stack is + manipulated. + ++_n Rotates the stack so that the _nth directory (counting + from the left of the list shown by ddiirrss, starting with + zero) is at the top. + --_n Rotates the stack so that the _nth directory (counting + from the right of the list shown by ddiirrss, starting with + zero) is at the top. + _d_i_r Adds _d_i_r to the directory stack at the top, making it the + new current working directory. + + If the ppuusshhdd command is successful, a ddiirrss is performed as well. + If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r + fails. With the second form, ppuusshhdd returns 0 unless the direc- + tory stack is empty, a non-existent directory stack element is + specified, or the directory change to the specified new current + directory fails. + + ppwwdd [--LLPP] + Print the absolute pathname of the current working directory. + The pathname printed contains no symbolic links if the --PP option + is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command + is enabled. If the --LL option is used, the pathname printed may + contain symbolic links. The return status is 0 unless an error + occurs while reading the name of the current directory or an + invalid option is supplied. + + rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp + _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] + One line is read from the standard input, or from the file + descriptor _f_d supplied as an argument to the --uu option, and the + first word is assigned to the first _n_a_m_e, the second word to the + second _n_a_m_e, and so on, with leftover words and their interven- + ing separators assigned to the last _n_a_m_e. If there are fewer + words read from the input stream than names, the remaining names + are assigned empty values. The characters in IIFFSS are used to + split the line into words. The backslash character (\\) may be + used to remove any special meaning for the next character read + and for line continuation. Options, if supplied, have the fol- + lowing meanings: + --aa _a_n_a_m_e + The words are assigned to sequential indices of the array + variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any + new values are assigned. Other _n_a_m_e arguments are + ignored. + --dd _d_e_l_i_m + The first character of _d_e_l_i_m is used to terminate the + input line, rather than newline. + --ee If the standard input is coming from a terminal, rreeaaddlliinnee + (see RREEAADDLLIINNEE above) is used to obtain the line. Read- + line uses the current (or default, if line editing was + not previously active) editing settings. + --ii _t_e_x_t + If rreeaaddlliinnee is being used to read the line, _t_e_x_t is + placed into the editing buffer before editing begins. + --nn _n_c_h_a_r_s + rreeaadd returns after reading _n_c_h_a_r_s characters rather than + waiting for a complete line of input, but honor a delim- + iter if fewer than _n_c_h_a_r_s characters are read before the + delimiter. + --NN _n_c_h_a_r_s + rreeaadd returns after reading exactly _n_c_h_a_r_s characters + rather than waiting for a complete line of input, unless + EOF is encountered or rreeaadd times out. Delimiter charac- + ters encountered in the input are not treated specially + and do not cause rreeaadd to return until _n_c_h_a_r_s characters + are read. + --pp _p_r_o_m_p_t + Display _p_r_o_m_p_t on standard error, without a trailing new- + line, before attempting to read any input. The prompt is + displayed only if input is coming from a terminal. + --rr Backslash does not act as an escape character. The back- + slash is considered to be part of the line. In particu- + lar, a backslash-newline pair may not be used as a line + continuation. + --ss Silent mode. If input is coming from a terminal, charac- + ters are not echoed. + --tt _t_i_m_e_o_u_t + Cause rreeaadd to time out and return failure if a complete + line of input is not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_- + _o_u_t may be a decimal number with a fractional portion + following the decimal point. This option is only effec- + tive if rreeaadd is reading input from a terminal, pipe, or + other special file; it has no effect when reading from + regular files. If _t_i_m_e_o_u_t is 0, rreeaadd returns success if + input is available on the specified file descriptor, + failure otherwise. The exit status is greater than 128 + if the timeout is exceeded. + --uu _f_d Read input from file descriptor _f_d. + + If no _n_a_m_e_s are supplied, the line read is assigned to the vari- + able RREEPPLLYY. The return code is zero, unless end-of-file is + encountered, rreeaadd times out (in which case the return code is + greater than 128), or an invalid file descriptor is supplied as + the argument to --uu. + + rreeaaddoonnllyy [--aaAAppff] [_n_a_m_e[=_w_o_r_d] ...] + The given _n_a_m_e_s are marked readonly; the values of these _n_a_m_e_s + may not be changed by subsequent assignment. If the --ff option + is supplied, the functions corresponding to the _n_a_m_e_s are so + marked. The --aa option restricts the variables to indexed + arrays; the --AA option restricts the variables to associative + arrays. If no _n_a_m_e arguments are given, or if the --pp option is + supplied, a list of all readonly names is printed. The --pp + option causes output to be displayed in a format that may be + reused as input. If a variable name is followed by =_w_o_r_d, the + value of the variable is set to _w_o_r_d. The return status is 0 + unless an invalid option is encountered, one of the _n_a_m_e_s is not + a valid shell variable name, or --ff is supplied with a _n_a_m_e that + is not a function. + + rreettuurrnn [_n] + Causes a function to exit with the return value specified by _n. + If _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 .. (ssoouurrccee) command, it + causes the shell to stop executing that script and return either + _n or the exit status of the last command executed within the + script as the exit status of the script. If used outside a + function and not during execution of a script by .., the return + status is false. Any command associated with the RREETTUURRNN trap is + executed before execution resumes after the function or script. + + sseett [----aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n] [_a_r_g ...] + sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n] [_a_r_g ...] + Without options, the name and value of each shell variable are + displayed in a format that can be reused as input for setting or + resetting the currently-set variables. Read-only variables can- + not be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. + The output is sorted according to the current locale. When + options are specified, they set or unset shell attributes. Any + arguments remaining after option processing are treated as val- + ues for the positional parameters and are assigned, in order, to + $$11, $$22, ...... $$_n. Options, if specified, have the following + meanings: + --aa Automatically mark variables and functions which are + modified or created for export to the environment of + subsequent commands. + --bb Report the status of terminated background jobs immedi- + ately, rather than before the next primary prompt. This + is effective only when job control is enabled. + --ee Exit immediately if a _p_i_p_e_l_i_n_e (which may consist of a + single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _s_u_b_s_h_e_l_l command enclosed in + parentheses, or one of the commands executed as part of + a command list enclosed by braces (see SSHHEELLLL GGRRAAMMMMAARR + above) exits with a non-zero status. The shell does not + exit if the command that fails is part of the command + list immediately following a wwhhiillee or uunnttiill keyword, + part of the test following the iiff or eelliiff reserved + words, part of any command executed in a &&&& or |||| list + except the command following the final &&&& or ||||, any + command in a pipeline but the last, or if the command's + return value is being inverted with !!. A trap on EERRRR, + if set, is executed before the shell exits. This option + applies to the shell environment and each subshell envi- + ronment separately (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT + above), and may cause subshells to exit before executing + all the commands in the subshell. + --ff Disable pathname expansion. + --hh Remember the location of commands as they are looked up + for execution. This is enabled by default. + --kk All arguments in the form of assignment statements are + placed in the environment for a command, not just those + that precede the command name. + --mm Monitor mode. Job control is enabled. This option is + on by default for interactive shells on systems that + support it (see JJOOBB CCOONNTTRROOLL above). Background pro- + cesses run in a separate process group and a line con- + taining their exit status is printed upon their comple- + tion. + --nn Read commands but do not execute them. This may be used + to check a shell script for syntax errors. This is + ignored by interactive shells. + --oo _o_p_t_i_o_n_-_n_a_m_e + The _o_p_t_i_o_n_-_n_a_m_e can be one of the following: + aalllleexxppoorrtt + Same as --aa. + bbrraacceeeexxppaanndd + Same as --BB. + eemmaaccss Use an emacs-style command line editing inter- + face. This is enabled by default when the shell + is interactive, unless the shell is started with + the ----nnooeeddiittiinngg option. This also affects the + editing interface used for rreeaadd --ee. + eerrrreexxiitt Same as --ee. + eerrrrttrraaccee + Same as --EE. + ffuunnccttrraaccee + Same as --TT. + hhaasshhaallll Same as --hh. + hhiisstteexxppaanndd + Same as --HH. + hhiissttoorryy Enable command history, as described above under + HHIISSTTOORRYY. This option is on by default in inter- + active shells. + iiggnnoorreeeeooff + The effect is as if the shell command + ``IGNOREEOF=10'' had been executed (see SShheellll + VVaarriiaabblleess above). + kkeeyywwoorrdd Same as --kk. + mmoonniittoorr Same as --mm. + nnoocclloobbbbeerr + Same as --CC. + nnooeexxeecc Same as --nn. + nnoogglloobb Same as --ff. + nnoolloogg Currently ignored. + nnoottiiffyy Same as --bb. + nnoouunnsseett Same as --uu. + oonneeccmmdd Same as --tt. + pphhyyssiiccaall + Same as --PP. + ppiippeeffaaiill + If set, the return value of a pipeline is the + value of the last (rightmost) command to exit + with a non-zero status, or zero if all commands + in the pipeline exit successfully. This option + is disabled by default. + ppoossiixx Change the behavior of bbaasshh where the default + operation differs from the POSIX standard to + match the standard (_p_o_s_i_x _m_o_d_e). + pprriivviilleeggeedd + Same as --pp. + vveerrbboossee Same as --vv. + vvii Use a vi-style command line editing interface. + This also affects the editing interface used for + rreeaadd --ee. + xxttrraaccee Same as --xx. + If --oo is supplied with no _o_p_t_i_o_n_-_n_a_m_e, the values of the + current options are printed. If ++oo is supplied with no + _o_p_t_i_o_n_-_n_a_m_e, a series of sseett commands to recreate the + current option settings is displayed on the standard + output. + --pp Turn on _p_r_i_v_i_l_e_g_e_d mode. In this mode, the $$EENNVV and + $$BBAASSHH__EENNVV files are not processed, shell functions are + not inherited from the environment, and the SSHHEELLLLOOPPTTSS, + BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they + appear in the environment, are ignored. If the shell is + started with the effective user (group) id not equal to + the real user (group) id, and the --pp option is not sup- + plied, these actions are taken and the effective user id + is set to the real user id. If the --pp option is sup- + plied at startup, the effective user id is not reset. + Turning this option off causes the effective user and + group ids to be set to the real user and group ids. + --tt Exit after reading and executing one command. + --uu Treat unset variables and parameters other than the spe- + cial parameters "@" and "*" as an error when performing + parameter expansion. If expansion is attempted on an + unset variable or parameter, the shell prints an error + message, and, if not interactive, exits with a non-zero + status. + --vv Print shell input lines as they are read. + --xx After expanding each _s_i_m_p_l_e _c_o_m_m_a_n_d, ffoorr command, ccaassee + command, sseelleecctt command, or arithmetic ffoorr command, dis- + play the expanded value of PPSS44, followed by the command + and its expanded arguments or associated word list. + --BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn + above). This is on by default. + --CC If set, bbaasshh does not overwrite an existing file with + the >>, >>&&, and <<>> redirection operators. This may be + overridden when creating output files by using the redi- + rection operator >>|| instead of >>. + --EE If set, any trap on EERRRR is inherited by shell functions, + command substitutions, and commands executed in a sub- + shell environment. The EERRRR trap is normally not inher- + ited in such cases. + --HH Enable !! style history substitution. This option is on + by default when the shell is interactive. + --PP If set, the shell does not follow symbolic links when + executing commands such as ccdd that change the current + working directory. It uses the physical directory + structure instead. By default, bbaasshh follows the logical + chain of directories when performing commands which + change the current directory. + --TT If set, any traps on DDEEBBUUGG and RREETTUURRNN are inherited by + shell functions, command substitutions, and commands + executed in a subshell environment. The DDEEBBUUGG and + RREETTUURRNN traps are normally not inherited in such cases. + ---- If no arguments follow this option, then the positional + parameters are unset. Otherwise, the positional parame- + ters are set to the _a_r_gs, even if some of them begin + with a --. + -- Signal the end of options, cause all remaining _a_r_gs to + be assigned to the positional parameters. The --xx and --vv + options are turned off. If there are no _a_r_gs, the posi- + tional parameters remain unchanged. + + The options are off by default unless otherwise noted. Using + + rather than - causes these options to be turned off. The + options can also be specified as arguments to an invocation of + the shell. The current set of options may be found in $$--. The + return status is always true unless an invalid option is encoun- + tered. + + sshhiifftt [_n] + The positional parameters from _n+1 ... are renamed to $$11 ........ + Parameters represented by the numbers $$## down to $$##-_n+1 are + unset. _n must be a non-negative number less than or equal to + $$##. If _n is 0, no parameters are changed. If _n is not given, + it is assumed to be 1. If _n is greater than $$##, the positional + parameters are not changed. The return status is greater than + zero if _n is greater than $$## or less than zero; otherwise 0. + + sshhoopptt [--ppqqssuu] [--oo] [_o_p_t_n_a_m_e ...] + Toggle the values of variables controlling optional shell behav- + ior. With no options, or with the --pp option, a list of all set- + table options is displayed, with an indication of whether or not + each is set. The --pp option causes output to be displayed in a + form that may be reused as input. Other options have the fol- + lowing meanings: + --ss Enable (set) each _o_p_t_n_a_m_e. + --uu Disable (unset) each _o_p_t_n_a_m_e. + --qq Suppresses normal output (quiet mode); the return status + indicates whether the _o_p_t_n_a_m_e is set or unset. If multi- + ple _o_p_t_n_a_m_e arguments are given with --qq, the return sta- + tus is zero if all _o_p_t_n_a_m_e_s are enabled; non-zero other- + wise. + --oo Restricts the values of _o_p_t_n_a_m_e to be those defined for + the --oo option to the sseett builtin. + + If either --ss or --uu is used with no _o_p_t_n_a_m_e arguments, the dis- + play is limited to those options which are set or unset, respec- + tively. Unless otherwise noted, the sshhoopptt options are disabled + (unset) by default. + + The return status when listing options is zero if all _o_p_t_n_a_m_e_s + are enabled, non-zero otherwise. When setting or unsetting + options, the return status is zero unless an _o_p_t_n_a_m_e is not a + valid shell option. + + The list of sshhoopptt options is: + + aauuttooccdd If set, a command name that is the name of a directory + is executed as if it were the argument to the ccdd com- + mand. This option is only used by interactive shells. + ccddaabbllee__vvaarrss + If set, an argument to the ccdd builtin command that is + not a directory is assumed to be the name of a variable + whose value is the directory to change to. + ccddssppeellll If set, minor errors in the spelling of a directory com- + ponent in a ccdd command will be corrected. The errors + checked for are transposed characters, a missing charac- + ter, and one character too many. If a correction is + found, the corrected file name is printed, and the com- + mand proceeds. This option is only used by interactive + shells. + cchheecckkhhaasshh + If set, bbaasshh checks that a command found in the hash ta- + ble exists before trying to execute it. If a hashed + command no longer exists, a normal path search is per- + formed. + cchheecckkjjoobbss + If set, bbaasshh lists the status of any stopped and running + jobs before exiting an interactive shell. If any jobs + are running, this causes the exit to be deferred until a + second exit is attempted without an intervening command + (see JJOOBB CCOONNTTRROOLL above). The shell always postpones + exiting if any jobs are stopped. + cchheecckkwwiinnssiizzee + If set, bbaasshh checks the window size after each command + and, if necessary, updates the values of LLIINNEESS and CCOOLL-- + UUMMNNSS. + ccmmddhhiisstt If set, bbaasshh attempts to save all lines of a multiple- + line command in the same history entry. This allows + easy re-editing of multi-line commands. + ccoommppaatt3311 + If set, bbaasshh changes its behavior to that of version 3.1 + with respect to quoted arguments to the conditional com- + mand's =~ operator. + ccoommppaatt3322 + If set, bbaasshh changes its behavior to that of version 3.2 + with respect to locale-specific string comparison when + using the conditional command's < and > operators. + ccoommppaatt4400 + If set, bbaasshh changes its behavior to that of version 4.0 + with respect to locale-specific string comparison when + using the conditional command's < and > operators and + the effect of interrupting a command list. + ddiirrssppeellll + If set, bbaasshh attempts spelling correction on directory + names during word completion if the directory name ini- + tially supplied does not exist. + ddoottgglloobb If set, bbaasshh includes filenames beginning with a `.' in + the results of pathname expansion. + eexxeeccffaaiill + If set, a non-interactive shell will not exit if it can- + not execute the file specified as an argument to the + eexxeecc builtin command. An interactive shell does not + exit if eexxeecc fails. + eexxppaanndd__aalliiaasseess + If set, aliases are expanded as described above under + AALLIIAASSEESS. This option is enabled by default for interac- + tive shells. + eexxttddeebbuugg + If set, behavior intended for use by debuggers is + enabled: + 11.. The --FF option to the ddeeccllaarree builtin displays the + source file name and line number corresponding to + each function name supplied as an argument. + 22.. If the command run by the DDEEBBUUGG trap returns a + non-zero value, the next command is skipped and + not executed. + 33.. If the command run by the DDEEBBUUGG trap returns a + value of 2, and the shell is executing in a sub- + routine (a shell function or a shell script exe- + cuted by the .. or ssoouurrccee builtins), a call to + rreettuurrnn is simulated. + 44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described + in their descriptions above. + 55.. Function tracing is enabled: command substitu- + tion, shell functions, and subshells invoked with + (( _c_o_m_m_a_n_d )) inherit the DDEEBBUUGG and RREETTUURRNN traps. + 66.. Error tracing is enabled: command substitution, + shell functions, and subshells invoked with (( + _c_o_m_m_a_n_d )) inherit the EERRRROORR trap. + eexxttgglloobb If set, the extended pattern matching features described + above under PPaatthhnnaammee EExxppaannssiioonn are enabled. + eexxttqquuoottee + If set, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quoting is performed + within $${{_p_a_r_a_m_e_t_e_r}} expansions enclosed in double + quotes. This option is enabled by default. + ffaaiillgglloobb + If set, patterns which fail to match filenames during + pathname expansion result in an expansion error. + ffoorrccee__ffiiggnnoorree + If set, the suffixes specified by the FFIIGGNNOORREE shell + variable cause words to be ignored when performing word + completion even if the ignored words are the only possi- + ble completions. See SSHHEELLLL VVAARRIIAABBLLEESS above for a + description of FFIIGGNNOORREE. This option is enabled by + default. + gglloobbssttaarr + If set, the pattern **** used in a pathname expansion con- + text will match a files and zero or more directories and + subdirectories. If the pattern is followed by a //, only + directories and subdirectories match. + ggnnuu__eerrrrffmmtt + If set, shell error messages are written in the standard + GNU error message format. + hhiissttaappppeenndd + If set, the history list is appended to the file named + by the value of the HHIISSTTFFIILLEE variable when the shell + exits, rather than overwriting the file. + hhiissttrreeeeddiitt + If set, and rreeaaddlliinnee is being used, a user is given the + opportunity to re-edit a failed history substitution. + hhiissttvveerriiffyy + If set, and rreeaaddlliinnee is being used, the results of his- + tory substitution are not immediately passed to the + shell parser. Instead, the resulting line is loaded + into the rreeaaddlliinnee editing buffer, allowing further modi- + fication. + hhoossttccoommpplleettee + If set, and rreeaaddlliinnee is being used, bbaasshh will attempt to + perform hostname completion when a word containing a @@ + is being completed (see CCoommpplleettiinngg under RREEAADDLLIINNEE + above). This is enabled by default. + hhuuppoonneexxiitt + If set, bbaasshh will send SSIIGGHHUUPP to all jobs when an inter- + active login shell exits. + iinntteerraaccttiivvee__ccoommmmeennttss + If set, allow a word beginning with ## to cause that word + and all remaining characters on that line to be ignored + in an interactive shell (see CCOOMMMMEENNTTSS above). This + option is enabled by default. + lliitthhiisstt If set, and the ccmmddhhiisstt option is enabled, multi-line + commands are saved to the history with embedded newlines + rather than using semicolon separators where possible. + llooggiinn__sshheellll + The shell sets this option if it is started as a login + shell (see IINNVVOOCCAATTIIOONN above). The value may not be + changed. + mmaaiillwwaarrnn + If set, and a file that bbaasshh is checking for mail has + been accessed since the last time it was checked, the + message ``The mail in _m_a_i_l_f_i_l_e has been read'' is dis- + played. + nnoo__eemmppttyy__ccmmdd__ccoommpplleettiioonn + If set, and rreeaaddlliinnee is being used, bbaasshh will not + attempt to search the PPAATTHH for possible completions when + completion is attempted on an empty line. + nnooccaasseegglloobb + If set, bbaasshh matches filenames in a case-insensitive + fashion when performing pathname expansion (see PPaatthhnnaammee + EExxppaannssiioonn above). + nnooccaasseemmaattcchh + If set, bbaasshh matches patterns in a case-insensitive + fashion when performing matching while executing ccaassee or + [[[[ conditional commands. + nnuullllgglloobb + If set, bbaasshh allows patterns which match no files (see + PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string, + rather than themselves. + pprrooggccoommpp + If set, the programmable completion facilities (see PPrroo-- + ggrraammmmaabbllee CCoommpplleettiioonn above) are enabled. This option is + enabled by default. + pprroommppttvvaarrss + If set, prompt strings undergo parameter expansion, com- + mand substitution, arithmetic expansion, and quote + removal after being expanded as described in PPRROOMMPPTTIINNGG + above. This option is enabled by default. + rreessttrriicctteedd__sshheellll + The shell sets this option if it is started in + restricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value + may not be changed. This is not reset when the startup + files are executed, allowing the startup files to dis- + cover whether or not a shell is restricted. + sshhiifftt__vveerrbboossee + If set, the sshhiifftt builtin prints an error message when + the shift count exceeds the number of positional parame- + ters. + ssoouurrcceeppaatthh + If set, the ssoouurrccee (..) builtin uses the value of PPAATTHH to + find the directory containing the file supplied as an + argument. This option is enabled by default. + xxppgg__eecchhoo + If set, the eecchhoo builtin expands backslash-escape + sequences by default. + ssuussppeenndd [--ff] + Suspend the execution of this shell until it receives a SSIIGGCCOONNTT + signal. A login shell cannot be suspended; the --ff option can be + used to override this and force the suspension. The return sta- + tus is 0 unless the shell is a login shell and --ff is not sup- + plied, or if job control is not enabled. + tteesstt _e_x_p_r + [[ _e_x_p_r ]] + Return a status of 0 or 1 depending on the evaluation of the + conditional expression _e_x_p_r. Each operator and operand must be + a separate argument. Expressions are composed of the primaries + described above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS. tteesstt does not + accept any options, nor does it accept and ignore an argument of + ---- as signifying the end of options. + + Expressions may be combined using the following operators, + listed in decreasing order of precedence. The evaluation + depends on the number of arguments; see below. + !! _e_x_p_r True if _e_x_p_r is false. + (( _e_x_p_r )) + Returns the value of _e_x_p_r. This may be used to override + the normal precedence of operators. + _e_x_p_r_1 -aa _e_x_p_r_2 + True if both _e_x_p_r_1 and _e_x_p_r_2 are true. + _e_x_p_r_1 -oo _e_x_p_r_2 + True if either _e_x_p_r_1 or _e_x_p_r_2 is true. + + tteesstt and [[ evaluate conditional expressions using a set of rules + based on the number of arguments. + + 0 arguments + The expression is false. + 1 argument + The expression is true if and only if the argument is not + null. + 2 arguments + If the first argument is !!, the expression is true if and + only if the second argument is null. If the first argu- + ment is one of the unary conditional operators listed + above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the expression is + true if the unary test is true. If the first argument is + not a valid unary conditional operator, the expression is + false. + 3 arguments + If the second argument is one of the binary conditional + operators listed above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the + result of the expression is the result of the binary test + using the first and third arguments as operands. The --aa + and --oo operators are considered binary operators when + there are three arguments. If the first argument is !!, + the value is the negation of the two-argument test using + the second and third arguments. If the first argument is + exactly (( and the third argument is exactly )), the result + is the one-argument test of the second argument. Other- + wise, the expression is false. + 4 arguments + If the first argument is !!, the result is the negation of + the three-argument expression composed of the remaining + arguments. Otherwise, the expression is parsed and eval- + uated according to precedence using the rules listed + above. + 5 or more arguments + The expression is parsed and evaluated according to + precedence using the rules listed above. + + ttiimmeess Print the accumulated user and system times for the shell and + for processes run from the shell. The return status is 0. + + ttrraapp [--llpp] [[_a_r_g] _s_i_g_s_p_e_c ...] + The command _a_r_g is to be read and executed when the shell + receives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a + single _s_i_g_s_p_e_c) or --, each specified signal is reset to its + original disposition (the value it had upon entrance to the + shell). If _a_r_g is the null string the signal specified by each + _s_i_g_s_p_e_c is ignored by the shell and by the commands it invokes. + If _a_r_g is not present and --pp has been supplied, then the trap + commands associated with each _s_i_g_s_p_e_c are displayed. If no + arguments are supplied or if only --pp is given, ttrraapp prints the + list of commands associated with each signal. The --ll option + causes the shell to print a list of signal names and their cor- + responding numbers. Each _s_i_g_s_p_e_c is either a signal name + defined in <_s_i_g_n_a_l_._h>, or a signal number. Signal names are + case insensitive and the SIG prefix is optional. + + If a _s_i_g_s_p_e_c is EEXXIITT (0) the command _a_r_g is executed on exit + from the shell. If a _s_i_g_s_p_e_c is DDEEBBUUGG, the command _a_r_g is exe- + cuted before every _s_i_m_p_l_e _c_o_m_m_a_n_d, _f_o_r command, _c_a_s_e command, + _s_e_l_e_c_t command, every arithmetic _f_o_r command, and before the + first command executes in a shell function (see SSHHEELLLL GGRRAAMMMMAARR + above). Refer to the description of the eexxttddeebbuugg option to the + sshhoopptt builtin for details of its effect on the DDEEBBUUGG trap. If a + _s_i_g_s_p_e_c is RREETTUURRNN, the command _a_r_g is executed each time a shell + function or a script executed with the .. or ssoouurrccee builtins fin- + ishes executing. + + If a _s_i_g_s_p_e_c is EERRRR, the command _a_r_g is executed whenever a sim- + ple command has a non-zero exit status, subject to the following + conditions. The EERRRR trap is not executed if the failed command + is part of the command list immediately following a wwhhiillee or + uunnttiill keyword, part of the test in an _i_f statement, part of a + command executed in a &&&& or |||| list, or if the command's return + value is being inverted via !!. These are the same conditions + obeyed by the eerrrreexxiitt option. + + Signals ignored upon entry to the shell cannot be trapped or + reset. Trapped signals that are not being ignored are reset to + their original values in a subshell or subshell environment when + one is created. The return status is false if any _s_i_g_s_p_e_c is + invalid; otherwise ttrraapp returns true. + + ttyyppee [--aaffttppPP] _n_a_m_e [_n_a_m_e ...] + With no options, indicate how each _n_a_m_e would be interpreted if + used as a command name. If the --tt option is used, ttyyppee prints a + string which is one of _a_l_i_a_s, _k_e_y_w_o_r_d, _f_u_n_c_t_i_o_n, _b_u_i_l_t_i_n, or + _f_i_l_e if _n_a_m_e is an alias, shell reserved word, function, + builtin, or disk file, respectively. If the _n_a_m_e is not found, + then nothing is printed, and an exit status of false is + returned. If the --pp option is used, ttyyppee either returns the + name of the disk file that would be executed if _n_a_m_e were speci- + fied as a command name, or nothing if ``type -t name'' would not + return _f_i_l_e. The --PP option forces a PPAATTHH search for each _n_a_m_e, + even if ``type -t name'' would not return _f_i_l_e. If a command is + hashed, --pp and --PP print the hashed value, not necessarily the + file that appears first in PPAATTHH. If the --aa option is used, ttyyppee + prints all of the places that contain an executable named _n_a_m_e. + This includes aliases and functions, if and only if the --pp + option is not also used. The table of hashed commands is not + consulted when using --aa. The --ff option suppresses shell func- + tion lookup, as with the ccoommmmaanndd builtin. ttyyppee returns true if + all of the arguments are found, false if any are not found. + + uulliimmiitt [--HHSSTTaabbccddeeffiillmmnnppqqrrssttuuvvxx [_l_i_m_i_t]] + Provides control over the resources available to the shell and + to processes started by it, on systems that allow such control. + The --HH and --SS options specify that the hard or soft limit is set + for the given resource. A hard limit cannot be increased by a + non-root user once it is set; a soft limit may be increased up + to the value of the hard limit. If neither --HH nor --SS is speci- + fied, both the soft and hard limits are set. The value of _l_i_m_i_t + can be a number in the unit specified for the resource or one of + the special values hhaarrdd, ssoofftt, or uunnlliimmiitteedd, which stand for the + current hard limit, the current soft limit, and no limit, + respectively. If _l_i_m_i_t is omitted, the current value of the + soft limit of the resource is printed, unless the --HH option is + given. When more than one resource is specified, the limit name + and unit are printed before the value. Other options are inter- + preted as follows: + --aa All current limits are reported + --bb The maximum socket buffer size + --cc The maximum size of core files created + --dd The maximum size of a process's data segment + --ee The maximum scheduling priority ("nice") + --ff The maximum size of files written by the shell and its + children + --ii The maximum number of pending signals + --ll The maximum size that may be locked into memory + --mm The maximum resident set size (many systems do not honor + this limit) + --nn The maximum number of open file descriptors (most systems + do not allow this value to be set) + --pp The pipe size in 512-byte blocks (this may not be set) + --qq The maximum number of bytes in POSIX message queues + --rr The maximum real-time scheduling priority + --ss The maximum stack size + --tt The maximum amount of cpu time in seconds + --uu The maximum number of processes available to a single + user + --vv The maximum amount of virtual memory available to the + shell + --xx The maximum number of file locks + --TT The maximum number of threads + + If _l_i_m_i_t is given, it is the new value of the specified resource + (the --aa option is display only). If no option is given, then --ff + is assumed. Values are in 1024-byte increments, except for --tt, + which is in seconds, --pp, which is in units of 512-byte blocks, + and --TT, --bb, --nn, and --uu, 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. + + uummaasskk [--pp] [--SS] [_m_o_d_e] + The user file-creation mask is set to _m_o_d_e. If _m_o_d_e begins with + a digit, it is interpreted as an octal number; otherwise it is + interpreted as a symbolic mode mask similar to that accepted by + _c_h_m_o_d(1). If _m_o_d_e is omitted, the current value of the mask is + printed. The --SS option causes the mask to be printed in sym- + bolic form; the default output is an octal number. If the --pp + option is supplied, and _m_o_d_e is omitted, the output is in a form + that may be reused as input. The return status is 0 if the mode + was successfully changed or if no _m_o_d_e argument was supplied, + and false otherwise. + + uunnaalliiaass [-aa] [_n_a_m_e ...] + Remove each _n_a_m_e from the list of defined aliases. If --aa is + supplied, all alias definitions are removed. The return value + is true unless a supplied _n_a_m_e is not a defined alias. + + uunnsseett [-ffvv] [_n_a_m_e ...] + For each _n_a_m_e, remove the corresponding variable or function. + If no options are supplied, or the --vv option is given, each _n_a_m_e + refers to a shell variable. Read-only variables may not be + unset. If --ff is specified, each _n_a_m_e refers to a shell func- + tion, and the function definition is removed. Each unset vari- + able or function is removed from the environment passed to sub- + sequent commands. If any of CCOOMMPP__WWOORRDDBBRREEAAKKSS, RRAANNDDOOMM, SSEECCOONNDDSS, + LLIINNEENNOO, HHIISSTTCCMMDD, FFUUNNCCNNAAMMEE, GGRROOUUPPSS, or DDIIRRSSTTAACCKK are unset, they + lose their special properties, even if they are subsequently + reset. The exit status is true unless a _n_a_m_e is readonly. + + wwaaiitt [_n _._._.] + Wait for each specified process and return its termination sta- + tus. Each _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 _n is not given, all currently active child pro- + cesses are waited for, and the return status is zero. If _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. + +SSEEEE AALLSSOO + bash(1), sh(1) + + + +GNU Bash-4.0 2004 Apr 20 BASH_BUILTINS(1) diff --git a/doc/builtins.1 b/doc/builtins.1 new file mode 100644 index 0000000..bf8bfec --- /dev/null +++ b/doc/builtins.1 @@ -0,0 +1,17 @@ +.\" This is a hack to force bash builtins into the whatis database +.\" and to get the list of builtins to come up with the man command. +.TH BASH_BUILTINS 1 "2004 Apr 20" "GNU Bash-4.0" +.SH NAME +bash, :, ., [, alias, bg, bind, break, builtin, caller, +cd, command, compgen, complete, +compopt, continue, declare, dirs, disown, echo, enable, eval, exec, exit, +export, false, fc, fg, getopts, hash, help, history, jobs, kill, +let, local, logout, mapfile, popd, printf, pushd, pwd, read, +readonly, return, set, +shift, shopt, source, suspend, test, times, trap, true, type, typeset, +ulimit, umask, unalias, unset, wait \- bash built-in commands, see \fBbash\fR(1) +.SH BASH BUILTIN COMMANDS +.nr zZ 1 +.so bash.1 +.SH SEE ALSO +bash(1), sh(1) diff --git a/doc/builtins.ps b/doc/builtins.ps new file mode 100644 index 0000000..539dfb0 --- /dev/null +++ b/doc/builtins.ps @@ -0,0 +1,2651 @@ +%!PS-Adobe-3.0 +%%Creator: groff version 1.19.2 +%%CreationDate: Wed Dec 30 13:07:37 2009 +%%DocumentNeededResources: font Times-Roman +%%+ font Times-Bold +%%+ font Times-Italic +%%+ font Symbol +%%+ font Courier +%%DocumentSuppliedResources: procset grops 1.19 2 +%%Pages: 21 +%%PageOrder: Ascend +%%DocumentMedia: Default 595 842 0 () () +%%Orientation: Portrait +%%EndComments +%%BeginDefaults +%%PageMedia: Default +%%EndDefaults +%%BeginProlog +%%BeginResource: procset grops 1.19 2 +%!PS-Adobe-3.0 Resource-ProcSet +/setpacking where{ +pop +currentpacking +true setpacking +}if +/grops 120 dict dup begin +/SC 32 def +/A/show load def +/B{0 SC 3 -1 roll widthshow}bind def +/C{0 exch ashow}bind def +/D{0 exch 0 SC 5 2 roll awidthshow}bind def +/E{0 rmoveto show}bind def +/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def +/G{0 rmoveto 0 exch ashow}bind def +/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/I{0 exch rmoveto show}bind def +/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def +/K{0 exch rmoveto 0 exch ashow}bind def +/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/M{rmoveto show}bind def +/N{rmoveto 0 SC 3 -1 roll widthshow}bind def +/O{rmoveto 0 exch ashow}bind def +/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/Q{moveto show}bind def +/R{moveto 0 SC 3 -1 roll widthshow}bind def +/S{moveto 0 exch ashow}bind def +/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/SF{ +findfont exch +[exch dup 0 exch 0 exch neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/MF{ +findfont +[5 2 roll +0 3 1 roll +neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/level0 0 def +/RES 0 def +/PL 0 def +/LS 0 def +/MANUAL{ +statusdict begin/manualfeed true store end +}bind def +/PLG{ +gsave newpath clippath pathbbox grestore +exch pop add exch pop +}bind def +/BP{ +/level0 save def +1 setlinecap +1 setlinejoin +72 RES div dup scale +LS{ +90 rotate +}{ +0 PL translate +}ifelse +1 -1 scale +}bind def +/EP{ +level0 restore +showpage +}def +/DA{ +newpath arcn stroke +}bind def +/SN{ +transform +.25 sub exch .25 sub exch +round .25 add exch round .25 add exch +itransform +}bind def +/DL{ +SN +moveto +SN +lineto stroke +}bind def +/DC{ +newpath 0 360 arc closepath +}bind def +/TM matrix def +/DE{ +TM currentmatrix pop +translate scale newpath 0 0 .5 0 360 arc closepath +TM setmatrix +}bind def +/RC/rcurveto load def +/RL/rlineto load def +/ST/stroke load def +/MT/moveto load def +/CL/closepath load def +/Fr{ +setrgbcolor fill +}bind def +/setcmykcolor where{ +pop +/Fk{ +setcmykcolor fill +}bind def +}if +/Fg{ +setgray fill +}bind def +/FL/fill load def +/LW/setlinewidth load def +/Cr/setrgbcolor load def +/setcmykcolor where{ +pop +/Ck/setcmykcolor load def +}if +/Cg/setgray load def +/RE{ +findfont +dup maxlength 1 index/FontName known not{1 add}if dict begin +{ +1 index/FID ne{def}{pop pop}ifelse +}forall +/Encoding exch def +dup/FontName exch def +currentdict end definefont pop +}bind def +/DEFS 0 def +/EBEGIN{ +moveto +DEFS begin +}bind def +/EEND/end load def +/CNT 0 def +/level1 0 def +/PBEGIN{ +/level1 save def +translate +div 3 1 roll div exch scale +neg exch neg exch translate +0 setgray +0 setlinecap +1 setlinewidth +0 setlinejoin +10 setmiterlimit +[]0 setdash +/setstrokeadjust where{ +pop +false setstrokeadjust +}if +/setoverprint where{ +pop +false setoverprint +}if +newpath +/CNT countdictstack def +userdict begin +/showpage{}def +/setpagedevice{}def +}bind def +/PEND{ +countdictstack CNT sub{end}repeat +level1 restore +}bind def +end def +/setpacking where{ +pop +setpacking +}if +%%EndResource +%%EndProlog +%%BeginSetup +%%BeginFeature: *PageSize Default +<< /PageSize [ 595 842 ] /ImagingBBox null >> setpagedevice +%%EndFeature +%%IncludeResource: font Times-Roman +%%IncludeResource: font Times-Bold +%%IncludeResource: font Times-Italic +%%IncludeResource: font Symbol +%%IncludeResource: font Courier +grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 +def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron +/Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent +/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen +/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon +/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O +/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex +/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y +/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft +/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl +/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut +/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash +/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen +/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft +/logicalnot/minus/registered/macron/degree/plusminus/twosuperior +/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior +/ordmasculine/guilsinglright/onequarter/onehalf/threequarters +/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE +/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn +/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash +/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def +/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE +/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10.95 +/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 1.325 +(bash, :, ., [, alias, bg, bind, break, b)108 96 R 1.325(uiltin, caller) +-.2 F 3.825(,c)-.4 G 1.324 +(d, command, compgen, complete, compopt, continue,)-3.825 F .903 +(declare, dirs, diso)108 108 R .903(wn, echo, enable, e)-.25 F -.25(va) +-.25 G .904(l, e).25 F -.15(xe)-.15 G .904(c, e).15 F .904(xit, e)-.15 F +.904(xport, f)-.15 F .904(alse, fc, fg, getopts, hash, help, history)-.1 +F 3.404(,j)-.65 G(obs,)-3.404 E .133(kill, let, local, logout, map\214l\ +e, popd, printf, pushd, pwd, read, readonly)108 120 R 2.633(,r)-.65 G +.133(eturn, set, shift, shopt, source, sus-)-2.633 F .279(pend, test, t\ +imes, trap, true, type, typeset, ulimit, umask, unalias, unset, w)108 +132 R .279(ait \255 bash b)-.1 F .279(uilt-in commands, see)-.2 F/F2 10 +/Times-Bold@0 SF(bash)108 144 Q F0(\(1\))A F1 -.329(BA)72 160.8 S(SH B) +.329 E(UIL)-.11 E(TIN COMMANDS)-1.007 E F0 .063 +(Unless otherwise noted, each b)108 172.8 R .062(uiltin command documen\ +ted in this section as accepting options preceded by)-.2 F F2108 +184.8 Q F0(accepts)2.533 E F22.533 E F0 .034 +(to signify the end of the options.)2.533 F(The)5.034 E F2(:)2.534 E F0 +(,)A F2(true)2.534 E F0(,)A F2(false)2.534 E F0 2.534(,a)C(nd)-2.534 E +F2(test)2.534 E F0 -.2(bu)2.534 G .034(iltins do not accept options and) +.2 F .078(do not treat)108 196.8 R F22.577 E F0(specially)2.577 E +5.077(.T)-.65 G(he)-5.077 E F2(exit)2.577 E F0(,)A F2(logout)2.577 E F0 +(,)A F2(br)2.577 E(eak)-.18 E F0(,)A F2(continue)2.577 E F0(,)A F2(let) +2.577 E F0 2.577(,a)C(nd)-2.577 E F2(shift)2.577 E F0 -.2(bu)2.577 G +.077(iltins accept and process ar).2 F(gu-)-.18 E .319(ments be)108 +208.8 R .319(ginning with)-.15 F F22.819 E F0 .319 +(without requiring)2.819 F F22.819 E F0 5.319(.O)C .319(ther b) +-5.319 F .319(uiltins that accept ar)-.2 F .32(guments b)-.18 F .32 +(ut are not speci\214ed as)-.2 F 1.144(accepting options interpret ar) +108 220.8 R 1.144(guments be)-.18 F 1.144(ginning with)-.15 F F2 +3.643 E F0 1.143(as in)3.643 F -.25(va)-.4 G 1.143 +(lid options and require).25 F F23.643 E F0 1.143(to pre)3.643 F +-.15(ve)-.25 G 1.143(nt this).15 F(interpretation.)108 232.8 Q F2(:)108 +250.8 Q F0([)2.5 E/F3 10/Times-Italic@0 SF(ar)A(guments)-.37 E F0(])A +.451(No ef)144 262.8 R .451(fect; the command does nothing be)-.25 F +.452(yond e)-.15 F(xpanding)-.15 E F3(ar)3.282 E(guments)-.37 E F0 .452 +(and performing an)3.222 F 2.952(ys)-.15 G(peci\214ed)-2.952 E 2.5 +(redirections. A)144 274.8 R(zero e)2.5 E(xit code is returned.)-.15 E +F2(.)110.5 291.6 Q F3(\214lename)6.666 E F0([)2.5 E F3(ar)A(guments)-.37 +E F0(])A F2(sour)108 303.6 Q(ce)-.18 E F3(\214lename)2.5 E F0([)2.5 E F3 +(ar)A(guments)-.37 E F0(])A 1.02(Read and e)144 315.6 R -.15(xe)-.15 G +1.02(cute commands from).15 F F3(\214lename)5.43 E F0 1.02 +(in the current shell en)3.7 F 1.02(vironment and return the e)-.4 F +(xit)-.15 E 1.68(status of the last command e)144 327.6 R -.15(xe)-.15 G +1.68(cuted from).15 F F3(\214lename)4.18 E F0 6.68(.I).18 G(f)-6.68 E F3 +(\214lename)6.09 E F0 1.68(does not contain a slash, \214le)4.36 F .608 +(names in)144 339.6 R/F4 9/Times-Bold@0 SF -.666(PA)3.108 G(TH)-.189 E +F0 .608(are used to \214nd the directory containing)2.858 F F3 +(\214lename)3.108 E F0 5.608(.T).18 G .608(he \214le searched for in) +-5.608 F F4 -.666(PA)3.108 G(TH)-.189 E F0 .832(need not be e)144 351.6 +R -.15(xe)-.15 G 3.332(cutable. When).15 F F2(bash)3.332 E F0 .832 +(is not in)3.332 F F3 .832(posix mode)3.332 F F0 3.332(,t)C .833 +(he current directory is searched if no)-3.332 F .982 +(\214le is found in)144 363.6 R F4 -.666(PA)3.481 G(TH)-.189 E/F5 9 +/Times-Roman@0 SF(.)A F0 .981(If the)5.481 F F2(sour)3.481 E(cepath)-.18 +E F0 .981(option to the)3.481 F F2(shopt)3.481 E F0 -.2(bu)3.481 G .981 +(iltin command is turned of).2 F .981(f, the)-.25 F F4 -.666(PA)144 +375.6 S(TH)-.189 E F0 .112(is not searched.)2.362 F .112(If an)5.112 F +(y)-.15 E F3(ar)2.612 E(guments)-.37 E F0 .112(are supplied, the)2.612 F +2.612(yb)-.15 G .112(ecome the positional parameters when)-2.612 F F3 +(\214lename)144 387.6 Q F0 .342(is e)2.842 F -.15(xe)-.15 G 2.842 +(cuted. Otherwise).15 F .342(the positional parameters are unchanged.) +2.842 F .341(The return status is the)5.341 F .716 +(status of the last command e)144 399.6 R .716 +(xited within the script \(0 if no commands are e)-.15 F -.15(xe)-.15 G +.716(cuted\), and f).15 F .716(alse if)-.1 F F3(\214lename)145.91 411.6 +Q F0(is not found or cannot be read.)2.68 E F2(alias)108 428.4 Q F0([) +2.5 E F2A F0 2.5(][)C F3(name)-2.5 E F0([=)A F3(value)A F0 2.5(].) +C(..])-2.5 E F2(Alias)144 440.4 Q F0 2.725(with no ar)5.225 F 2.724 +(guments or with the)-.18 F F25.224 E F0 2.724 +(option prints the list of aliases in the form)5.224 F F2(alias)5.224 E +F3(name)144 452.4 Q F0(=)A F3(value)A F0 .58(on standard output.)3.08 F +.58(When ar)5.58 F .58 +(guments are supplied, an alias is de\214ned for each)-.18 F F3(name) +3.08 E F0(whose)144 464.4 Q F3(value)2.895 E F0 .395(is gi)2.895 F -.15 +(ve)-.25 G 2.895(n. A).15 F .395(trailing space in)2.895 F F3(value) +5.395 E F0 .395(causes the ne)2.895 F .395(xt w)-.15 F .395 +(ord to be check)-.1 F .395(ed for alias sub-)-.1 F .054 +(stitution when the alias is e)144 476.4 R 2.554(xpanded. F)-.15 F .054 +(or each)-.15 F F3(name)2.554 E F0 .054(in the ar)2.554 F .054 +(gument list for which no)-.18 F F3(value)2.554 E F0 .054(is sup-)2.554 +F 1.314(plied, the name and v)144 488.4 R 1.314 +(alue of the alias is printed.)-.25 F F2(Alias)6.314 E F0 1.314 +(returns true unless a)3.814 F F3(name)3.814 E F0 1.313(is gi)3.814 F +-.15(ve)-.25 G 3.813(nf).15 G(or)-3.813 E +(which no alias has been de\214ned.)144 500.4 Q F2(bg)108 517.2 Q F0([) +2.5 E F3(jobspec)A F0(...])2.5 E .744(Resume each suspended job)144 +529.2 R F3(jobspec)3.244 E F0 .745 +(in the background, as if it had been started with)3.244 F F2(&)3.245 E +F0 5.745(.I)C(f)-5.745 E F3(job-)4.985 E(spec)144 541.2 Q F0 .672 +(is not present, the shell')3.482 F 3.172(sn)-.55 G .672(otion of the) +-3.172 F F3(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F2 +(bg)5.671 E F3(jobspec)4.911 E F0 .671(returns 0 unless run)3.481 F .418 +(when job control is disabled or)144 553.2 R 2.919(,w)-.4 G .419 +(hen run with job control enabled, an)-2.919 F 2.919(ys)-.15 G +(peci\214ed)-2.919 E F3(jobspec)2.919 E F0 -.1(wa)2.919 G 2.919(sn).1 G +(ot)-2.919 E(found or w)144 565.2 Q(as started without job control.)-.1 +E F2(bind)108 582 Q F0([)2.5 E F2A F3 -.1(ke)2.5 G(ymap)-.2 E F0 +2.5(][)C F2(\255lpsvPSV)-2.5 E F0(])A F2(bind)108 594 Q F0([)2.5 E F2 +A F3 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F2-2.5 E F3 +(function)2.5 E F0 2.5(][)C F2-2.5 E F3(function)2.5 E F0 2.5(][)C +F2-2.5 E F3 -.1(ke)2.5 G(yseq)-.2 E F0(])A F2(bind)108 606 Q F0([) +2.5 E F2A F3 -.1(ke)2.5 G(ymap)-.2 E F0(])A F22.5 E F3 +(\214lename)2.5 E F2(bind)108 618 Q F0([)2.5 E F2A F3 -.1(ke)2.5 G +(ymap)-.2 E F0(])A F22.5 E F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3 +(shell\255command)A F2(bind)108 630 Q F0([)2.5 E F2A F3 -.1(ke)2.5 +G(ymap)-.2 E F0(])A F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3 +(function\255name)A F2(bind)108 642 Q F3 -.37(re)2.5 G +(adline\255command).37 E F0 .239(Display current)144 654 R F2 -.18(re) +2.739 G(adline).18 E F0 -.1(ke)2.739 G 2.739(ya)-.05 G .239 +(nd function bindings, bind a k)-2.739 F .539 -.15(ey s)-.1 H .238 +(equence to a).15 F F2 -.18(re)2.738 G(adline).18 E F0 .238(function or) +2.738 F .475(macro, or set a)144 666 R F2 -.18(re)2.975 G(adline).18 E +F0 -.25(va)2.975 G 2.975(riable. Each).25 F .476(non-option ar)2.976 F +.476(gument is a command as it w)-.18 F .476(ould appear in)-.1 F F3 +(.inputr)144 678 Q(c)-.37 E F0 2.984(,b).31 G .484 +(ut each binding or command must be passed as a separate ar)-3.184 F +.483(gument; e.g., '"\\C\255x\\C\255r":)-.18 F 2.5 +(re\255read\255init\255\214le'. Options,)144 690 R(if supplied, ha)2.5 E +.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F2144 702 +Q F3 -.1(ke)2.5 G(ymap)-.2 E F0(Use)180 714 Q F3 -.1(ke)5.158 G(ymap)-.2 +E F0 2.658(as the k)5.348 F -.15(ey)-.1 G 2.658(map to be af).15 F 2.659 +(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E F3 -.1(ke) +180 726 S(ymap)-.2 E F0 3.193(names are)5.883 F F3 3.193 +(emacs, emacs\255standar)5.693 F 3.192 +(d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E +F0(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(1)203.725 E 0 Cg EP +%%Page: 2 2 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Italic@0 SF(vi\255command)180 84 Q F0 4.429(,a)C(nd)-4.429 E F1 +(vi\255insert)4.429 E F0(.).68 E F1(vi)6.929 E F0 1.929(is equi)4.429 F +-.25(va)-.25 G 1.929(lent to).25 F F1(vi\255command)4.429 E F0(;)A F1 +(emacs)4.429 E F0 1.929(is equi)4.429 F -.25(va)-.25 G 1.93(lent to).25 +F F1(emacs\255standar)180 96 Q(d)-.37 E F0(.)A/F2 10/Times-Bold@0 SF +144 108 Q F0(List the names of all)27.52 E F2 -.18(re)2.5 G +(adline).18 E F0(functions.)2.5 E F2144 120 Q F0(Display)24.74 E +F2 -.18(re)2.5 G(adline).18 E F0 +(function names and bindings in such a w)2.5 E(ay that the)-.1 E 2.5(yc) +-.15 G(an be re-read.)-2.5 E F2144 132 Q F0(List current)24.19 E +F2 -.18(re)2.5 G(adline).18 E F0(function names and bindings.)2.5 E F2 +144 144 Q F0(Display)26.41 E F2 -.18(re)3.655 G(adline).18 E F0 +-.1(ke)3.655 G 3.655(ys)-.05 G 1.155 +(equences bound to macros and the strings the)-3.655 F 3.655(yo)-.15 G +1.155(utput in such a)-3.655 F -.1(wa)180 156 S 2.5(yt).1 G(hat the)-2.5 +E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2144 168 Q F0(Display)24.74 +E F2 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5(ys)-.05 G +(equences bound to macros and the strings the)-2.5 E 2.5(yo)-.15 G +(utput.)-2.5 E F2144 180 Q F0(Display)25.3 E F2 -.18(re)2.5 G +(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E +(alues in such a w)-.25 E(ay that the)-.1 E 2.5(yc)-.15 G +(an be re-read.)-2.5 E F2144 192 Q F0(List current)23.08 E F2 -.18 +(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E(alues.) +-.25 E F2144 204 Q F1(\214lename)2.5 E F0(Read k)180 216 Q .3 -.15 +(ey b)-.1 H(indings from).15 E F1(\214lename)2.5 E F0(.)A F2144 +228 Q F1(function)2.5 E F0(Query about which k)180 240 Q -.15(ey)-.1 G +2.5(si).15 G -1.9 -.4(nv o)-2.5 H .2 -.1(ke t).4 H(he named).1 E F1 +(function)2.5 E F0(.)A F2144 252 Q F1(function)2.5 E F0 +(Unbind all k)180 264 Q -.15(ey)-.1 G 2.5(sb).15 G(ound to the named) +-2.5 E F1(function)2.5 E F0(.)A F2144 276 Q F1 -.1(ke)2.5 G(yseq) +-.2 E F0(Remo)180 288 Q .3 -.15(ve a)-.15 H .3 -.15(ny c).15 H +(urrent binding for).15 E F1 -.1(ke)2.5 G(yseq)-.2 E F0(.)A F2144 +300 Q F1 -.1(ke)2.5 G(yseq)-.2 E F2(:)A F1(shell\255command)A F0(Cause) +180 312 Q F1(shell\255command)4.325 E F0 1.825(to be e)4.325 F -.15(xe) +-.15 G 1.825(cuted whene).15 F -.15(ve)-.25 G(r).15 E F1 -.1(ke)4.325 G +(yseq)-.2 E F0 1.825(is entered.)4.325 F(When)6.825 E F1(shell\255com-) +4.325 E(mand)180 324 Q F0 1.765(is e)4.265 F -.15(xe)-.15 G 1.765 +(cuted, the shell sets the).15 F/F3 9/Times-Bold@0 SF(READLINE_LINE) +4.265 E F0 -.25(va)4.015 G 1.765(riable to the contents of the).25 F F2 +-.18(re)180 336 S(adline).18 E F0 1.353(line b)3.852 F(uf)-.2 E 1.353 +(fer and the)-.25 F F3(READLINE_POINT)3.853 E F0 -.25(va)3.603 G 1.353 +(riable to the current location of the).25 F 2.012(insertion point.)180 +348 R 2.011(If the e)7.012 F -.15(xe)-.15 G 2.011 +(cuted command changes the v).15 F 2.011(alue of)-.25 F F3 +(READLINE_LINE)4.511 E F0(or)4.261 E F3(READLINE_POINT)180 360 Q/F4 9 +/Times-Roman@0 SF(,)A F0(those ne)2.25 E 2.5(wv)-.25 G +(alues will be re\215ected in the editing state.)-2.75 E(The return v) +144 376.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15 +(ve)-.25 G 2.5(no).15 G 2.5(ra)-2.5 G 2.5(ne)-2.5 G(rror occurred.)-2.5 +E F2(br)108 393.6 Q(eak)-.18 E F0([)2.5 E F1(n)A F0(])A .054 +(Exit from within a)144 405.6 R F2 -.25(fo)2.554 G(r).25 E F0(,)A F2 +(while)2.554 E F0(,)A F2(until)2.555 E F0 2.555(,o)C(r)-2.555 E F2 +(select)2.555 E F0 2.555(loop. If)2.555 F F1(n)2.555 E F0 .055 +(is speci\214ed, break)2.555 F F1(n)2.555 E F0(le)2.555 E -.15(ve)-.25 G +(ls.).15 E F1(n)5.415 E F0 .055(must be)2.795 F/F5 10/Symbol SF2.555 +E F0(1.)2.555 E(If)144 417.6 Q F1(n)3.075 E F0 .215(is greater than the\ + number of enclosing loops, all enclosing loops are e)2.955 F 2.714 +(xited. The)-.15 F .214(return v)2.714 F(alue)-.25 E(is 0 unless)144 +429.6 Q F1(n)2.5 E F0(is not greater than or equal to 1.)2.5 E F2 -.2 +(bu)108 446.4 S(iltin).2 E F1(shell\255b)2.5 E(uiltin)-.2 E F0([)2.5 E +F1(ar)A(guments)-.37 E F0(])A(Ex)144 458.4 Q .792 +(ecute the speci\214ed shell b)-.15 F .792(uiltin, passing it)-.2 F F1 +(ar)3.293 E(guments)-.37 E F0 3.293(,a).27 G .793(nd return its e)-3.293 +F .793(xit status.)-.15 F .793(This is useful)5.793 F .616 +(when de\214ning a function whose name is the same as a shell b)144 +470.4 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144 +482.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F2(cd)3.07 E F0 +-.2(bu)3.07 G .57(iltin is commonly rede\214ned this w).2 F(ay)-.1 E +5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 494.4 Q(alse if)-.1 +E F1(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E +(uiltin command.)-.2 E F2(caller)108 511.2 Q F0([)2.5 E F1 -.2(ex)C(pr) +.2 E F0(])A .254(Returns the conte)144 523.2 R .254(xt of an)-.15 F +2.754(ya)-.15 G(cti)-2.754 E .554 -.15(ve s)-.25 H .254 +(ubroutine call \(a shell function or a script e).15 F -.15(xe)-.15 G +.254(cuted with the).15 F F2(.)2.753 E F0(or)2.753 E F2(sour)144 535.2 Q +(ce)-.18 E F0 -.2(bu)3.062 G 3.062(iltins. W).2 F(ithout)-.4 E F1 -.2 +(ex)3.062 G(pr).2 E F0(,)A F2(caller)3.062 E F0 .562 +(displays the line number and source \214lename of the current)3.062 F +.254(subroutine call.)144 547.2 R .254(If a non-ne)5.254 F -.05(ga)-.15 +G(ti).05 E .554 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15 +F F1 -.2(ex)2.753 G(pr).2 E F0(,)A F2(caller)2.753 E F0 .253 +(displays the line number)2.753 F 2.753(,s)-.4 G(ub-)-2.753 E 1.327(rou\ +tine name, and source \214le corresponding to that position in the curr\ +ent e)144 559.2 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001 +(This e)144 571.2 R .001(xtra information may be used, for e)-.15 F .001 +(xample, to print a stack trace.)-.15 F(The current frame is frame)5 E +3.019(0. The)144 583.2 R .519(return v)3.019 F .519 +(alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .52 +(cuting a subroutine call or).15 F F1 -.2(ex)3.02 G(pr).2 E F0 .52 +(does not corre-)3.02 F(spond to a v)144 595.2 Q +(alid position in the call stack.)-.25 E F2(cd)108 612 Q F0([)2.5 E F2 +(\255L|-P)A F0 2.5(][)C F1(dir)-2.5 E F0(])A .21 +(Change the current directory to)144 624 R F1(dir)2.71 E F0 5.21(.T)C +.21(he v)-5.21 F(ariable)-.25 E F3(HOME)2.71 E F0 .21(is the def)2.46 F +(ault)-.1 E F1(dir)2.71 E F0 5.21(.T).73 G .21(he v)-5.21 F(ariable)-.25 +E F3(CDP)2.71 E -.855(AT)-.666 G(H).855 E F0 .776 +(de\214nes the search path for the directory containing)144 636 R F1 +(dir)3.276 E F0 5.777(.A).73 G(lternati)-5.777 E 1.077 -.15(ve d)-.25 H +.777(irectory names in).15 F F3(CDP)3.277 E -.855(AT)-.666 G(H).855 E F0 +.764(are separated by a colon \(:\).)144 648 R 3.264(An)5.764 G .764 +(ull directory name in)-3.264 F F3(CDP)3.264 E -.855(AT)-.666 G(H).855 E +F0 .764(is the same as the current direc-)3.014 F(tory)144 660 Q 2.973 +(,i)-.65 G .473(.e., `)-2.973 F(`)-.74 E F2(.)A F0 -.74('')C 5.473(.I) +.74 G(f)-5.473 E F1(dir)3.323 E F0(be)3.703 E .474 +(gins with a slash \(/\), then)-.15 F F3(CDP)2.974 E -.855(AT)-.666 G(H) +.855 E F0 .474(is not used. The)2.724 F F22.974 E F0 .474 +(option says to use)2.974 F .58(the ph)144 672 R .58 +(ysical directory structure instead of follo)-.05 F .579 +(wing symbolic links \(see also the)-.25 F F23.079 E F0 .579 +(option to the)3.079 F F2(set)144 684 Q F0 -.2(bu)3.383 G .883 +(iltin command\); the).2 F F23.383 E F0 .884 +(option forces symbolic links to be follo)3.384 F 3.384(wed. An)-.25 F +(ar)3.384 E .884(gument of)-.18 F F23.384 E F0(is)3.384 E(equi)144 +696 Q -.25(va)-.25 G .316(lent to).25 F F3($OLDPWD)2.816 E F4(.)A F0 +.316(If a non-empty directory name from)4.816 F F3(CDP)2.815 E -.855(AT) +-.666 G(H).855 E F0 .315(is used, or if)2.565 F F22.815 E F0 .315 +(is the \214rst)2.815 F(ar)144 708 Q .116(gument, and the directory cha\ +nge is successful, the absolute pathname of the ne)-.18 F 2.616(ww)-.25 +G .116(orking direc-)-2.716 F 1.165 +(tory is written to the standard output.)144 720 R 1.164(The return v) +6.164 F 1.164(alue is true if the directory w)-.25 F 1.164 +(as successfully)-.1 F(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(2) +203.725 E 0 Cg EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E(changed; f) +144 84 Q(alse otherwise.)-.1 E/F1 10/Times-Bold@0 SF(command)108 100.8 Q +F0([)2.5 E F1(\255pVv)A F0(])A/F2 10/Times-Italic@0 SF(command)2.5 E F0 +([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(Run)144 112.8 Q F2(command)2.956 +E F0(with)3.527 E F2(ar)3.087 E(gs)-.37 E F0 .257 +(suppressing the normal shell function lookup. Only b)3.027 F .257 +(uiltin commands or)-.2 F .502(commands found in the)144 124.8 R/F3 9 +/Times-Bold@0 SF -.666(PA)3.002 G(TH)-.189 E F0 .502(are e)2.752 F -.15 +(xe)-.15 G 3.002(cuted. If).15 F(the)3.002 E F13.002 E F0 .502 +(option is gi)3.002 F -.15(ve)-.25 G .501(n, the search for).15 F F2 +(command)3.201 E F0(is)3.771 E .399(performed using a def)144 136.8 R +.399(ault v)-.1 F .399(alue for)-.25 F F3 -.666(PA)2.899 G(TH)-.189 E F0 +.4(that is guaranteed to \214nd all of the standard utilities.)2.649 F +(If)5.4 E .175(either the)144 148.8 R F12.675 E F0(or)2.675 E F1 +2.675 E F0 .175(option is supplied, a description of)2.675 F F2 +(command)2.875 E F0 .174(is printed.)3.445 F(The)5.174 E F12.674 E +F0 .174(option causes)2.674 F 3.11(as)144 160.8 S .61(ingle w)-3.11 F +.61(ord indicating the command or \214le name used to in)-.1 F -.2(vo) +-.4 G -.1(ke).2 G F2(command)3.41 E F0 .61(to be displayed; the)3.88 F +F1144 172.8 Q F0 .25(option produces a more v)2.75 F .25 +(erbose description.)-.15 F .249(If the)5.25 F F12.749 E F0(or) +2.749 E F12.749 E F0 .249(option is supplied, the e)2.749 F .249 +(xit status)-.15 F 1.004(is 0 if)144 184.8 R F2(command)3.704 E F0 -.1 +(wa)4.274 G 3.504(sf).1 G 1.005(ound, and 1 if not.)-3.504 F 1.005 +(If neither option is supplied and an error occurred or)6.005 F F2 +(command)144.2 196.8 Q F0 1.599(cannot be found, the e)4.869 F 1.599 +(xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.598 +(xit status of the)-.15 F F1(command)4.098 E F0 -.2(bu)144 208.8 S +(iltin is the e).2 E(xit status of)-.15 E F2(command)2.5 E F0(.).77 E F1 +(compgen)108 225.6 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(wor)-2.5 E(d) +-.37 E F0(])A .012(Generate possible completion matches for)144 237.6 R +F2(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F2(option)2.513 +E F0 .013(s, which may be an)B 2.513(yo)-.15 G(ption)-2.513 E .982 +(accepted by the)144 249.6 R F1(complete)3.482 E F0 -.2(bu)3.481 G .981 +(iltin with the e).2 F .981(xception of)-.15 F F13.481 E F0(and) +3.481 E F13.481 E F0 3.481(,a)C .981(nd write the matches to the) +-3.481 F 1.415(standard output.)144 261.6 R 1.415(When using the)6.415 F +F13.915 E F0(or)3.915 E F13.915 E F0 1.415(options, the v) +3.915 F 1.415(arious shell v)-.25 F 1.415(ariables set by the pro-)-.25 +F(grammable completion f)144 273.6 Q(acilities, while a)-.1 E -.25(va) +-.2 G(ilable, will not ha).25 E .3 -.15(ve u)-.2 H(seful v).15 E(alues.) +-.25 E .352(The matches will be generated in the same w)144 297.6 R .352 +(ay as if the programmable completion code had gen-)-.1 F .02(erated th\ +em directly from a completion speci\214cation with the same \215ags.)144 +309.6 R(If)5.02 E F2(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only) +2.52 F(those completions matching)144 321.6 Q F2(wor)2.5 E(d)-.37 E F0 +(will be displayed.)2.5 E(The return v)144 345.6 Q +(alue is true unless an in)-.25 E -.25(va)-.4 G +(lid option is supplied, or no matches were generated.).25 E F1 +(complete)108 362.4 Q F0([)3.729 E F1(\255abcdefgjksuv)A F0 3.729(][)C +F1-3.729 E F2(comp-option)3.729 E F0 3.729(][)C F1(\255DE)-3.729 E +F0 3.728(][)C F1-3.728 E F2(action)3.728 E F0 3.728(][)C F1 +-3.728 E F2(globpat)3.728 E F0 3.728(][)C F1-3.728 E F2(wor)3.728 +E(dlist)-.37 E F0 3.728(][)C F1-3.728 E F2(func-)3.728 E(tion)108 +374.4 Q F0 2.5(][)C F1-2.5 E F2(command)2.5 E F0(])A([)144 386.4 Q +F1A F2(\214lterpat)2.5 E F0 2.5(][)C F1-2.5 E F2(pr)2.5 E +(e\214x)-.37 E F0 2.5(][)C F1-2.5 E F2(suf)2.5 E<8c78>-.18 E F0(]) +A F2(name)2.5 E F0([)2.5 E F2(name ...)A F0(])A F1(complete \255pr)108 +398.4 Q F0([)2.5 E F1(\255DE)A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E +.634(Specify ho)144 410.4 R 3.134(wa)-.25 G -.18(rg)-3.134 G .634 +(uments to each).18 F F2(name)3.134 E F0 .634(should be completed.)3.134 +F .633(If the)5.634 F F13.133 E F0 .633 +(option is supplied, or if no)3.133 F .139(options are supplied, e)144 +422.4 R .139(xisting completion speci\214cations are printed in a w)-.15 +F .14(ay that allo)-.1 F .14(ws them to be)-.25 F .31(reused as input.) +144 434.4 R(The)5.31 E F12.81 E F0 .31(option remo)2.81 F -.15(ve) +-.15 G 2.81(sac).15 G .31(ompletion speci\214cation for each)-2.81 F F2 +(name)2.81 E F0 2.81(,o)C 1.11 -.4(r, i)-2.81 H 2.81(fn).4 G(o)-2.81 E +F2(name)2.81 E F0(s)A 1.346 +(are supplied, all completion speci\214cations.)144 446.4 R(The)6.347 E +F13.847 E F0 1.347(option indicates that the remaining options) +3.847 F .5(and actions should apply to the `)144 458.4 R(`def)-.74 E +(ault')-.1 E 3('c)-.74 G .5 +(ommand completion; that is, completion attempted on)-3 F 3.455(ac)144 +470.4 S .955(ommand for which no completion has pre)-3.455 F .955 +(viously been de\214ned.)-.25 F(The)5.955 E F13.455 E F0 .955 +(option indicates that)3.455 F .065 +(the remaining options and actions should apply to `)144 482.4 R +(`empty')-.74 E 2.564('c)-.74 G .064 +(ommand completion; that is, comple-)-2.564 F +(tion attempted on a blank line.)144 494.4 Q 1.437 +(The process of applying these completion speci\214cations when w)144 +518.4 R 1.438(ord completion is attempted is)-.1 F(described abo)144 +530.4 Q .3 -.15(ve u)-.15 H(nder).15 E F1(Pr)2.5 E +(ogrammable Completion)-.18 E F0(.)A .556 +(Other options, if speci\214ed, ha)144 554.4 R .856 -.15(ve t)-.2 H .555 +(he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F .555 +(guments to the)-.18 F F13.055 E F0(,)A F13.055 E F0 3.055 +(,a)C(nd)-3.055 E F13.055 E F0 .722(options \(and, if necessary) +144 566.4 R 3.222(,t)-.65 G(he)-3.222 E F13.222 E F0(and)3.222 E +F13.222 E F0 .723 +(options\) should be quoted to protect them from e)3.222 F(xpan-)-.15 E +(sion before the)144 578.4 Q F1(complete)2.5 E F0 -.2(bu)2.5 G +(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F1144 590.4 Q +F2(comp-option)2.5 E F0(The)184 602.4 Q F2(comp-option)2.791 E F0 .291 +(controls se)2.791 F -.15(ve)-.25 G .291(ral aspects of the compspec') +.15 F 2.791(sb)-.55 G(eha)-2.791 E .291(vior be)-.2 F .291 +(yond the simple)-.15 F(generation of completions.)184 614.4 Q F2 +(comp-option)5 E F0(may be one of:)2.5 E F1(bashdefault)184 626.4 Q F0 +.281(Perform the rest of the def)224 638.4 R(ault)-.1 E F1(bash)2.781 E +F0 .281(completions if the compspec generates no)2.781 F(matches.)224 +650.4 Q F1(default)184 662.4 Q F0 2.876(Use readline')10 F 5.376(sd)-.55 +G(ef)-5.376 E 2.875 +(ault \214lename completion if the compspec generates no)-.1 F(matches.) +224 674.4 Q F1(dir)184 686.4 Q(names)-.15 E F0(Perform directory name c\ +ompletion if the compspec generates no matches.)224 698.4 Q +(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(3)203.725 E 0 Cg EP +%%Page: 4 4 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF(\214lenames)184 84 Q F0 -.7(Te)224 96 S .137(ll readli\ +ne that the compspec generates \214lenames, so it can perform an).7 F +2.637<798c>-.15 G(le-)-2.637 E .134(name\255speci\214c processing \(lik) +224 108 R 2.634(ea)-.1 G .134 +(dding a slash to directory names, quoting spe-)-2.634 F .45 +(cial characters, or suppressing trailing spaces\).)224 120 R .45 +(Intended to be used with shell)5.45 F(functions.)224 132 Q F1(nospace) +184 144 Q F0 -.7(Te)6.11 G .22 +(ll readline not to append a space \(the def).7 F .22(ault\) to w)-.1 F +.22(ords completed at the end)-.1 F(of the line.)224 156 Q F1(plusdirs) +184 168 Q F0 1.985(After an)5.54 F 4.485(ym)-.15 G 1.985 +(atches de\214ned by the compspec are generated, directory name)-4.485 F +.584(completion is attempted and an)224 180 R 3.084(ym)-.15 G .584 +(atches are added to the results of the other)-3.084 F(actions.)224 192 +Q F1144 204 Q/F2 10/Times-Italic@0 SF(action)2.5 E F0(The)184 216 +Q F2(action)2.5 E F0(may be one of the follo)2.5 E +(wing to generate a list of possible completions:)-.25 E F1(alias)184 +228 Q F0(Alias names.)20.55 E(May also be speci\214ed as)5 E F12.5 +E F0(.)A F1(arrayv)184 240 Q(ar)-.1 E F0(Array v)224 252 Q +(ariable names.)-.25 E F1 4.7(binding Readline)184 264 R F0 -.1(ke)2.5 G +2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 276 S(iltin).2 E F0 +(Names of shell b)11.85 E(uiltin commands.)-.2 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(command)184 288 +Q F0(Command names.)224 300 Q(May also be speci\214ed as)5 E F12.5 +E F0(.)A F1(dir)184 312 Q(ectory)-.18 E F0(Directory names.)224 324 Q +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(disabled)184 336 +Q F0(Names of disabled shell b)224 348 Q(uiltins.)-.2 E F1(enabled)184 +360 Q F0(Names of enabled shell b)6.66 E(uiltins.)-.2 E F1(export)184 +372 Q F0(Names of e)12.23 E(xported shell v)-.15 E 2.5(ariables. May) +-.25 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(\214le)184 +384 Q F0(File names.)27.22 E(May also be speci\214ed as)5 E F12.5 +E F0(.)A F1(function)184 396 Q F0(Names of shell functions.)224 408 Q F1 +(gr)184 420 Q(oup)-.18 E F0(Group names.)14.62 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(helptopic)184 +432 Q F0(Help topics as accepted by the)224 444 Q F1(help)2.5 E F0 -.2 +(bu)2.5 G(iltin.).2 E F1(hostname)184 456 Q F0(Hostnames, as tak)224 468 +Q(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF +(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 480 Q F0 +(Job names, if job control is acti)26.11 E -.15(ve)-.25 G 5(.M).15 G +(ay also be speci\214ed as)-5 E F12.5 E F0(.)A F1 -.1(ke)184 492 S +(yw).1 E(ord)-.1 E F0(Shell reserv)224 504 Q(ed w)-.15 E 2.5(ords. May) +-.1 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(running)184 +516 Q F0(Names of running jobs, if job control is acti)5.54 E -.15(ve) +-.25 G(.).15 E F1(ser)184 528 Q(vice)-.1 E F0(Service names.)10.67 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(setopt)184 540 Q +F0 -1.11(Va)14.45 G(lid ar)1.11 E(guments for the)-.18 E F12.5 E +F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1 +(shopt)184 552 Q F0(Shell option names as accepted by the)16.66 E F1 +(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 564 Q F0 +(Signal names.)14.99 E F1(stopped)184 576 Q F0 +(Names of stopped jobs, if job control is acti)6.66 E -.15(ve)-.25 G(.) +.15 E F1(user)184 588 Q F0(User names.)21.67 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1 -.1(va)184 600 S +(riable).1 E F0(Names of all shell v)5.1 E 2.5(ariables. May)-.25 F +(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1144 612 Q F2 +(globpat)2.5 E F0 1.007(The pathname e)184 624 R 1.007(xpansion pattern) +-.15 F F2(globpat)3.507 E F0 1.007(is e)3.507 F 1.008 +(xpanded to generate the possible comple-)-.15 F(tions.)184 636 Q F1 +144 648 Q F2(wor)2.5 E(dlist)-.37 E F0(The)184 660 Q F2(wor)3.64 E +(dlist)-.37 E F0 1.14(is split using the characters in the)3.64 F F3 +(IFS)3.64 E F0 1.139(special v)3.39 F 1.139(ariable as delimiters, and) +-.25 F 2.007(each resultant w)184 672 R 2.007(ord is e)-.1 F 4.507 +(xpanded. The)-.15 F 2.008(possible completions are the members of the) +4.507 F(resultant list which match the w)184 684 Q(ord being completed.) +-.1 E F1144 696 Q F2(command)2.5 E(command)184 708 Q F0 1.056 +(is e)3.556 F -.15(xe)-.15 G 1.056(cuted in a subshell en).15 F 1.056 +(vironment, and its output is used as the possible)-.4 F(completions.) +184 720 Q(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(4)203.725 E 0 Cg +EP +%%Page: 5 5 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF144 84 Q/F2 10/Times-Italic@0 SF(function)2.5 E F0 +1.18(The shell function)184 96 R F2(function)3.68 E F0 1.181(is e)3.681 +F -.15(xe)-.15 G 1.181(cuted in the current shell en).15 F 3.681 +(vironment. When)-.4 F 1.181(it \214n-)3.681 F .932 +(ishes, the possible completions are retrie)184 108 R -.15(ve)-.25 G +3.432(df).15 G .932(rom the v)-3.432 F .932(alue of the)-.25 F/F3 9 +/Times-Bold@0 SF(COMPREPL)3.431 E(Y)-.828 E F0(array)3.181 E -.25(va)184 +120 S(riable.).25 E F1144 132 Q F2(\214lterpat)2.5 E(\214lterpat) +184 144 Q F0 .455(is a pattern as used for pathname e)2.955 F 2.956 +(xpansion. It)-.15 F .456(is applied to the list of possible)2.956 F +1.596(completions generated by the preceding options and ar)184 156 R +1.596(guments, and each completion)-.18 F(matching)184 168 Q F2 +(\214lterpat)3.204 E F0 .704(is remo)3.204 F -.15(ve)-.15 G 3.204(df).15 +G .704(rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F1(!) +3.204 E F0(in)3.204 E F2(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 +G .705(tes the pattern;).05 F(in this case, an)184 180 Q 2.5(yc)-.15 G +(ompletion not matching)-2.5 E F2(\214lterpat)2.5 E F0(is remo)2.5 E +-.15(ve)-.15 G(d.).15 E F1144 192 Q F2(pr)2.5 E(e\214x)-.37 E(pr) +184 204 Q(e\214x)-.37 E F0 .535(is added at the be)3.035 F .534 +(ginning of each possible completion after all other options ha)-.15 F +-.15(ve)-.2 G(been applied.)184 216 Q F1144 228 Q F2(suf)2.5 E +2.81(\214x suf)-.18 F<8c78>-.18 E F0 +(is appended to each possible completion after all other options ha)2.5 +E .3 -.15(ve b)-.2 H(een applied.).15 E .466(The return v)144 244.8 R +.466(alue is true unless an in)-.25 F -.25(va)-.4 G .466 +(lid option is supplied, an option other than).25 F F12.967 E F0 +(or)2.967 E F12.967 E F0 .467(is sup-)2.967 F 1.362 +(plied without a)144 256.8 R F2(name)3.862 E F0(ar)3.862 E 1.361 +(gument, an attempt is made to remo)-.18 F 1.661 -.15(ve a c)-.15 H +1.361(ompletion speci\214cation for a).15 F F2(name)144 268.8 Q F0 +(for which no speci\214cation e)2.5 E +(xists, or an error occurs adding a completion speci\214cation.)-.15 E +F1(compopt)108 285.6 Q F0([)2.5 E F1A F2(option)2.5 E F0 2.5(][)C +F1(\255DE)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F2(option)2.5 E F0 2.5(][)C F2 +(name)-2.5 E F0(])A .447(Modify completion options for each)144 297.6 R +F2(name)2.947 E F0 .447(according to the)2.947 F F2(option)2.947 E F0 +.447(s, or for the currently-e)B -.15(xe)-.15 G(cution).15 E .726 +(completion if no)144 309.6 R F2(name)3.226 E F0 3.226(sa)C .726 +(re supplied.)-3.226 F .725(If no)5.725 F F2(option)3.225 E F0 3.225(sa) +C .725(re gi)-3.225 F -.15(ve)-.25 G .725 +(n, display the completion options for).15 F(each)144 321.6 Q F2(name) +3.223 E F0 .723(or the current completion.)3.223 F .724(The possible v) +5.724 F .724(alues of)-.25 F F2(option)3.224 E F0 .724(are those v)3.224 +F .724(alid for the)-.25 F F1(com-)3.224 E(plete)144 333.6 Q F0 -.2(bu) +2.798 G .298(iltin described abo).2 F -.15(ve)-.15 G 5.297(.T).15 G(he) +-5.297 E F12.797 E F0 .297 +(option indicates that the remaining options should apply to)2.797 F +1.227(the `)144 345.6 R(`def)-.74 E(ault')-.1 E 3.727('c)-.74 G 1.228(o\ +mmand completion; that is, completion attempted on a command for which \ +no)-3.727 F 2.178(completion has pre)144 357.6 R 2.178 +(viously been de\214ned.)-.25 F(The)7.178 E F14.678 E F0 2.177 +(option indicates that the remaining options)4.677 F(should apply to `) +144 369.6 Q(`empty')-.74 E 2.5('c)-.74 G +(ommand completion; that is, completion attempted on a blank line.)-2.5 +E .327(The return v)108 386.4 R .327(alue is true unless an in)-.25 F +-.25(va)-.4 G .327 +(lid option is supplied, an attempt is made to modify the options for a) +.25 F F2(name)108 398.4 Q F0(for which no completion speci\214cation e) +2.5 E(xists, or an output error occurs.)-.15 E F1(continue)108 415.2 Q +F0([)2.5 E F2(n)A F0(])A 1.754(Resume the ne)144 427.2 R 1.754 +(xt iteration of the enclosing)-.15 F F1 -.25(fo)4.254 G(r).25 E F0(,)A +F1(while)4.254 E F0(,)A F1(until)4.254 E F0 4.254(,o)C(r)-4.254 E F1 +(select)4.254 E F0 4.253(loop. If)4.254 F F2(n)4.613 E F0 1.753 +(is speci\214ed,)4.493 F 1.208(resume at the)144 439.2 R F2(n)3.709 E F0 +1.209(th enclosing loop.)B F2(n)6.569 E F0 1.209(must be)3.949 F/F4 10 +/Symbol SF3.709 E F0 3.709(1. If)3.709 F F2(n)4.069 E F0 1.209 +(is greater than the number of enclosing)3.949 F .514 +(loops, the last enclosing loop \(the `)144 451.2 R(`top-le)-.74 E -.15 +(ve)-.25 G(l').15 E 3.014('l)-.74 G .514(oop\) is resumed.)-3.014 F .513 +(The return v)5.513 F .513(alue is 0 unless)-.25 F F2(n)3.013 E F0(is) +3.013 E(not greater than or equal to 1.)144 463.2 Q F1(declar)108 480 Q +(e)-.18 E F0([)2.5 E F1(\255aAfFilrtux)A F0 2.5(][)C F1-2.5 E F0 +2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E F1 +(typeset)108 492 Q F0([)2.5 E F1(\255aAfFilrtux)A F0 2.5(][)C F1 +-2.5 E F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..]) +-2.5 E 1.264(Declare v)144 504 R 1.264(ariables and/or gi)-.25 F 1.564 +-.15(ve t)-.25 H 1.264(hem attrib).15 F 3.765(utes. If)-.2 F(no)3.765 E +F2(name)3.765 E F0 3.765(sa)C 1.265(re gi)-3.765 F -.15(ve)-.25 G 3.765 +(nt).15 G 1.265(hen display the v)-3.765 F 1.265(alues of)-.25 F -.25 +(va)144 516 S 3.483(riables. The).25 F F13.483 E F0 .983 +(option will display the attrib)3.483 F .983(utes and v)-.2 F .982 +(alues of each)-.25 F F2(name)3.482 E F0 5.982(.W).18 G(hen)-5.982 E F1 +3.482 E F0 .982(is used)3.482 F(with)144 528 Q F2(name)3.579 E F0 +(ar)3.579 E 1.079(guments, additional options are ignored.)-.18 F(When) +6.079 E F13.579 E F0 1.079(is supplied without)3.579 F F2(name) +3.58 E F0(ar)3.58 E(gu-)-.18 E .151(ments, it will display the attrib) +144 540 R .151(utes and v)-.2 F .151(alues of all v)-.25 F .15 +(ariables ha)-.25 F .15(ving the attrib)-.2 F .15 +(utes speci\214ed by the)-.2 F .046(additional options.)144 552 R .046 +(If no other options are supplied with)5.046 F F12.547 E F0(,)A F1 +(declar)2.547 E(e)-.18 E F0 .047(will display the attrib)2.547 F .047 +(utes and)-.2 F -.25(va)144 564 S 1.363(lues of all shell v).25 F 3.863 +(ariables. The)-.25 F F13.863 E F0 1.362 +(option will restrict the display to shell functions.)3.863 F(The)6.362 +E F13.862 E F0 2.422(option inhibits the display of function de\ +\214nitions; only the function name and attrib)144 576 R 2.423(utes are) +-.2 F 2.664(printed. If)144 588 R(the)2.664 E F1(extdeb)2.664 E(ug)-.2 E +F0 .164(shell option is enabled using)2.664 F F1(shopt)2.664 E F0 2.664 +(,t)C .163(he source \214le name and line number)-2.664 F 1.382 +(where the function is de\214ned are displayed as well.)144 600 R(The) +6.382 E F13.882 E F0 1.382(option implies)3.882 F F13.882 E +F0 6.382(.T)C 1.382(he follo)-6.382 F(wing)-.25 E .794 +(options can be used to restrict output to v)144 612 R .794 +(ariables with the speci\214ed attrib)-.25 F .793(ute or to gi)-.2 F +1.093 -.15(ve v)-.25 H(ariables)-.1 E(attrib)144 624 Q(utes:)-.2 E F1 +144 636 Q F0(Each)25.3 E F2(name)2.5 E F0(is an inde)2.5 E -.15 +(xe)-.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F1(Arrays)2.5 +E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1144 648 Q F0(Each)23.08 +E F2(name)2.5 E F0(is an associati)2.5 E .3 -.15(ve a)-.25 H(rray v).15 +E(ariable \(see)-.25 E F1(Arrays)2.5 E F0(abo)2.5 E -.15(ve)-.15 G(\).) +.15 E F1144 660 Q F0(Use function names only)26.97 E(.)-.65 E F1 +144 672 Q F0 .557(The v)27.52 F .558 +(ariable is treated as an inte)-.25 F .558(ger; arithmetic e)-.15 F -.25 +(va)-.25 G .558(luation \(see).25 F F3 .558(ARITHMETIC EV)3.058 F(ALU) +-1.215 E(A-)-.54 E(TION)180 684 Q F0(abo)2.25 E -.15(ve)-.15 G 2.5(\)i) +.15 G 2.5(sp)-2.5 G(erformed when the v)-2.5 E(ariable is assigned a v) +-.25 E(alue.)-.25 E F1144 696 Q F0 .91(When the v)27.52 F .909 +(ariable is assigned a v)-.25 F .909(alue, all upper)-.25 F .909 +(-case characters are con)-.2 F -.15(ve)-.4 G .909(rted to lo).15 F(wer) +-.25 E(-)-.2 E 2.5(case. The)180 708 R(upper)2.5 E(-case attrib)-.2 E +(ute is disabled.)-.2 E(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(5) +203.725 E 0 Cg EP +%%Page: 6 6 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF144 84 Q F0(Mak)25.86 E(e)-.1 E/F2 10 +/Times-Italic@0 SF(name)5.046 E F0 5.046(sr)C(eadonly)-5.046 E 7.546(.T) +-.65 G 2.546(hese names cannot then be assigned v)-7.546 F 2.547 +(alues by subsequent)-.25 F(assignment statements or unset.)180 96 Q F1 +144 108 Q F0(Gi)26.97 E .73 -.15(ve e)-.25 H(ach).15 E F2(name) +2.93 E F0(the)2.929 E F2(tr)2.929 E(ace)-.15 E F0(attrib)2.929 E 2.929 +(ute. T)-.2 F .429(raced functions inherit the)-.35 F F1(DEB)2.929 E(UG) +-.1 E F0(and)2.929 E F1(RETURN)2.929 E F0(traps from the calling shell.) +180 120 Q(The trace attrib)5 E(ute has no special meaning for v)-.2 E +(ariables.)-.25 E F1144 132 Q F0 .909(When the v)24.74 F .909 +(ariable is assigned a v)-.25 F .909(alue, all lo)-.25 F(wer)-.25 E .909 +(-case characters are con)-.2 F -.15(ve)-.4 G .91(rted to upper).15 F(-) +-.2 E 2.5(case. The)180 144 R(lo)2.5 E(wer)-.25 E(-case attrib)-.2 E +(ute is disabled.)-.2 E F1144 156 Q F0(Mark)25.3 E F2(name)2.5 E +F0 2.5(sf)C(or e)-2.5 E(xport to subsequent commands via the en)-.15 E +(vironment.)-.4 E .121(Using `+' instead of `\255' turns of)144 172.8 R +2.621(ft)-.25 G .121(he attrib)-2.621 F .121(ute instead, with the e)-.2 +F .12(xceptions that)-.15 F F1(+a)2.62 E F0 .12(may not be used)2.62 F +.644(to destro)144 184.8 R 3.144(ya)-.1 G 3.144(na)-3.144 G .644(rray v) +-3.144 F .644(ariable and)-.25 F F1(+r)3.145 E F0 .645(will not remo) +3.145 F .945 -.15(ve t)-.15 H .645(he readonly attrib).15 F 3.145 +(ute. When)-.2 F .645(used in a func-)3.145 F 1.945(tion, mak)144 196.8 +R 1.945(es each)-.1 F F2(name)4.445 E F0 1.945(local, as with the)4.445 +F F1(local)4.444 E F0 4.444(command. If)4.444 F 4.444(av)4.444 G 1.944 +(ariable name is follo)-4.694 F 1.944(wed by)-.25 F(=)144 208.8 Q F2 +(value)A F0 3.238(,t)C .738(he v)-3.238 F .738(alue of the v)-.25 F .738 +(ariable is set to)-.25 F F2(value)3.238 E F0 5.738(.T)C .738 +(he return v)-5.738 F .739(alue is 0 unless an in)-.25 F -.25(va)-.4 G +.739(lid option is).25 F .603 +(encountered, an attempt is made to de\214ne a function using)144 220.8 +R/F3 10/Courier@0 SF .603(\255f foo=bar)3.103 F F0 3.103(,a)C 3.103(na) +-3.103 G .603(ttempt is made to)-3.103 F 1.242(assign a v)144 232.8 R +1.242(alue to a readonly v)-.25 F 1.242 +(ariable, an attempt is made to assign a v)-.25 F 1.243 +(alue to an array v)-.25 F(ariable)-.25 E 1.386 +(without using the compound assignment syntax \(see)144 244.8 R F1 +(Arrays)3.886 E F0(abo)3.886 E -.15(ve)-.15 G 1.386(\), one of the).15 F +F2(names)3.886 E F0 1.386(is not a)3.886 F -.25(va)144 256.8 S .171 +(lid shell v).25 F .171(ariable name, an attempt is made to turn of)-.25 +F 2.671(fr)-.25 G .171(eadonly status for a readonly v)-2.671 F .172 +(ariable, an)-.25 F .96(attempt is made to turn of)144 268.8 R 3.46(fa) +-.25 G .96(rray status for an array v)-3.46 F .96 +(ariable, or an attempt is made to display a)-.25 F(non-e)144 280.8 Q +(xistent function with)-.15 E F12.5 E F0(.)A F1(dirs [+)108 297.6 +Q F2(n)A F1 2.5(][)C-2.5 E F2(n)A F1 2.5(][)C(\255cplv])-2.5 E F0 +-.4(Wi)144 309.6 S .328 +(thout options, displays the list of currently remembered directories.) +.4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238 +(single line with directory names separated by spaces.)144 321.6 R 1.238 +(Directories are added to the list with the)6.238 F F1(pushd)144 333.6 Q +F0(command; the)2.5 E F1(popd)2.5 E F0(command remo)2.5 E -.15(ve)-.15 G +2.5(se).15 G(ntries from the list.)-2.5 E F1(+)144 345.6 Q F2(n)A F0 +1.564(Displays the)25.3 F F2(n)4.064 E F0 1.565 +(th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F1 +(dirs)4.065 E F0 1.565(when in)4.065 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 357.6 Q F1144 369.6 Q F2 +(n)A F0 1.194(Displays the)25.3 F F2(n)3.694 E F0 1.194 +(th entry counting from the right of the list sho)B 1.194(wn by)-.25 F +F1(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E +(without options, starting with zero.)180 381.6 Q F1144 393.6 Q F0 +(Clears the directory stack by deleting all of the entries.)25.86 E F1 +144 405.6 Q F0 .324(Produces a longer listing; the def)27.52 F +.324(ault listing format uses a tilde to denote the home direc-)-.1 F +(tory)180 417.6 Q(.)-.65 E F1144 429.6 Q F0 +(Print the directory stack with one entry per line.)24.74 E F1144 +441.6 Q F0 .273(Print the directory stack with one entry per line, pre\ +\214xing each entry with its inde)25.3 F 2.772(xi)-.15 G 2.772(nt)-2.772 +G(he)-2.772 E(stack.)180 453.6 Q .257(The return v)144 470.4 R .258 +(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 +(lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe) +-.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-) +.15 F(tory stack.)144 482.4 Q F1(diso)108 499.2 Q(wn)-.1 E F0([)2.5 E F1 +(\255ar)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(jobspec)-2.5 E F0 +(...])2.5 E -.4(Wi)144 511.2 S .295(thout options, each).4 F F2(jobspec) +4.535 E F0 .295(is remo)3.105 F -.15(ve)-.15 G 2.795(df).15 G .295 +(rom the table of acti)-2.795 F .595 -.15(ve j)-.25 H 2.795(obs. If).15 +F F2(jobspec)4.535 E F0 .295(is not present,)3.105 F .422(and neither) +144 523.2 R F12.922 E F0(nor)2.922 E F12.922 E F0 .422 +(is supplied, the shell')2.922 F 2.922(sn)-.55 G .422(otion of the) +-2.922 F F2(curr)2.923 E .423(ent job)-.37 F F0 .423(is used.)2.923 F +.423(If the)5.423 F F12.923 E F0 .423(option is)2.923 F(gi)144 +535.2 Q -.15(ve)-.25 G .141(n, each).15 F F2(jobspec)4.381 E F0 .141 +(is not remo)2.951 F -.15(ve)-.15 G 2.641(df).15 G .141 +(rom the table, b)-2.641 F .141(ut is mark)-.2 F .141(ed so that)-.1 F +/F4 9/Times-Bold@0 SF(SIGHUP)2.641 E F0 .14(is not sent to the)2.39 F +.004(job if the shell recei)144 547.2 R -.15(ve)-.25 G 2.504(sa).15 G F4 +(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 .004(If no)4.504 F F2(jobspec) +4.244 E F0 .004(is present, and neither the)2.814 F F12.504 E F0 +.005(nor the)2.504 F F12.505 E F0 .005(option is)2.505 F 1.229 +(supplied, the)144 559.2 R F2(curr)3.729 E 1.229(ent job)-.37 F F0 1.229 +(is used.)3.729 F 1.229(If no)6.229 F F2(jobspec)5.469 E F0 1.229 +(is supplied, the)4.039 F F13.729 E F0 1.228(option means to remo) +3.729 F 1.528 -.15(ve o)-.15 H(r).15 E .656(mark all jobs; the)144 571.2 +R F13.156 E F0 .657(option without a)3.156 F F2(jobspec)4.897 E F0 +(ar)3.467 E .657(gument restricts operation to running jobs.)-.18 F(The) +5.657 E(return v)144 583.2 Q(alue is 0 unless a)-.25 E F2(jobspec)4.24 E +F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E F1(echo)108 600 Q +F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E +.395(Output the)144 612 R F2(ar)2.895 E(g)-.37 E F0 .395 +(s, separated by spaces, follo)B .395(wed by a ne)-.25 F 2.895 +(wline. The)-.25 F .394(return status is al)2.895 F -.1(wa)-.1 G .394 +(ys 0.).1 F(If)5.394 E F12.894 E F0 .548 +(is speci\214ed, the trailing ne)144 624 R .548(wline is suppressed.) +-.25 F .548(If the)5.548 F F13.048 E F0 .548(option is gi)3.048 F +-.15(ve)-.25 G .548(n, interpretation of the fol-).15 F(lo)144 636 Q +.053(wing backslash-escaped characters is enabled.)-.25 F(The)5.053 E F1 +2.553 E F0 .052(option disables the interpretation of these)2.552 +F 1.502(escape characters, e)144 648 R -.15(ve)-.25 G 4.002(no).15 G +4.002(ns)-4.002 G 1.502(ystems where the)-4.002 F 4.002(ya)-.15 G 1.502 +(re interpreted by def)-4.002 F 4.003(ault. The)-.1 F F1(xpg_echo)4.003 +E F0(shell)4.003 E .009 +(option may be used to dynamically determine whether or not)144 660 R F1 +(echo)2.509 E F0 -.15(ex)2.509 G .009(pands these escape characters).15 +F .659(by def)144 672 R(ault.)-.1 E F1(echo)5.659 E F0 .659 +(does not interpret)3.159 F F13.159 E F0 .659 +(to mean the end of options.)3.159 F F1(echo)5.66 E F0 .66 +(interprets the follo)3.16 F(wing)-.25 E(escape sequences:)144 684 Q F1 +(\\a)144 696 Q F0(alert \(bell\))28.22 E F1(\\b)144 708 Q F0(backspace) +27.66 E(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(6)203.725 E 0 Cg EP +%%Page: 7 7 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF(\\c)144 84 Q F0(suppress further output)28.78 E F1(\\e) +144 96 Q F0(an escape character)28.78 E F1(\\f)144 108 Q F0(form feed) +29.89 E F1(\\n)144 120 Q F0(ne)27.66 E 2.5(wl)-.25 G(ine)-2.5 E F1(\\r) +144 132 Q F0(carriage return)28.78 E F1(\\t)144 144 Q F0(horizontal tab) +29.89 E F1(\\v)144 156 Q F0 -.15(ve)28.22 G(rtical tab).15 E F1(\\\\)144 +168 Q F0(backslash)30.44 E F1(\\0)144 180 Q/F2 10/Times-Italic@0 SF(nnn) +A F0(the eight-bit character whose v)13.22 E(alue is the octal v)-.25 E +(alue)-.25 E F2(nnn)2.5 E F0(\(zero to three octal digits\))2.5 E F1 +(\\x)144 192 Q F2(HH)A F0(the eight-bit character whose v)13.78 E +(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0 +(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1 +(enable)108 208.8 Q F0([)2.5 E F1A F0 2.5(][)C F1(\255dnps)-2.5 E +F0 2.5(][)C F1-2.5 E F2(\214lename)2.5 E F0 2.5(][)C F2(name)-2.5 +E F0(...])2.5 E .278(Enable and disable b)144 220.8 R .278 +(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278 +(uiltin allo)-.2 F .278(ws a disk command which has)-.25 F .833 +(the same name as a shell b)144 232.8 R .834(uiltin to be e)-.2 F -.15 +(xe)-.15 G .834(cuted without specifying a full pathname, e).15 F -.15 +(ve)-.25 G 3.334(nt).15 G(hough)-3.334 E .99 +(the shell normally searches for b)144 244.8 R .989 +(uiltins before disk commands.)-.2 F(If)5.989 E F13.489 E F0 .989 +(is used, each)3.489 F F2(name)3.489 E F0 .989(is dis-)3.489 F 1.581 +(abled; otherwise,)144 256.8 R F2(names)4.082 E F0 1.582(are enabled.) +4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582(xample, to use the)-4.232 F +F1(test)4.082 E F0 1.582(binary found via the)4.082 F/F3 9/Times-Bold@0 +SF -.666(PA)4.082 G(TH)-.189 E F0 .081(instead of the shell b)144 268.8 +R .081(uiltin v)-.2 F .081(ersion, run)-.15 F/F4 10/Courier@0 SF .081 +(enable -n test)2.581 F F0 5.081(.T)C(he)-5.081 E F12.58 E F0 .08 +(option means to load the ne)2.58 F(w)-.25 E -.2(bu)144 280.8 S 1.524 +(iltin command).2 F F2(name)4.384 E F0 1.524(from shared object)4.204 F +F2(\214lename)4.024 E F0 4.024(,o).18 G 4.024(ns)-4.024 G 1.524 +(ystems that support dynamic loading.)-4.024 F(The)144 292.8 Q F1 +2.867 E F0 .367(option will delete a b)2.867 F .367(uiltin pre)-.2 F +.367(viously loaded with)-.25 F F12.866 E F0 5.366(.I)C 2.866(fn) +-5.366 G(o)-2.866 E F2(name)2.866 E F0(ar)2.866 E .366(guments are gi) +-.18 F -.15(ve)-.25 G .366(n, or).15 F .398(if the)144 304.8 R F1 +2.898 E F0 .399(option is supplied, a list of shell b)2.899 F .399 +(uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4 +F .399(guments, the)-.18 F .099(list consists of all enabled shell b)144 +316.8 R 2.598(uiltins. If)-.2 F F12.598 E F0 .098 +(is supplied, only disabled b)2.598 F .098(uiltins are printed.)-.2 F +(If)5.098 E F12.598 E F0 1.916 +(is supplied, the list printed includes all b)144 328.8 R 1.916 +(uiltins, with an indication of whether or not each is)-.2 F 2.879 +(enabled. If)144 340.8 R F12.879 E F0 .379 +(is supplied, the output is restricted to the POSIX)2.879 F F2(special) +2.879 E F0 -.2(bu)2.878 G 2.878(iltins. The).2 F .378(return v)2.878 F +(alue)-.25 E .994(is 0 unless a)144 352.8 R F2(name)3.854 E F0 .994 +(is not a shell b)3.674 F .994(uiltin or there is an error loading a ne) +-.2 F 3.495(wb)-.25 G .995(uiltin from a shared)-3.695 F(object.)144 +364.8 Q F1 -2.3 -.15(ev a)108 381.6 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37 +E F0(...])2.5 E(The)144 393.6 Q F2(ar)3.171 E(g)-.37 E F0 3.171(sa)C +.671(re read and concatenated together into a single command.)-3.171 F +.67(This command is then read)5.67 F .495(and e)144 405.6 R -.15(xe)-.15 +G .495(cuted by the shell, and its e).15 F .495 +(xit status is returned as the v)-.15 F .495(alue of)-.25 F F1 -2.3 -.15 +(ev a)2.995 H(l).15 E F0 5.495(.I)C 2.995(ft)-5.495 G .495(here are no) +-2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 417.6 Q +(guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F1 +(exec)108 434.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1-2.5 E F2 +(name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E F2(ar)A(guments) +-.37 E F0(]])A(If)144 446.4 Q F2(command)3.006 E F0 .306 +(is speci\214ed, it replaces the shell.)3.576 F .305(No ne)5.305 F 2.805 +(wp)-.25 G .305(rocess is created.)-2.805 F(The)5.305 E F2(ar)3.135 E +(guments)-.37 E F0(become)3.075 E .176(the ar)144 458.4 R .176 +(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G +(he)-2.676 E F12.676 E F0 .176 +(option is supplied, the shell places a dash at the be)2.676 F .177 +(ginning of)-.15 F .5(the zeroth ar)144 470.4 R .5(gument passed to)-.18 +F F2(command)3 E F0 5.499(.T).77 G .499(his is what)-5.499 F F2(lo)2.999 +E(gin)-.1 E F0 .499(\(1\) does.).24 F(The)5.499 E F12.999 E F0 +.499(option causes)2.999 F F2(com-)3.199 E(mand)144 482.4 Q F0 .638 +(to be e)3.908 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138 +(vironment. If)-.4 F F13.138 E F0 .638 +(is supplied, the shell passes)3.138 F F2(name)3.499 E F0 .639(as the) +3.319 F 1.078(zeroth ar)144 494.4 R 1.077(gument to the e)-.18 F -.15 +(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F2(command)3.777 E F0 +1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077(cuted for some reason, a) +.15 F(non-interacti)144 506.4 Q .617 -.15(ve s)-.25 H .317(hell e).15 F +.317(xits, unless the shell option)-.15 F F1(execfail)2.817 E F0 .318 +(is enabled, in which case it returns f)2.817 F(ail-)-.1 E 2.505 +(ure. An)144 518.4 R(interacti)2.505 E .305 -.15(ve s)-.25 H .005 +(hell returns f).15 F .005(ailure if the \214le cannot be e)-.1 F -.15 +(xe)-.15 G 2.505(cuted. If).15 F F2(command)2.705 E F0 .005 +(is not speci\214ed,)3.275 F(an)144 530.4 Q 3.036(yr)-.15 G .536 +(edirections tak)-3.036 F 3.036(ee)-.1 G -.25(ff)-3.036 G .536 +(ect in the current shell, and the return status is 0.).25 F .536 +(If there is a redirection)5.536 F(error)144 542.4 Q 2.5(,t)-.4 G +(he return status is 1.)-2.5 E F1(exit)108 559.2 Q F0([)2.5 E F2(n)A F0 +6.29(]C)C .096(ause the shell to e)-6.29 F .096(xit with a status of) +-.15 F F2(n)2.596 E F0 5.096(.I)C(f)-5.096 E F2(n)2.955 E F0 .095 +(is omitted, the e)2.835 F .095(xit status is that of the last command) +-.15 F -.15(exe)144 571.2 S 2.5(cuted. A).15 F(trap on)2.5 E F3(EXIT)2.5 +E F0(is e)2.25 E -.15(xe)-.15 G(cuted before the shell terminates.).15 E +F1(export)108 588 Q F0([)2.5 E F1(\255fn)A F0 2.5(][).833 G F2(name)-2.5 +E F0([=)A F2(wor)A(d)-.37 E F0(]] ...)A F1(export \255p)108 600 Q F0 +.256(The supplied)144 612 R F2(names)3.117 E F0 .257(are mark)3.027 F +.257(ed for automatic e)-.1 F .257(xport to the en)-.15 F .257 +(vironment of subsequently e)-.4 F -.15(xe)-.15 G(cuted).15 E 2.627 +(commands. If)144 624 R(the)2.627 E F12.627 E F0 .127 +(option is gi)2.627 F -.15(ve)-.25 G .127(n, the).15 F F2(names)2.987 E +F0 .127(refer to functions.)2.897 F .127(If no)5.127 F F2(names)2.987 E +F0 .127(are gi)2.897 F -.15(ve)-.25 G .126(n, or if the).15 F F1 +144 636 Q F0 .659(option is supplied, a list of all names that are e) +3.159 F .66(xported in this shell is printed.)-.15 F(The)5.66 E F1 +3.16 E F0(option)3.16 E 1.587(causes the e)144 648 R 1.587 +(xport property to be remo)-.15 F -.15(ve)-.15 G 4.086(df).15 G 1.586 +(rom each)-4.086 F F2(name)4.086 E F0 6.586(.I)C 4.086(fav)-6.586 G +1.586(ariable name is follo)-4.336 F 1.586(wed by)-.25 F(=)144 660 Q F2 +(wor)A(d)-.37 E F0 2.803(,t)C .303(he v)-2.803 F .303(alue of the v)-.25 +F .304(ariable is set to)-.25 F F2(wor)2.804 E(d)-.37 E F0(.)A F1 +(export)5.304 E F0 .304(returns an e)2.804 F .304 +(xit status of 0 unless an in)-.15 F -.25(va)-.4 G(lid).25 E .294 +(option is encountered, one of the)144 672 R F2(names)2.793 E F0 .293 +(is not a v)2.793 F .293(alid shell v)-.25 F .293(ariable name, or)-.25 +F F12.793 E F0 .293(is supplied with a)2.793 F F2(name)144.36 684 +Q F0(that is not a function.)2.68 E F1(fc)108 700.8 Q F0([)2.5 E F1 +A F2(ename)2.5 E F0 2.5(][)C F1(\255lnr)-2.5 E F0 2.5(][)C F2 +<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F2(last)-2.5 E F0(])A(GNU Bash-4.0)72 +768 Q(2004 Apr 20)148.735 E(7)203.725 E 0 Cg EP +%%Page: 8 8 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF(fc \255s)108 84 Q F0([)2.5 E/F2 10/Times-Italic@0 SF +(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2(cmd)-2.5 E F0(])A .477 +(Fix Command.)144 96 R .478 +(In the \214rst form, a range of commands from)5.477 F F2<8c72>4.888 E +(st)-.1 E F0(to)3.658 E F2(last)3.068 E F0 .478 +(is selected from the his-)3.658 F .882(tory list.)144 108 R F2 -.45(Fi) +5.882 G -.1(rs).45 G(t).1 E F0(and)4.062 E F2(last)3.472 E F0 .882 +(may be speci\214ed as a string \(to locate the last command be)4.062 F +.881(ginning with)-.15 F .797(that string\) or as a number \(an inde)144 +120 R 3.297(xi)-.15 G .797(nto the history list, where a ne)-3.297 F +-.05(ga)-.15 G(ti).05 E 1.097 -.15(ve n)-.25 H .797(umber is used as an) +.15 F(of)144 132 Q .277(fset from the current command number\).)-.25 F +(If)5.277 E F2(last)2.867 E F0 .276 +(is not speci\214ed it is set to the current command)3.457 F .092 +(for listing \(so that)144 144 R/F3 10/Courier@0 SF .092 +(fc \255l \25510)2.592 F F0 .092(prints the last 10 commands\) and to) +2.592 F F2<8c72>4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F2<8c72> +4.502 E(st)-.1 E F0 .093(is not)3.273 F +(speci\214ed it is set to the pre)144 156 Q +(vious command for editing and \25516 for listing.)-.25 E(The)144 180 Q +F12.522 E F0 .022 +(option suppresses the command numbers when listing.)2.522 F(The)5.022 E +F12.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022 +(rses the order of).15 F .438(the commands.)144 192 R .438(If the)5.438 +F F12.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438 +(n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E +.335(the editor gi)144 204 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E F2 +(ename)3.025 E F0 .335(is in)3.015 F -.2(vo)-.4 G -.1(ke).2 G 2.835(do) +.1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835 F +(If)5.334 E F2(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G +(n,).15 E .63(the v)144 216 R .63(alue of the)-.25 F/F4 9/Times-Bold@0 +SF(FCEDIT)3.13 E F0 -.25(va)2.88 G .631(riable is used, and the v).25 F +.631(alue of)-.25 F F4(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F4(FCEDIT) +3.131 E F0 .631(is not set.)2.881 F .631(If nei-)5.631 F 1.884(ther v) +144 228 R 1.884(ariable is set, is used.)-.25 F 1.884 +(When editing is complete, the edited commands are echoed and)6.884 F +-.15(exe)144 240 S(cuted.).15 E .039(In the second form,)144 264 R F2 +(command)2.539 E F0 .039(is re-e)2.539 F -.15(xe)-.15 G .039 +(cuted after each instance of).15 F F2(pat)2.54 E F0 .04(is replaced by) +2.54 F F2 -.37(re)2.54 G(p).37 E F0 5.04(.A)C(useful)-2.5 E .406 +(alias to use with this is)144 276 R F3 .406(r='fc \255s')2.906 F F0 +2.906(,s)C 2.906(ot)-2.906 G .406(hat typing)-2.906 F F3 6.406(rc)2.906 +G(c)-6.406 E F0 .406(runs the last command be)2.906 F .406(ginning with) +-.15 F F3(cc)144 288 Q F0(and typing)2.5 E F3(r)2.5 E F0(re-e)2.5 E -.15 +(xe)-.15 G(cutes the last command.).15 E .142 +(If the \214rst form is used, the return v)144 312 R .142 +(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142 +(lid option is encountered or).25 F F2<8c72>4.552 E(st)-.1 E F0(or)3.322 +E F2(last)2.732 E F0 .455(specify history lines out of range.)144 324 R +.454(If the)5.454 F F12.954 E F0 .454 +(option is supplied, the return v)2.954 F .454(alue is the v)-.25 F .454 +(alue of the)-.25 F .787(last command e)144 336 R -.15(xe)-.15 G .787 +(cuted or f).15 F .788 +(ailure if an error occurs with the temporary \214le of commands.)-.1 F +.788(If the)5.788 F 1.136 +(second form is used, the return status is that of the command re-e)144 +348 R -.15(xe)-.15 G 1.135(cuted, unless).15 F F2(cmd)3.835 E F0 1.135 +(does not)4.405 F(specify a v)144 360 Q +(alid history line, in which case)-.25 E F1(fc)2.5 E F0(returns f)2.5 E +(ailure.)-.1 E F1(fg)108 376.8 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume) +144 388.8 Q F2(jobspec)5.653 E F0 1.413(in the fore)4.223 F 1.413 +(ground, and mak)-.15 F 3.913(ei)-.1 G 3.913(tt)-3.913 G 1.413 +(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F2(jobspec)5.653 E F0 +1.414(is not present, the)4.223 F(shell')144 400.8 Q 3.117(sn)-.55 G +.617(otion of the)-3.117 F F2(curr)3.117 E .617(ent job)-.37 F F0 .617 +(is used.)3.117 F .617(The return v)5.617 F .616 +(alue is that of the command placed into the)-.25 F(fore)144 412.8 Q +.362(ground, or f)-.15 F .362 +(ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .363 +(hen run with job control enabled, if)-2.862 F F2(jobspec)145.74 424.8 Q +F0 .004(does not specify a v)2.815 F .004(alid job or)-.25 F F2(jobspec) +4.244 E F0 .004(speci\214es a job that w)2.814 F .004 +(as started without job control.)-.1 F F1(getopts)108 441.6 Q F2 +(optstring name)2.5 E F0([)2.5 E F2(ar)A(gs)-.37 E F0(])A F1(getopts)144 +453.6 Q F0 .793 +(is used by shell procedures to parse positional parameters.)3.293 F F2 +(optstring)6.023 E F0 .793(contains the option)3.513 F .15 +(characters to be recognized; if a character is follo)144 465.6 R .149 +(wed by a colon, the option is e)-.25 F .149(xpected to ha)-.15 F .449 +-.15(ve a)-.2 H(n).15 E(ar)144 477.6 Q .578 +(gument, which should be separated from it by white space.)-.18 F .579 +(The colon and question mark char)5.579 F(-)-.2 E 1.665 +(acters may not be used as option characters.)144 489.6 R 1.665 +(Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F1(getopts) +4.165 E F0 1.665(places the ne)4.165 F(xt)-.15 E .796 +(option in the shell v)144 501.6 R(ariable)-.25 E F2(name)3.296 E F0 +3.296(,i).18 G(nitializing)-3.296 E F2(name)3.657 E F0 .797 +(if it does not e)3.477 F .797(xist, and the inde)-.15 F 3.297(xo)-.15 G +3.297(ft)-3.297 G .797(he ne)-3.297 F(xt)-.15 E(ar)144 513.6 Q .085 +(gument to be processed into the v)-.18 F(ariable)-.25 E F4(OPTIND)2.585 +E/F5 9/Times-Roman@0 SF(.)A F4(OPTIND)4.585 E F0 .085 +(is initialized to 1 each time the shell)2.335 F .845 +(or a shell script is in)144 525.6 R -.2(vo)-.4 G -.1(ke).2 G 3.345 +(d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E F1 +(getopts)3.346 E F0 .846(places that ar)3.346 F(gument)-.18 E .804 +(into the v)144 537.6 R(ariable)-.25 E F4(OPT)3.304 E(ARG)-.81 E F5(.)A +F0 .803(The shell does not reset)5.304 F F4(OPTIND)3.303 E F0 .803 +(automatically; it must be manually)3.053 F .293 +(reset between multiple calls to)144 549.6 R F1(getopts)2.793 E F0 .293 +(within the same shell in)2.793 F -.2(vo)-.4 G .293(cation if a ne).2 F +2.793(ws)-.25 G .294(et of parameters)-2.793 F(is to be used.)144 561.6 +Q 2.044(When the end of options is encountered,)144 585.6 R F1(getopts) +4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.043 +(alue greater than zero.)-.25 F F4(OPTIND)144 597.6 Q F0 +(is set to the inde)2.25 E 2.5(xo)-.15 G 2.5(ft)-2.5 G +(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0 +(is set to ?.)2.5 E F1(getopts)144 621.6 Q F0 2.392 +(normally parses the positional parameters, b)4.892 F 2.392 +(ut if more ar)-.2 F 2.393(guments are gi)-.18 F -.15(ve)-.25 G 4.893 +(ni).15 G(n)-4.893 E F2(ar)4.893 E(gs)-.37 E F0(,).27 E F1(getopts)144 +633.6 Q F0(parses those instead.)2.5 E F1(getopts)144 657.6 Q F0 1.166 +(can report errors in tw)3.666 F 3.665(ow)-.1 G 3.665(ays. If)-3.765 F +1.165(the \214rst character of)3.665 F F2(optstring)3.895 E F0 1.165 +(is a colon,)3.885 F F2(silent)4.005 E F0(error)4.345 E 1.263 +(reporting is used.)144 669.6 R 1.263 +(In normal operation diagnostic messages are printed when in)6.263 F +-.25(va)-.4 G 1.263(lid options or).25 F .394(missing option ar)144 +681.6 R .394(guments are encountered.)-.18 F .394(If the v)5.394 F +(ariable)-.25 E F4(OPTERR)2.894 E F0 .394 +(is set to 0, no error messages)2.644 F(will be displayed, e)144 693.6 Q +-.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E +F2(optstring)2.73 E F0(is not a colon.)2.72 E .666(If an in)144 717.6 R +-.25(va)-.4 G .666(lid option is seen,).25 F F1(getopts)3.166 E F0 .667 +(places ? into)3.167 F F2(name)3.527 E F0 .667 +(and, if not silent, prints an error message)3.347 F .4(and unsets)144 +729.6 R F4(OPT)2.9 E(ARG)-.81 E F5(.)A F0(If)4.899 E F1(getopts)2.899 E +F0 .399(is silent, the option character found is placed in)2.899 F F4 +(OPT)2.899 E(ARG)-.81 E F0 .399(and no)2.649 F(GNU Bash-4.0)72 768 Q +(2004 Apr 20)148.735 E(8)203.725 E 0 Cg EP +%%Page: 9 9 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E +(diagnostic message is printed.)144 84 Q 1.241(If a required ar)144 108 +R 1.241(gument is not found, and)-.18 F/F1 10/Times-Bold@0 SF(getopts) +3.741 E F0 1.241(is not silent, a question mark \()3.741 F F1(?).833 E +F0 3.742(\)i).833 G 3.742(sp)-3.742 G 1.242(laced in)-3.742 F/F2 10 +/Times-Italic@0 SF(name)144 120 Q F0(,).18 E/F3 9/Times-Bold@0 SF(OPT) +2.735 E(ARG)-.81 E F0 .234 +(is unset, and a diagnostic message is printed.)2.485 F(If)5.234 E F1 +(getopts)2.734 E F0 .234(is silent, then a colon \()2.734 F F1(:).833 E +F0(\)).833 E(is placed in)144 132 Q F2(name)2.86 E F0(and)2.68 E F3(OPT) +2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F1 +(getopts)144 156 Q F0 .902 +(returns true if an option, speci\214ed or unspeci\214ed, is found.) +3.401 F .902(It returns f)5.902 F .902(alse if the end of)-.1 F +(options is encountered or an error occurs.)144 168 Q F1(hash)108 184.8 +Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1-2.5 E F2(\214lename)2.5 E +F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F2(name)-2.5 E F0(])A -.15(Fo) +144 196.8 S 3.555(re).15 G(ach)-3.555 E F2(name)3.555 E F0 3.555(,t).18 +G 1.054(he full \214le name of the command is determined by searching t\ +he directories in)-3.555 F F1($P)144 208.8 Q -.95(AT)-.74 G(H).95 E F0 +.349(and remembered.)2.849 F .349(If the)5.349 F F12.849 E F0 .349 +(option is supplied, no path search is performed, and)2.849 F F2 +(\214lename)4.76 E F0 .452 +(is used as the full \214le name of the command.)144 220.8 R(The)5.452 E +F12.952 E F0 .452(option causes the shell to for)2.952 F .452 +(get all remem-)-.18 F .592(bered locations.)144 232.8 R(The)5.592 E F1 +3.092 E F0 .593(option causes the shell to for)3.092 F .593 +(get the remembered location of each)-.18 F F2(name)3.093 E F0(.)A .021 +(If the)144 244.8 R F12.521 E F0 .021 +(option is supplied, the full pathname to which each)2.521 F F2(name) +2.52 E F0 .02(corresponds is printed.)2.52 F .02(If multi-)5.02 F(ple) +144 256.8 Q F2(name)3.703 E F0(ar)3.703 E 1.203 +(guments are supplied with)-.18 F F13.703 E F0 3.703(,t)C(he) +-3.703 E F2(name)3.703 E F0 1.204 +(is printed before the hashed full pathname.)3.703 F(The)144 268.8 Q F1 +3.216 E F0 .715(option causes output to be displayed in a format \ +that may be reused as input.)3.216 F .715(If no ar)5.715 F(gu-)-.18 E +1.183(ments are gi)144 280.8 R -.15(ve)-.25 G 1.183(n, or if only).15 F +F13.683 E F0 1.184 +(is supplied, information about remembered commands is printed.)3.684 F +(The return status is true unless a)144 292.8 Q F2(name)2.86 E F0 +(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.).25 +E F1(help)108 309.6 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F2(pattern) +-2.5 E F0(])A .867(Display helpful information about b)144 321.6 R .867 +(uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0 .866 +(is speci\214ed,)3.607 F F1(help)3.366 E F0(gi)3.366 E -.15(ve)-.25 G +3.366(sd).15 G(etailed)-3.366 E .306(help on all commands matching)144 +333.6 R F2(pattern)2.806 E F0 2.807(;o).24 G .307 +(therwise help for all the b)-2.807 F .307 +(uiltins and shell control struc-)-.2 F(tures is printed.)144 345.6 Q F1 +144 357.6 Q F0(Display a short description of each)24.74 E F2 +(pattern)2.5 E F1144 369.6 Q F0(Display the description of each) +21.97 E F2(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G(ormat) +-2.5 E F1144 381.6 Q F0 +(Display only a short usage synopsis for each)26.41 E F2(pattern)2.5 E +F0(The return status is 0 unless no command matches)108 393.6 Q F2 +(pattern)2.5 E F0(.).24 E F1(history [)108 410.4 Q F2(n)A F1(])A +(history \255c)108 422.4 Q(history \255d)108 434.4 Q F2(of)2.5 E(fset) +-.18 E F1(history \255anrw)108 446.4 Q F0([)2.5 E F2(\214lename)A F0(])A +F1(history \255p)108 458.4 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5 +(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 470.4 Q F2(ar)2.5 E(g) +-.37 E F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)144 +482.4 S .752 +(th no options, display the command history list with line numbers.).4 F +.752(Lines listed with a)5.752 F F1(*)3.251 E F0(ha)3.251 E -.15(ve)-.2 +G .38(been modi\214ed.)144 494.4 R .38(An ar)5.38 F .38(gument of)-.18 F +F2(n)3.24 E F0 .38(lists only the last)3.12 F F2(n)3.24 E F0 2.88 +(lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E F3(HISTTIMEFOR-) +2.881 E(MA)144 506.4 Q(T)-.855 E F0 .265 +(is set and not null, it is used as a format string for)2.515 F F2 +(strftime)2.764 E F0 .264(\(3\) to display the time stamp asso-)B 1.019 +(ciated with each displayed history entry)144 518.4 R 6.019(.N)-.65 G +3.519(oi)-6.019 G(nterv)-3.519 E 1.019 +(ening blank is printed between the formatted)-.15 F .176 +(time stamp and the history line.)144 530.4 R(If)5.176 E F2(\214lename) +2.676 E F0 .176 +(is supplied, it is used as the name of the history \214le; if)2.676 F +(not, the v)144 542.4 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0(is used.) +2.25 E(Options, if supplied, ha)5 E .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 554.4 Q F0 +(Clear the history list by deleting all the entries.)25.86 E F1144 +566.4 Q F2(of)2.5 E(fset)-.18 E F0(Delete the history entry at position) +180 578.4 Q F2(of)2.5 E(fset)-.18 E F0(.)A F1144 590.4 Q F0 .598 +(Append the `)25.3 F(`ne)-.74 E(w')-.25 E 3.098('h)-.74 G .598 +(istory lines \(history lines entered since the be)-3.098 F .599 +(ginning of the current)-.15 F F1(bash)180 602.4 Q F0 +(session\) to the history \214le.)2.5 E F1144 614.4 Q F0 .854(Rea\ +d the history lines not already read from the history \214le into the c\ +urrent history list.)24.74 F .772 +(These are lines appended to the history \214le since the be)180 626.4 R +.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E +(sion.)180 638.4 Q F1144 650.4 Q F0(Read the contents of the hist\ +ory \214le and use them as the current history)25.86 E(.)-.65 E F1 +144 662.4 Q F0(Write the current history to the history \214le, o)23.08 +E -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G +(ontents.)-2.5 E F1144 674.4 Q F0 .626 +(Perform history substitution on the follo)24.74 F(wing)-.25 E F2(ar) +3.125 E(gs)-.37 E F0 .625(and display the result on the standard)3.125 F +2.975(output. Does)180 686.4 R .475 +(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar) +2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F +(normal history e)180 698.4 Q(xpansion.)-.15 E F1144 710.4 Q F0 +.363(Store the)26.41 F F2(ar)3.193 E(gs)-.37 E F0 .363 +(in the history list as a single entry)3.133 F 5.363(.T)-.65 G .362 +(he last command in the history list is)-5.363 F(remo)180 722.4 Q -.15 +(ve)-.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0 +(are added.)2.77 E(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(9)203.725 +E 0 Cg EP +%%Page: 10 10 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E .145(If the) +144 84 R/F1 9/Times-Bold@0 SF(HISTTIMEFORMA)2.645 E(T)-.855 E F0 -.25 +(va)2.395 G .145 +(riable is set, the time stamp information associated with each history) +.25 F .669(entry is written to the history \214le, mark)144 96 R .669 +(ed with the history comment character)-.1 F 5.668(.W)-.55 G .668 +(hen the history)-5.668 F .955(\214le is read, lines be)144 108 R .956 +(ginning with the history comment character follo)-.15 F .956 +(wed immediately by a digit)-.25 F .416 +(are interpreted as timestamps for the pre)144 120 R .416 +(vious history line.)-.25 F .416(The return v)5.416 F .415 +(alue is 0 unless an in)-.25 F -.25(va)-.4 G(lid).25 E .499(option is e\ +ncountered, an error occurs while reading or writing the history \214le\ +, an in)144 132 R -.25(va)-.4 G(lid).25 E/F2 10/Times-Italic@0 SF(of)3 E +(fset)-.18 E F0(is)3 E(supplied as an ar)144 144 Q(gument to)-.18 E/F3 +10/Times-Bold@0 SF2.5 E F0 2.5(,o)C 2.5(rt)-2.5 G(he history e) +-2.5 E(xpansion supplied as an ar)-.15 E(gument to)-.18 E F32.5 E +F0 -.1(fa)2.5 G(ils.).1 E F3(jobs)108 160.8 Q F0([)2.5 E F3(\255lnprs)A +F0 2.5(][)C F2(jobspec)A F0(... ])2.5 E F3(jobs \255x)108 172.8 Q F2 +(command)2.5 E F0([)2.5 E F2(ar)2.5 E(gs)-.37 E F0(... ])2.5 E +(The \214rst form lists the acti)144 184.8 Q .3 -.15(ve j)-.25 H 2.5 +(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F3144 196.8 Q F0 +(List process IDs in addition to the normal information.)27.52 E F3 +144 208.8 Q F0(List only the process ID of the job')24.74 E 2.5 +(sp)-.55 G(rocess group leader)-2.5 E(.)-.55 E F3144 220.8 Q F0 +.194(Display information only about jobs that ha)24.74 F .494 -.15(ve c) +-.2 H .193(hanged status since the user w).15 F .193(as last noti-)-.1 F +(\214ed of their status.)180 232.8 Q F3144 244.8 Q F0 +(Restrict output to running jobs.)25.86 E F3144 256.8 Q F0 +(Restrict output to stopped jobs.)26.41 E(If)144 273.6 Q F2(jobspec) +4.553 E F0 .313(is gi)3.123 F -.15(ve)-.25 G .313 +(n, output is restricted to information about that job).15 F 5.314(.T) +-.4 G .314(he return status is 0 unless)-5.314 F(an in)144 285.6 Q -.25 +(va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G(lid).25 +E F2(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 302.4 R F3 +2.895 E F0 .394(option is supplied,)2.894 F F3(jobs)2.894 E F0 +.394(replaces an)2.894 F(y)-.15 E F2(jobspec)4.634 E F0 .394(found in) +3.204 F F2(command)3.094 E F0(or)3.664 E F2(ar)3.224 E(gs)-.37 E F0 .394 +(with the corre-)3.164 F(sponding process group ID, and e)144 314.4 Q +-.15(xe)-.15 G(cutes).15 E F2(command)2.7 E F0(passing it)3.27 E F2(ar) +2.5 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 E +F3(kill)108 331.2 Q F0([)2.5 E F3A F2(sigspec)2.5 E F0(|)2.5 E F3 +2.5 E F2(signum)2.5 E F0(|)2.5 E F32.5 E F2(sigspec)A F0 2.5 +(][)C F2(pid)-2.5 E F0(|)2.5 E F2(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F3 +(kill \255l)108 343.2 Q F0([)2.5 E F2(sigspec)A F0(|)2.5 E F2 -.2(ex)2.5 +G(it_status).2 E F0(])A .119(Send the signal named by)144 355.2 R F2 +(sigspec)2.959 E F0(or)2.929 E F2(signum)2.959 E F0 .119 +(to the processes named by)2.939 F F2(pid)3.87 E F0(or)3.39 E F2 +(jobspec)2.62 E F0(.).31 E F2(sigspec)5.46 E F0(is)2.93 E .319 +(either a case-insensiti)144 367.2 R .619 -.15(ve s)-.25 H .319 +(ignal name such as).15 F F1(SIGKILL)2.819 E F0 .318 +(\(with or without the)2.569 F F1(SIG)2.818 E F0 .318 +(pre\214x\) or a signal)2.568 F(number;)144 379.2 Q F2(signum)4.188 E F0 +1.349(is a signal number)4.168 F 6.349(.I)-.55 G(f)-6.349 E F2(sigspec) +4.189 E F0 1.349(is not present, then)4.159 F F1(SIGTERM)3.849 E F0 +1.349(is assumed.)3.599 F(An)6.349 E(ar)144 391.2 Q .523(gument of)-.18 +F F33.023 E F0 .523(lists the signal names.)3.023 F .523(If an) +5.523 F 3.023(ya)-.15 G -.18(rg)-3.023 G .523(uments are supplied when) +.18 F F33.023 E F0 .523(is gi)3.023 F -.15(ve)-.25 G .523 +(n, the names).15 F .28(of the signals corresponding to the ar)144 403.2 +R .28(guments are listed, and the return status is 0.)-.18 F(The)5.28 E +F2 -.2(ex)2.78 G(it_status).2 E F0(ar)144 415.2 Q .378(gument to)-.18 F +F32.878 E F0 .378 +(is a number specifying either a signal number or the e)2.878 F .377 +(xit status of a process termi-)-.15 F .593(nated by a signal.)144 427.2 +R F3(kill)5.593 E F0 .593(returns true if at least one signal w)3.093 F +.593(as successfully sent, or f)-.1 F .594(alse if an error)-.1 F +(occurs or an in)144 439.2 Q -.25(va)-.4 G(lid option is encountered.) +.25 E F3(let)108 456 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A(g)-.37 E +F0(...])2.5 E(Each)144 468 Q F2(ar)3.027 E(g)-.37 E F0 .197 +(is an arithmetic e)2.917 F .197(xpression to be e)-.15 F -.25(va)-.25 G +.196(luated \(see).25 F F1 .196(ARITHMETIC EV)2.696 F(ALU)-1.215 E -.855 +(AT)-.54 G(ION).855 E F0(abo)2.446 E -.15(ve)-.15 G 2.696(\). If).15 F +(the last)144 480 Q F2(ar)2.83 E(g)-.37 E F0 -.25(eva)2.72 G +(luates to 0,).25 E F3(let)2.5 E F0(returns 1; 0 is returned otherwise.) +2.5 E F3(local)108 496.8 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(name) +-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E -.15(Fo)144 508.8 S +2.56(re).15 G .06(ach ar)-2.56 F .06(gument, a local v)-.18 F .06 +(ariable named)-.25 F F2(name)2.92 E F0 .06(is created, and assigned) +2.74 F F2(value)2.56 E F0 5.06(.T).18 G(he)-5.06 E F2(option)2.56 E F0 +.06(can be)2.56 F(an)144 520.8 Q 3.153(yo)-.15 G 3.153(ft)-3.153 G .653 +(he options accepted by)-3.153 F F3(declar)3.153 E(e)-.18 E F0 5.652(.W) +C(hen)-5.652 E F3(local)3.152 E F0 .652 +(is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144 +532.8 Q F2(name)3.72 E F0 .86(to ha)3.54 F 1.16 -.15(ve a v)-.2 H .861 +(isible scope restricted to that function and its children.).15 F -.4 +(Wi)5.861 G .861(th no operands,).4 F F3(local)144 544.8 Q F0 1.165 +(writes a list of local v)3.665 F 1.165 +(ariables to the standard output.)-.25 F 1.165(It is an error to use) +6.165 F F3(local)3.664 E F0 1.164(when not)3.664 F .232 +(within a function.)144 556.8 R .233(The return status is 0 unless)5.232 +F F3(local)2.733 E F0 .233(is used outside a function, an in)2.733 F +-.25(va)-.4 G(lid).25 E F2(name)3.093 E F0(is)2.913 E(supplied, or)144 +568.8 Q F2(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F3 +(logout)108 585.6 Q F0(Exit a login shell.)9.33 E F3(map\214le)108 602.4 +Q F0([)2.5 E F3A F2(count)2.5 E F0 2.5(][)C F3-2.5 E F2 +(origin)2.5 E F0 2.5(][)C F3-2.5 E F2(count)2.5 E F0 2.5(][)C F3 +-2.5 E F0 2.5(][)C F3-2.5 E F2(fd)2.5 E F0 2.5(][)C F3 +-2.5 E F2(callbac)2.5 E(k)-.2 E F0 2.5(][)C F3-2.5 E F2(quantum) +2.5 E F0 2.5(][)C F2(arr)-2.5 E(ay)-.15 E F0(])A F3 -.18(re)108 614.4 S +(adarray).18 E F0([)2.5 E F3A F2(count)2.5 E F0 2.5(][)C F3 +-2.5 E F2(origin)2.5 E F0 2.5(][)C F3-2.5 E F2(count)2.5 E F0 2.5 +(][)C F3-2.5 E F0 2.5(][)C F3-2.5 E F2(fd)2.5 E F0 2.5(][)C +F3-2.5 E F2(callbac)2.5 E(k)-.2 E F0 2.5(][)C F3-2.5 E F2 +(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E(ay)-.15 E F0(])A .351 +(Read lines from the standard input into the inde)144 626.4 R -.15(xe) +-.15 G 2.851(da).15 G .351(rray v)-2.851 F(ariable)-.25 E F2(arr)2.85 E +(ay)-.15 E F0 2.85(,o).32 G 2.85(rf)-2.85 G .35(rom \214le descriptor) +-2.85 F F2(fd)2.85 E F0 1.248(if the)144 638.4 R F33.748 E F0 +1.248(option is supplied.)3.748 F 1.249(The v)6.249 F(ariable)-.25 E F1 +(MAPFILE)3.749 E F0 1.249(is the def)3.499 F(ault)-.1 E F2(arr)3.749 E +(ay)-.15 E F0 6.249(.O)C 1.249(ptions, if supplied,)-6.249 F(ha)144 +650.4 Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F3 +144 662.4 Q F0(Cop)24.74 E 2.5(ya)-.1 G 2.5(tm)-2.5 G(ost)-2.5 E F2 +(count)2.7 E F0 2.5(lines. If)3.18 F F2(count)2.5 E F0 +(is 0, all lines are copied.)2.5 E F3144 674.4 Q F0(Be)22.52 E +(gin assigning to)-.15 E F2(arr)2.83 E(ay)-.15 E F0(at inde)2.82 E(x) +-.15 E F2(origin)2.5 E F0 5(.T).24 G(he def)-5 E(ault inde)-.1 E 2.5(xi) +-.15 G 2.5(s0)-2.5 G(.)-2.5 E F3144 686.4 Q F0 +(Discard the \214rst)26.41 E F2(count)2.5 E F0(lines read.)2.5 E F3 +144 698.4 Q F0(Remo)26.97 E .3 -.15(ve a t)-.15 H(railing ne).15 E +(wline from each line read.)-.25 E F3144 710.4 Q F0 +(Read lines from \214le descriptor)24.74 E F2(fd)2.5 E F0 +(instead of the standard input.)2.5 E(GNU Bash-4.0)72 768 Q(2004 Apr 20) +148.735 E(10)198.725 E 0 Cg EP +%%Page: 11 11 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF144 84 Q F0(Ev)23.08 E(aluate)-.25 E/F2 10 +/Times-Italic@0 SF(callbac)2.7 E(k)-.2 E F0(each time)3.17 E F2(quantum) +2.5 E F0(lines are read.)2.5 E(The)5 E F12.5 E F0 +(option speci\214es)2.5 E F2(quantum)2.5 E F0(.).32 E F1144 96 Q +F0(Specify the number of lines read between each call to)25.86 E F2 +(callbac)2.5 E(k)-.2 E F0(.).67 E(If)144 112.8 Q F12.968 E F0 .467 +(is speci\214ed without)2.967 F F12.967 E F0 2.967(,t)C .467 +(he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F2 +(callbac)2.967 E(k)-.2 E F0 .467(is e)2.967 F -.25(va)-.25 G .467 +(luated, it is sup-).25 F 1.22(plied the inde)144 124.8 R 3.72(xo)-.15 G +3.72(ft)-3.72 G 1.22(he ne)-3.72 F 1.22 +(xt array element to be assigned as an additional ar)-.15 F(gument.)-.18 +E F2(callbac)6.22 E(k)-.2 E F0(is)3.72 E -.25(eva)144 136.8 S +(luated after the line is read b).25 E +(ut before the array element is assigned.)-.2 E +(If not supplied with an e)144 153.6 Q(xplicit origin,)-.15 E F1 +(map\214le)2.5 E F0(will clear)2.5 E F2(arr)2.5 E(ay)-.15 E F0 +(before assigning to it.)2.5 E F1(map\214le)144 170.4 Q F0 1.906 +(returns successfully unless an in)4.406 F -.25(va)-.4 G 1.905 +(lid option or option ar).25 F 1.905(gument is supplied,)-.18 F F2(arr) +4.405 E(ay)-.15 E F0(is)4.405 E(in)144 182.4 Q -.25(va)-.4 G +(lid or unassignable, or if).25 E F2(arr)2.5 E(ay)-.15 E F0 +(is not an inde)2.5 E -.15(xe)-.15 G 2.5(da).15 G(rray)-2.5 E(.)-.65 E +F1(popd)108 199.2 Q F0<5bad>2.5 E F1(n)A F0 2.5(][)C(+)-2.5 E F2(n)A F0 +2.5(][)C-2.5 E F2(n)A F0(])A(Remo)144 211.2 Q -.15(ve)-.15 G 2.799 +(se).15 G .299(ntries from the directory stack.)-2.799 F -.4(Wi)5.299 G +.299(th no ar).4 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15 +G .3(he top directory from the)-2.799 F 1.479(stack, and performs a)144 +223.2 R F1(cd)3.979 E F0 1.479(to the ne)3.979 F 3.979(wt)-.25 G 1.479 +(op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.478 +(uments, if supplied, ha).18 F 1.778 -.15(ve t)-.2 H 1.478(he follo).15 +F(wing)-.25 E(meanings:)144 235.2 Q F1144 247.2 Q F0 .551 +(Suppresses the normal change of directory when remo)24.74 F .551 +(ving directories from the stack, so)-.15 F +(that only the stack is manipulated.)180 259.2 Q F1(+)144 271.2 Q F2(n)A +F0(Remo)25.3 E -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F2(n)2.64 E F0 +.14(th entry counting from the left of the list sho)B .14(wn by)-.25 F +F1(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180 +283.2 S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0 +(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,) +-.65 E F3(popd +1)2.5 E F0(the second.)2.5 E F1144 295.2 Q F2(n)A F0 +(Remo)25.3 E -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F2(n)3.759 E F0 +1.259(th entry counting from the right of the list sho)B 1.26(wn by)-.25 +F F1(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5(zero. F)180 +307.2 R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0(remo)2.5 E -.15 +(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 E F3(popd -1)2.5 +E F0(the ne)2.5 E(xt to last.)-.15 E .644(If the)144 324 R F1(popd)3.144 +E F0 .644(command is successful, a)3.144 F F1(dirs)3.143 E F0 .643 +(is performed as well, and the return status is 0.)3.143 F F1(popd)5.643 +E F0 .415(returns f)144 336 R .415(alse if an in)-.1 F -.25(va)-.4 G +.415(lid option is encountered, the directory stack is empty).25 F 2.916 +(,an)-.65 G(on-e)-2.916 E .416(xistent direc-)-.15 F +(tory stack entry is speci\214ed, or the directory change f)144 348 Q +(ails.)-.1 E F1(printf)108 364.8 Q F0([)2.5 E F1A F2(var)2.5 E F0 +(])A F2(format)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A .372 +(Write the formatted)144 376.8 R F2(ar)2.872 E(guments)-.37 E F0 .372 +(to the standard output under the control of the)2.872 F F2(format)2.872 +E F0 5.372(.T)C(he)-5.372 E F2(format)2.872 E F0 1.804(is a character s\ +tring which contains three types of objects: plain characters, which ar\ +e simply)144 388.8 R .159 +(copied to standard output, character escape sequences, which are con) +144 400.8 R -.15(ve)-.4 G .158(rted and copied to the stan-).15 F .499(\ +dard output, and format speci\214cations, each of which causes printing\ + of the ne)144 412.8 R .5(xt successi)-.15 F -.15(ve)-.25 G F2(ar)3.15 E +(gu-)-.37 E(ment)144 424.8 Q F0 5.424(.I)C 2.924(na)-5.424 G .424 +(ddition to the standard)-2.924 F F2(printf)2.924 E F0 .424 +(\(1\) formats,)B F1(%b)2.924 E F0(causes)2.923 E F1(printf)2.923 E F0 +.423(to e)2.923 F .423(xpand backslash escape)-.15 F .976 +(sequences in the corresponding)144 436.8 R F2(ar)3.476 E(gument)-.37 E +F0(\(e)3.476 E .976(xcept that)-.15 F F1(\\c)3.476 E F0 .976 +(terminates output, backslashes in)3.476 F F1<5c08>3.477 E F0(,)A F1 +(\\")3.477 E F0(,)A(and)144 448.8 Q F1(\\?)3.422 E F0 .922(are not remo) +3.422 F -.15(ve)-.15 G .922(d, and octal escapes be).15 F .922 +(ginning with)-.15 F F1(\\0)3.422 E F0 .921 +(may contain up to four digits\), and)3.422 F F1(%q)144 460.8 Q F0 +(causes)3.63 E F1(printf)3.63 E F0 1.13(to output the corresponding)3.63 +F F2(ar)3.631 E(gument)-.37 E F0 1.131 +(in a format that can be reused as shell)3.631 F(input.)144 472.8 Q(The) +144 496.8 Q F12.904 E F0 .404 +(option causes the output to be assigned to the v)2.904 F(ariable)-.25 E +F2(var)2.904 E F0 .404(rather than being printed to the)2.904 F +(standard output.)144 508.8 Q(The)144 532.8 Q F2(format)3.423 E F0 .923 +(is reused as necessary to consume all of the)3.423 F F2(ar)3.423 E +(guments)-.37 E F0 5.923(.I)C 3.423(ft)-5.923 G(he)-3.423 E F2(format) +3.423 E F0 .924(requires more)3.424 F F2(ar)144 544.8 Q(guments)-.37 E +F0 .033(than are supplied, the e)2.534 F .033 +(xtra format speci\214cations beha)-.15 F .333 -.15(ve a)-.2 H 2.533(si) +.15 G 2.533(faz)-2.533 G .033(ero v)-2.533 F .033(alue or null string,) +-.25 F(as appropriate, had been supplied.)144 556.8 Q(The return v)5 E +(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd) +108 573.6 Q F0([)2.5 E F1A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C +-2.5 E F2(n)A F0(])A F1(pushd)108 585.6 Q F0([)2.5 E F1A F0 +2.5(][)C F2(dir)-2.5 E F0(])A .639(Adds a directory to the top of the d\ +irectory stack, or rotates the stack, making the ne)144 597.6 R 3.14(wt) +-.25 G .64(op of the)-3.14 F 1.316(stack the current w)144 609.6 R 1.316 +(orking directory)-.1 F 6.316(.W)-.65 G 1.315(ith no ar)-6.716 F 1.315 +(guments, e)-.18 F 1.315(xchanges the top tw)-.15 F 3.815(od)-.1 G 1.315 +(irectories and)-3.815 F .871 +(returns 0, unless the directory stack is empty)144 621.6 R 5.871(.A) +-.65 G -.18(rg)-5.871 G .872(uments, if supplied, ha).18 F 1.172 -.15 +(ve t)-.2 H .872(he follo).15 F .872(wing mean-)-.25 F(ings:)144 633.6 Q +F1144 645.6 Q F0 .902(Suppresses the normal change of directory w\ +hen adding directories to the stack, so that)24.74 F +(only the stack is manipulated.)180 657.6 Q F1(+)144 669.6 Q F2(n)A F0 +1.267(Rotates the stack so that the)25.3 F F2(n)3.767 E F0 1.268 +(th directory \(counting from the left of the list sho)B 1.268(wn by) +-.25 F F1(dirs)180 681.6 Q F0 2.5(,s)C +(tarting with zero\) is at the top.)-2.5 E F1144 693.6 Q F2(n)A F0 +.92(Rotates the stack so that the)25.3 F F2(n)3.42 E F0 .92 +(th directory \(counting from the right of the list sho)B .92(wn by)-.25 +F F1(dirs)180 705.6 Q F0 2.5(,s)C(tarting with zero\) is at the top.) +-2.5 E F2(dir)144.35 717.6 Q F0(Adds)23.98 E F2(dir)2.85 E F0 +(to the directory stack at the top, making it the ne)3.23 E 2.5(wc)-.25 +G(urrent w)-2.5 E(orking directory)-.1 E(.)-.65 E(GNU Bash-4.0)72 768 Q +(2004 Apr 20)148.735 E(11)198.725 E 0 Cg EP +%%Page: 12 12 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E .488(If the) +144 84 R/F1 10/Times-Bold@0 SF(pushd)2.988 E F0 .488 +(command is successful, a)2.988 F F1(dirs)2.988 E F0 .488 +(is performed as well.)2.988 F .489(If the \214rst form is used,)5.488 F +F1(pushd)2.989 E F0 1.04(returns 0 unless the cd to)144 96 R/F2 10 +/Times-Italic@0 SF(dir)3.89 E F0 -.1(fa)4.27 G 3.539(ils. W).1 F 1.039 +(ith the second form,)-.4 F F1(pushd)3.539 E F0 1.039 +(returns 0 unless the directory)3.539 F .846(stack is empty)144 108 R +3.346(,an)-.65 G(on-e)-3.346 E .847(xistent directory stack element is \ +speci\214ed, or the directory change to the)-.15 F(speci\214ed ne)144 +120 Q 2.5(wc)-.25 G(urrent directory f)-2.5 E(ails.)-.1 E F1(pwd)108 +136.8 Q F0([)2.5 E F1(\255LP)A F0(])A .845 +(Print the absolute pathname of the current w)144 148.8 R .845 +(orking directory)-.1 F 5.844(.T)-.65 G .844 +(he pathname printed contains no)-5.844 F .181(symbolic links if the)144 +160.8 R F12.681 E F0 .181(option is supplied or the)2.681 F F1 +.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F1 +(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264 +(enabled. If)144 172.8 R(the)3.264 E F13.264 E F0 .763 +(option is used, the pathname printed may contain symbolic links.)3.264 +F .763(The return)5.763 F 1.36(status is 0 unless an error occurs while\ + reading the name of the current directory or an in)144 184.8 R -.25(va) +-.4 G(lid).25 E(option is supplied.)144 196.8 Q F1 -.18(re)108 213.6 S +(ad).18 E F0([)3.817 E F1(\255ers)A F0 3.817(][)C F1-3.817 E F2 +(aname)3.817 E F0 3.817(][)C F1-3.817 E F2(delim)3.817 E F0 3.817 +(][)C F1-3.817 E F2(te)3.817 E(xt)-.2 E F0 3.817(][)C F1 +-3.817 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F1-3.816 E +F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F1-3.816 E F2(pr) +3.816 E(ompt)-.45 E F0 3.816(][)C F1-3.816 E F2(timeout)3.816 E F0 +3.816(][)C F1-3.816 E F2(fd)3.816 E F0(])A([)108 225.6 Q F2(name)A +F0(...])2.5 E .516(One line is read from the standard input, or from th\ +e \214le descriptor)144 237.6 R F2(fd)3.016 E F0 .516(supplied as an ar) +3.016 F .516(gument to)-.18 F(the)144 249.6 Q F12.538 E F0 .038 +(option, and the \214rst w)2.538 F .038(ord is assigned to the \214rst) +-.1 F F2(name)2.539 E F0 2.539(,t).18 G .039(he second w)-2.539 F .039 +(ord to the second)-.1 F F2(name)2.539 E F0(,).18 E .42 +(and so on, with lefto)144 261.6 R -.15(ve)-.15 G 2.92(rw).15 G .42 +(ords and their interv)-3.02 F .42 +(ening separators assigned to the last)-.15 F F2(name)2.92 E F0 5.42(.I) +.18 G 2.92(ft)-5.42 G(here)-2.92 E .54(are fe)144 273.6 R .54(wer w)-.25 +F .541(ords read from the input stream than names, the remaining names \ +are assigned empty)-.1 F -.25(va)144 285.6 S 2.511(lues. The).25 F .011 +(characters in)2.511 F/F3 9/Times-Bold@0 SF(IFS)2.511 E F0 .011 +(are used to split the line into w)2.261 F 2.511(ords. The)-.1 F .011 +(backslash character \()2.511 F F1(\\)A F0 2.51(\)m)C(ay)-2.51 E 1.89 +(be used to remo)144 297.6 R 2.19 -.15(ve a)-.15 H 2.19 -.15(ny s).15 H +1.891(pecial meaning for the ne).15 F 1.891 +(xt character read and for line continuation.)-.15 F +(Options, if supplied, ha)144 309.6 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 321.6 Q F2(aname)2.5 E F0 1.05(The w) +180 333.6 R 1.049 +(ords are assigned to sequential indices of the array v)-.1 F(ariable) +-.25 E F2(aname)3.549 E F0 3.549(,s).18 G 1.049(tarting at 0.)-3.549 F +F2(aname)180.33 345.6 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5 +-.25(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F2(name)2.5 E F0 +(ar)2.5 E(guments are ignored.)-.18 E F1144 357.6 Q F2(delim)2.5 E +F0(The \214rst character of)180 369.6 Q F2(delim)2.5 E F0 +(is used to terminate the input line, rather than ne)2.5 E(wline.)-.25 E +F1144 381.6 Q F0 .372 +(If the standard input is coming from a terminal,)25.86 F F1 -.18(re) +2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.873 E F0(abo)2.623 E +-.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E .218 +(to obtain the line.)180 393.6 R .218 +(Readline uses the current \(or def)5.218 F .218 +(ault, if line editing w)-.1 F .218(as not pre)-.1 F(viously)-.25 E +(acti)180 405.6 Q -.15(ve)-.25 G 2.5(\)e).15 G(diting settings.)-2.5 E +F1144 417.6 Q F2(te)2.5 E(xt)-.2 E F0(If)10.78 E F1 -.18(re)2.715 +G(adline).18 E F0 .216(is being used to read the line,)2.715 F F2(te) +2.716 E(xt)-.2 E F0 .216(is placed into the editing b)2.716 F(uf)-.2 E +.216(fer before edit-)-.25 F(ing be)180 429.6 Q(gins.)-.15 E F1144 +441.6 Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 453.6 S(ad).18 E +F0 1.395(returns after reading)3.895 F F2(nc)3.895 E(har)-.15 E(s)-.1 E +F0 1.395(characters rather than w)3.895 F 1.394 +(aiting for a complete line of)-.1 F(input, b)180 465.6 Q +(ut honor a delimiter if fe)-.2 E(wer than)-.25 E F2(nc)2.5 E(har)-.15 E +(s)-.1 E F0(characters are read before the delimiter)2.5 E(.)-.55 E F1 +144 477.6 Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 489.6 S +(ad).18 E F0 1.269(returns after reading e)3.769 F(xactly)-.15 E F2(nc) +3.769 E(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F +1.27(aiting for a complete)-.1 F .275 +(line of input, unless EOF is encountered or)180 501.6 R F1 -.18(re) +2.775 G(ad).18 E F0 .274(times out.)2.774 F .274 +(Delimiter characters encoun-)5.274 F 1.002 +(tered in the input are not treated specially and do not cause)180 513.6 +R F1 -.18(re)3.503 G(ad).18 E F0 1.003(to return until)3.503 F F2(nc) +3.503 E(har)-.15 E(s)-.1 E F0(characters are read.)180 525.6 Q F1 +144 537.6 Q F2(pr)2.5 E(ompt)-.45 E F0(Display)180 549.6 Q F2(pr)3.661 E +(ompt)-.45 E F0 1.161(on standard error)3.661 F 3.661(,w)-.4 G 1.161 +(ithout a trailing ne)-3.661 F 1.161(wline, before attempting to read) +-.25 F(an)180 561.6 Q 2.5(yi)-.15 G 2.5(nput. The)-2.5 F +(prompt is displayed only if input is coming from a terminal.)2.5 E F1 +144 573.6 Q F0 .543(Backslash does not act as an escape character) +25.86 F 5.543(.T)-.55 G .544(he backslash is considered to be part of) +-5.543 F(the line.)180 585.6 Q(In particular)5 E 2.5(,ab)-.4 G +(ackslash-ne)-2.5 E(wline pair may not be used as a line continuation.) +-.25 E F1144 597.6 Q F0(Silent mode.)26.41 E +(If input is coming from a terminal, characters are not echoed.)5 E F1 +144 609.6 Q F2(timeout)2.5 E F0(Cause)180 621.6 Q F1 -.18(re)3.549 +G(ad).18 E F0 1.048(to time out and return f)3.549 F 1.048 +(ailure if a complete line of input is not read within)-.1 F F2(timeout) +180 633.6 Q F0(seconds.)3.496 E F2(timeout)5.996 E F0 .997 +(may be a decimal number with a fractional portion follo)3.496 F(wing) +-.25 E .576(the decimal point.)180 645.6 R .576(This option is only ef) +5.576 F(fecti)-.25 E .876 -.15(ve i)-.25 H(f).15 E F1 -.18(re)3.076 G +(ad).18 E F0 .576(is reading input from a terminal,)3.076 F .141 +(pipe, or other special \214le; it has no ef)180 657.6 R .142 +(fect when reading from re)-.25 F .142(gular \214les.)-.15 F(If)5.142 E +F2(timeout)2.642 E F0 .142(is 0,)2.642 F F1 -.18(re)180 669.6 S(ad).18 E +F0 .113(returns success if input is a)2.614 F -.25(va)-.2 G .113 +(ilable on the speci\214ed \214le descriptor).25 F 2.613(,f)-.4 G .113 +(ailure otherwise.)-2.713 F(The e)180 681.6 Q +(xit status is greater than 128 if the timeout is e)-.15 E(xceeded.)-.15 +E F1144 693.6 Q F2(fd)2.5 E F0(Read input from \214le descriptor) +14.46 E F2(fd)2.5 E F0(.)A .191(If no)144 710.4 R F2(names)3.051 E F0 +.191(are supplied, the line read is assigned to the v)2.961 F(ariable) +-.25 E F3(REPL)2.692 E(Y)-.828 E/F4 9/Times-Roman@0 SF(.)A F0 .192 +(The return code is zero,)4.692 F 1.344 +(unless end-of-\214le is encountered,)144 722.4 R F1 -.18(re)3.844 G(ad) +.18 E F0 1.343 +(times out \(in which case the return code is greater than)3.844 F +(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(12)198.725 E 0 Cg EP +%%Page: 13 13 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E +(128\), or an in)144 84 Q -.25(va)-.4 G +(lid \214le descriptor is supplied as the ar).25 E(gument to)-.18 E/F1 +10/Times-Bold@0 SF2.5 E F0(.)A F1 -.18(re)108 100.8 S(adonly).18 E +F0([)2.5 E F1(\255aA)A(pf)-.25 E F0 2.5(][)C/F2 10/Times-Italic@0 SF +(name)-2.5 E F0([=)A F2(wor)A(d)-.37 E F0 2.5(].)C(..])-2.5 E .77 +(The gi)144 112.8 R -.15(ve)-.25 G(n).15 E F2(names)3.27 E F0 .77 +(are mark)3.27 F .77(ed readonly; the v)-.1 F .77(alues of these)-.25 F +F2(names)3.63 E F0 .77(may not be changed by subse-)3.54 F 1.097 +(quent assignment.)144 124.8 R 1.097(If the)6.097 F F13.597 E F0 +1.097(option is supplied, the functions corresponding to the)3.597 F F2 +(names)3.596 E F0 1.096(are so)3.596 F(mark)144 136.8 Q 3.334(ed. The) +-.1 F F13.334 E F0 .834(option restricts the v)3.334 F .834 +(ariables to inde)-.25 F -.15(xe)-.15 G 3.334(da).15 G .834(rrays; the) +-3.334 F F13.334 E F0 .834(option restricts the v)3.334 F(ari-) +-.25 E .538(ables to associati)144 148.8 R .838 -.15(ve a)-.25 H 3.038 +(rrays. If).15 F(no)3.038 E F2(name)3.398 E F0(ar)3.218 E .538 +(guments are gi)-.18 F -.15(ve)-.25 G .538(n, or if the).15 F F1 +3.038 E F0 .537(option is supplied, a list)3.038 F .08 +(of all readonly names is printed.)144 160.8 R(The)5.08 E F12.58 E +F0 .081(option causes output to be displayed in a format that may)2.58 F +1.177(be reused as input.)144 172.8 R 1.177(If a v)6.177 F 1.176 +(ariable name is follo)-.25 F 1.176(wed by =)-.25 F F2(wor)A(d)-.37 E F0 +3.676(,t)C 1.176(he v)-3.676 F 1.176(alue of the v)-.25 F 1.176 +(ariable is set to)-.25 F F2(wor)144 184.8 Q(d)-.37 E F0 6.205(.T)C +1.205(he return status is 0 unless an in)-6.205 F -.25(va)-.4 G 1.206 +(lid option is encountered, one of the).25 F F2(names)4.066 E F0 1.206 +(is not a)3.976 F -.25(va)144 196.8 S(lid shell v).25 E +(ariable name, or)-.25 E F12.5 E F0(is supplied with a)2.5 E F2 +(name)2.86 E F0(that is not a function.)2.68 E F1 -.18(re)108 213.6 S +(tur).18 E(n)-.15 E F0([)2.5 E F2(n)A F0(])A .587 +(Causes a function to e)144 225.6 R .587(xit with the return v)-.15 F +.587(alue speci\214ed by)-.25 F F2(n)3.087 E F0 5.587(.I).24 G(f)-5.587 +E F2(n)3.447 E F0 .586(is omitted, the return status is)3.327 F 1.335 +(that of the last command e)144 237.6 R -.15(xe)-.15 G 1.335 +(cuted in the function body).15 F 6.335(.I)-.65 G 3.835(fu)-6.335 G +1.335(sed outside a function, b)-3.835 F 1.335(ut during)-.2 F -.15(exe) +144 249.6 S .794(cution of a script by the).15 F F1(.)3.294 E F0(\() +5.794 E F1(sour)A(ce)-.18 E F0 3.294(\)c)C .794 +(ommand, it causes the shell to stop e)-3.294 F -.15(xe)-.15 G .794 +(cuting that script).15 F .245(and return either)144 261.6 R F2(n)3.105 +E F0 .246(or the e)2.985 F .246(xit status of the last command e)-.15 F +-.15(xe)-.15 G .246(cuted within the script as the e).15 F .246 +(xit sta-)-.15 F .082(tus of the script.)144 273.6 R .082 +(If used outside a function and not during e)5.082 F -.15(xe)-.15 G .082 +(cution of a script by).15 F F1(.)2.582 E F0 2.581(,t).833 G .081 +(he return sta-)-2.581 F 2.305(tus is f)144 285.6 R 4.805(alse. An)-.1 F +4.805(yc)-.15 G 2.305(ommand associated with the)-4.805 F F1(RETURN) +4.805 E F0 2.306(trap is e)4.806 F -.15(xe)-.15 G 2.306(cuted before e) +.15 F -.15(xe)-.15 G(cution).15 E(resumes after the function or script.) +144 297.6 Q F1(set)108 314.4 Q F0([)2.5 E F1 +(\255\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1-2.5 E F2(option)2.5 +E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1(set)108 326.4 Q F0 +([)2.5 E F1(+abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1(+o)-2.5 E F2(option) +2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144 338.4 S +.836(thout options, the name and v).4 F .835(alue of each shell v)-.25 F +.835(ariable are displayed in a format that can be)-.25 F .784 +(reused as input for setting or resetting the currently-set v)144 350.4 +R 3.284(ariables. Read-only)-.25 F -.25(va)3.284 G .784 +(riables cannot be).25 F 2.947(reset. In)144 362.4 R F2 .447(posix mode) +2.947 F F0 2.947(,o)C .447(nly shell v)-2.947 F .447 +(ariables are listed.)-.25 F .447 +(The output is sorted according to the current)5.447 F 3.53 +(locale. When)144 374.4 R 1.031(options are speci\214ed, the)3.53 F +3.531(ys)-.15 G 1.031(et or unset shell attrib)-3.531 F 3.531(utes. An) +-.2 F 3.531(ya)-.15 G -.18(rg)-3.531 G 1.031(uments remaining).18 F +1.624(after option processing are treated as v)144 386.4 R 1.623 +(alues for the positional parameters and are assigned, in)-.25 F(order) +144 398.4 Q 2.5(,t)-.4 G(o)-2.5 E F1($1)2.5 E F0(,)A F1($2)2.5 E F0(,)A +F1 2.5(... $)2.5 F F2(n)A F0 5(.O)C(ptions, if speci\214ed, ha)-5 E .3 +-.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1144 410.4 Q +F0 .539(Automatically mark v)29.3 F .539 +(ariables and functions which are modi\214ed or created for e)-.25 F .54 +(xport to)-.15 F(the en)184 422.4 Q(vironment of subsequent commands.) +-.4 E F1144 434.4 Q F0 .132 +(Report the status of terminated background jobs immediately)28.74 F +2.632(,r)-.65 G .131(ather than before the ne)-2.632 F(xt)-.15 E +(primary prompt.)184 446.4 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o) +-.25 H(nly when job control is enabled.).15 E F1144 458.4 Q F0 .51 +(Exit immediately if a)29.86 F F2(pipeline)3.01 E F0 .511 +(\(which may consist of a single)3.011 F F2 .511(simple command)3.011 F +F0 3.011(\), a)B F2(sub-)3.011 E(shell)184 470.4 Q F0 .872 +(command enclosed in parentheses, or one of the commands e)3.373 F -.15 +(xe)-.15 G .872(cuted as part of a).15 F .399 +(command list enclosed by braces \(see)184 482.4 R/F3 9/Times-Bold@0 SF +.399(SHELL GRAMMAR)2.899 F F0(abo)2.649 E -.15(ve)-.15 G 2.899(\)e).15 G +.399(xits with a non-zero)-3.049 F 3.969(status. The)184 494.4 R 1.468 +(shell does not e)3.969 F 1.468(xit if the command that f)-.15 F 1.468 +(ails is part of the command list)-.1 F .569(immediately follo)184 506.4 +R .569(wing a)-.25 F F1(while)3.069 E F0(or)3.069 E F1(until)3.069 E F0 +-.1(ke)3.069 G(yw)-.05 E .569(ord, part of the test follo)-.1 F .57 +(wing the)-.25 F F1(if)3.07 E F0(or)3.07 E F1(elif)3.07 E F0(reserv)184 +518.4 Q .544(ed w)-.15 F .544(ords, part of an)-.1 F 3.044(yc)-.15 G +.544(ommand e)-3.044 F -.15(xe)-.15 G .544(cuted in a).15 F F1(&&)3.044 +E F0(or)3.044 E/F4 10/Symbol SF3.044 E F0 .544(list e)3.044 F .544 +(xcept the command)-.15 F(follo)184 530.4 Q 1.23(wing the \214nal)-.25 F +F1(&&)3.73 E F0(or)3.73 E F43.73 E F0 3.73(,a)C 1.53 -.15(ny c) +-3.73 H 1.231(ommand in a pipeline b).15 F 1.231 +(ut the last, or if the com-)-.2 F(mand')184 542.4 Q 3.191(sr)-.55 G +.691(eturn v)-3.191 F .691(alue is being in)-.25 F -.15(ve)-.4 G .691 +(rted with).15 F F1(!)3.191 E F0 5.691(.A)C .691(trap on)-2.5 F F1(ERR) +3.19 E F0 3.19(,i)C 3.19(fs)-3.19 G .69(et, is e)-3.19 F -.15(xe)-.15 G +.69(cuted before).15 F .686(the shell e)184 554.4 R 3.186(xits. This) +-.15 F .686(option applies to the shell en)3.186 F .686 +(vironment and each subshell en)-.4 F(viron-)-.4 E .068 +(ment separately \(see)184 566.4 R F3 .068(COMMAND EXECUTION ENVIR)2.568 +F(ONMENT)-.27 E F0(abo)2.318 E -.15(ve)-.15 G .068(\), and may cause).15 +F(subshells to e)184 578.4 Q(xit before e)-.15 E -.15(xe)-.15 G +(cuting all the commands in the subshell.).15 E F1144 590.4 Q F0 +(Disable pathname e)30.97 E(xpansion.)-.15 E F1144 602.4 Q F0 +2.238(Remember the location of commands as the)28.74 F 4.738(ya)-.15 G +2.239(re look)-4.738 F 2.239(ed up for e)-.1 F -.15(xe)-.15 G 4.739 +(cution. This).15 F(is)4.739 E(enabled by def)184 614.4 Q(ault.)-.1 E F1 +144 626.4 Q F0 .514(All ar)28.74 F .514 +(guments in the form of assignment statements are placed in the en)-.18 +F .513(vironment for a)-.4 F +(command, not just those that precede the command name.)184 638.4 Q F1 +144 650.4 Q F0 .148(Monitor mode.)25.97 F .148 +(Job control is enabled.)5.148 F .149(This option is on by def)5.148 F +.149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .637 +(on systems that support it \(see)184 662.4 R F3 .636(JOB CONTR)3.136 F +(OL)-.27 E F0(abo)2.886 E -.15(ve)-.15 G 3.136(\). Background).15 F .636 +(processes run in a)3.136 F .641 +(separate process group and a line containing their e)184 674.4 R .642 +(xit status is printed upon their com-)-.15 F(pletion.)184 686.4 Q F1 +144 698.4 Q F0 .653(Read commands b)28.74 F .653(ut do not e)-.2 F +-.15(xe)-.15 G .653(cute them.).15 F .652 +(This may be used to check a shell script for)5.653 F(syntax errors.)184 +710.4 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 +E(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(13)198.725 E 0 Cg EP +%%Page: 14 14 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF144 84 Q/F2 10/Times-Italic@0 SF(option\255name) +2.5 E F0(The)184 96 Q F2(option\255name)2.5 E F0 +(can be one of the follo)2.5 E(wing:)-.25 E F1(allexport)184 108 Q F0 +(Same as)224 120 Q F12.5 E F0(.)A F1(braceexpand)184 132 Q F0 +(Same as)224 144 Q F12.5 E F0(.)A F1(emacs)184 156 Q F0 .089 +(Use an emacs-style command line editing interf)13.9 F 2.589(ace. This) +-.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95 +(when the shell is interacti)224 168 R -.15(ve)-.25 G 3.45(,u).15 G .95 +(nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E +F0 2.5(option. This)224 180 R(also af)2.5 E(fects the editing interf) +-.25 E(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(err) +184 192 Q(exit)-.18 E F0(Same as)11.31 E F12.5 E F0(.)A F1 +(errtrace)184 204 Q F0(Same as)5.03 E F12.5 E F0(.)A F1(functrace) +184 216 Q F0(Same as)224 228 Q F12.5 E F0(.)A F1(hashall)184 240 Q +F0(Same as)9.43 E F12.5 E F0(.)A F1(histexpand)184 252 Q F0 +(Same as)224 264 Q F12.5 E F0(.)A F1(history)184 276 Q F0 .586 +(Enable command history)10 F 3.087(,a)-.65 G 3.087(sd)-3.087 G .587 +(escribed abo)-3.087 F .887 -.15(ve u)-.15 H(nder).15 E/F3 9 +/Times-Bold@0 SF(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 SF +(.)A F0 .587(This option is)5.087 F(on by def)224 288 Q +(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 +300 Q(eeof)-.18 E F0 1.657(The ef)224 312 R 1.657 +(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF(IGNOREEOF=10) +4.156 E F0 1.656(had been e)4.156 F -.15(xe)-.15 G(cuted).15 E(\(see)224 +324 Q F1(Shell V)2.5 E(ariables)-.92 E F0(abo)2.5 E -.15(ve)-.15 G(\).) +.15 E F1 -.1(ke)184 336 S(yw).1 E(ord)-.1 E F0(Same as)224 348 Q F1 +2.5 E F0(.)A F1(monitor)184 360 Q F0(Same as)5.56 E F12.5 E +F0(.)A F1(noclob)184 372 Q(ber)-.1 E F0(Same as)224 384 Q F12.5 E +F0(.)A F1(noexec)184 396 Q F0(Same as)11.12 E F12.5 E F0(.)A F1 +(noglob)184 408 Q F0(Same as)11.1 E F12.5 E F0(.)A F1(nolog)184 +420 Q F0(Currently ignored.)16.66 E F1(notify)184 432 Q F0(Same as)15 E +F12.5 E F0(.)A F1(nounset)184 444 Q F0(Same as)6.66 E F12.5 +E F0(.)A F1(onecmd)184 456 Q F0(Same as)6.67 E F12.5 E F0(.)A F1 +(ph)184 468 Q(ysical)-.15 E F0(Same as)5.14 E F12.5 E F0(.)A F1 +(pipefail)184 480 Q F0 1.029(If set, the return v)7.77 F 1.029 +(alue of a pipeline is the v)-.25 F 1.03 +(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 492 R +1.136 +(xit with a non-zero status, or zero if all commands in the pipeline) +-.15 F -.15(ex)224 504 S(it successfully).15 E 5(.T)-.65 G +(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 516 Q F0 +2.09(Change the beha)17.77 F 2.091(vior of)-.2 F F1(bash)4.591 E F0 +2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091 +(fers from the)-.25 F(POSIX standard to match the standard \()224 528 Q +F2(posix mode)A F0(\).)A F1(pri)184 540 Q(vileged)-.1 E F0(Same as)224 +552 Q F12.5 E F0(.)A F1 -.1(ve)184 564 S(rbose).1 E F0(Same as) +7.33 E F12.5 E F0(.)A F1(vi)184 576 Q F0 1.466 +(Use a vi-style command line editing interf)32.22 F 3.965(ace. This)-.1 +F 1.465(also af)3.965 F 1.465(fects the editing)-.25 F(interf)224 588 Q +(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(xtrace)184 +600 Q F0(Same as)13.35 E F12.5 E F0(.)A(If)184 618 Q F13.052 +E F0 .552(is supplied with no)3.052 F F2(option\255name)3.053 E F0 3.053 +(,t)C .553(he v)-3.053 F .553(alues of the current options are printed.) +-.25 F(If)5.553 E F1(+o)184 630 Q F0 1.072(is supplied with no)3.572 F +F2(option\255name)3.572 E F0 3.572(,a)C 1.071(series of)-.001 F F1(set) +3.571 E F0 1.071(commands to recreate the current)3.571 F +(option settings is displayed on the standard output.)184 642 Q F1 +144 654 Q F0 -.45(Tu)28.74 G 1.071(rn on).45 F F2(privile)4.821 E -.1 +(ge)-.4 G(d).1 E F0 3.572(mode. In)4.341 F 1.072(this mode, the)3.572 F +F3($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)-.27 E F0 1.072 +(\214les are not pro-)3.322 F 1.501 +(cessed, shell functions are not inherited from the en)184 666 R 1.5 +(vironment, and the)-.4 F F3(SHELLOPTS)4 E F4(,)A F3 -.27(BA)184 678 S +(SHOPTS).27 E F4(,)A F3(CDP)2.774 E -.855(AT)-.666 G(H).855 E F4(,)A F0 +(and)2.774 E F3(GLOBIGNORE)3.024 E F0 -.25(va)2.774 G .524 +(riables, if the).25 F 3.025(ya)-.15 G .525(ppear in the en)-3.025 F +(vironment,)-.4 E .38(are ignored.)184 690 R .38 +(If the shell is started with the ef)5.38 F(fecti)-.25 E .679 -.15(ve u) +-.25 H .379(ser \(group\) id not equal to the real).15 F .461 +(user \(group\) id, and the)184 702 R F12.961 E F0 .461 +(option is not supplied, these actions are tak)2.961 F .462 +(en and the ef)-.1 F(fec-)-.25 E(ti)184 714 Q .695 -.15(ve u)-.25 H .395 +(ser id is set to the real user id.).15 F .395(If the)5.395 F F1 +2.895 E F0 .394(option is supplied at startup, the ef)2.895 F(fecti)-.25 +E -.15(ve)-.25 G .386(user id is not reset.)184 726 R -.45(Tu)5.386 G +.386(rning this option of).45 F 2.886(fc)-.25 G .387(auses the ef)-2.886 +F(fecti)-.25 E .687 -.15(ve u)-.25 H .387(ser and group ids to be).15 F +(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(14)198.725 E 0 Cg EP +%%Page: 15 15 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E +(set to the real user and group ids.)184 84 Q/F1 10/Times-Bold@0 SF +144 96 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15 G +(cuting one command.).15 E F1144 108 Q F0 -.35(Tr)28.74 G .044 +(eat unset v).35 F .044(ariables and parameters other than the special \ +parameters "@" and "*" as an)-.25 F .182 +(error when performing parameter e)184 120 R 2.682(xpansion. If)-.15 F +-.15(ex)2.682 G .183(pansion is attempted on an unset v).15 F(ari-)-.25 +E .746(able or parameter)184 132 R 3.246(,t)-.4 G .746 +(he shell prints an error message, and, if not interacti)-3.246 F -.15 +(ve)-.25 G 3.246(,e).15 G .746(xits with a)-3.396 F(non-zero status.)184 +144 Q F1144 156 Q F0(Print shell input lines as the)29.3 E 2.5(ya) +-.15 G(re read.)-2.5 E F1144 168 Q F0 .315(After e)29.3 F .315 +(xpanding each)-.15 F/F2 10/Times-Italic@0 SF .315(simple command)2.815 +F F0(,)A F1 -.25(fo)2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E +F0(command,)2.815 E F1(select)2.815 E F0(command,)2.815 E 1.236 +(or arithmetic)184 180 R F1 -.25(fo)3.736 G(r).25 E F0 1.236 +(command, display the e)3.736 F 1.236(xpanded v)-.15 F 1.236(alue of) +-.25 F/F3 9/Times-Bold@0 SF(PS4)3.736 E/F4 9/Times-Roman@0 SF(,)A F0 +(follo)3.486 E 1.236(wed by the com-)-.25 F(mand and its e)184 192 Q +(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E F1 +144 204 Q F0 2.578(The shell performs brace e)27.63 F 2.578 +(xpansion \(see)-.15 F F1 2.578(Brace Expansion)5.078 F F0(abo)5.078 E +-.15(ve)-.15 G 5.079(\). This).15 F 2.579(is on by)5.079 F(def)184 216 Q +(ault.)-.1 E F1144 228 Q F0 .214(If set,)27.08 F F1(bash)2.714 E +F0 .214(does not o)2.714 F -.15(ve)-.15 G .214(rwrite an e).15 F .214 +(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0 +2.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F +3.053(tors. This)184 240 R .553(may be o)3.053 F -.15(ve)-.15 G .553 +(rridden when creating output \214les by using the redirection opera-) +.15 F(tor)184 252 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1 +144 264 Q F0 .104(If set, an)27.63 F 2.604(yt)-.15 G .104(rap on) +-2.604 F F1(ERR)2.604 E F0 .103 +(is inherited by shell functions, command substitutions, and com-)2.604 +F .838(mands e)184 276 R -.15(xe)-.15 G .838(cuted in a subshell en).15 +F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839 +(trap is normally not inherited in)3.339 F(such cases.)184 288 Q F1 +144 300 Q F0(Enable)26.52 E F1(!)3.032 E F0 .532 +(style history substitution.)5.532 F .531(This option is on by def)5.532 +F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 312 Q -.15 +(ve)-.25 G(.).15 E F1144 324 Q F0 1.164 +(If set, the shell does not follo)28.19 F 3.664(ws)-.25 G 1.164 +(ymbolic links when e)-3.664 F -.15(xe)-.15 G 1.165 +(cuting commands such as).15 F F1(cd)3.665 E F0 2.822 +(that change the current w)184 336 R 2.822(orking directory)-.1 F 7.822 +(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.821 +(ysical directory structure)-.05 F 2.685(instead. By)184 348 R(def)2.685 +E(ault,)-.1 E F1(bash)2.686 E F0(follo)2.686 E .186 +(ws the logical chain of directories when performing com-)-.25 F +(mands which change the current directory)184 360 Q(.)-.65 E F1144 +372 Q F0 .89(If set, an)27.63 F 3.39(yt)-.15 G .89(raps on)-3.39 F F1 +(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89 +(are inherited by shell functions, command)3.39 F 1.932 +(substitutions, and commands e)184 384 R -.15(xe)-.15 G 1.932 +(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E +(UG)-.1 E F0(and)4.432 E F1(RETURN)184 396 Q F0 +(traps are normally not inherited in such cases.)2.5 E F1144 408 Q +F0 .401(If no ar)28.6 F .401(guments follo)-.18 F 2.901(wt)-.25 G .401 +(his option, then the positional parameters are unset.)-2.901 F +(Otherwise,)5.4 E(the positional parameters are set to the)184 420 Q F2 +(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G +(ome of them be)-2.5 E(gin with a)-.15 E F12.5 E F0(.)A F1144 +432 Q F0 1.944(Signal the end of options, cause all remaining)34.3 F F2 +(ar)4.444 E(g)-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.445(ea)-4.444 G +1.945(ssigned to the positional)-4.445 F 3.446(parameters. The)184 444 R +F13.446 E F0(and)3.446 E F13.446 E F0 .945 +(options are turned of)3.446 F 3.445(f. If)-.25 F .945(there are no) +3.445 F F2(ar)3.445 E(g)-.37 E F0 .945(s, the positional)B +(parameters remain unchanged.)184 456 Q .425(The options are of)144 +472.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425 +(ault unless otherwise noted.)-.1 F .425 +(Using + rather than \255 causes these options)5.425 F .178 +(to be turned of)144 484.8 R 2.678(f. The)-.25 F .178 +(options can also be speci\214ed as ar)2.678 F .178(guments to an in) +-.18 F -.2(vo)-.4 G .177(cation of the shell.).2 F(The)5.177 E .066 +(current set of options may be found in)144 496.8 R F1<24ad>2.566 E F0 +5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066 +(ys true unless an in).1 F -.25(va)-.4 G .067(lid option).25 F +(is encountered.)144 508.8 Q F1(shift)108 525.6 Q F0([)2.5 E F2(n)A F0 +(])A .429(The positional parameters from)144 537.6 R F2(n)2.929 E F0 +.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G +.428(rameters represented by the num-).15 F(bers)144 549.6 Q F1($#)2.582 +E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0A F2(n)A F0 .082 +(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga) +-.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to) +.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06 +(is 0, no parameters are changed.)144 561.6 R(If)5.06 E F2(n)2.92 E F0 +.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F +(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56 +(,t)C(he)-2.56 E .143(positional parameters are not changed.)144 573.6 R +.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0 +.144(is greater than)2.884 F F1($#)2.644 E F0 +(or less than zero; otherwise 0.)144 585.6 Q F1(shopt)108 602.4 Q F0([) +2.5 E F1(\255pqsu)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(optname) +-2.5 E F0(...])2.5 E -.8(To)144 614.4 S .222(ggle the v).8 F .222 +(alues of v)-.25 F .222(ariables controlling optional shell beha)-.25 F +(vior)-.2 E 5.222(.W)-.55 G .222(ith no options, or with the)-5.622 F F1 +2.722 E F0 .721(option, a list of all settable options is display\ +ed, with an indication of whether or not each is set.)144 626.4 R(The) +144 638.4 Q F12.828 E F0 .327(option causes output to be displaye\ +d in a form that may be reused as input.)2.828 F .327(Other options) +5.327 F(ha)144 650.4 Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:) +-.25 E F1144 662.4 Q F0(Enable \(set\) each)26.41 E F2(optname)2.5 +E F0(.)A F1144 674.4 Q F0(Disable \(unset\) each)24.74 E F2 +(optname)2.5 E F0(.)A F1144 686.4 Q F0 .003(Suppresses normal out\ +put \(quiet mode\); the return status indicates whether the)24.74 F F2 +(optname)2.504 E F0(is)2.504 E .256(set or unset.)180 698.4 R .256 +(If multiple)5.256 F F2(optname)2.756 E F0(ar)2.756 E .256 +(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G(ith)-2.756 E F1 +2.756 E F0 2.755(,t)C .255(he return status is zero if)-2.755 F +(all)180 710.4 Q F2(optnames)2.5 E F0(are enabled; non-zero otherwise.) +2.5 E(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(15)198.725 E 0 Cg EP +%%Page: 16 16 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF144 84 Q F0(Restricts the v)25.3 E(alues of)-.25 E +/F2 10/Times-Italic@0 SF(optname)2.5 E F0(to be those de\214ned for the) +2.5 E F12.5 E F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G +(iltin.).2 E .127(If either)144 100.8 R F12.627 E F0(or)2.627 E F1 +2.627 E F0 .127(is used with no)2.627 F F2(optname)2.627 E F0(ar) +2.627 E .127(guments, the display is limited to those options which)-.18 +F 1.024(are set or unset, respecti)144 112.8 R -.15(ve)-.25 G(ly).15 E +6.024(.U)-.65 G 1.024(nless otherwise noted, the)-6.024 F F1(shopt)3.523 +E F0 1.023(options are disabled \(unset\) by)3.523 F(def)144 124.8 Q +(ault.)-.1 E 1.544 +(The return status when listing options is zero if all)144 141.6 R F2 +(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.)4.045 F .696 +(When setting or unsetting options, the return status is zero unless an) +144 153.6 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695 +(alid shell)-.25 F(option.)144 165.6 Q(The list of)144 182.4 Q F1(shopt) +2.5 E F0(options is:)2.5 E F1(autocd)144 200.4 Q F0 .199 +(If set, a command name that is the name of a directory is e)11.11 F +-.15(xe)-.15 G .2(cuted as if it were the ar).15 F(gu-)-.18 E +(ment to the)184 212.4 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F +(option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E +F1(cdable_v)144 224.4 Q(ars)-.1 E F0 .156(If set, an ar)184 236.4 R .156 +(gument to the)-.18 F F1(cd)2.656 E F0 -.2(bu)2.656 G .155 +(iltin command that is not a directory is assumed to be the).2 F +(name of a v)184 248.4 Q(ariable whose v)-.25 E +(alue is the directory to change to.)-.25 E F1(cdspell)144 260.4 Q F0 +1.055 +(If set, minor errors in the spelling of a directory component in a) +10.55 F F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988 +(corrected. The)184 272.4 R 1.488(errors check)3.988 F 1.487 +(ed for are transposed characters, a missing character)-.1 F 3.987(,a) +-.4 G(nd)-3.987 E .552(one character too man)184 284.4 R 4.352 -.65 +(y. I)-.15 H 3.052(fac).65 G .552 +(orrection is found, the corrected \214le name is printed, and)-3.052 F +(the command proceeds.)184 296.4 Q +(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.) +.15 E F1(checkhash)144 308.4 Q F0 2.08(If set,)184 320.4 R F1(bash)4.58 +E F0 2.079(checks that a command found in the hash table e)4.58 F 2.079 +(xists before trying to)-.15 F -.15(exe)184 332.4 S(cute it.).15 E +(If a hashed command no longer e)5 E +(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 344.4 +Q F0 .448(If set,)184 356.4 R F1(bash)2.948 E F0 .448 +(lists the status of an)2.948 F 2.949(ys)-.15 G .449 +(topped and running jobs before e)-2.949 F .449(xiting an interacti)-.15 +F -.15(ve)-.25 G 3.439(shell. If)184 368.4 R(an)3.439 E 3.439(yj)-.15 G +.938(obs are running, this causes the e)-3.439 F .938 +(xit to be deferred until a second e)-.15 F .938(xit is)-.15 F 2.203 +(attempted without an interv)184 380.4 R 2.203(ening command \(see)-.15 +F/F3 9/Times-Bold@0 SF 2.203(JOB CONTR)4.703 F(OL)-.27 E F0(abo)4.453 E +-.15(ve)-.15 G 4.703(\). The).15 F(shell)4.704 E(al)184 392.4 Q -.1(wa) +-.1 G(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G +(obs are stopped.)-2.5 E F1(checkwinsize)144 404.4 Q F0 .797(If set,)184 +416.4 R F1(bash)3.297 E F0 .797(checks the windo)3.297 F 3.297(ws)-.25 G +.796(ize after each command and, if necessary)-3.297 F 3.296(,u)-.65 G +.796(pdates the)-3.296 F -.25(va)184 428.4 S(lues of).25 E F3(LINES)2.5 +E F0(and)2.25 E F3(COLUMNS)2.5 E/F4 9/Times-Roman@0 SF(.)A F1(cmdhist) +144 440.4 Q F0 1.202(If set,)6.11 F F1(bash)3.702 E F0 1.202 +(attempts to sa)3.702 F 1.502 -.15(ve a)-.2 H 1.202 +(ll lines of a multiple-line command in the same history).15 F(entry)184 +452.4 Q 5(.T)-.65 G(his allo)-5 E +(ws easy re-editing of multi-line commands.)-.25 E F1(compat31)144 464.4 +Q F0 .42(If set,)184 476.4 R F1(bash)2.92 E F0 .42(changes its beha)2.92 +F .419(vior to that of v)-.2 F .419 +(ersion 3.1 with respect to quoted ar)-.15 F(guments)-.18 E +(to the conditional command')184 488.4 Q 2.5(s=)-.55 G 2.5(~o)-2.5 G +(perator)-2.5 E(.)-.55 E F1(compat32)144 500.4 Q F0 1.409(If set,)184 +512.4 R F1(bash)3.909 E F0 1.409(changes its beha)3.909 F 1.409 +(vior to that of v)-.2 F 1.41 +(ersion 3.2 with respect to locale-speci\214c)-.15 F +(string comparison when using the conditional command')184 524.4 Q 2.5 +(s operators.)-2.5 E F1(compat40)144 536.4 Q F0 1.41 +(If set,)184 548.4 R F1(bash)3.91 E F0 1.41(changes its beha)3.91 F +1.409(vior to that of v)-.2 F 1.409 +(ersion 4.0 with respect to locale-speci\214c)-.15 F 1.692 +(string comparison when using the conditional command')184 560.4 R 4.193 +(s operators and the)-4.193 F(ef)184 572.4 Q +(fect of interrupting a command list.)-.25 E F1(dirspell)144 584.4 Q F0 +.859(If set,)7.77 F F1(bash)3.359 E F0 .858 +(attempts spelling correction on directory names during w)3.359 F .858 +(ord completion if)-.1 F +(the directory name initially supplied does not e)184 596.4 Q(xist.)-.15 +E F1(dotglob)144 608.4 Q F0 .165(If set,)7.77 F F1(bash)2.665 E F0 .165 +(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665('i) +-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F +(xpansion.)-.15 E F1(execfail)144 620.4 Q F0 1.387 +(If set, a non-interacti)7.79 F 1.687 -.15(ve s)-.25 H 1.386 +(hell will not e).15 F 1.386(xit if it cannot e)-.15 F -.15(xe)-.15 G +1.386(cute the \214le speci\214ed as an).15 F(ar)184 632.4 Q +(gument to the)-.18 E F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E +(An interacti)5 E .3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 +E F1(exec)2.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 644.4 Q +F0 .716(If set, aliases are e)184 656.4 R .717(xpanded as described abo) +-.15 F 1.017 -.15(ve u)-.15 H(nder).15 E F3(ALIASES)3.217 E F4(.)A F0 +.717(This option is enabled)5.217 F(by def)184 668.4 Q +(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(extdeb)144 +680.4 Q(ug)-.2 E F0(If set, beha)184 692.4 Q +(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184 +704.4 Q F0(The)28.5 E F14.251 E F0 1.751(option to the)4.251 F F1 +(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751 +(iltin displays the source \214le name and line).2 F +(number corresponding to each function name supplied as an ar)220 716.4 +Q(gument.)-.18 E(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(16)198.725 +E 0 Cg EP +%%Page: 17 17 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF(2.)184 84 Q F0 1.667(If the command run by the)28.5 F +F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167 F 1.667 +(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 96 Q +-.15(xe)-.15 G(cuted.).15 E F1(3.)184 108 Q F0 .841 +(If the command run by the)28.5 F F1(DEB)3.341 E(UG)-.1 E F0 .841 +(trap returns a v)3.341 F .84(alue of 2, and the shell is)-.25 F -.15 +(exe)220 120 S .488 +(cuting in a subroutine \(a shell function or a shell script e).15 F +-.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1 +(sour)220 132 Q(ce)-.18 E F0 -.2(bu)2.5 G(iltins\), a call to).2 E F1 +-.18(re)2.5 G(tur).18 E(n)-.15 E F0(is simulated.)2.5 E F1(4.)184 144 Q +/F2 9/Times-Bold@0 SF -.27(BA)28.5 G(SH_ARGC).27 E F0(and)3.154 E F2 +-.27(BA)3.404 G(SH_ARGV).27 E F0 .904 +(are updated as described in their descriptions)3.154 F(abo)220 156 Q +-.15(ve)-.15 G(.).15 E F1(5.)184 168 Q F0 1.359 +(Function tracing is enabled:)28.5 F 1.359 +(command substitution, shell functions, and sub-)6.359 F(shells in)220 +180 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E/F3 10 +/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1 +(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0(traps.)2.5 E F1(6.) +184 192 Q F0 .805(Error tracing is enabled:)28.5 F .804 +(command substitution, shell functions, and subshells)5.805 F(in)220 204 +Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F3 +(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E(OR)-.3 E F0 +(trap.)2.5 E F1(extglob)144 216 Q F0 .4(If set, the e)8.89 F .4 +(xtended pattern matching features described abo)-.15 F .7 -.15(ve u) +-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 228 Q +F0(are enabled.)2.5 E F1(extquote)144 240 Q F0 2.473(If set,)184 252 R +F1($)4.973 E F0<08>A F3(string)A F0 4.973<0861>C(nd)-4.973 E F1($)4.973 +E F0(")A F3(string)A F0 4.973("q)C 2.473(uoting is performed within) +-4.973 F F1(${)4.973 E F3(par)A(ameter)-.15 E F1(})A F0 -.15(ex)4.973 G +(pansions).15 E(enclosed in double quotes.)184 264 Q +(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 276 Q F0 +1.424(If set, patterns which f)7.77 F 1.425 +(ail to match \214lenames during pathname e)-.1 F 1.425 +(xpansion result in an)-.15 F -.15(ex)184 288 S(pansion error).15 E(.) +-.55 E F1 -.25(fo)144 300 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0 +.937(If set, the suf)184 312 R<8c78>-.25 E .936(es speci\214ed by the) +-.15 F F2(FIGNORE)3.436 E F0 .936(shell v)3.186 F .936(ariable cause w) +-.25 F .936(ords to be ignored)-.1 F .32(when performing w)184 324 R .32 +(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G .32 +(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 2.948 +(pletions. See)184 336 R F2 .448(SHELL V)2.948 F(ARIABLES)-1.215 E F0 +(abo)2.698 E .748 -.15(ve f)-.15 H .448(or a description of).15 F F2 +(FIGNORE)2.947 E/F4 9/Times-Roman@0 SF(.)A F0 .447(This option is)4.947 +F(enabled by def)184 348 Q(ault.)-.1 E F1(globstar)144 360 Q F0 .178 +(If set, the pattern)5 F F1(**)2.678 E F0 .178(used in a pathname e) +2.678 F .178(xpansion conte)-.15 F .179 +(xt will match a \214les and zero or)-.15 F 1.298 +(more directories and subdirectories.)184 372 R 1.298 +(If the pattern is follo)6.298 F 1.298(wed by a)-.25 F F1(/)3.797 E F0 +3.797(,o)C 1.297(nly directories)-3.797 F(and subdirectories match.)184 +384 Q F1(gnu_errfmt)144 396 Q F0(If set, shell error messages are writt\ +en in the standard GNU error message format.)184 408 Q F1(histappend)144 +420 Q F0 .676 +(If set, the history list is appended to the \214le named by the v)184 +432 R .676(alue of the)-.25 F F2(HISTFILE)3.177 E F0 -.25(va)2.927 G +(ri-).25 E(able when the shell e)184 444 Q(xits, rather than o)-.15 E +-.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 456 Q(eedit)-.18 +E F0 .576(If set, and)184 468 R F1 -.18(re)3.076 G(adline).18 E F0 .575 +(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15 G .575 +(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F +(tory substitution.)184 480 Q F1(histv)144 492 Q(erify)-.1 E F0 .402 +(If set, and)184 504 R F1 -.18(re)2.903 G(adline).18 E F0 .403 +(is being used, the results of history substitution are not immediately) +2.903 F .662(passed to the shell parser)184 516 R 5.662(.I)-.55 G .661 +(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161 +G(adline).18 E F0(editing)3.161 E -.2(bu)184 528 S -.25(ff).2 G(er).25 E +2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1 +(hostcomplete)144 540 Q F0 1.181(If set, and)184 552 R F1 -.18(re)3.681 +G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 1.182 +(will attempt to perform hostname completion)3.682 F 1.381(when a w)184 +564 R 1.381(ord containing a)-.1 F F1(@)3.881 E F0 1.381 +(is being completed \(see)3.881 F F1(Completing)3.88 E F0(under)3.88 E +F2(READLINE)3.88 E F0(abo)184 576 Q -.15(ve)-.15 G 2.5(\). This).15 F +(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 588 Q F0(If set,) +184 600 Q F1(bash)2.5 E F0(will send)2.5 E F2(SIGHUP)2.5 E F0 +(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e) +.15 E(xits.)-.15 E F1(interacti)144 612 Q -.1(ve)-.1 G(_comments).1 E F0 +.33(If set, allo)184 624 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33 +(ginning with)-.15 F F1(#)2.83 E F0 .33(to cause that w)2.83 F .33 +(ord and all remaining characters on)-.1 F .967 +(that line to be ignored in an interacti)184 636 R 1.267 -.15(ve s)-.25 +H .967(hell \(see).15 F F2(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve)-.15 +G 3.467(\). This).15 F .967(option is)3.467 F(enabled by def)184 648 Q +(ault.)-.1 E F1(lithist)144 660 Q F0 .654(If set, and the)15.55 F F1 +(cmdhist)3.154 E F0 .654(option is enabled, multi-line commands are sa) +3.154 F -.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history) +-3.155 F(with embedded ne)184 672 Q +(wlines rather than using semicolon separators where possible.)-.25 E F1 +(login_shell)144 684 Q F0 .486 +(The shell sets this option if it is started as a login shell \(see)184 +696 R F2(INV)2.986 E(OCA)-.405 E(TION)-.855 E F0(abo)2.736 E -.15(ve) +-.15 G 2.986(\). The).15 F -.25(va)184 708 S(lue may not be changed.).25 +E(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(17)198.725 E 0 Cg EP +%%Page: 18 18 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF(mailwar)144 84 Q(n)-.15 E F0 .814 +(If set, and a \214le that)184 96 R F1(bash)3.314 E F0 .815 +(is checking for mail has been accessed since the last time it)3.314 F +-.1(wa)184 108 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E +(`The mail in)-.74 E/F2 10/Times-Italic@0 SF(mail\214le)2.5 E F0 +(has been read')2.5 E 2.5('i)-.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1 +(no_empty_cmd_completion)144 120 Q F0 .325(If set, and)184 132 R F1 -.18 +(re)2.825 G(adline).18 E F0 .325(is being used,)2.825 F F1(bash)2.824 E +F0 .324(will not attempt to search the)2.824 F/F3 9/Times-Bold@0 SF +-.666(PA)2.824 G(TH)-.189 E F0 .324(for possible)2.574 F +(completions when completion is attempted on an empty line.)184 144 Q F1 +(nocaseglob)144 156 Q F0 .436(If set,)184 168 R F1(bash)2.936 E F0 .436 +(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f)-.25 +H .437(ashion when performing pathname).05 F -.15(ex)184 180 S +(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E +-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 192 Q F0 1.194(If set,)184 +204 R F1(bash)3.694 E F0 1.194(matches patterns in a case\255insensiti) +3.694 F 1.493 -.15(ve f)-.25 H 1.193(ashion when performing matching).05 +F(while e)184 216 Q -.15(xe)-.15 G(cuting).15 E F1(case)2.5 E F0(or)2.5 +E F1([[)2.5 E F0(conditional commands.)2.5 E F1(nullglob)144 228 Q F0 +.854(If set,)184 240 R F1(bash)3.354 E F0(allo)3.354 E .855 +(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)3.355 G .855 +(thname Expansion).1 F F0(abo)3.355 E -.15(ve)-.15 G 3.355(\)t).15 G(o) +-3.355 E -.15(ex)184 252 S(pand to a null string, rather than themselv) +.15 E(es.)-.15 E F1(pr)144 264 Q(ogcomp)-.18 E F0 .677 +(If set, the programmable completion f)184 276 R .677(acilities \(see) +-.1 F F1(Pr)3.176 E .676(ogrammable Completion)-.18 F F0(abo)3.176 E +-.15(ve)-.15 G(\)).15 E(are enabled.)184 288 Q +(This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 300 Q(omptv) +-.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)184 312 R 1.448 +(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic) +-.15 F -.15(ex)184 324 S .171(pansion, and quote remo).15 F -.25(va)-.15 +G 2.67(la).25 G .17(fter being e)-2.67 F .17(xpanded as described in) +-.15 F F3(PR)2.67 E(OMPTING)-.27 E F0(abo)2.42 E -.15(ve)-.15 G(.).15 E +(This option is enabled by def)184 336 Q(ault.)-.1 E F1 -.18(re)144 348 +S(stricted_shell).18 E F0 1.069 +(The shell sets this option if it is started in restricted mode \(see) +184 360 R F3 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 372 Q 4.178 +(w\). The)-.25 F -.25(va)4.178 G 1.678(lue may not be changed.).25 F +1.678(This is not reset when the startup \214les are)6.678 F -.15(exe) +184 384 S(cuted, allo).15 E(wing the startup \214les to disco)-.25 E +-.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E +F1(shift_v)144 396 Q(erbose)-.1 E F0 .501(If set, the)184 408 R F1 +(shift)3.001 E F0 -.2(bu)3.001 G .501 +(iltin prints an error message when the shift count e).2 F .502 +(xceeds the number)-.15 F(of positional parameters.)184 420 Q F1(sour) +144 432 Q(cepath)-.18 E F0 .771(If set, the)184 444 R F1(sour)3.271 E +(ce)-.18 E F0(\()3.271 E F1(.)A F0 3.271(\)b)C .771(uiltin uses the v) +-3.471 F .771(alue of)-.25 F F3 -.666(PA)3.27 G(TH)-.189 E F0 .77 +(to \214nd the directory containing the)3.02 F(\214le supplied as an ar) +184 456 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E(ault.) +-.1 E F1(xpg_echo)144 468 Q F0(If set, the)184 480 Q F1(echo)2.5 E F0 +-.2(bu)2.5 G(iltin e).2 E(xpands backslash-escape sequences by def)-.15 +E(ault.)-.1 E F1(suspend)108 492 Q F0([)2.5 E F1A F0(])A 1.001 +(Suspend the e)144 504 R -.15(xe)-.15 G 1.001 +(cution of this shell until it recei).15 F -.15(ve)-.25 G 3.501(sa).15 G +F3(SIGCONT)A F0 3.502(signal. A)3.252 F 1.002(login shell cannot be) +3.502 F .023(suspended; the)144 516 R F12.523 E F0 .023 +(option can be used to o)2.523 F -.15(ve)-.15 G .022 +(rride this and force the suspension.).15 F .022(The return status is) +5.022 F 2.5(0u)144 528 S(nless the shell is a login shell and)-2.5 E F1 +2.5 E F0(is not supplied, or if job control is not enabled.)2.5 E +F1(test)108 540 Q F2 -.2(ex)2.5 G(pr).2 E F1([)108 552 Q F2 -.2(ex)2.5 G +(pr).2 E F1(])2.5 E F0 1.15 +(Return a status of 0 or 1 depending on the e)6.77 F -.25(va)-.25 G 1.15 +(luation of the conditional e).25 F(xpression)-.15 E F2 -.2(ex)3.65 G +(pr).2 E F0 6.15(.E).73 G(ach)-6.15 E 1.188 +(operator and operand must be a separate ar)144 564 R 3.688 +(gument. Expressions)-.18 F 1.187(are composed of the primaries)3.688 F +1.889(described abo)144 576 R 2.189 -.15(ve u)-.15 H(nder).15 E F3 +(CONDITION)4.389 E 1.889(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A +F1(test)6.389 E F0 1.89(does not accept an)4.389 F 4.39(yo)-.15 G 1.89 +(ptions, nor)-4.39 F(does it accept and ignore an ar)144 588 Q +(gument of)-.18 E F12.5 E F0(as signifying the end of options.)2.5 +E .786(Expressions may be combined using the follo)144 606 R .785 +(wing operators, listed in decreasing order of prece-)-.25 F 2.5 +(dence. The)144 618 R -.25(eva)2.5 G +(luation depends on the number of ar).25 E(guments; see belo)-.18 E -.65 +(w.)-.25 G F1(!)144 630 Q F2 -.2(ex)2.5 G(pr).2 E F0 -.35(Tr)12.6 G +(ue if).35 E F2 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.)-.1 E F1(\() +144 642 Q F2 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26(Returns the v)6.77 +F .26(alue of)-.25 F F2 -.2(ex)2.76 G(pr).2 E F0 5.26(.T)C .26 +(his may be used to o)-5.26 F -.15(ve)-.15 G .26 +(rride the normal precedence of opera-).15 F(tors.)180 654 Q F2 -.2(ex) +144 666 S(pr1).2 E F02.5 E F1(a)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35 +(Tr)180 678 S(ue if both).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F2 +-.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F2 -.2(ex)144 690 S(pr1).2 E +F02.5 E F1(o)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 702 S +(ue if either).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F2 -.2(ex)2.5 G +(pr2).2 E F0(is true.)2.52 E F1(test)144 718.8 Q F0(and)2.5 E F1([)2.5 E +F0 -.25(eva)2.5 G(luate conditional e).25 E +(xpressions using a set of rules based on the number of ar)-.15 E +(guments.)-.18 E(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(18)198.725 +E 0 Cg EP +%%Page: 19 19 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E 2.5(0a)144 +84 S -.18(rg)-2.5 G(uments).18 E(The e)180 96 Q(xpression is f)-.15 E +(alse.)-.1 E 2.5(1a)144 108 S -.18(rg)-2.5 G(ument).18 E(The e)180 120 Q +(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18 +E 2.5(2a)144 132 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)180 +144 R .37(gument is)-.18 F/F1 10/Times-Bold@0 SF(!)2.87 E F0 2.87(,t)C +.37(he e)-2.87 F .37(xpression is true if and only if the second ar)-.15 +F .37(gument is null.)-.18 F .379(If the \214rst ar)180 156 R .38 +(gument is one of the unary conditional operators listed abo)-.18 F .68 +-.15(ve u)-.15 H(nder).15 E/F2 9/Times-Bold@0 SF(CONDI-)2.88 E(TION)180 +168 Q .553(AL EXPRESSIONS)-.18 F/F3 9/Times-Roman@0 SF(,)A F0 .552 +(the e)2.802 F .552(xpression is true if the unary test is true.)-.15 F +.552(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 180 Q +(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E +(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 192 S -.18(rg)-2.5 G +(uments).18 E .023(If the second ar)180 204 R .023 +(gument is one of the binary conditional operators listed abo)-.18 F +.324 -.15(ve u)-.15 H(nder).15 E F2(CON-)2.524 E(DITION)180 216 Q 1.478 +(AL EXPRESSIONS)-.18 F F3(,)A F0 1.477(the result of the e)3.727 F 1.477 +(xpression is the result of the binary test)-.15 F .513 +(using the \214rst and third ar)180 228 R .513(guments as operands.)-.18 +F(The)5.513 E F13.013 E F0(and)3.013 E F13.013 E F0 .513 +(operators are considered)3.013 F .972 +(binary operators when there are three ar)180 240 R 3.472(guments. If) +-.18 F .972(the \214rst ar)3.472 F .972(gument is)-.18 F F1(!)3.472 E F0 +3.472(,t)C .972(he v)-3.472 F .972(alue is)-.25 F .883(the ne)180 252 R +-.05(ga)-.15 G .883(tion of the tw).05 F(o-ar)-.1 E .884 +(gument test using the second and third ar)-.18 F 3.384(guments. If)-.18 +F .884(the \214rst)3.384 F(ar)180 264 Q .875(gument is e)-.18 F(xactly) +-.15 E F1(\()3.375 E F0 .875(and the third ar)3.375 F .875(gument is e) +-.18 F(xactly)-.15 E F1(\))3.375 E F0 3.374(,t)C .874 +(he result is the one-ar)-3.374 F(gument)-.18 E(test of the second ar) +180 276 Q 2.5(gument. Otherwise,)-.18 F(the e)2.5 E(xpression is f)-.15 +E(alse.)-.1 E 2.5(4a)144 288 S -.18(rg)-2.5 G(uments).18 E .384 +(If the \214rst ar)180 300 R .384(gument is)-.18 F F1(!)2.884 E F0 2.885 +(,t)C .385(he result is the ne)-2.885 F -.05(ga)-.15 G .385 +(tion of the three-ar).05 F .385(gument e)-.18 F .385(xpression com-) +-.15 F 1.648(posed of the remaining ar)180 312 R 4.147 +(guments. Otherwise,)-.18 F 1.647(the e)4.147 F 1.647 +(xpression is parsed and e)-.15 F -.25(va)-.25 G(luated).25 E +(according to precedence using the rules listed abo)180 324 Q -.15(ve) +-.15 G(.).15 E 2.5(5o)144 336 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments)-.18 +E 1.635(The e)180 348 R 1.635(xpression is parsed and e)-.15 F -.25(va) +-.25 G 1.635(luated according to precedence using the rules listed).25 F +(abo)180 360 Q -.15(ve)-.15 G(.).15 E F1(times)108 376.8 Q F0 1.229(Pri\ +nt the accumulated user and system times for the shell and for processe\ +s run from the shell.)13.23 F(The return status is 0.)144 388.8 Q F1 +(trap)108 405.6 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E/F4 10 +/Times-Italic@0 SF(ar)A(g)-.37 E F0(])A F4(sigspec)2.5 E F0(...])2.5 E +.702(The command)144 417.6 R F4(ar)3.532 E(g)-.37 E F0 .702 +(is to be read and e)3.422 F -.15(xe)-.15 G .702 +(cuted when the shell recei).15 F -.15(ve)-.25 G 3.203(ss).15 G +(ignal\(s\))-3.203 E F4(sigspec)3.203 E F0 5.703(.I).31 G(f)-5.703 E F4 +(ar)3.533 E(g)-.37 E F0(is)3.423 E .609(absent \(and there is a single) +144 429.6 R F4(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F13.108 E +F0 3.108(,e)C .608 +(ach speci\214ed signal is reset to its original disposition)-3.108 F +.658(\(the v)144 441.6 R .658(alue it had upon entrance to the shell\).) +-.25 F(If)5.658 E F4(ar)3.488 E(g)-.37 E F0 .659 +(is the null string the signal speci\214ed by each)3.378 F F4(sigspec) +144.34 453.6 Q F0 .581 +(is ignored by the shell and by the commands it in)3.391 F -.2(vo)-.4 G +-.1(ke).2 G 3.08(s. If).1 F F4(ar)3.41 E(g)-.37 E F0 .58 +(is not present and)3.3 F F13.08 E F0(has)3.08 E 1.214 +(been supplied, then the trap commands associated with each)144 465.6 R +F4(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215 +F(gu-)-.18 E .86(ments are supplied or if only)144 477.6 R F13.36 +E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86 +(prints the list of commands associated with each)3.36 F 2.83 +(signal. The)144 489.6 R F12.83 E F0 .33(option causes the shell \ +to print a list of signal names and their corresponding num-)2.83 F +4.311(bers. Each)144 501.6 R F4(sigspec)4.651 E F0 1.811 +(is either a signal name de\214ned in <)4.621 F F4(signal.h)A F0 1.81 +(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E +(names are case insensiti)144 513.6 Q .3 -.15(ve a)-.25 H +(nd the SIG pre\214x is optional.).15 E 1.648(If a)144 531.6 R F4 +(sigspec)4.488 E F0(is)4.458 E F2(EXIT)4.148 E F0 1.648 +(\(0\) the command)3.898 F F4(ar)4.479 E(g)-.37 E F0 1.649(is e)4.369 F +-.15(xe)-.15 G 1.649(cuted on e).15 F 1.649(xit from the shell.)-.15 F +1.649(If a)6.649 F F4(sigspec)4.489 E F0(is)4.459 E F2(DEB)144 543.6 Q +(UG)-.09 E F3(,)A F0 1.168(the command)3.418 F F4(ar)3.998 E(g)-.37 E F0 +1.168(is e)3.888 F -.15(xe)-.15 G 1.167(cuted before e).15 F -.15(ve) +-.25 G(ry).15 E F4 1.167(simple command)3.667 F F0(,)A F4(for)3.667 E F0 +(command,)3.667 E F4(case)3.667 E F0(com-)3.667 E(mand,)144 555.6 Q F4 +(select)2.646 E F0 .146(command, e)2.646 F -.15(ve)-.25 G .146 +(ry arithmetic).15 F F4(for)2.646 E F0 .147 +(command, and before the \214rst command e)2.646 F -.15(xe)-.15 G .147 +(cutes in a).15 F .146(shell function \(see)144 567.6 R F2 .146 +(SHELL GRAMMAR)2.646 F F0(abo)2.396 E -.15(ve)-.15 G 2.646(\). Refer).15 +F .146(to the description of the)2.646 F F1(extdeb)2.645 E(ug)-.2 E F0 +.145(option to)2.645 F(the)144 579.6 Q F1(shopt)3.2 E F0 -.2(bu)3.2 G .7 +(iltin for details of its ef).2 F .7(fect on the)-.25 F F1(DEB)3.2 E(UG) +-.1 E F0 3.2(trap. If)3.2 F(a)3.2 E F4(sigspec)3.54 E F0(is)3.51 E F2 +(RETURN)3.2 E F3(,)A F0 .701(the com-)2.951 F(mand)144 591.6 Q F4(ar) +3.474 E(g)-.37 E F0 .644(is e)3.364 F -.15(xe)-.15 G .643 +(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G +.643(cuted with the).15 F F1(.)3.143 E F0(or)3.143 E F1(sour)3.143 E(ce) +-.18 E F0 -.2(bu)3.143 G(iltins).2 E(\214nishes e)144 603.6 Q -.15(xe) +-.15 G(cuting.).15 E .928(If a)144 621.6 R F4(sigspec)3.768 E F0(is) +3.738 E F2(ERR)3.429 E F3(,)A F0 .929(the command)3.179 F F4(ar)3.759 E +(g)-.37 E F0 .929(is e)3.649 F -.15(xe)-.15 G .929(cuted whene).15 F +-.15(ve)-.25 G 3.429(ras).15 G .929(imple command has a non\255zero) +-3.429 F -.15(ex)144 633.6 S 1.009(it status, subject to the follo).15 F +1.009(wing conditions.)-.25 F(The)6.009 E F2(ERR)3.509 E F0 1.009 +(trap is not e)3.259 F -.15(xe)-.15 G 1.008(cuted if the f).15 F 1.008 +(ailed com-)-.1 F .324 +(mand is part of the command list immediately follo)144 645.6 R .324 +(wing a)-.25 F F1(while)2.824 E F0(or)2.824 E F1(until)2.824 E F0 -.1 +(ke)2.824 G(yw)-.05 E .324(ord, part of the test)-.1 F 1.129(in an)144 +657.6 R F4(if)3.639 E F0 1.129(statement, part of a command e)5.589 F +-.15(xe)-.15 G 1.129(cuted in a).15 F F1(&&)3.629 E F0(or)3.629 E/F5 10 +/Symbol SF3.629 E F0 1.129(list, or if the command')3.629 F 3.628 +(sr)-.55 G(eturn)-3.628 E -.25(va)144 669.6 S(lue is being in).25 E -.15 +(ve)-.4 G(rted via).15 E F1(!)2.5 E F0 5(.T)C +(hese are the same conditions obe)-5 E(yed by the)-.15 E F1(err)2.5 E +(exit)-.18 E F0(option.)2.5 E 1.095 +(Signals ignored upon entry to the shell cannot be trapped or reset.)144 +687.6 R -.35(Tr)6.095 G 1.095(apped signals that are not).35 F .662 +(being ignored are reset to their original v)144 699.6 R .662 +(alues in a subshell or subshell en)-.25 F .661(vironment when one is) +-.4 F 2.5(created. The)144 711.6 R(return status is f)2.5 E(alse if an) +-.1 E(y)-.15 E F4(sigspec)2.84 E F0(is in)2.81 E -.25(va)-.4 G +(lid; otherwise).25 E F1(trap)2.5 E F0(returns true.)2.5 E(GNU Bash-4.0) +72 768 Q(2004 Apr 20)148.735 E(19)198.725 E 0 Cg EP +%%Page: 20 20 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Bold@0 SF(type)108 84 Q F0([)2.5 E F1(\255aftpP)A F0(])A/F2 10 +/Times-Italic@0 SF(name)2.5 E F0([)2.5 E F2(name)A F0(...])2.5 E -.4(Wi) +144 96 S .173(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 +E F2(name)3.033 E F0 -.1(wo)2.853 G .174 +(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F +F1144 108 Q F0 .843(option is used,)3.343 F F1(type)3.343 E F0 +.843(prints a string which is one of)3.343 F F2(alias)3.343 E F0(,).27 E +F2 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)3.343 E F0 +(,).24 E F2 -.2(bu)3.342 G(iltin).2 E F0 3.342(,o).24 G(r)-3.342 E F2 +(\214le)5.252 E F0(if)3.522 E F2(name)144.36 120 Q F0 .086 +(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086 +(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15 +(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F2 +(name)2.947 E F0 .087(is not)2.767 F .119 +(found, then nothing is printed, and an e)144 132 R .118 +(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F +F12.618 E F0 .118(option is used,)2.618 F F1(type)2.618 E F0 .855 +(either returns the name of the disk \214le that w)144 144 R .855 +(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F2(name)3.715 E F0 +.855(were speci\214ed as a com-)3.535 F .641(mand name, or nothing if) +144 156 R/F3 10/Courier@0 SF .641(type -t name)3.141 F F0 -.1(wo)3.141 G +.641(uld not return).1 F F2(\214le)3.14 E F0 5.64(.T).18 G(he)-5.64 E F1 +3.14 E F0 .64(option forces a)3.14 F/F4 9/Times-Bold@0 SF -.666 +(PA)3.14 G(TH)-.189 E F0 .112(search for each)144 168 R F2(name)2.612 E +F0 2.612(,e)C -.15(ve)-2.862 G 2.613(ni).15 G(f)-2.613 E F3 .113 +(type -t name)2.613 F F0 -.1(wo)2.613 G .113(uld not return).1 F F2 +(\214le)2.613 E F0 5.113(.I).18 G 2.613(fac)-5.113 G .113 +(ommand is hashed,)-2.613 F F12.613 E F0(and)144 180 Q F1 +2.945 E F0 .445(print the hashed v)2.945 F .444 +(alue, not necessarily the \214le that appears \214rst in)-.25 F F4 +-.666(PA)2.944 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .444(If the) +4.944 F F12.944 E F0(option)2.944 E .265(is used,)144 192 R F1 +(type)2.765 E F0 .265(prints all of the places that contain an e)2.765 F +-.15(xe)-.15 G .265(cutable named).15 F F2(name)2.765 E F0 5.265(.T).18 +G .265(his includes aliases)-5.265 F .427 +(and functions, if and only if the)144 204 R F12.926 E F0 .426 +(option is not also used.)2.926 F .426 +(The table of hashed commands is not)5.426 F .548(consulted when using) +144 216 R F13.048 E F0 5.548(.T)C(he)-5.548 E F13.048 E F0 +.549(option suppresses shell function lookup, as with the)3.048 F F1 +(command)3.049 E F0 -.2(bu)144 228 S(iltin.).2 E F1(type)5 E F0 +(returns true if all of the ar)2.5 E(guments are found, f)-.18 E +(alse if an)-.1 E 2.5(ya)-.15 G(re not found.)-2.5 E F1(ulimit)108 244.8 +Q F0([)2.5 E F1(\255HST)A(abcde\214lmnpqrstuvx)-.92 E F0([)2.5 E F2 +(limit)A F0(]])A(Pro)144 256.8 Q .244(vides control o)-.15 F -.15(ve) +-.15 G 2.744(rt).15 G .244(he resources a)-2.744 F -.25(va)-.2 G .244 +(ilable to the shell and to processes started by it, on systems).25 F +.943(that allo)144 268.8 R 3.443(ws)-.25 G .943(uch control.)-3.443 F +(The)5.943 E F13.443 E F0(and)3.443 E F13.444 E F0 .944 +(options specify that the hard or soft limit is set for the)3.444 F(gi) +144 280.8 Q -.15(ve)-.25 G 2.709(nr).15 G 2.709(esource. A)-2.709 F .208 +(hard limit cannot be increased by a non-root user once it is set; a so\ +ft limit may)2.709 F .425(be increased up to the v)144 292.8 R .425 +(alue of the hard limit.)-.25 F .426(If neither)5.425 F F12.926 E +F0(nor)2.926 E F12.926 E F0 .426 +(is speci\214ed, both the soft and)2.926 F .139(hard limits are set.)144 +304.8 R .139(The v)5.139 F .139(alue of)-.25 F F2(limit)2.729 E F0 .139 +(can be a number in the unit speci\214ed for the resource or one)3.319 F +.741(of the special v)144 316.8 R(alues)-.25 E F1(hard)3.241 E F0(,)A F1 +(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F1(unlimited)3.241 E F0 3.241(,w) +C .741(hich stand for the current hard limit, the current)-3.241 F .78 +(soft limit, and no limit, respecti)144 328.8 R -.15(ve)-.25 G(ly).15 E +5.78(.I)-.65 G(f)-5.78 E F2(limit)3.37 E F0 .78 +(is omitted, the current v)3.96 F .78(alue of the soft limit of the)-.25 +F .498(resource is printed, unless the)144 340.8 R F12.999 E F0 +.499(option is gi)2.999 F -.15(ve)-.25 G 2.999(n. When).15 F .499 +(more than one resource is speci\214ed, the)2.999 F +(limit name and unit are printed before the v)144 352.8 Q 2.5 +(alue. Other)-.25 F(options are interpreted as follo)2.5 E(ws:)-.25 E F1 +144 364.8 Q F0(All current limits are reported)25.3 E F1144 +376.8 Q F0(The maximum sock)24.74 E(et b)-.1 E(uf)-.2 E(fer size)-.25 E +F1144 388.8 Q F0(The maximum size of core \214les created)25.86 E +F1144 400.8 Q F0(The maximum size of a process')24.74 E 2.5(sd) +-.55 G(ata se)-2.5 E(gment)-.15 E F1144 412.8 Q F0 +(The maximum scheduling priority \("nice"\))25.86 E F1144 424.8 Q +F0(The maximum size of \214les written by the shell and its children) +26.97 E F1144 436.8 Q F0(The maximum number of pending signals) +27.52 E F1144 448.8 Q F0(The maximum size that may be lock)27.52 E +(ed into memory)-.1 E F1144 460.8 Q F0 +(The maximum resident set size \(man)21.97 E 2.5(ys)-.15 G +(ystems do not honor this limit\))-2.5 E F1144 472.8 Q F0 .791(Th\ +e maximum number of open \214le descriptors \(most systems do not allo) +24.74 F 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F(be set\))180 +484.8 Q F1144 496.8 Q F0 +(The pipe size in 512-byte blocks \(this may not be set\))24.74 E F1 +144 508.8 Q F0 +(The maximum number of bytes in POSIX message queues)24.74 E F1144 +520.8 Q F0(The maximum real-time scheduling priority)25.86 E F1144 +532.8 Q F0(The maximum stack size)26.41 E F1144 544.8 Q F0 +(The maximum amount of cpu time in seconds)26.97 E F1144 556.8 Q +F0(The maximum number of processes a)24.74 E -.25(va)-.2 G +(ilable to a single user).25 E F1144 568.8 Q F0 +(The maximum amount of virtual memory a)25.3 E -.25(va)-.2 G +(ilable to the shell).25 E F1144 580.8 Q F0 +(The maximum number of \214le locks)25.3 E F1144 592.8 Q F0 +(The maximum number of threads)23.63 E(If)144 609.6 Q F2(limit)2.933 E +F0 .343(is gi)3.523 F -.15(ve)-.25 G .343(n, it is the ne).15 F 2.843 +(wv)-.25 G .343(alue of the speci\214ed resource \(the)-3.093 F F1 +2.843 E F0 .343(option is display only\).)2.843 F .343(If no)5.343 F +.176(option is gi)144 621.6 R -.15(ve)-.25 G .176(n, then).15 F F1 +2.676 E F0 .175(is assumed.)2.676 F -1.11(Va)5.175 G .175 +(lues are in 1024-byte increments, e)1.11 F .175(xcept for)-.15 F F1 +2.675 E F0 2.675(,w)C .175(hich is in)-2.675 F(seconds,)144 633.6 +Q F12.515 E F0 2.515(,w)C .015 +(hich is in units of 512-byte blocks, and)-2.515 F F12.516 E F0(,) +A F12.516 E F0(,)A F12.516 E F0 2.516(,a)C(nd)-2.516 E F1 +2.516 E F0 2.516(,w)C .016(hich are unscaled v)-2.516 F(al-)-.25 E +3.788(ues. The)144 645.6 R 1.287(return status is 0 unless an in)3.787 F +-.25(va)-.4 G 1.287(lid option or ar).25 F 1.287 +(gument is supplied, or an error occurs)-.18 F(while setting a ne)144 +657.6 Q 2.5(wl)-.25 G(imit.)-2.5 E F1(umask)108 674.4 Q F0([)2.5 E F1 +A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(mode)-2.5 E F0(])A .2 +(The user \214le-creation mask is set to)144 686.4 R F2(mode)2.7 E F0 +5.2(.I).18 G(f)-5.2 E F2(mode)3.08 E F0(be)2.88 E .2 +(gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\ +therwise it is interpreted as a symbolic mode mask similar to that acce\ +pted by)144 698.4 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144 +710.4 Q F2(mode)3.262 E F0 .382(is omitted, the current v)3.062 F .382 +(alue of the mask is printed.)-.25 F(The)5.382 E F12.882 E F0 .382 +(option causes the mask to be)2.882 F .547 +(printed in symbolic form; the def)144 722.4 R .547 +(ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G +(he)-3.047 E F13.047 E F0 .547(option is supplied, and)3.047 F +(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(20)198.725 E 0 Cg EP +%%Page: 21 21 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48 +(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10 +/Times-Italic@0 SF(mode)144.38 84 Q F0 .551 +(is omitted, the output is in a form that may be reused as input.)3.231 +F .552(The return status is 0 if the)5.552 F(mode w)144 96 Q +(as successfully changed or if no)-.1 E F1(mode)2.5 E F0(ar)2.5 E +(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E/F2 10 +/Times-Bold@0 SF(unalias)108 112.8 Q F0<5bad>2.5 E F2(a)A F0 2.5(][)C F1 +(name)-2.5 E F0(...])2.5 E(Remo)144 124.8 Q 1.955 -.15(ve e)-.15 H(ach) +.15 E F1(name)4.155 E F0 1.655(from the list of de\214ned aliases.)4.155 +F(If)6.655 E F24.155 E F0 1.655 +(is supplied, all alias de\214nitions are)4.155 F(remo)144 136.8 Q -.15 +(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E +(alue is true unless a supplied)-.25 E F1(name)2.86 E F0 +(is not a de\214ned alias.)2.68 E F2(unset)108 153.6 Q F0<5bad>2.5 E F2 +(fv)A F0 2.5(][)C F1(name)-2.5 E F0(...])2.5 E -.15(Fo)144 165.6 S 3.106 +(re).15 G(ach)-3.106 E F1(name)3.106 E F0 3.106(,r).18 G(emo)-3.106 E +.906 -.15(ve t)-.15 H .606(he corresponding v).15 F .607 +(ariable or function.)-.25 F .607(If no options are supplied, or the) +5.607 F F2144 177.6 Q F0 .305(option is gi)2.805 F -.15(ve)-.25 G +.305(n, each).15 F F1(name)3.165 E F0 .305(refers to a shell v)2.985 F +2.805(ariable. Read-only)-.25 F -.25(va)2.805 G .304 +(riables may not be unset.).25 F(If)5.304 E F2144 189.6 Q F0 .459 +(is speci\214ed, each)2.959 F F1(name)3.319 E F0 .459 +(refers to a shell function, and the function de\214nition is remo)3.139 +F -.15(ve)-.15 G 2.96(d. Each).15 F .903(unset v)144 201.6 R .903 +(ariable or function is remo)-.25 F -.15(ve)-.15 G 3.402(df).15 G .902 +(rom the en)-3.402 F .902(vironment passed to subsequent commands.)-.4 F +(If)5.902 E(an)144 213.6 Q 6.915(yo)-.15 G(f)-6.915 E/F3 9/Times-Bold@0 +SF(COMP_W)6.915 E(ORDBREAKS)-.09 E/F4 9/Times-Roman@0 SF(,)A F3(RANDOM) +6.665 E F4(,)A F3(SECONDS)6.665 E F4(,)A F3(LINENO)6.665 E F4(,)A F3 +(HISTCMD)6.666 E F4(,)A F3(FUNCN)6.666 E(AME)-.18 E F4(,)A F3(GR)144 +225.6 Q(OUPS)-.27 E F4(,)A F0(or)2.523 E F3(DIRST)2.773 E -.495(AC)-.81 +G(K).495 E F0 .272(are unset, the)2.522 F 2.772(yl)-.15 G .272 +(ose their special properties, e)-2.772 F -.15(ve)-.25 G 2.772(ni).15 G +2.772(ft)-2.772 G(he)-2.772 E 2.772(ya)-.15 G .272(re subsequently) +-2.772 F 2.5(reset. The)144 237.6 R -.15(ex)2.5 G +(it status is true unless a).15 E F1(name)2.86 E F0(is readonly)2.68 E +(.)-.65 E F2(wait)108 254.4 Q F0([)2.5 E F1 2.5(n.)C(..)-2.5 E F0(])A +-.8(Wa)144 266.4 S .288 +(it for each speci\214ed process and return its termination status.).8 F +(Each)5.288 E F1(n)3.148 E F0 .288(may be a process ID or a)3.028 F .722 +(job speci\214cation; if a job spec is gi)144 278.4 R -.15(ve)-.25 G +.722(n, all processes in that job').15 F 3.222(sp)-.55 G .722 +(ipeline are w)-3.222 F .722(aited for)-.1 F 5.722(.I)-.55 G(f)-5.722 E +F1(n)3.582 E F0(is)3.462 E 1.265(not gi)144 290.4 R -.15(ve)-.25 G 1.265 +(n, all currently acti).15 F 1.565 -.15(ve c)-.25 H 1.265 +(hild processes are w).15 F 1.265(aited for)-.1 F 3.765(,a)-.4 G 1.266 +(nd the return status is zero.)-3.765 F(If)6.266 E F1(n)4.126 E F0 .457 +(speci\214es a non-e)144 302.4 R .457 +(xistent process or job, the return status is 127.)-.15 F .457 +(Otherwise, the return status is the)5.457 F -.15(ex)144 314.4 S +(it status of the last process or job w).15 E(aited for)-.1 E(.)-.55 E +/F5 10.95/Times-Bold@0 SF(SEE ALSO)72 331.2 Q F0(bash\(1\), sh\(1\))108 +343.2 Q(GNU Bash-4.0)72 768 Q(2004 Apr 20)148.735 E(21)198.725 E 0 Cg EP +%%Trailer +end +%%EOF diff --git a/doc/fdl.texi b/doc/fdl.texi new file mode 100644 index 0000000..8805f1a --- /dev/null +++ b/doc/fdl.texi @@ -0,0 +1,506 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/doc/fdl.txt b/doc/fdl.txt new file mode 100644 index 0000000..2f7e03c --- /dev/null +++ b/doc/fdl.txt @@ -0,0 +1,451 @@ + + GNU Free Documentation License + Version 1.3, 3 November 2008 + + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The "publisher" means any person or entity that distributes copies of +the Document to the public. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no +other conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to +give them a chance to provide you with an updated version of the +Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other +documents released under this License, and replace the individual +copies of this License in the various documents with a single copy +that is included in the collection, provided that you follow the rules +of this License for verbatim copying of each of the documents in all +other respects. + +You may extract a single document from such a collection, and +distribute it individually under this License, provided you insert a +copy of this License into the extracted document, and follow this +License in all other respects regarding verbatim copying of that +document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions of the +GNU Free Documentation License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in +detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +11. RELICENSING + +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the site +means any set of copyrightable works thus published on the MMC site. + +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +"Incorporate" means to publish or republish a Document, in whole or in +part, as part of another Document. + +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole or +in part into the MMC, (1) had no cover texts or invariant sections, and +(2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. diff --git a/doc/htmlpost.sh b/doc/htmlpost.sh new file mode 100755 index 0000000..51241b1 --- /dev/null +++ b/doc/htmlpost.sh @@ -0,0 +1,19 @@ +#! /bin/sh +# +# Some of these should really be done by man2html +# +# The ~/xxx links don't really work -- netscape doesn't expand the home +# directory of the user running navigator +# + +sed -e 's|gnu.bash.bug|gnu.bash.bug|g' \ + -e 's|/bin/bash|/bin/bash|g' \ + -e 's|/etc/profile|/etc/profile|g' \ + -e 's|~/.bash_profile|~/.bash_profile|g' \ + -e 's|~/.bash_login|~/.bash_login|g' \ + -e 's|~/.profile|~/.profile|g' \ + -e 's|~/.bashrc|~/.bashrc|g' \ + -e 's|~/.bash_logout|~/.bash_logout|g' \ + -e 's|~/.bash_history|~/.bash_history|g' \ + -e 's|~/.inputrc|~/.inputrc|g' \ + -e 's|/etc/inputrc|/etc/inputrc|g' diff --git a/doc/infopost.sh b/doc/infopost.sh new file mode 100755 index 0000000..85c49b4 --- /dev/null +++ b/doc/infopost.sh @@ -0,0 +1,8 @@ +#! /bin/sh +# +# Some of these should really be done by options to makeinfo or by +# using @setfilename, but this way we can have both bashref.info and +# bash.info (for installing) +# + +sed -e 's|bashref.info|bash.info|g' diff --git a/doc/rbash.0 b/doc/rbash.0 new file mode 100644 index 0000000..eb06220 --- /dev/null +++ b/doc/rbash.0 @@ -0,0 +1,59 @@ +RBASH(1) RBASH(1) + + + +NNAAMMEE + rbash - restricted bash, see bbaasshh(1) + +RREESSTTRRIICCTTEEDD SSHHEELLLL + If bbaasshh is started with the name rrbbaasshh, or the --rr option is supplied at + invocation, the shell becomes restricted. A restricted shell is used + to set up an environment more controlled than the standard shell. It + behaves identically to bbaasshh with the exception that the following are + disallowed or not performed: + + +o changing directories with ccdd + + +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, EENNVV, or BBAASSHH__EENNVV + + +o specifying command names containing // + + +o specifying a file name containing a // as an argument to the .. + builtin command + + +o Specifying a filename containing a slash as an argument to the + --pp option to the hhaasshh builtin command + + +o importing function definitions from the shell environment at + startup + + +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at + startup + + +o redirecting output using the >, >|, <>, >&, &>, and >> redirect- + ion operators + + +o using the eexxeecc builtin command to replace the shell with another + command + + +o adding or deleting builtin commands with the --ff and --dd options + to the eennaabbllee builtin command + + +o Using the eennaabbllee builtin command to enable disabled shell + builtins + + +o specifying the --pp option to the ccoommmmaanndd builtin command + + +o turning off restricted mode with sseett ++rr or sseett ++oo rreessttrriicctteedd. + + These restrictions are enforced after any startup files are read. + + When a command that is found to be a shell script is executed, rrbbaasshh + turns off any restrictions in the shell spawned to execute the script. + +SSEEEE AALLSSOO + bash(1) + + + +GNU Bash-4.0 2004 Apr 20 RBASH(1) diff --git a/doc/rbash.1 b/doc/rbash.1 new file mode 100644 index 0000000..56e38fd --- /dev/null +++ b/doc/rbash.1 @@ -0,0 +1,8 @@ +.TH RBASH 1 "2004 Apr 20" "GNU Bash-4.0" +.SH NAME +rbash \- restricted bash, see \fBbash\fR(1) +.SH RESTRICTED SHELL +.nr zY 1 +.so bash.1 +.SH SEE ALSO +bash(1) diff --git a/doc/rbash.ps b/doc/rbash.ps new file mode 100644 index 0000000..518087d --- /dev/null +++ b/doc/rbash.ps @@ -0,0 +1,280 @@ +%!PS-Adobe-3.0 +%%Creator: groff version 1.19.2 +%%CreationDate: Wed Dec 30 13:07:37 2009 +%%DocumentNeededResources: font Times-Roman +%%+ font Times-Bold +%%DocumentSuppliedResources: procset grops 1.19 2 +%%Pages: 1 +%%PageOrder: Ascend +%%DocumentMedia: Default 595 842 0 () () +%%Orientation: Portrait +%%EndComments +%%BeginDefaults +%%PageMedia: Default +%%EndDefaults +%%BeginProlog +%%BeginResource: procset grops 1.19 2 +%!PS-Adobe-3.0 Resource-ProcSet +/setpacking where{ +pop +currentpacking +true setpacking +}if +/grops 120 dict dup begin +/SC 32 def +/A/show load def +/B{0 SC 3 -1 roll widthshow}bind def +/C{0 exch ashow}bind def +/D{0 exch 0 SC 5 2 roll awidthshow}bind def +/E{0 rmoveto show}bind def +/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def +/G{0 rmoveto 0 exch ashow}bind def +/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/I{0 exch rmoveto show}bind def +/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def +/K{0 exch rmoveto 0 exch ashow}bind def +/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/M{rmoveto show}bind def +/N{rmoveto 0 SC 3 -1 roll widthshow}bind def +/O{rmoveto 0 exch ashow}bind def +/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/Q{moveto show}bind def +/R{moveto 0 SC 3 -1 roll widthshow}bind def +/S{moveto 0 exch ashow}bind def +/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/SF{ +findfont exch +[exch dup 0 exch 0 exch neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/MF{ +findfont +[5 2 roll +0 3 1 roll +neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/level0 0 def +/RES 0 def +/PL 0 def +/LS 0 def +/MANUAL{ +statusdict begin/manualfeed true store end +}bind def +/PLG{ +gsave newpath clippath pathbbox grestore +exch pop add exch pop +}bind def +/BP{ +/level0 save def +1 setlinecap +1 setlinejoin +72 RES div dup scale +LS{ +90 rotate +}{ +0 PL translate +}ifelse +1 -1 scale +}bind def +/EP{ +level0 restore +showpage +}def +/DA{ +newpath arcn stroke +}bind def +/SN{ +transform +.25 sub exch .25 sub exch +round .25 add exch round .25 add exch +itransform +}bind def +/DL{ +SN +moveto +SN +lineto stroke +}bind def +/DC{ +newpath 0 360 arc closepath +}bind def +/TM matrix def +/DE{ +TM currentmatrix pop +translate scale newpath 0 0 .5 0 360 arc closepath +TM setmatrix +}bind def +/RC/rcurveto load def +/RL/rlineto load def +/ST/stroke load def +/MT/moveto load def +/CL/closepath load def +/Fr{ +setrgbcolor fill +}bind def +/setcmykcolor where{ +pop +/Fk{ +setcmykcolor fill +}bind def +}if +/Fg{ +setgray fill +}bind def +/FL/fill load def +/LW/setlinewidth load def +/Cr/setrgbcolor load def +/setcmykcolor where{ +pop +/Ck/setcmykcolor load def +}if +/Cg/setgray load def +/RE{ +findfont +dup maxlength 1 index/FontName known not{1 add}if dict begin +{ +1 index/FID ne{def}{pop pop}ifelse +}forall +/Encoding exch def +dup/FontName exch def +currentdict end definefont pop +}bind def +/DEFS 0 def +/EBEGIN{ +moveto +DEFS begin +}bind def +/EEND/end load def +/CNT 0 def +/level1 0 def +/PBEGIN{ +/level1 save def +translate +div 3 1 roll div exch scale +neg exch neg exch translate +0 setgray +0 setlinecap +1 setlinewidth +0 setlinejoin +10 setmiterlimit +[]0 setdash +/setstrokeadjust where{ +pop +false setstrokeadjust +}if +/setoverprint where{ +pop +false setoverprint +}if +newpath +/CNT countdictstack def +userdict begin +/showpage{}def +/setpagedevice{}def +}bind def +/PEND{ +countdictstack CNT sub{end}repeat +level1 restore +}bind def +end def +/setpacking where{ +pop +setpacking +}if +%%EndResource +%%EndProlog +%%BeginSetup +%%BeginFeature: *PageSize Default +<< /PageSize [ 595 842 ] /ImagingBBox null >> setpagedevice +%%EndFeature +%%IncludeResource: font Times-Roman +%%IncludeResource: font Times-Bold +grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 +def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron +/Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent +/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen +/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon +/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O +/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex +/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y +/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft +/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl +/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut +/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash +/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen +/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft +/logicalnot/minus/registered/macron/degree/plusminus/twosuperior +/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior +/ordmasculine/guilsinglright/onequarter/onehalf/threequarters +/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE +/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn +/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash +/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def +/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(RB)72 48 Q 376.2(ASH\(1\) RB)-.35 F(ASH\(1\)) +-.35 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 +(rbash \255 restricted bash, see)108 96 Q/F2 10/Times-Bold@0 SF(bash)2.5 +E F0(\(1\))A F1(RESTRICTED SHELL)72 112.8 Q F0(If)108 124.8 Q F2(bash) +4.397 E F0 1.897(is started with the name)4.397 F F2(rbash)4.397 E F0 +4.397(,o)C 4.397(rt)-4.397 G(he)-4.397 E F24.397 E F0 1.896 +(option is supplied at in)4.397 F -.2(vo)-.4 G 1.896 +(cation, the shell becomes).2 F 3.445(restricted. A)108 136.8 R .945 +(restricted shell is used to set up an en)3.445 F .946 +(vironment more controlled than the standard shell.)-.4 F(It)5.946 E +(beha)108 148.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F2 +(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E +(wing are disallo)-.25 E(wed or not performed:)-.25 E 32.5<8363>108 +165.6 S(hanging directories with)-32.5 E F2(cd)2.5 E F0 32.5<8373>108 +182.4 S(etting or unsetting the v)-32.5 E(alues of)-.25 E/F3 9 +/Times-Bold@0 SF(SHELL)2.5 E/F4 9/Times-Roman@0 SF(,)A F3 -.666(PA)2.25 +G(TH)-.189 E F4(,)A F3(ENV)2.25 E F4(,)A F0(or)2.25 E F3 -.27(BA)2.5 G +(SH_ENV).27 E F0 32.5<8373>108 199.2 S +(pecifying command names containing)-32.5 E F2(/)2.5 E F0 32.5<8373>108 +216 S(pecifying a \214le name containing a)-32.5 E F2(/)2.5 E F0 +(as an ar)2.5 E(gument to the)-.18 E F2(.)2.5 E F0 -.2(bu)5 G +(iltin command).2 E 32.5<8353>108 232.8 S .351 +(pecifying a \214lename containing a slash as an ar)-32.5 F .351 +(gument to the)-.18 F F22.851 E F0 .351(option to the)2.851 F F2 +(hash)2.851 E F0 -.2(bu)2.851 G .351(iltin com-).2 F(mand)144 244.8 Q +32.5<8369>108 261.6 S(mporting function de\214nitions from the shell en) +-32.5 E(vironment at startup)-.4 E 32.5<8370>108 278.4 S(arsing the v) +-32.5 E(alue of)-.25 E F3(SHELLOPTS)2.5 E F0(from the shell en)2.25 E +(vironment at startup)-.4 E 32.5<8372>108 295.2 S(edirecting output usi\ +ng the >, >|, <>, >&, &>, and >> redirection operators)-32.5 E 32.5 +<8375>108 312 S(sing the)-32.5 E F2(exec)2.5 E F0 -.2(bu)2.5 G +(iltin command to replace the shell with another command).2 E 32.5<8361> +108 328.8 S(dding or deleting b)-32.5 E(uiltin commands with the)-.2 E +F22.5 E F0(and)2.5 E F22.5 E F0(options to the)2.5 E F2 +(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E 32.5<8355>108 345.6 S +(sing the)-32.5 E F2(enable)2.5 E F0 -.2(bu)2.5 G +(iltin command to enable disabled shell b).2 E(uiltins)-.2 E 32.5<8373> +108 362.4 S(pecifying the)-32.5 E F22.5 E F0(option to the)2.5 E +F2(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E 32.5<8374>108 379.2 +S(urning of)-32.5 E 2.5(fr)-.25 G(estricted mode with)-2.5 E F2(set +r) +2.5 E F0(or)2.5 E F2(set +o r)2.5 E(estricted)-.18 E F0(.)A +(These restrictions are enforced after an)108 396 Q 2.5(ys)-.15 G +(tartup \214les are read.)-2.5 E .429 +(When a command that is found to be a shell script is e)108 412.8 R -.15 +(xe)-.15 G(cuted,).15 E F2(rbash)2.929 E F0 .429(turns of)2.929 F 2.929 +(fa)-.25 G .729 -.15(ny r)-2.929 H .429(estrictions in the shell).15 F +(spa)108 424.8 Q(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E +F1(SEE ALSO)72 441.6 Q F0(bash\(1\))108 453.6 Q(GNU Bash-4.0)72 768 Q +(2004 Apr 20)148.735 E(1)203.725 E 0 Cg EP +%%Trailer +end +%%EOF diff --git a/doc/rose94.pdf b/doc/rose94.pdf new file mode 100644 index 0000000..1772f54 Binary files /dev/null and b/doc/rose94.pdf differ diff --git a/doc/rose94.ps b/doc/rose94.ps new file mode 100644 index 0000000..1fff283 --- /dev/null +++ b/doc/rose94.ps @@ -0,0 +1,1581 @@ +%!PS-Adobe-3.0 +%%Creator: groff version 1.08 +%%DocumentNeededResources: font Times-Bold +%%+ font Times-Italic +%%+ font Times-Roman +%%+ font Courier +%%+ font Symbol +%%DocumentSuppliedResources: procset grops 1.08 0 +%%Pages: 13 +%%PageOrder: Ascend +%%Orientation: Portrait +%%EndComments +%%BeginProlog +%%BeginResource: procset grops 1.08 0 +/setpacking where{ +pop +currentpacking +true setpacking +}if +/grops 120 dict dup begin +/SC 32 def +/A/show load def +/B{0 SC 3 -1 roll widthshow}bind def +/C{0 exch ashow}bind def +/D{0 exch 0 SC 5 2 roll awidthshow}bind def +/E{0 rmoveto show}bind def +/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def +/G{0 rmoveto 0 exch ashow}bind def +/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/I{0 exch rmoveto show}bind def +/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def +/K{0 exch rmoveto 0 exch ashow}bind def +/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/M{rmoveto show}bind def +/N{rmoveto 0 SC 3 -1 roll widthshow}bind def +/O{rmoveto 0 exch ashow}bind def +/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/Q{moveto show}bind def +/R{moveto 0 SC 3 -1 roll widthshow}bind def +/S{moveto 0 exch ashow}bind def +/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/SF{ +findfont exch +[exch dup 0 exch 0 exch neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/MF{ +findfont +[5 2 roll +0 3 1 roll +neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/level0 0 def +/RES 0 def +/PL 0 def +/LS 0 def +/PLG{ +gsave newpath clippath pathbbox grestore +exch pop add exch pop +}bind def +/BP{ +/level0 save def +1 setlinecap +1 setlinejoin +72 RES div dup scale +LS{ +90 rotate +}{ +0 PL translate +}ifelse +1 -1 scale +}bind def +/EP{ +level0 restore +showpage +}bind def +/DA{ +newpath arcn stroke +}bind def +/SN{ +transform +.25 sub exch .25 sub exch +round .25 add exch round .25 add exch +itransform +}bind def +/DL{ +SN +moveto +SN +lineto stroke +}bind def +/DC{ +newpath 0 360 arc closepath +}bind def +/TM matrix def +/DE{ +TM currentmatrix pop +translate scale newpath 0 0 .5 0 360 arc closepath +TM setmatrix +}bind def +/RC/rcurveto load def +/RL/rlineto load def +/ST/stroke load def +/MT/moveto load def +/CL/closepath load def +/FL{ +currentgray exch setgray fill setgray +}bind def +/BL/fill load def +/LW/setlinewidth load def +/RE{ +findfont +dup maxlength 1 index/FontName known not{1 add}if dict begin +{ +1 index/FID ne{def}{pop pop}ifelse +}forall +/Encoding exch def +dup/FontName exch def +currentdict end definefont pop +}bind def +/DEFS 0 def +/EBEGIN{ +moveto +DEFS begin +}bind def +/EEND/end load def +/CNT 0 def +/level1 0 def +/PBEGIN{ +/level1 save def +translate +div 3 1 roll div exch scale +neg exch neg exch translate +0 setgray +0 setlinecap +1 setlinewidth +0 setlinejoin +10 setmiterlimit +[]0 setdash +/setstrokeadjust where{ +pop +false setstrokeadjust +}if +/setoverprint where{ +pop +false setoverprint +}if +newpath +/CNT countdictstack def +userdict begin +/showpage{}def +}bind def +/PEND{ +clear +countdictstack CNT sub{end}repeat +level1 restore +}bind def +end def +/setpacking where{ +pop +setpacking +}if +%%EndResource +%%IncludeResource: font Times-Bold +%%IncludeResource: font Times-Italic +%%IncludeResource: font Times-Roman +%%IncludeResource: font Courier +%%IncludeResource: font Symbol +grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL +792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron/scaron/zcaron +/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space +/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft +/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four +/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C +/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash +/bracketright/circumflex/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q +/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase +/guillemotleft/guillemotright/bullet/florin/fraction/perthousand/dagger +/daggerdbl/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut +/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash +/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guilsinglleft/logicalnot/minus +/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu +/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guilsinglright +/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde +/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute +/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls +/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute +/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve +/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex +/udieresis/yacute/thorn/ydieresis]def/Courier@0 ENC0/Courier RE/Times-Roman@0 +ENC0/Times-Roman RE/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0 +/Times-Bold RE +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 12/Times-Bold@0 SF(Bash, the Bour)210.99 123 Q(ne\255Again Shell)-.18 E/F1 +10/Times-Italic@0 SF(Chet Rame)263.85 147 Q(y)-.3 E(Case W)221.72 159 Q +(estern Reserve Univer)-.92 E(sity)-.1 E -.15(ch)250.425 171 S(et@po.cwru.edu) +.15 E(ABSTRA)264.535 213 Q(CT)-.3 E/F2 10/Times-Roman@0 SF .019(An o)133 237 R +-.15(ve)-.15 G(rvie).15 E 2.519(wo)-.25 G 2.519(f/)191.918 237 S .018 +(bin/sh\255compatible shells is presented, as well as an introduction to) +200.547 237 R .128(the POSIX.2 shell and tools standard.)108 249 R .128 +(These serv)5.128 F 2.628(ea)-.15 G 2.628(sa)318.562 249 S 2.628(ni)329.52 249 +S .128(ntroduction to bash.)339.928 249 R 2.628(Ac)5.128 G(ompar)439.32 249 Q +(-)-.2 E .188(ison of bash to sh and ksh is presented, as well as a discussion\ + of features unique to bash.)108 261 R(Finally)108 273 Q 3.178(,s)-.65 G .678 +(ome of the changes and ne)145.258 273 R 3.178(wf)-.25 G .678 +(eatures to appear in the ne)268.486 273 R .678(xt bash release will be)-.15 F +(discussed.)108 285 Q/F3 10/Times-Bold@0 SF 2.5(1. Intr)72 321 R(oduction)-.18 +E(Bash)97 336.6 Q F2 .904(is the shell, or command language interpreter)3.404 F +3.404(,t)-.4 G .904(hat will appear in the GNU operating system.)316.032 336.6 +R .782(The name is an acron)72 348.6 R .782(ym for the `)-.15 F(`Bourne\255Ag) +-.74 E .782(ain SHell')-.05 F .782(', a pun on Ste)-.74 F 1.082 -.15(ve B)-.25 +H .783(ourne, the author of the direct).15 F .212(ancestor of the current)72 +360.6 R/F4 9/Times-Roman@0 SF(UNIX)2.712 E F2 2.712<8773>C(hell)199.131 360.6 Q +F1(/bin/sh)2.712 E F2 2.712(,w)C .212(hich appeared in the Se)256.505 360.6 R +-.15(ve)-.25 G .211(nth Edition Bell Labs Research v).15 F(er)-.15 E(-)-.2 E +(sion of)72 372.6 Q F4(UNIX)2.5 E F2([1].).833 E .191(Bash is an)97 388.2 R F3 +(sh)2.691 E F2 .192 +(\255compatible shell that incorporates useful features from the K)B .192 +(orn shell \()-.35 F F3(ksh)A F2 .833(\)[)C .192(2] and the)-.833 F 2.767(Cs)72 +400.2 S .267(hell \()85.327 400.2 R F3(csh)A F2 .833(\)[)C .267 +(3], described later in this article.)-.833 F .266 +(It is ultimately intended to be a conformant implementation)5.267 F 1.965 +(of the IEEE POSIX Shell and T)72 412.2 R 1.966(ools speci\214cation \(IEEE W) +-.8 F 1.966(orking Group 1003.2\).)-.8 F 1.966(It of)6.966 F 1.966 +(fers functional)-.25 F(impro)72 424.2 Q -.15(ve)-.15 G(ments o).15 E -.15(ve) +-.15 G 2.5(rs).15 G 2.5(hf)155.28 424.2 S(or both interacti)166.11 424.2 Q .3 +-.15(ve a)-.25 H(nd programming use.).15 E .802 +(While the GNU operating system will most lik)97 439.8 R .801(ely include a v) +-.1 F .801(ersion of the Berk)-.15 F(ele)-.1 E 3.301(ys)-.15 G .801 +(hell csh, bash)448.238 439.8 R .108(will be the def)72 451.8 R .108 +(ault shell.)-.1 F(Lik)5.108 E 2.608(eo)-.1 G .108(ther GNU softw)199.658 451.8 +R .108(are, bash is quite portable.)-.1 F .109(It currently runs on nearly e) +5.109 F -.15(ve)-.25 G(ry).15 E -.15(ve)72 463.8 S .367(rsion of).15 F F4(UNIX) +2.867 E F2 .367(and a fe)2.867 F 2.867(wo)-.25 G .367 +(ther operating systems \255 an independently-supported port e)187.933 463.8 R +.366(xists for OS/2, and)-.15 F .706(there are rumors of ports to DOS and W)72 +475.8 R(indo)-.4 E .706(ws NT)-.25 F 5.706(.P)-.74 G .706(orts to)295.97 475.8 +R F4(UNIX)3.206 E F2(-lik)A 3.206(es)-.1 G .706(ystems such as QNX and Minix) +372.979 475.8 R(are part of the distrib)72 487.8 Q(ution.)-.2 E .51 +(The original author of bash w)97 503.4 R .51(as Brian F)-.1 F .509 +(ox, an emplo)-.15 F .509(yee of the Free Softw)-.1 F .509(are F)-.1 F 3.009 +(oundation. The)-.15 F(cur)3.009 E(-)-.2 E(rent de)72 515.4 Q -.15(ve)-.25 G +(loper and maintainer is Chet Rame).15 E 1.3 -.65(y, a v)-.15 H(olunteer who w) +.45 E(orks at Case W)-.1 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)458.91 515.4 Q +-.15(ve)-.25 G(rsity).15 E(.)-.65 E F3 2.5(2. What)72 539.4 R(is a shell?)2.5 E +F2 1.241(At its base, a shell is simply a macro processor that e)97 555 R -.15 +(xe)-.15 G 1.242(cutes commands.).15 F(A)6.242 E F4(UNIX)3.742 E F2 1.242 +(shell is both a)3.742 F .189(command interpreter)72 567 R 2.688(,w)-.4 G .188 +(hich pro)167.787 567 R .188(vides the user interf)-.15 F .188 +(ace to the rich set of)-.1 F F4(UNIX)2.688 E F2 .188 +(utilities, and a programming)2.688 F .751(language, allo)72 579 R .752 +(wing these utilitites to be combined.)-.25 F .752 +(The shell reads commands either from a terminal or a)5.752 F 2.52 +(\214le. Files)72 591 R .019 +(containing commands can be created, and become commands themselv)2.52 F 2.519 +(es. These)-.15 F(ne)2.519 E 2.519(wc)-.25 G(ommands)465.11 591 Q(ha)72 603 Q +.395 -.15(ve t)-.2 H .095(he same status as system commands in directories lik) +.15 F(e)-.1 E F3(/bin)2.595 E F2 2.595(,a)C(llo)342.575 603 Q .096 +(wing users or groups to establish cus-)-.25 F(tom en)72 615 Q(vironments.)-.4 +E F3 2.5(2.1. Command)72 639 R(Inter)2.5 E(pr)-.1 E(eter)-.18 E F2 2.926(As)97 +654.6 S .426(hell allo)111.036 654.6 R .426(ws e)-.25 F -.15(xe)-.15 G .426 +(cution of).15 F F4(UNIX)2.926 E F2 .426 +(commands, both synchronously and asynchronously)2.926 F 5.425(.T)-.65 G(he) +460.165 654.6 Q F1 -.37(re)2.925 G(dir).37 E(ec-)-.37 E(tion)72 666.6 Q F2 .334 +(constructs permit \214ne-grained control of the input and output of those com\ +mands, and the shell allo)2.833 F(ws)-.25 E .559(control o)72 678.6 R -.15(ve) +-.15 G 3.058(rt).15 G .558(he contents of their en)126.697 678.6 R(vironment.) +-.4 E F4(UNIX)5.558 E F2 .558(shells also pro)3.058 F .558 +(vide a small set of b)-.15 F .558(uilt-in commands)-.2 F(\()72 690.6 Q F1 -.2 +(bu)C(iltins).2 E F2 4.611(\)i)C 2.112 +(mplementing functionality impossible \(e.g.,)115.861 690.6 R F3(cd)4.612 E F2 +(,)A F3(br)4.612 E(eak)-.18 E F2(,)A F3(continue)4.612 E F2 4.612(,a)C(nd) +399.074 690.6 Q F3(exec)4.612 E F2 4.612(\)o)C 4.612(ri)444.948 690.6 S(ncon) +455.67 690.6 Q -.15(ve)-.4 G(nient).15 E .32 LW 76 700.6 72 700.6 DL 80 700.6 +76 700.6 DL 84 700.6 80 700.6 DL 88 700.6 84 700.6 DL 92 700.6 88 700.6 DL 96 +700.6 92 700.6 DL 100 700.6 96 700.6 DL 104 700.6 100 700.6 DL 108 700.6 104 +700.6 DL 112 700.6 108 700.6 DL 116 700.6 112 700.6 DL 120 700.6 116 700.6 DL +124 700.6 120 700.6 DL 128 700.6 124 700.6 DL 132 700.6 128 700.6 DL 136 700.6 +132 700.6 DL 140 700.6 136 700.6 DL 144 700.6 140 700.6 DL/F5 8/Times-Roman@0 +SF 2<8755>72 710.6 S(NIX is a trademark of X/OPEN)83.776 710.6 Q EP +%%Page: 2 2 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-2-)279.67 48 S(\()72 84 Q/F1 10/Times-Bold@0 SF +(history)A F0(,)A F1(getopts)3.505 E F0(,)A F1(kill)3.505 E F0 3.505(,o)C(r) +172.795 84 Q F1(pwd)3.505 E F0 3.505(,f)C 1.005(or e)207.305 84 R 1.005 +(xample\) to obtain via separate utilities.)-.15 F 1.005 +(Shells may be used interac-)6.005 F(ti)72 96 Q -.15(ve)-.25 G +(ly or non-interacti).15 E -.15(ve)-.25 G 2.5(ly: the).15 F 2.5(ya)-.15 G +(ccept input typed from the k)207.42 96 Q -.15(ey)-.1 G +(board or from a \214le.).15 E F1 2.5(2.2. Pr)72 120 R(ogramming Language)-.18 +E F0 .501(While e)97 135.6 R -.15(xe)-.15 G .501 +(cuting commands is essential, most of the po).15 F .501(wer \(and comple)-.25 +F .502(xity\) of shells is due to their)-.15 F .05 +(embedded programming languages.)72 147.6 R(Lik)5.049 E 2.549(ea)-.1 G .349 +-.15(ny h)245.398 147.6 T(igh-le).15 E -.15(ve)-.25 G 2.549(ll).15 G .049 +(anguage, the shell pro)303.276 147.6 R .049(vides v)-.15 F .049 +(ariables, \215o)-.25 F 2.549(wc)-.25 G(ontrol)480.11 147.6 Q +(constructs, quoting, and functions.)72 159.6 Q .475 +(The basic syntactic element is a)97 175.2 R/F2 10/Times-Italic@0 SF .475 +(simple command)2.975 F F0 5.475(.A)C .475 +(simple command consists of an optional set of)315.405 175.2 R -.25(va)72 187.2 +S .525(riable assignments, a command w).25 F .525 +(ord, and an optional list of ar)-.1 F 3.024(guments. Operators)-.18 F .524 +(to redirect input and)3.024 F(output may appear an)72 199.2 Q +(ywhere in a simple command.)-.15 E(Some e)5 E(xamples are:)-.15 E/F3 10 +/Courier@0 SF(who)97 211.2 Q(trn -e -S1 -N)97 223.2 Q(ls -l /bin > binfiles)97 +235.2 Q(make > make.out 2>make.errs)97 247.2 Q F0 2.518(Ap)97 262.8 S .018 +(ipeline is a sequence of tw)111.738 262.8 R 2.518(oo)-.1 G 2.518(rm)230.056 +262.8 S .018(ore commands separated by the character)243.684 262.8 R/F4 10 +/Symbol SF2.519 E F0 5.019(.T)C .019(he standard output)430.082 262.8 R +(of the \214rst command is connected to the standard input of the second.)72 +274.8 Q(Examples of pipelines include:)5 E F3(who | wc -l)97 286.8 Q +(ls -l | sort +3nr)97 298.8 Q F0 .578 +(Simple commands and pipelines may be combined into)97 314.4 R F2(lists)3.078 E +F0 5.578(.A)C .578(list is a sequence of pipelines sepa-)360.002 314.4 R .289 +(rated by one of)72 326.4 R F1(;)2.789 E F0(,)A F1(&)2.789 E F0(,)A F1(&&)2.789 +E F0 2.789(,o)C(r)185.103 326.4 Q F42.789 E F0 2.789(,a)C .289 +(nd optionally terminated by)210.831 326.4 R F1(;)2.789 E F0(,)A F1(&)2.789 E +F0 2.789(,o)C 2.789(ran)352.555 326.4 S -.25(ew)370.903 326.4 S 2.789 +(line. Commands).25 F .289(separated by)2.789 F F1(;)72 338.4 Q F0 .336(are e) +2.836 F -.15(xe)-.15 G .336(cuted sequentially; the shell w).15 F .335 +(aits for each to complete in turn.)-.1 F .335(If a command is terminated by) +5.335 F F1(&)2.835 E F0(,)A .007(the shell e)72 350.4 R -.15(xe)-.15 G .007 +(cutes it in the).15 F F2(bac)2.507 E(kgr)-.2 E(ound)-.45 E F0 2.508(,a)1.666 G +.008(nd does not w)236.076 350.4 R .008(ait for it to \214nish.)-.1 F .008 +(If tw)5.008 F 2.508(oc)-.1 G .008(ommands are separated by)397.616 350.4 R F1 +(&&)72 362.4 Q F0 3.008(,t)C .508(he second command e)96.948 362.4 R -.15(xe) +-.15 G .508(cutes only if the \214rst command succeeds.).15 F 3.007(As)5.508 G +.507(eparator of)383.575 362.4 R F43.007 E F0 .507(causes the sec-)3.007 +F(ond command to e)72 374.4 Q -.15(xe)-.15 G(cute only if the \214rst f).15 E +2.5(ails. Some)-.1 F -.15(ex)2.5 G(amples are:).15 E F3(who ; date)97 386.4 Q +(cd /usr/src || exit 1)97 398.4 Q(cd "$@" && xtitle $HOST: $PWD)97 410.4 Q F0 +1.36(The shell programming language pro)97 426 R 1.361(vides a v)-.15 F 1.361 +(ariety of \215o)-.25 F 3.861(wc)-.25 G 1.361(ontrol structures.)353.276 426 R +(The)6.361 E F1 -.25(fo)3.861 G(r).25 E F0(command)3.861 E(allo)72 438 Q .654 +(ws a list of commands to be e)-.25 F -.15(xe)-.15 G .654 +(cuted once for each w).15 F .654(ord in a w)-.1 F .654(ord list.)-.1 F(The) +5.654 E F1(case)3.154 E F0 .654(command allo)3.154 F .654(ws a)-.25 F .627 +(list to be e)72 450 R -.15(xe)-.15 G .628(cuted if a w).15 F .628 +(ord matches a speci\214ed pattern.)-.1 F(The)5.628 E F1(while)3.128 E F0(and) +3.128 E F1(until)3.128 E F0 .628(commands e)3.128 F -.15(xe)-.15 G .628 +(cute a list of).15 F 1.559 +(commands as long as a guard command completes successfully or f)72 462 R 1.559 +(ails, respecti)-.1 F -.15(ve)-.25 G(ly).15 E 6.559(.T)-.65 G(he)440.892 462 Q +F1(if)4.059 E F0(command)4.059 E(allo)72 474 Q(ws e)-.25 E -.15(xe)-.15 G +(cution of dif).15 E(ferent command lists depending on the e)-.25 E +(xit status of a guard command.)-.15 E(A)97 489.6 Q F2 .385(shell function) +2.885 F F0 .385(associates a list of commands with a name.)2.885 F .386 +(Each time the name is used as a simple)5.385 F .938(command, the list is e)72 +501.6 R -.15(xe)-.15 G 3.438(cuted. This).15 F -.15(exe)3.438 G .938 +(cution tak).15 F .938(es place in the current shell conte)-.1 F .937 +(xt; no ne)-.15 F 3.437(wp)-.25 G .937(rocess is)468.903 501.6 R 2.5 +(created. Functions)72 513.6 R(may ha)2.5 E .3 -.15(ve t)-.2 H(heir o).15 E +(wn ar)-.25 E(gument lists and local v)-.18 E(ariables, and may be recursi)-.25 +E -.15(ve)-.25 G(.).15 E .722(The shell language pro)97 529.2 R .722(vides v) +-.15 F .722(ariables, which may be both set and referenced.)-.25 F 3.222(An) +5.722 G .722(umber of special)435.906 529.2 R 1.02 +(parameters are present, such as)72 541.2 R F1($@)3.519 E F0 3.519(,w)C 1.019 +(hich returns the shell')231.257 541.2 R 3.519(sp)-.55 G 1.019 +(ositional parameters \(command-line ar)333.103 541.2 R(gu-)-.18 E(ments\),)72 +553.2 Q F1($?)2.906 E F0 2.906(,t)C .406(he e)122.812 553.2 R .406 +(xit status of the pre)-.15 F .406(vious command, and)-.25 F F1($$)2.906 E F0 +2.906(,t)C .406(he shell')322.436 553.2 R 2.906(sp)-.55 G .406(rocess I.D.) +368.248 553.2 R .407(In addition to pro)5.406 F(vid-)-.15 E .129 +(ing special parameters and user)72 565.2 R .129(-de\214ned v)-.2 F .129 +(ariables, the shell permits the v)-.25 F .128(alues of certain v)-.25 F .128 +(ariables to control)-.25 F .16(its beha)72 577.2 R(vior)-.2 E 5.16(.S)-.55 G +.16(ome of these v)131.57 577.2 R .16(ariables include)-.25 F F1(IFS)2.661 E F0 +2.661(,w)C .161(hich controls ho)284.202 577.2 R 2.661(wt)-.25 G .161 +(he shell splits w)361.375 577.2 R(ords,)-.1 E F1 -.74(PA)2.661 G(TH)-.21 E F0 +2.661(,w)C(hich)486.78 577.2 Q .392 +(tells the shell where to look for commands, and)72 589.2 R F1(PS1)2.892 E F0 +2.892(,w)C .392(hose v)297.01 589.2 R .392 +(alue is the string the shell uses to prompt for)-.25 F 3.371(commands. There) +72 601.2 R .871(are a fe)3.371 F 3.371(wv)-.25 G .871(ariables whose v)196.645 +601.2 R .871(alues are set by the shell and normally only referenced by)-.25 F +(users;)72 613.2 Q F1(PWD)3.663 E F0 3.663(,w)C 1.163(hose v)135.706 613.2 R +1.163(alue is the pathname of the shell')-.25 F 3.662(sc)-.55 G 1.162(urrent w) +313.068 613.2 R 1.162(orking directory)-.1 F 3.662(,i)-.65 G 3.662(so)421.894 +613.2 S 1.162(ne such v)434.446 613.2 R(ariable.)-.25 E -1.11(Va)72 625.2 S +.008(riables can be used in nearly an)1.11 F 2.509(ys)-.15 G .009(hell conte) +219.37 625.2 R .009(xt and are particularly v)-.15 F .009 +(aluable when used with control struc-)-.25 F(tures.)72 637.2 Q .583 +(There are se)97 652.8 R -.15(ve)-.25 G .583(ral shell).15 F F2 -.2(ex)3.083 G +(pansions).2 E F0 5.583(.A)C -.25(va)254.298 652.8 S(riable).25 E F2(name)3.083 +E F0 .583(is e)3.083 F .582(xpanded to its v)-.15 F .582(alue using ${)-.25 F +F2(name)A F0 .582(}, where)B 1.387(the braces are optional.)72 664.8 R 1.387 +(There are a number of parameter e)6.387 F 1.388(xpansions a)-.15 F -.25(va)-.2 +G 3.888(ilable. F).25 F 1.388(or e)-.15 F 1.388(xample, there are)-.15 F(${)72 +676.8 Q F2(name)A F0<3aad>A F2(wor)A(d)-.37 E F0 .891(}, which e)B .891 +(xpands to)-.15 F F2(wor)3.391 E(d)-.37 E F0(if)3.391 E F2(name)3.391 E F0 .891 +(is unset or null, and the in)3.391 F -.15(ve)-.4 G .89(rse ${).15 F F2(name)A +F0(:+)A F2(wor)A(d)-.37 E F0 .89(}, which)B -.15(ex)72 688.8 S 1.203(pands to) +.15 F F2(wor)3.703 E(d)-.37 E F0(if)3.703 E F2(name)3.703 E F0 1.203 +(is set and not null.)3.703 F F2 1.203(Command substitution)6.203 F F0(allo) +3.703 E 1.204(ws the output of a command to)-.25 F .918 +(replace the command name.)72 700.8 R .918(The syntax is `)5.918 F F2(command)A +F0(`.)A F2(Command)5.918 E F0 .918(is e)3.418 F -.15(xe)-.15 G .918 +(cuted and it and the backquotes).15 F .299 +(are replaced by its output, with trailing ne)72 712.8 R .299(wlines remo)-.25 +F -.15(ve)-.15 G(d.).15 E F2 -.8(Pa)5.299 G .299(thname e).8 F(xpansion)-.2 E +F0 .299(is a w)2.799 F .299(ay to e)-.1 F .299(xpand a w)-.15 F(ord)-.1 E 1.586 +(to a set of \214lenames.)72 724.8 R -.8(Wo)6.586 G 1.586(rds are re).8 F -.05 +(ga)-.15 G 1.586(rded as patterns, in which the characters).05 F F1(*)4.086 E +F0(,)A F1(?)4.086 E F0 4.085(,a)C(nd)432.115 724.8 Q F1([)4.085 E F0(ha)4.085 E +1.885 -.15(ve s)-.2 H(pecial).15 E EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-3-)279.67 48 S 2.845(meaning. W)72 84 R .346(ords\ + containing these special characters are replaced with a sorted list of matchi\ +ng pathnames.)-.8 F(If a w)72 96 Q +(ord generates no matches, it is left unchanged.)-.1 E/F1 10/Times-Italic@0 SF +(Quoting)97 111.6 Q F0 .85(is used to remo)3.35 F 1.15 -.15(ve t)-.15 H .85 +(he special meaning of characters or w).15 F 3.35(ords. It)-.1 F .85 +(can disable special treat-)3.35 F .314 +(ment for shell operators or other special characters, pre)72 123.6 R -.15(ve) +-.25 G .315(nt reserv).15 F .315(ed w)-.15 F .315 +(ords from being recognized as such,)-.1 F .683(and inhibit v)72 135.6 R .683 +(ariable e)-.25 F 3.183(xpansion. The)-.15 F .683 +(shell has three quoting mechanisms:)3.183 F 3.183(ab)5.683 G .683 +(ackslash preserv)387.413 135.6 R .682(es the literal)-.15 F -.25(va)72 147.6 S +.417(lue of the ne).25 F .417(xt character)-.15 F 2.917(,ap)-.4 G .417 +(air of single quotes preserv)196.712 147.6 R .417(es the literal v)-.15 F .418 +(alue of each character between the)-.25 F 1.426 +(quotes, and a pair of double quotes preserv)72 159.6 R 1.425 +(es the literal meaning of enclosed characters while allo)-.15 F(wing)-.25 E +(some e)72 171.6 Q(xpansions.)-.15 E 1.054(Some of the commands b)97 187.2 R +1.054(uilt into the shell are part of the programming language.)-.2 F(The)6.055 +E/F2 10/Times-Bold@0 SF(br)3.555 E(eak)-.18 E F0(and)3.555 E F2(continue)72 +199.2 Q F0 1.175(commands control loop e)3.675 F -.15(xe)-.15 G 1.175 +(cution as in the C language.).15 F(The)6.175 E F2 -2.3 -.15(ev a)3.675 H(l).15 +E F0 -.2(bu)3.675 G 1.174(iltin allo).2 F 1.174(ws a string to be)-.25 F .204 +(parsed and e)72 211.2 R -.15(xe)-.15 G .204(cuted as a command.).15 F F2 -.65 +(Wa)5.205 G(it).65 E F0 .205 +(tells the shell to pause until the processes speci\214ed as ar)2.705 F +(guments)-.18 E(ha)72 223.2 Q .3 -.15(ve ex)-.2 H(ited.).15 E F2 2.5 +(2.3. Interacti)72 247.2 R .2 -.1(ve F)-.1 H(eatur)-.15 E(es)-.18 E F0 .51 +(Shells ha)97 262.8 R .81 -.15(ve b)-.2 H -.15(eg).15 G .51(un of).15 F .51 +(fering features geared speci\214cally for interacti)-.25 F .81 -.15(ve u)-.25 +H .51(se rather than to augment the).15 F .76(programming language.)72 274.8 R +.761(These interacti)5.76 F 1.061 -.15(ve f)-.25 H .761 +(eatures include job control, command line editing, history and).15 F(aliases.) +72 286.8 Q .626(Job control is a f)97 302.4 R .626(acility pro)-.1 F .626 +(vided jointly by the shell and the)-.15 F/F3 9/Times-Roman@0 SF(UNIX)3.125 E +F0 -.1(ke)3.125 G .625(rnel that allo).1 F .625(ws users to selec-)-.25 F(ti)72 +314.4 Q -.15(ve)-.25 G .344 +(ly stop \(suspend\) and restart \(resume\) processes.).15 F .345 +(Each pipeline e)5.345 F -.15(xe)-.15 G .345 +(cuted by the shell is referred to as a).15 F F1(job)72 326.4 Q F0 2.989(.J)C +.488(obs may be suspended and restarted in either the fore)94.159 326.4 R .488 +(ground, where the)-.15 F 2.988(yh)-.15 G -2.25 -.2(av e)397.148 326.4 T .488 +(access to the terminal,)3.188 F .833(or background, where the)72 338.4 R 3.333 +(ya)-.15 G .834(re isolated and cannot read from the terminal.)189.312 338.4 R +-.8(Ty)5.834 G .834(ping the).8 F F1(suspend)3.334 E F0(character)5 E .459(whi\ +le a process is running stops that process and returns control to the shell.)72 +350.4 R .459(Once a job is suspended, the)5.459 F .392 +(user manipulates the job')72 362.4 R 2.892(ss)-.55 G .392(tate, using)184.118 +362.4 R F2(bg)2.892 E F0 .393(to continue it in the background,)2.892 F F2(fg) +2.893 E F0 .393(to return it to the fore)2.893 F(ground)-.15 E .891(and a)72 +374.4 R -.1(wa)-.15 G .891(it its completion, or).1 F F2(kill)3.391 E F0 .891 +(to send it a signal.)3.391 F(The)5.89 E F2(jobs)3.39 E F0 .89 +(command lists the status of jobs, and)3.39 F F2(wait)3.39 E F0 .407 +(will pause the shell until a speci\214ed job terminates.)72 386.4 R .407 +(The shell pro)5.407 F .407(vides a number of w)-.15 F .407 +(ays to refer to a job,)-.1 F(and will notify the user whene)72 398.4 Q -.15 +(ve)-.25 G 2.5(rab).15 G(ackground job terminates.)220.18 398.4 Q -.4(Wi)97 414 +S .956(th the adv).4 F .956(ent of more po)-.15 F .956 +(werful terminals and terminal emulators, more sophisticated interaction)-.25 F +.253(than that pro)72 426 R .253(vided by the)-.15 F F3(UNIX)2.753 E F0 -.1(ke) +2.754 G .254(rnel terminal dri).1 F -.15(ve)-.25 G 2.754(ri).15 G 2.754(sp) +293.592 426 S 2.754(ossible. Some)305.236 426 R .254(shells of)2.754 F .254 +(fer command line editing,)-.25 F 1.141 +(which permits a user to edit lines of input using f)72 438 R(amiliar)-.1 E F1 +(emacs)3.64 E F0(or)3.64 E F1(vi)3.64 E F0 1.14 +(-style commands before submitting)B .02(them to the shell.)72 450 R .02 +(Editors allo)5.02 F 2.52(wc)-.25 G .02(orrections to be made without ha)206.31 +450 R .021(ving to erase back to the point of error)-.2 F 2.521(,o)-.4 G(r) +500.67 450 Q .135(start the line ane)72 462 R 3.935 -.65(w. C)-.25 H .135 +(ommand line editors run the g).65 F .135(amut from a small \214x)-.05 F .134 +(ed set of commands and k)-.15 F .434 -.15(ey b)-.1 H(ind-).15 E +(ings to input f)72 474 Q(acilities which allo)-.1 E 2.5(wa)-.25 G +(rbitrary actions to be bound to a k)217.2 474 Q .3 -.15(ey o)-.1 H 2.5(rk).15 +G .3 -.15(ey s)379.88 474 T(equence.).15 E .145(Modern shells also k)97 489.6 R +.145(eep a history)-.1 F 2.645(,w)-.65 G .146 +(hich is the list of commands a user has typed.)243.49 489.6 R .146(Shell f) +5.146 F .146(acilities are)-.1 F -.2(av)72 501.6 S .368(ailable to recall pre) +-.05 F .367(vious commands and use portions of old commands when composing ne) +-.25 F 2.867(wo)-.25 G 2.867(nes. The)467.253 501.6 R 1.456 +(command history can be sa)72 513.6 R -.15(ve)-.2 G 3.957(dt).15 G 3.957 +(oa\214)207.522 513.6 S 1.457 +(le and read back in at shell startup, so it persists across sessions.)230.436 +513.6 R .675(Shells which pro)72 525.6 R .675 +(vide both command editing and history generally ha)-.15 F .974 -.15(ve e)-.2 H +.674(diting commands to interacti).15 F -.15(ve)-.25 G(ly).15 E(step forw)72 +537.6 Q(ard and backw)-.1 E(ard through the history list.)-.1 E .013 +(Aliases allo)97 553.2 R -5.012 2.513(wa s)-.25 H .014 +(tring to be substituted for a command name.)164.28 553.2 R(The)5.014 E 2.514 +(yc)-.15 G .014(an be used to create a mnemonic)373.396 553.2 R .568(for a)72 +565.2 R F3(UNIX)3.068 E F0 .568(command name \()3.068 F/F4 10/Courier@0 SF .568 +(alias del=rm)B F0 .568(\), to e)B .567(xpand a single w)-.15 F .567 +(ord to a comple)-.1 F 3.067(xc)-.15 G .567(ommand \()432.603 565.2 R F4(alias) +A .255(news='xterm -g 80x45 -title trn -e trn -e -S1 -N &')72 577.2 R F0 .255 +(\), or to ensure that a command)B(is in)72 589.2 Q -.2(vo)-.4 G -.1(ke).2 G +2.5(dw).1 G(ith a basic set of options \()122.41 589.2 Q F4 +(alias ls="/bin/ls -F")A F0(\).)A F2 2.5(3. The)72 613.2 R +(POSIX Shell Standard)2.5 E F1(POSIX)97 628.8 Q F0 .239 +(is a name originally coined by Richard Stallman for a f)4.405 F .239 +(amily of open system standards based)-.1 F(on)72 640.8 Q F3(UNIX)3.239 E F0 +5.739(.T)C .74(here are a number of aspects of)122.079 640.8 R F3(UNIX)3.24 E +F0 .74(under consideration for standardization, from the basic)3.24 F .192 +(system services at the system call and C library le)72 652.8 R -.15(ve)-.25 G +2.692(lt).15 G 2.692(oa)290.16 652.8 S .191 +(pplications and tools to system administration and)302.292 652.8 R 2.5 +(management. Each)72 664.8 R(area of standardization is assigned to a w)2.5 E +(orking group in the 1003 series.)-.1 E 3.602(The POSIX Shell and T)97 680.4 R +3.602(ools standard has been de)-.8 F -.15(ve)-.25 G 3.603(loped by IEEE W).15 +F 3.603(orking Group 1003.2)-.8 F -1.667(\(POSIX.2\) [4].)72 692.4 R 2.799 +(It concentrates on the command interpreter interf)7.799 F 2.799 +(ace and utility programs commonly)-.1 F -.15(exe)72 704.4 S 2.345 +(cuted from the command line or by other programs.).15 F 2.345(An initial v) +7.345 F 2.345(ersion of the standard has been)-.15 F(appro)72 716.4 Q -.15(ve) +-.15 G 2.915(da).15 G .414(nd published by the IEEE, and w)116.265 716.4 R .414 +(ork is currently underw)-.1 F .414(ay to update it.)-.1 F .414 +(There are four primary)5.414 F(areas of w)72 728.4 Q +(ork in the 1003.2 standard:)-.1 E EP +%%Page: 4 4 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-4-)279.67 48 S 21.5<8341>72 84 S .835 +(spects of the shell')104.22 84 R 3.335(ss)-.55 G .835 +(yntax and command language.)192 84 R 3.335(An)5.835 G .835(umber of special b) +338.095 84 R .835(uiltins such as)-.2 F/F1 10/Times-Bold@0 SF(cd)3.335 E F0 +(and)3.335 E F1(exec)97 96 Q F0 .545(are being speci\214ed as part of the shel\ +l, since their functionality usually cannot be implemented)3.046 F +(by a separate e)97 108 Q -.15(xe)-.15 G(cutable;).15 E 21.5<8341>72 123.6 S +.73(set of utilities to be called by shell scripts and applications.)107.45 +123.6 R .731(Examples are programs lik)5.731 F(e)-.1 E/F2 10/Times-Italic@0 SF +2.397(sed, tr)3.231 F(,)-1.11 E F0(and)97 135.6 Q F2(awk.)2.853 E F0 .352 +(Utilities commonly implemented as shell b)4.519 F .352 +(uiltins are described in this section, such as)-.2 F F1(test)2.852 E F0(and)97 +147.6 Q F1(kill)3.422 E F0 5.922(.A)C 3.422(ne)144.404 147.6 S .922 +(xpansion of this section')157.116 147.6 R 3.423(ss)-.55 G .923 +(cope, termed the User Portability Extension, or UPE, has)268.586 147.6 R +(standardized interacti)97 159.6 Q .3 -.15(ve p)-.25 H(rograms such as).15 E F2 +(vi)2.5 E F0(and)4.166 E F2(mailx;)2.5 E F0 21.5<8341>72 175.2 S .926 +(group of functional interf)107.646 175.2 R .926(aces to services pro)-.1 F +.926(vided by the shell, such as the traditional)-.15 F F2(system)3.425 E F0(C) +5.091 E .507(library function.)97 187.2 R .507 +(There are functions to perform shell w)5.507 F .508(ord e)-.1 F .508 +(xpansions, perform \214lename e)-.15 F(xpansion)-.15 E(\()97 199.2 Q F2 +(globbing)A F0 .58(\), obtain v)B .58 +(alues of POSIX.2 system con\214guration v)-.25 F .58(ariables, retrie)-.25 F +.88 -.15(ve v)-.25 H .58(alues of en)-.1 F(vironment)-.4 E -.25(va)97 211.2 S +(riables \().25 E F2 -.1(ge)C(ten).1 E(v\(\))-.4 E F0(\), and other services;) +.833 E 21.5<8341>72 226.8 S(suite of `)106.72 226.8 Q(`de)-.74 E -.15(ve)-.25 G +(lopment').15 E 2.5('u)-.74 G(tilities such as)209.54 226.8 Q F2(c89)2.5 E F0 +(\(the POSIX.2 v)4.166 E(ersion of)-.15 E F2(cc)2.5 E F0(\), and)A F2(yacc.)2.5 +E F0 .483(Bash is concerned with the aspects of the shell')97 242.4 R 2.983(sb) +-.55 G(eha)301.597 242.4 Q .484(vior de\214ned by POSIX.2.)-.2 F .484 +(The shell command)5.484 F 1.439 +(language has of course been standardized, including the basic \215o)72 254.4 R +3.938(wc)-.25 G 1.438(ontrol and program e)359.688 254.4 R -.15(xe)-.15 G 1.438 +(cution con-).15 F 1.145(structs, I/O redirection and pipelining, ar)72 266.4 R +1.145(gument handling, v)-.18 F 1.145(ariable e)-.25 F 1.146 +(xpansion, and quoting.)-.15 F(The)6.146 E F2(special)3.646 E F0 -.2(bu)72 +278.4 S .676(iltins, which must be implemented as part of the shell to pro).2 F +.676(vide the desired functionality)-.15 F 3.176(,a)-.65 G .676(re speci\214ed) +457.504 278.4 R .7(as being part of the shell; e)72 290.4 R .7 +(xamples of these are)-.15 F F1 -2.3 -.15(ev a)3.201 H(l).15 E F0(and)3.201 E +F1(export)3.201 E F0 5.701(.O)C .701(ther utilities appear in the sections of) +352.034 290.4 R .256(POSIX.2 not de)72 302.4 R -.2(vo)-.25 G .256(ted to the s\ +hell which are commonly \(and in some cases must be\) implemented as b).2 F +(uiltin)-.2 E(commands, such as)72 314.4 Q F1 -.18(re)2.5 G(ad).18 E F0(and)2.5 +E F1(test)2.5 E F0(.)A .972(POSIX.2 also speci\214es aspects of the shell')97 +330 R 3.473(si)-.55 G(nteracti)286.016 330 Q 1.273 -.15(ve b)-.25 H(eha).15 E +.973(vior as part of the UPE, including job)-.2 F .233 +(control, command line editing, and history)72 342 R 5.233(.I)-.65 G .233 +(nterestingly enough, only)253.849 342 R F2(vi)2.733 E F0 .233 +(-style line editing commands ha)B -.15(ve)-.2 G(been standardized;)72 354 Q F2 +(emacs)2.5 E F0(editing commands were left out due to objections.)2.5 E .148 +(There were certain areas in which POSIX.2 felt standardization w)97 369.6 R +.149(as necessary)-.1 F 2.649(,b)-.65 G .149(ut no e)420.643 369.6 R .149 +(xisting imple-)-.15 F 1.598(mentation pro)72 381.6 R 1.598 +(vided the proper beha)-.15 F(vior)-.2 E 6.598(.T)-.55 G 1.598(he w)251.56 +381.6 R 1.597(orking group in)-.1 F -.15(ve)-.4 G 1.597 +(nted and standardized functionality in).15 F .228(these areas.)72 393.6 R(The) +5.228 E F1(command)2.728 E F0 -.2(bu)2.728 G .228(iltin w).2 F .228(as in)-.1 F +-.15(ve)-.4 G .228(nted so that shell functions could be written to replace b) +.15 F(uiltins;)-.2 E 1.663(it mak)72 405.6 R 1.663 +(es the capabilities of the b)-.1 F 1.663(uiltin a)-.2 F -.25(va)-.2 G 1.663 +(ilable to the function.).25 F 1.663(The reserv)6.663 F 1.663(ed w)-.15 F 1.663 +(ord `)-.1 F(`!')-.74 E 4.163('w)-.74 G 1.663(as added to)455.685 405.6 R(ne)72 +417.6 Q -.05(ga)-.15 G .915(te the return v).05 F .915 +(alue of a command or pipeline; it w)-.25 F .916(as nearly impossible to e)-.1 +F .916(xpress `)-.15 F .916(`if not x')-.74 F 3.416('c)-.74 G(leanly)479.56 +417.6 Q .904(using the sh language.)72 429.6 R .904(There e)5.904 F .904 +(xist multiple incompatible implementations of the)-.15 F F1(test)3.403 E F0 +-.2(bu)3.403 G .903(iltin, which tests).2 F .28 +(\214les for type and other attrib)72 441.6 R .281 +(utes and performs arithmetic and string comparisons.)-.2 F .281 +(POSIX considered none)5.281 F .868(of these correct, so the standard beha)72 +453.6 R .868(vior w)-.2 F .868(as speci\214ed in terms of the number of ar)-.1 +F .867(guments to the com-)-.18 F 3.803(mand. POSIX.2)72 465.6 R 1.303 +(dictates e)3.803 F 1.303(xactly what will happen when four or fe)-.15 F 1.303 +(wer ar)-.25 F 1.303(guments are gi)-.18 F -.15(ve)-.25 G 3.803(nt).15 G(o) +459.462 465.6 Q F1(test)3.804 E F0 3.804(,a)C(nd)494 465.6 Q(lea)72 477.6 Q +-.15(ve)-.2 G 4.531(st).15 G 2.031(he beha)103.951 477.6 R 2.031 +(vior unde\214ned when more ar)-.2 F 2.031(guments are supplied.)-.18 F 2.03 +(Bash uses the POSIX.2 algorithm,)7.031 F(which w)72 489.6 Q(as concei)-.1 E +-.15(ve)-.25 G 2.5(db).15 G 2.5(yD)164.53 489.6 S -.2(av)179.25 489.6 S(id K).2 +E(orn.)-.35 E 1.128 +(While POSIX.2 includes much of what the shell has traditionally pro)97 505.2 R +1.129(vided, some important things)-.15 F(ha)72 517.2 Q .58 -.15(ve b)-.2 H .28 +(een omitted as being `).15 F(`be)-.74 E .28(yond its scope.)-.15 F 4.26 -.74 +('' T)-.7 H .28(here is, for instance, no mention of a dif).74 F .28 +(ference between)-.25 F(a)72 529.2 Q F2(lo)3.354 E(gin)-.1 E F0 .854 +(shell and an)5.02 F 3.354(yo)-.15 G .854(ther interacti)167.956 529.2 R 1.154 +-.15(ve s)-.25 H .854(hell \(since POSIX.2 does not specify a login program\).) +.15 F .855(No \214x)5.855 F(ed)-.15 E +(startup \214les are de\214ned, either \255 the standard does not mention)72 +541.2 Q F2(.pr)2.5 E(o\214le)-.45 E F0(.)1.666 E F1 2.5(4. Shell)72 565.2 R +(Comparison)2.5 E F0 .693(This section compares features of bash, sh, and ksh \ +\(the three shells closest to POSIX compliance\).)97 580.8 R .245(Since ksh an\ +d bash are supersets of sh, the features common to all three are co)72 592.8 R +-.15(ve)-.15 G .245(red \214rst.).15 F .245(Some of the fea-)5.245 F 1.198 +(tures bash and ksh contain which are not in sh will be discussed.)72 604.8 R +(Ne)6.198 E 1.198(xt, features unique to bash will be)-.15 F 2.866(listed. The) +72 616.8 R .366(\214rst three sections pro)2.866 F .366(vide a progressi)-.15 F +-.15(ve)-.25 G .366(ly more detailed o).15 F -.15(ve)-.15 G(rvie).15 E 2.866 +(wo)-.25 G 2.866(fb)395.706 616.8 S 2.866(ash. Finally)406.902 616.8 R 2.866 +(,f)-.65 G .366(eatures of)464.484 616.8 R(ksh-88 \(the currently-a)72 628.8 Q +-.25(va)-.2 G(ilable v).25 E(ersion\) not in sh or bash will be presented.)-.15 +E F1 2.5(4.1. Common)72 652.8 R -.25(Fe)2.5 G(atur).25 E(es)-.18 E F0 .021 +(All three shells ha)97 668.4 R .321 -.15(ve t)-.2 H .021 +(he same basic feature set, which is essentially that pro).15 F .02 +(vided by sh and described)-.15 F 1.026(in an)72 680.4 R 3.526(ys)-.15 G 3.526 +(hm)105.012 680.4 S 1.027 +(anual page. Bash and ksh are both sh supersets, and so all three pro)121.318 +680.4 R 1.027(vide the command inter)-.15 F(-)-.2 E .714 +(preter and programming language described earlier)72 692.4 R 3.214(.T)-.55 G +.714(he shell grammar)291.506 692.4 R 3.214(,s)-.4 G .714(yntax, \215o)371.568 +692.4 R 3.214(wc)-.25 G .714(ontrol, redirections,)424.686 692.4 R(and b)72 +704.4 Q(uiltins implemented by the Bourne shell are the baseline for subsequen\ +t discussion.)-.2 E EP +%%Page: 5 5 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-5-)279.67 48 S/F1 10/Times-Bold@0 SF 2.5(4.2. F)72 +84 R(eatur)-.25 E(es in bash and ksh)-.18 E F0 .458(Ksh and bash ha)97 99.6 R +.758 -.15(ve s)-.2 H -2.15 -.25(ev e).15 H .459(ral features in common be).25 F +.459(yond this base le)-.15 F -.15(ve)-.25 G 2.959(lo).15 G 2.959(ff)387.814 +99.6 S(unctionality)397.433 99.6 Q 5.459(.S)-.65 G .459(ome of this)458.082 +99.6 R(is due to the POSIX.2 standard.)72 111.6 Q(Other functions ha)5 E .3 +-.15(ve b)-.2 H(een implemented in bash using ksh as a guide.).15 E F1 2.5 +(4.2.1. V)72 135.6 R(ariables and V)-.92 E(ariable Expansion)-.92 E F0 .097 +(Bash and ksh ha)97 151.2 R .396 -.15(ve a)-.2 H .096(ugmented v).15 F .096 +(ariable e)-.25 F 2.596(xpansion. Arithmetic)-.15 F .096(substitution allo) +2.596 F .096(ws an e)-.25 F .096(xpression to be)-.15 F -.25(eva)72 163.2 S .6 +(luated and the result substituted.).25 F .6(Shell v)5.6 F .6 +(ariables may be used as operands, and the result of an e)-.25 F(xpres-)-.15 E +.41(sion may be assigned to a v)72 175.2 R 2.91(ariable. Nearly)-.25 F .41 +(all of the operators from the C language are a)2.91 F -.25(va)-.2 G .41 +(ilable, with the).25 F(same precedence rules:)72 187.2 Q/F2 10/Courier@0 SF 6 +($e)97 205.2 S(cho $\(\(3 + 5 * 32\)\))115 205.2 Q(163)97 217.2 Q F0 -1.11(Va) +72 238.8 S 1.445(riables may be declared as)1.11 F/F3 10/Times-Italic@0 SF +(inte)3.945 E -.1(ge)-.4 G(r).1 E F0 3.945(,w)1.666 G 1.446 +(hich causes arithmetic e)240.956 238.8 R -.25(va)-.25 G 1.446 +(luation to be performed on the v).25 F(alue)-.25 E(whene)72 250.8 Q -.15(ve) +-.25 G 2.5(rt).15 G(he)115.75 250.8 Q 2.5(ya)-.15 G(re assigned to.)136.98 +250.8 Q .483(There are ne)97 266.4 R 2.983(we)-.25 G .483 +(xpansions to obtain the length of a v)162.179 266.4 R(ariable')-.25 E 2.982 +(sv)-.55 G .482(alue and to remo)352.19 266.4 R .782 -.15(ve s)-.15 H .482 +(ubstrings match-).15 F .063(ing speci\214ed patterns from the be)72 278.4 R +.063(ginning and end of v)-.15 F .063(ariable v)-.25 F 2.563(alues. A)-.25 F +(ne)2.563 E 2.563(wf)-.25 G .064(orm of command substitution,)383.249 278.4 R +F1($\()72 290.4 Q F3(list)A F1(\))A F0 2.5(,i)C 2.5(sm)103.67 290.4 S +(uch easier to nest than `)117.84 290.4 Q F3(list)A F0 2.5(`a)C +(nd has simpli\214ed quoting rules.)235.04 290.4 Q .082(There are ne)97 306 R +2.582(wv)-.25 G .082(ariables to control the shell')161.436 306 R 2.581(sb)-.55 +G(eha)284.333 306 Q(vior)-.2 E 2.581(,a)-.4 G .081(nd additional v)323.244 306 +R .081(ariables set or interpreted spe-)-.25 F 1.038(cially by the shell.)72 +318 R F1(RANDOM)6.038 E F0(and)3.538 E F1(SECONDS)3.538 E F0(are)3.539 E F3 +(dynamic)3.539 E F0 -.25(va)3.539 G 3.539(riables: their).25 F -.25(va)3.539 G +1.039(lues are generated afresh).25 F 1.022(each time the)72 330 R 3.522(ya) +-.15 G 1.022(re referenced.)140.176 330 R F1(RANDOM)6.022 E F0 1.021 +(returns a dif)3.521 F 1.021(ferent random number each time it is referenced,) +-.25 F(and)72 342 Q F1(SECONDS)3.138 E F0 .638 +(returns the number of seconds since the shell w)3.138 F .638 +(as started or the v)-.1 F .639(ariable w)-.25 F .639(as assigned to,)-.1 F +1.448(plus an)72 354 R 3.948(yv)-.15 G 1.448(alue assigned.)115.606 354 R F1 +(PWD)6.448 E F0(and)3.948 E F1(OLDPWD)3.947 E F0 1.447 +(are set to the current and pre)3.947 F 1.447(vious w)-.25 F 1.447 +(orking directories,)-.1 F(respecti)72 366 Q -.15(ve)-.25 G(ly).15 E(.)-.65 E +F1(TMOUT)5.604 E F0 .604(controls ho)3.104 F 3.104(wl)-.25 G .604 +(ong the shell will w)226.436 366 R .604(ait at a prompt for input.)-.1 F(If) +5.604 E F1(TMOUT)3.104 E F0 .605(is set to a)3.105 F -.25(va)72 378 S 1.168 +(lue greater than zero, the shell e).25 F 1.168(xits after w)-.15 F 1.168 +(aiting that man)-.1 F 3.668(ys)-.15 G 1.167(econds for input.)337.478 378 R F1 +(REPL)6.167 E(Y)-.92 E F0 1.167(is the def)3.667 F(ault)-.1 E -.25(va)72 390 S +.991(riable for the).25 F F1 -.18(re)3.491 G(ad).18 E F0 -.2(bu)3.491 G .991 +(iltin; if no v).2 F .992(ariable names are supplied as ar)-.25 F .992 +(guments, the line read is assigned to)-.18 F F1(REPL)72 402 Q(Y)-.92 E F0(.)A +F1 2.5(4.2.2. New)72 426 R(and Modi\214ed Builtins)2.5 E F0 .652(Both shells e) +97 441.6 R .651(xpand the basic sh set of b)-.15 F .651(uiltin commands.)-.2 F +F1(Let)5.651 E F0(pro)3.151 E .651(vides a w)-.15 F .651 +(ay to perform arithmetic)-.1 F 2.767(on shell v)72 453.6 R 5.268 +(ariables. Shell)-.25 F 2.768(programmers use)5.268 F F1(typeset)5.268 E F0 +2.768(\(bash includes)5.268 F F1(declar)5.268 E(e)-.18 E F0 2.768(as a synon) +5.268 F 2.768(ym\) to assign)-.15 F(attrib)72 465.6 Q .295(utes such as)-.2 F +F3 -.2(ex)2.795 G(port).2 E F0(and)4.461 E F3 -.37(re)2.795 G(adonly).37 E F0 +.295(to v)4.461 F(ariables.)-.25 E F1(Getopts)5.295 E F0 .294 +(is used by shell scripts to parse script options)2.795 F .962(and ar)72 477.6 +R 3.462(guments. The)-.18 F F1(set)3.462 E F0 .962(command has a ne)3.462 F +3.462(wo)-.25 G(ption)266.446 477.6 Q F13.463 E F0 .963(which tak)3.463 F +.963(es option names as ar)-.1 F 3.463(guments. Option)-.18 F 1.28 +(names are synon)72 489.6 R 1.28(yms for the other set options \(e.g.,)-.15 F +F13.78 E F0(and)3.78 E F1 1.28(\255o noglob)3.78 F F0 3.78(\)o)C 3.78(rp) +375.97 489.6 S(ro)388.08 489.6 Q 1.28(vide ne)-.15 F 3.78(wf)-.25 G 1.28 +(unctionality \()440.78 489.6 R F1(-o)A(notify)72 501.6 Q F0 3.348(,f)C .849 +(or e)106.178 501.6 R 3.349(xample\). The)-.15 F F1 -.18(re)3.349 G(ad).18 E F0 +-.2(bu)3.349 G .849(iltin tak).2 F .849(es a ne)-.1 F(w)-.25 E F13.349 E +F0 .849(option to specify that a line ending in a backslash)3.349 F +(should not be continued.)72 513.6 Q F1 2.5(4.2.3. T)72 537.6 R(ilde Expansion) +-.18 E F0 -.35(Ti)97 553.2 S .252(lde e).35 F .251 +(xpansion is a feature adopted from the C shell.)-.15 F 2.751(At)5.251 G .251 +(ilde character at the be)331.172 553.2 R .251(ginning of a w)-.15 F .251 +(ord is)-.1 F -.15(ex)72 565.2 S(panded to either).15 E F1($HOME)2.5 E F0 +(or the home directory of another user)2.5 E 2.5(,d)-.4 G +(epending on what follo)345.84 565.2 Q(ws the tilde.)-.25 E F1 2.5 +(4.2.4. Interacti)72 589.2 R .2 -.1(ve I)-.1 H(mpr).1 E -.1(ove)-.18 G(ments).1 +E F0 .789(The most noticable impro)97 604.8 R -.15(ve)-.15 G .789(ments o).15 F +-.15(ve)-.15 G 3.289(rs).15 G 3.289(ha)263.385 604.8 S .789 +(re geared for interacti)276.114 604.8 R 1.089 -.15(ve u)-.25 H 3.29(se. Ksh) +.15 F .79(and bash pro)3.29 F .79(vide job)-.15 F .882(control in a v)72 616.8 +R .882(ery similar f)-.15 F .882 +(ashion, with the same options to enable and disable it \()-.1 F F1 .881 +(set -o monitor)B F0 3.381(\)a)C .881(nd the)478.399 616.8 R(same b)72 628.8 Q +(uiltin commands to manipulate jobs \()-.2 E F1(jobs/fg/bg/kill/wait)A F0(\).)A +.866(Command line editing, with emacs and vi-style k)97 644.4 R 1.166 -.15 +(ey b)-.1 H .866(indings, is a).15 F -.25(va)-.2 G .866(ilable in both shells.) +.25 F .866(The Bash)5.866 F F3 -.37(re)72 656.4 S(adline).37 E F0 1.578 +(library is considerably more sophisticated than the ksh editing library:)5.744 +F 1.577(it allo)6.577 F 1.577(ws arbitrary k)-.25 F -.15(ey)-.1 G 1.867 +(bindings, macros, a per)72 668.4 R 1.868(-user customization \214le \()-.2 F +F3(~/.inputr)A(c)-.37 E F0 1.868(\), a number of v)B 1.868 +(ariables to further customize)-.25 F(beha)72 680.4 Q(vior)-.2 E 3.538(,a)-.4 G +1.038(nd a much lar)116.868 680.4 R 1.038 +(ger set of bindable editing commands.)-.18 F 1.037 +(The ksh editing library pro)6.037 F 1.037(vides a small)-.15 F<8c78>72 692.4 Q +(ed command set and only clumsy macros.)-.15 E .706(Both shells of)97 708 R +.706(fer access to the command history)-.25 F 5.706(.T)-.65 G .706 +(he in-line editing options ha)307.278 708 R 1.006 -.15(ve d)-.2 H(ef).15 E +.706(ault k)-.1 F 1.006 -.15(ey b)-.1 H(ind-).15 E .624 +(ings to access the history list.)72 720 R(The)5.624 E F1(fc)3.124 E F0 .624 +(command is pro)3.124 F .624(vided to re-e)-.15 F -.15(xe)-.15 G .623(cute pre) +.15 F .623(vious commands and display)-.25 F EP +%%Page: 6 6 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-6-)279.67 48 S(the contents of the history list.) +72 84 Q/F1 10/Times-Bold@0 SF 2.5(4.2.5. Miscellaneous)72 108 R +(Changes and Impr)2.5 E -.1(ov)-.18 G(ments).1 E F0 .707(Other impro)97 123.6 R +-.15(ve)-.15 G .707(ments include aliases, the).15 F F1(select)3.207 E F0 .708 +(shell language construct, which supports the genera-)3.207 F 1.298 +(tion and presentation of simple menus, and e)72 135.6 R 1.298 +(xtensions to the)-.15 F F1(export)3.798 E F0(and)3.798 E F1 -.18(re)3.798 G +(adonly).18 E F0 -.2(bu)3.798 G 1.298(iltins which allo).2 F(w)-.25 E -.25(va) +72 147.6 S .017(riables to be assigned v).25 F .017 +(alues at the same time the attrib)-.25 F .017(utes are set.)-.2 F -.8(Wo)5.018 +G .018(rd splitting has changed:).8 F .018(if tw)5.018 F 2.518(oo)-.1 G(r) +500.67 147.6 Q .158(more adjacent w)72 159.6 R .157 +(ord splitting characters occur)-.1 F 2.657(,b)-.4 G .157 +(ash and ksh will generate null \214elds; sh mak)264.893 159.6 R .157 +(es runs of mul-)-.1 F .339 +(tiple \214eld separator charactors the same as a single separator)72 171.6 R +5.339(.B)-.55 G .34(ash and ksh split only the results of e)330.89 171.6 R +(xpan-)-.15 E(sion, rather than e)72 183.6 Q -.15(ve)-.25 G(ry w).15 E +(ord as sh does, closing a long-standing shell security hole.)-.1 E 1.234 +(Shell functions in bash and ksh may ha)97 199.2 R 1.534 -.15(ve l)-.2 H 1.234 +(ocal v).15 F 3.734(ariables. V)-.25 F 1.234(ariables declared with)-1.11 F F1 +(typeset)3.734 E F0 1.234(\(or the)3.734 F .001(bash synon)72 211.2 R(ym,)-.15 +E F1(local)2.501 E F0 .001(\), ha)B .301 -.15(ve a s)-.2 H .001 +(cope restricted to the function and its descendents, and may shado).15 F 2.502 +(wv)-.25 G(ariables)472.9 211.2 Q(de\214ned by the in)72 223.2 Q -.2(vo)-.4 G +(king shell.).2 E(Local v)5 E(ariables are remo)-.25 E -.15(ve)-.15 G 2.5(dw) +.15 G(hen a function completes.)317.75 223.2 Q F1 2.5(4.3. F)72 247.2 R(eatur) +-.25 E(es Unique to bash)-.18 E F0(Naturally)97 262.8 Q 2.895(,b)-.65 G .395 +(ash includes features not in sh or ksh.)144.515 262.8 R .395 +(This section discusses some of the features which)5.395 F(mak)72 274.8 Q 2.986 +(eb)-.1 G .486(ash unique.)101.546 274.8 R .486(Most of them pro)5.486 F .486 +(vide impro)-.15 F -.15(ve)-.15 G 2.986(di).15 G(nteracti)288.098 274.8 Q .787 +-.15(ve u)-.25 H .487(se, b).15 F .487(ut a fe)-.2 F 2.987(wp)-.25 G .487 +(rogramming impro)394.653 274.8 R -.15(ve)-.15 G(ments).15 E +(are present as well.)72 286.8 Q +(Full descriptions of these features can be found in the bash documentation.)5 +E F1 2.5(4.3.1. Startup)72 310.8 R(Files)2.5 E F0 .281(Bash e)97 326.4 R -.15 +(xe)-.15 G .281(cutes startup \214les dif).15 F .281 +(ferently than other shells.)-.25 F .281(The bash beha)5.281 F .28 +(vior is a compromise between)-.2 F .116 +(the csh principle of startup \214les with \214x)72 338.4 R .116(ed names e) +-.15 F -.15(xe)-.15 G .116(cuted for each shell and the sh `).15 F +(`minimalist')-.74 E 2.616('b)-.74 G(eha)472.26 338.4 Q(vior)-.2 E(.)-.55 E +2.956(An interacti)72 350.4 R 3.256 -.15(ve i)-.25 H 2.956 +(nstance of bash started as a login shell reads and e).15 F -.15(xe)-.15 G +(cutes).15 E/F2 10/Times-Italic@0 SF(~/.bash_pr)5.455 E(o\214le)-.45 E F0 2.955 +(\(the \214le)7.121 F F2(.bash_pr)72 362.4 Q(o\214le)-.45 E F0 .835 +(in the user')5 F 3.335(sh)-.55 G .835(ome directory\), if it e)187.385 362.4 R +3.335(xists. An)-.15 F(interacti)3.335 E 1.135 -.15(ve n)-.25 H .835 +(on-login shell reads and e).15 F -.15(xe)-.15 G(cutes).15 E F2(~/.bashr)72 +374.4 Q(c)-.37 E F0 5.538(.A)1.666 G(non-interacti)127.422 374.4 Q .838 -.15 +(ve s)-.25 H .538(hell \(one be).15 F .538(gun to e)-.15 F -.15(xe)-.15 G .538 +(cute a shell script, for e).15 F .537(xample\) reads no \214x)-.15 F .537 +(ed startup)-.15 F .139(\214le, b)72 386.4 R .139(ut uses the v)-.2 F .139 +(alue of the v)-.25 F(ariable)-.25 E F1(ENV)2.639 E F0 2.639(,i)C 2.639(fs) +253.361 386.4 S .139(et, as the name of a startup \214le.)263.22 386.4 R .139 +(The ksh practice of reading)5.139 F F1($ENV)72 398.4 Q F0 .69(for e)3.19 F +-.15(ve)-.25 G .69(ry shell, with the accompan).15 F .689(ying dif)-.15 F .689 +(\214culty of de\214ning the proper v)-.25 F .689(ariables and functions for) +-.25 F(interacti)72 410.4 Q .946 -.15(ve a)-.25 H .646(nd non-interacti).15 F +.946 -.15(ve s)-.25 H .646(hells or ha).15 F .646 +(ving the \214le read only for interacti)-.2 F .946 -.15(ve s)-.25 H .646 +(hells, w).15 F .646(as considered too)-.1 F(comple)72 422.4 Q(x.)-.15 E F1 2.5 +(4.3.2. New)72 446.4 R(Builtin Commands)2.5 E F0 1.119(There are a fe)97 462 R +3.619(wb)-.25 G 1.118(uiltins which are ne)170.986 462 R 3.618(wo)-.25 G 3.618 +(rh)268.528 462 S -2.25 -.2(av e)280.476 462 T 1.118(been e)3.818 F 1.118 +(xtended in bash.)-.15 F(The)6.118 E F1(enable)3.618 E F0 -.2(bu)3.618 G 1.118 +(iltin allo).2 F(ws)-.25 E -.2(bu)72 474 S .736 +(iltin commands to be turned on and of).2 F 3.236(fa)-.25 G(rbitrarily)250.198 +474 Q 5.736(.T)-.65 G 3.237(ou)298.644 474 S .737(se the v)311.881 474 R .737 +(ersion of)-.15 F F2(ec)3.237 E(ho)-.15 E F0 .737(found in a user')4.903 F +3.237(ss)-.55 G(earch)482.35 474 Q .013(path rather than the bash b)72 486 R +(uiltin,)-.2 E/F3 10/Courier@0 SF .013(enable -n echo)2.513 F F0(suf)2.513 E +2.513(\214ces. The)-.25 F F1(help)2.513 E F0 -.2(bu)2.513 G .013(iltin pro).2 F +.013(vides quick synopses of)-.15 F 1.382(the shell f)72 498 R 1.382 +(acilities without requiring access to a manual page.)-.1 F F1(Builtin)6.382 E +F0 1.383(is similar to)3.882 F F1(command)3.883 E F0 1.383(in that it)3.883 F +.342(bypasses shell functions and directly e)72 510 R -.15(xe)-.15 G .342 +(cutes b).15 F .342(uiltin commands.)-.2 F .342 +(Access to a csh-style stack of directories)5.342 F .072(is pro)72 522 R .073 +(vided via the)-.15 F F1(pushd)2.573 E F0(,)A F1(popd)2.573 E F0 2.573(,a)C(nd) +211.197 522 Q F1(dirs)2.573 E F0 -.2(bu)2.573 G(iltins.).2 E F1(Pushd)5.073 E +F0(and)2.573 E F1(popd)2.573 E F0 .073(insert and remo)2.573 F .373 -.15(ve d) +-.15 H .073(irectories from the).15 F .094(stack, respecti)72 534 R -.15(ve) +-.25 G(ly).15 E 2.594(,a)-.65 G(nd)154.448 534 Q F1(dirs)2.594 E F0 .094 +(lists the stack contents.The)2.594 F F1(suspend)2.594 E F0 .094 +(command will stop the shell process when)2.594 F 1.329(job control is acti)72 +546 R -.15(ve)-.25 G 3.829(;m).15 G 1.329(ost other shells do not allo)169.136 +546 R 3.829(wt)-.25 G(hemselv)294.64 546 Q 1.33(es to be stopped lik)-.15 F +3.83(et)-.1 G(hat.)421.31 546 Q F1 -.74(Ty)6.33 G(pe,).74 E F0 1.33(the bash) +3.83 F(answer to)72 558 Q F1(which)2.5 E F0(and)2.5 E F1(whence,)2.5 E F0(sho) +2.5 E(ws what will happen when a w)-.25 E(ord is typed as a command:)-.1 E F3 6 +($t)97 576 S(ype export)115 576 Q(export is a shell builtin)97 588 Q 6($t)97 +600 S(ype -t export)115 600 Q(builtin)97 612 Q 6($t)97 624 S(ype bash)115 624 Q +(bash is /bin/bash)97 636 Q 6($t)97 648 S(ype cd)115 648 Q(cd is a function)97 +660 Q(cd \(\))97 672 Q({)97 684 Q(builtin cd "$@" && xtitle $HOST: $PWD)121 696 +Q(})97 708 Q EP +%%Page: 7 7 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-7-)279.67 48 S -1.11(Va)72 84 S .682 +(rious modes tell what a command w)1.11 F .681(ord is \(reserv)-.1 F .681(ed w) +-.15 F .681(ord, alias, function, b)-.1 F .681(uiltin, or \214le\) or which v) +-.2 F(er)-.15 E(-)-.2 E 1.15(sion of a command will be e)72 96 R -.15(xe)-.15 G +1.15(cuted based on a user').15 F 3.65(ss)-.55 G 1.15(earch path.)305.7 96 R +1.15(Some of this functionality has been)6.15 F +(adopted by POSIX.2 and folded into the)72 108 Q/F1 10/Times-Bold@0 SF(command) +2.5 E F0(utility)2.5 E(.)-.65 E F1 2.5(4.3.3. Editing)72 132 R(and Completion) +2.5 E F0 .682(One area in which bash shines is command line editing.)97 147.6 R +.682(Bash uses the)5.682 F/F2 10/Times-Italic@0 SF -.37(re)3.182 G(adline).37 E +F0 .682(library to read and)4.848 F .102(edit lines when interacti)72 159.6 R +-.15(ve)-.25 G 5.102(.R).15 G .103(eadline is a po)191.438 159.6 R .103 +(werful and \215e)-.25 F .103(xible input f)-.15 F .103 +(acility that a user can con\214gure to his)-.1 F 2.506(tastes. It)72 171.6 R +(allo)2.506 E .006(ws lines to be edited using either emacs or vi commands, wh\ +ere those commands are appropri-)-.25 F 2.994(ate. The)72 183.6 R .494 +(full capability of emacs is not present \255 there is no w)2.994 F .495 +(ay to e)-.1 F -.15(xe)-.15 G .495(cute a named command with M-x,).15 F .222 +(for instance \255 b)72 195.6 R .222(ut the e)-.2 F .222 +(xisting commands are more than adequate.)-.15 F .221 +(The vi mode is compliant with the com-)5.222 F +(mand line editing standardized by POSIX.2.)72 207.6 Q 1.69 +(Readline is fully customizable.)97 223.2 R 1.691 +(In addition to the basic commands and k)6.69 F 1.991 -.15(ey b)-.1 H 1.691 +(indings, the library).15 F(allo)72 235.2 Q .83 +(ws users to de\214ne additional k)-.25 F 1.13 -.15(ey b)-.1 H .83 +(indings using a startup \214le.).15 F(The)5.83 E F2(inputr)3.329 E(c)-.37 E F0 +.829(\214le, which def)4.995 F .829(aults to the)-.1 F(\214le)72 247.2 Q F2 +(~/.inputr)4.287 E(c)-.37 E F0 4.287(,i)1.666 G 4.287(sr)137.43 247.2 S 1.788(\ +ead each time readline initializes, permitting users to maintain a consistent \ +interf)148.937 247.2 R(ace)-.1 E .547(across a set of programs.)72 259.2 R .546 +(Readline includes an e)5.546 F .546(xtensible interf)-.15 F .546 +(ace, so each program using the library can)-.1 F .23(add its o)72 271.2 R .23 +(wn bindable commands and program-speci\214c k)-.25 F .531 -.15(ey b)-.1 H +2.731(indings. Bash).15 F .231(uses this f)2.731 F .231 +(acility to add bindings)-.1 F(that perform history e)72 283.2 Q +(xpansion or shell w)-.15 E(ord e)-.1 E(xpansions on the current input line.) +-.15 E .707(Readline interprets a number of v)97 298.8 R .706 +(ariables which further tune its beha)-.25 F(vior)-.2 E 5.706(.V)-.55 G .706 +(ariables e)408.432 298.8 R .706(xist to control)-.15 F .157 +(whether or not eight-bit characters are directly read as input or con)72 310.8 +R -.15(ve)-.4 G .158(rted to meta-pre\214x).15 F .158(ed k)-.15 F .458 -.15 +(ey s)-.1 H .158(equences \(a).15 F(meta-pre\214x)72 322.8 Q 1.575(ed k)-.15 F +1.875 -.15(ey s)-.1 H 1.575 +(equence consists of the character with the eighth bit zeroed, preceded by the) +.15 F F2(meta-)4.074 E(pr)72 334.8 Q(e\214x)-.37 E F0(character)4.45 E 2.784 +(,u)-.4 G .284(sually escape, which selects an alternate k)145.374 334.8 R -.15 +(ey)-.1 G .285(map\), to decide whether to output characters).15 F .485 +(with the eighth bit set directly or as a meta-pre\214x)72 346.8 R .485(ed k) +-.15 F .784 -.15(ey s)-.1 H .484(equence, whether or not to wrap to a ne).15 F +2.984(ws)-.25 G(creen)482.35 346.8 Q .157 +(line when a line being edited is longer than the screen width, the k)72 358.8 +R -.15(ey)-.1 G .158(map to which subsequent k).15 F .458 -.15(ey b)-.1 H +(indings).15 E .531(should apply)72 370.8 R 3.031(,o)-.65 G 3.031(re)133.802 +370.8 S -.15(ve)144.353 370.8 S 3.031(nw).15 G .531 +(hat happens when readline w)168.894 370.8 R .531(ants to ring the terminal') +-.1 F 3.03(sb)-.55 G 3.03(ell. All)399.37 370.8 R .53(of these v)3.03 F +(ariables)-.25 E(can be set in the inputrc \214le.)72 382.8 Q .284 +(The startup \214le understands a set of C preprocessor)97 398.4 R(-lik)-.2 E +2.785(ec)-.1 G .285(onditional constructs which allo)329.49 398.4 R 2.785(wv) +-.25 G(ariables)472.9 398.4 Q .12(or k)72 410.4 R .42 -.15(ey b)-.1 H .119(ind\ +ings to be assigned based on the application using readline, the terminal curr\ +ently being used, or).15 F .316(the editing mode.)72 422.4 R .317 +(Users can add program-speci\214c bindings to mak)5.317 F 2.817(et)-.1 G .317 +(heir li)352.808 422.4 R -.15(ve)-.25 G 2.817(se).15 G 2.817(asier: here) +396.922 422.4 R .317(are bindings to)2.817 F(edit the v)72 434.4 Q(alue of)-.25 +E F1 -.74(PA)2.5 G(TH)-.21 E F0(and double-quote the current or pre)2.5 E +(vious w)-.25 E(ord:)-.1 E/F3 10/Courier@0 SF 6(#M)97 452.4 S +(acros that are convenient for shell interaction)115 452.4 Q($if Bash)97 464.4 +Q 6(#e)97 476.4 S(dit the path)115 476.4 Q +("\\C-xp": "PATH=${PATH}\\e\\C-e\\C-a\\ef\\C-f")97 488.4 Q 6(#p)97 500.4 S +(repare to type a quoted word -- insert open and close double quotes)115 500.4 +Q 6(#a)97 512.4 S(nd move to just after the open quote)115 512.4 Q +("\\C-x\\"": "\\"\\"\\C-b")97 524.4 Q 6(#Q)97 536.4 S +(uote the current or previous word)115 536.4 Q("\\C-xq": "\\eb\\"\\ef\\"")97 +548.4 Q($endif)97 560.4 Q F0 .322(There is a readline command to re-read the \ +\214le, so users can edit the \214le, change some bindings, and be)72 582 R +(gin)-.15 E(to use them almost immediately)72 594 Q(.)-.65 E .851 +(Bash implements the)97 609.6 R F1(bind)3.351 E F0 -.2(bu)3.351 G .851 +(iltin for more dyamic control of readline than the startup \214le permits.).2 +F F1(Bind)72 621.6 Q F0 .167(is used in se)2.667 F -.15(ve)-.25 G .167(ral w) +.15 F 2.667(ays. In)-.1 F F2(list)2.667 E F0 .167 +(mode, it can display the current k)4.333 F .466 -.15(ey b)-.1 H .166 +(indings, list all the readline edit-).15 F .149(ing directi)72 633.6 R -.15 +(ve)-.25 G 2.649(sa).15 G -.25(va)132.798 633.6 S .149 +(ilable for binding, list which k).25 F -.15(ey)-.1 G 2.649(si).15 G -1.9 -.4 +(nv o)282.352 633.6 T .349 -.1(ke a g).4 H -2.15 -.25(iv e).1 H 2.65(nd).25 G +(irecti)345.3 633.6 Q -.15(ve)-.25 G 2.65(,o).15 G 2.65(ro)385.04 633.6 S .15 +(utput the current set of k)396.02 633.6 R -.15(ey)-.1 G .526(bindings in a fo\ +rmat that can be incorporated directly into an inputrc \214le.)72 645.6 R(In) +5.526 E F2(batc)3.026 E(h)-.15 E F0 .526(mode, it reads a series)4.692 F .71 +(of k)72 657.6 R 1.01 -.15(ey b)-.1 H .71 +(indings directly from a \214le and passes them to readline.).15 F .71 +(In its most common usage,)5.71 F F1(bind)3.21 E F0(tak)3.21 E .71(es a)-.1 F +.534(single string and passes it directly to readline, which interprets the li\ +ne as if it had just been read from the)72 669.6 R(inputrc \214le.)72 681.6 Q +(Both k)5 E .3 -.15(ey b)-.1 H(indings and v).15 E +(ariable assignments can appear in the string gi)-.25 E -.15(ve)-.25 G 2.5(nt) +.15 G(o)424.4 681.6 Q F1(bind)2.5 E F0(.)A .401(The readline library also pro) +97 697.2 R .402(vides an interf)-.15 F .402(ace for)-.1 F F2(wor)2.902 E 2.902 +(dc)-.37 G(ompletion)328.546 697.2 Q F0 5.402(.W)C .402(hen the)385.888 697.2 R +F2(completion)2.902 E F0(character)4.568 E 1.261(\(usually T)72 709.2 R 1.261 +(AB\) is typed, readline looks at the w)-.93 F 1.26 +(ord currently being entered and computes the set of \214le-)-.1 F .523 +(names of which the current w)72 721.2 R .523(ord is a v)-.1 F .523 +(alid pre\214x.)-.25 F .524 +(If there is only one possible completion, the rest of the)5.523 F EP +%%Page: 8 8 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-8-)279.67 48 S .358 +(characters are inserted directly)72 84 R 2.858(,o)-.65 G .358(therwise the co\ +mmon pre\214x of the set of \214lenames is added to the current)205.232 84 R +-.1(wo)72 96 S 3.199(rd. A).1 F .699(second T)3.199 F .699(AB character entere\ +d immediately after a non-unique completion causes readline to list)-.93 F +1.814(the possible completions; there is an option to ha)72 108 R 2.113 -.15 +(ve t)-.2 H 1.813(he list displayed immediately).15 F 6.813(.R)-.65 G 1.813 +(eadline pro)436.517 108 R(vides)-.15 E .482 +(hooks so that applications can pro)72 120 R .482 +(vide speci\214c types of completion before the def)-.15 F .483 +(ault \214lename completion)-.1 F .132(is attempted.)72 132 R .132 +(This is quite \215e)5.132 F .132(xible, though it is not completely user)-.15 +F 2.632(-programmable. Bash,)-.2 F .132(for e)2.632 F .132(xample, can)-.15 F +.37(complete \214lenames, command names \(including aliases, b)72 144 R .37 +(uiltins, shell reserv)-.2 F .37(ed w)-.15 F .37(ords, shell functions, and)-.1 +F -.15(exe)72 156 S .424(cutables found in the \214le system\), shell v).15 F +.424(ariables, usernames, and hostnames.)-.25 F .423 +(It uses a set of heuristics)5.424 F(that, while not perfect, is generally qui\ +te good at determining what type of completion to attempt.)72 168 Q/F1 10 +/Times-Bold@0 SF 2.5(4.3.4. History)72 192 R F0 .255 +(Access to the list of commands pre)97 207.6 R .255(viously entered \(the)-.25 +F/F2 10/Times-Italic@0 SF .255(command history)2.755 F F0 2.756(\)i)C 2.756(sp) +399.236 207.6 S(ro)410.882 207.6 Q .256(vided jointly by bash)-.15 F .095 +(and the readline library)72 219.6 R 5.094(.B)-.65 G .094(ash pro)178.928 219.6 +R .094(vides v)-.15 F .094(ariables \()-.25 F F1(HISTFILE)A F0(,)A F1(HISTSIZE) +2.594 E F0 2.594(,a)C(nd)382.068 219.6 Q F1(HISTCONTR)2.594 E(OL)-.3 E F0 2.594 +(\)a)C .094(nd the)479.186 219.6 R F1(history)72 231.6 Q F0(and)2.825 E F1(fc) +2.825 E F0 -.2(bu)2.825 G .325(iltins to manipulate the history list.).2 F .325 +(The v)5.325 F .325(alue of)-.25 F F1(HISTFILE)2.825 E F0 .326 +(specifes the \214le where bash)2.826 F .128(writes the command history on e)72 +243.6 R .128(xit and reads it on startup.)-.15 F F1(HISTSIZE)5.128 E F0 .128 +(is used to limit the number of com-)2.628 F .346(mands sa)72 255.6 R -.15(ve) +-.2 G 2.846(di).15 G 2.846(nt)129.002 255.6 S .346(he history)139.628 255.6 R +(.)-.65 E F1(HISTCONTR)5.346 E(OL)-.3 E F0(pro)2.846 E .346 +(vides a crude form of control o)-.15 F -.15(ve)-.15 G 2.846(rw).15 G .346 +(hich commands are)425.548 255.6 R(sa)72 267.6 Q -.15(ve)-.2 G 2.905(do).15 G +2.905(nt)102.325 267.6 S .405(he history list: a v)113.01 267.6 R .405(alue of) +-.25 F F2(ignor)2.905 E(espace)-.37 E F0 .405(means to not sa)4.571 F .705 -.15 +(ve c)-.2 H .405(ommands which be).15 F .405(gin with a space; a)-.15 F -.25 +(va)72 279.6 S .339(lue of).25 F F2(ignor)2.839 E(edups)-.37 E F0 .339 +(means to not sa)4.505 F .64 -.15(ve c)-.2 H .34 +(ommands identical to the last command sa).15 F -.15(ve)-.2 G(d.).15 E F1 +(HISTCONTR)5.34 E(OL)-.3 E F0 -.1(wa)72 291.6 S 3.15(sn).1 G(amed)95.6 291.6 Q +F1(history_contr)3.15 E(ol)-.18 E F0 .65(in earlier v)3.15 F .649 +(ersions of bash; the old name is still accepted for backw)-.15 F .649 +(ards com-)-.1 F(patibility)72 303.6 Q 5.723(.T)-.65 G(he)121.803 303.6 Q F1 +(history)3.223 E F0 .724(command can read or write \214les containing the hist\ +ory list and display the current)3.223 F .895(list contents.)72 315.6 R(The) +5.895 E F1(fc)3.395 E F0 -.2(bu)3.395 G .895 +(iltin, adopted from POSIX.2 and the K).2 F .894(orn Shell, allo)-.35 F .894 +(ws display and re-e)-.25 F -.15(xe)-.15 G(cution,).15 E .461 +(with optional editing, of commands from the history list.)72 327.6 R .462 +(The readline library of)5.462 F .462(fers a set of commands to)-.25 F .657(se\ +arch the history list for a portion of the current input line or a string type\ +d by the user)72 339.6 R 5.657(.F)-.55 G(inally)445.836 339.6 Q 3.157(,t)-.65 G +(he)476.403 339.6 Q F2(his-)3.157 E(tory)72 351.6 Q F0(library)4.196 E 2.53(,g) +-.65 G .03(enerally incorporated directly into the readline library)128.346 +351.6 R 2.53(,i)-.65 G .03(mplements a f)350.636 351.6 R .031 +(acility for history recall,)-.1 F -.15(ex)72 363.6 S .594(pansion, and re-e) +.15 F -.15(xe)-.15 G .594(cution of pre).15 F .594(vious commands v)-.25 F .594 +(ery similar to csh \(`)-.15 F .593(`bang history')-.74 F .593 +(', so called because)-.74 F(the e)72 375.6 Q +(xclamation point introduces a history substitution\):)-.15 E/F3 10/Courier@0 +SF 6($e)97 393.6 S(cho a b c d e)115 393.6 Q 6(abcde)97 405.6 S 6($!)97 417.6 S +6(!fghi)115 417.6 S(echo a b c d e f g h i)97 429.6 Q 6(abcdefghi)97 441.6 S 6 +($!)97 453.6 S(-2)115 453.6 Q(echo a b c d e)97 465.6 Q 6(abcde)97 477.6 S 6 +($e)97 489.6 S(cho !-2:1-4)115 489.6 Q(echo a b c d)97 501.6 Q 6(abcd)97 513.6 +S F0 1.456(The command history is only sa)72 535.2 R -.15(ve)-.2 G 3.957(dw).15 +G 1.457(hen the shell is interacti)232.599 535.2 R -.15(ve)-.25 G 3.957(,s).15 +G 3.957(oi)352.804 535.2 S 3.957(ti)364.541 535.2 S 3.957(sn)374.058 535.2 S +1.457(ot a)386.905 535.2 R -.25(va)-.2 G 1.457(ilable for use by shell).25 F +(scripts.)72 547.2 Q F1 2.5(4.3.5. New)72 571.2 R(Shell V)2.5 E(ariables)-.92 E +F0 .701(There are a number of con)97 586.8 R -.15(ve)-.4 G .701(nience v).15 F +.701(ariables that bash interprets to mak)-.25 F 3.2(el)-.1 G .7(ife easier) +402.76 586.8 R 5.7(.T)-.55 G .7(hese include)453.59 586.8 R F1(FIGNORE)72 598.8 +Q F0 3.973(,w)C 1.473(hich is a set of \214lename suf)132.363 598.8 R<8c78>-.25 +E 1.474(es identifying \214les to e)-.15 F 1.474 +(xclude when completing \214lenames;)-.15 F F1(HOSTTYPE)72 610.8 Q F0 3.03(,w)C +.53(hich is automatically set to a string describing the type of hardw)139.21 +610.8 R .53(are on which bash is cur)-.1 F(-)-.2 E .76(rently e)72 622.8 R -.15 +(xe)-.15 G(cuting;).15 E F1(OSTYPE)3.26 E F0 3.26(,t)C 3.26(ow)191.76 622.8 S +.76(hich bash assigns a v)207.24 622.8 R .761(alue that identi\214es the v)-.25 +F .761(ersion of)-.15 F/F4 9/Times-Roman@0 SF(UNIX)3.261 E F0(it')3.261 E 3.261 +(sr)-.55 G(unning)476.22 622.8 Q 1.354 +(on \(great for putting architecture-speci\214c binary directories into the)72 +634.8 R F1 -.74(PA)3.854 G(TH)-.21 E F0 1.354(\); and)B F1(IGNOREEOF)3.854 E F0 +3.854(,w)C(hose)485.67 634.8 Q -.25(va)72 646.8 S .062 +(lue indicates the number of consecuti).25 F .362 -.15(ve E)-.25 H .062 +(OF characters that an interacti).15 F .362 -.15(ve s)-.25 H .062 +(hell will read before e).15 F .062(xiting \255)-.15 F .114(an easy w)72 658.8 +R .113(ay to k)-.1 F .113(eep yourself from being logged out accidentally)-.1 F +5.113(.T)-.65 G(he)344.285 658.8 Q F1(auto_r)2.613 E(esume)-.18 E F0 -.25(va) +2.613 G .113(riable alters the w).25 F(ay)-.1 E .409 +(the shell treats simple command names: if job control is acti)72 670.8 R -.15 +(ve)-.25 G 2.909(,a).15 G .409(nd this v)335.516 670.8 R .409 +(ariable is set, single-w)-.25 F .409(ord simple)-.1 F .17(commands without re\ +directions cause the shell to \214rst look for a suspended job with that name \ +before start-)72 682.8 R(ing a ne)72 694.8 Q 2.5(wp)-.25 G(rocess.)118.13 694.8 +Q EP +%%Page: 9 9 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-9-)279.67 48 S/F1 10/Times-Bold@0 SF 2.5 +(4.3.6. Brace)72 84 R(Expansion)2.5 E F0 .653(Since sh of)97 99.6 R .653 +(fers no con)-.25 F -.15(ve)-.4 G .653(nient w).15 F .653 +(ay to generate arbitrary strings that share a common pre\214x or suf)-.1 F +<8c78>-.25 E 1.893(\(pathname e)72 111.6 R 1.893 +(xpansion requires that the \214lenames e)-.15 F 1.892(xist\), bash implements) +-.15 F/F2 10/Times-Italic@0 SF(br)4.392 E 1.892(ace e)-.15 F(xpansion)-.2 E F0 +4.392(,ac)C(apability)469 111.6 Q(pick)72 123.6 Q .496(ed up from csh.)-.1 F +.496(Brace e)5.496 F .496(xpansion is similar to pathname e)-.15 F .496 +(xpansion, b)-.15 F .497(ut the strings generated need not)-.2 F 1.107 +(correspond to e)72 135.6 R 1.107(xisting \214les.)-.15 F 3.607(Ab)6.107 G +1.107(race e)207.655 135.6 R 1.107(xpression consists of an optional)-.15 F F2 +(pr)3.606 E(eamble)-.37 E F0 3.606(,f)1.666 G(ollo)419.286 135.6 Q 1.106 +(wed by a pair of)-.25 F 2.809 +(braces enclosing a series of comma-separated strings, and an optional)72 147.6 +R F2(postamble)5.31 E F0 7.81(.T)1.666 G 2.81(he preamble is)440.06 147.6 R(pr\ +epended to each string within the braces, and the postamble is then appended t\ +o each resulting string:)72 159.6 Q/F3 10/Courier@0 SF 6($e)97 177.6 S +(cho a{d,c,b}e)115 177.6 Q(ade ace abe)97 189.6 Q F1 2.5(4.3.7. Pr)72 219.6 R +(ompt Customization)-.18 E F0 .077(One of the more popular interacti)97 235.2 R +.376 -.15(ve f)-.25 H .076(eatures that bash pro).15 F .076 +(vides is the ability to customize the prompt.)-.15 F(Both)72 247.2 Q F1(PS1) +3.305 E F0(and)3.305 E F1(PS2,)3.305 E F0 .805 +(the primary and secondary prompts, are e)3.305 F .805 +(xpanded before being displayed.)-.15 F -.15(Pa)5.805 G(rameter).15 E .324 +(and v)72 259.2 R .324(ariable e)-.25 F .324 +(xpansion is performed when the prompt string is e)-.15 F .323 +(xpanded, so the v)-.15 F .323(alue of an)-.25 F 2.823(ys)-.15 G .323(hell v) +454.217 259.2 R(ariable)-.25 E .728(can be put into the prompt \(e.g.,)72 271.2 +R F1($SHL)3.228 E(VL)-.92 E F0 3.228(,w)C .728(hich indicates ho)258.564 271.2 +R 3.228(wd)-.25 G .729(eeply the current shell is nested\).)342.988 271.2 R +(Bash)5.729 E 1.895 +(specially interprets characters in the prompt string preceded by a backslash.) +72 283.2 R 1.895(Some of these backslash)6.895 F .874 +(escapes are replaced with the current time, the date, the current w)72 295.2 R +.874(orking directory)-.1 F 3.374(,t)-.65 G .874(he username, and the)416.958 +295.2 R .781(command number or history number of the command being entered.)72 +307.2 R .78(There is e)5.781 F -.15(ve)-.25 G 3.28(nab).15 G .78 +(ackslash escape to)429.13 307.2 R .007 +(cause the shell to change its prompt when running as root after an)72 319.2 R +F2(su)2.507 E F0 5.007(.B)C .008(efore printing each primary prompt,)360.388 +319.2 R .27(bash e)72 331.2 R .27(xpands the v)-.15 F(ariable)-.25 E F1(PR)2.77 +E(OMPT_COMMAND)-.3 E F0 .269(and, if it has a v)2.77 F .269(alue, e)-.25 F -.15 +(xe)-.15 G .269(cutes the e).15 F .269(xpanded v)-.15 F .269(alue as a)-.25 F +.04(command, allo)72 343.2 R .041(wing additional prompt customization.)-.25 F +-.15(Fo)5.041 G 2.541(re).15 G .041 +(xample, this assignment causes the current user)311.964 343.2 R(,)-.4 E .99 +(the current host, the time, the last component of the current w)72 355.2 R +.989(orking directory)-.1 F 3.489(,t)-.65 G .989(he le)402.954 355.2 R -.15(ve) +-.25 G 3.489(lo).15 G 3.489(fs)443.412 355.2 S .989(hell nesting,)454.121 355.2 +R(and the history number of the current command to be embedded into the primar\ +y prompt:)72 367.2 Q F3 6($P)97 385.2 S +(S1='\\u@\\h [\\t] \\W\($SHLVL:\\!\)\\$ ')115 385.2 Q +(chet@odin [21:03:44] documentation\(2:636\)$ cd ..)97 397.2 Q +(chet@odin [21:03:54] src\(2:637\)$)97 409.2 Q F0 .619 +(The string being assigned is surrounded by single quotes so that if it is e)72 +430.8 R(xported,)-.15 E F1(SHL)3.119 E(VL)-.92 E F0 .619(will be updated)3.119 +F(by a child shell:)72 442.8 Q F3 +(chet@odin [21:13:35] src\(2:638\)$ export PS1)97 460.8 Q +(chet@odin [21:17:40] src\(2:639\)$ bash)97 472.8 Q +(chet@odin [21:17:46] src\(3:696\)$)97 484.8 Q F0(The)72 506.4 Q F1(\\$)2.5 E +F0(escape is displayed as `)2.5 E(`)-.74 E F1($)A F0 1.48 -.74('' w)D +(hen running as a normal user).74 E 2.5(,b)-.4 G(ut as `)342.08 506.4 Q(`)-.74 +E F1(#)A F0 1.48 -.74('' w)D(hen running as root.).74 E F1 2.5(4.3.8. POSIX)72 +530.4 R(Mode)2.5 E F0 .46(Although bash is intended to be POSIX.2 compliant, t\ +here are areas in which the def)97 546 R .46(ault beha)-.1 F .46(vior is)-.2 F +1.168(not compatible with the standard.)72 558 R -.15(Fo)6.169 G 3.669(ru).15 G +1.169(sers who wish to operate in a strict POSIX.2 en)238.85 558 R 1.169 +(vironment, bash)-.4 F .61(implements a)72 570 R F2 .61(POSIX mode)3.11 F F0 +5.61(.W)C .61(hen this mode is acti)199.42 570 R -.15(ve)-.25 G 3.109(,b).15 G +.609(ash modi\214es its def)303.727 570 R .609(ault operation where it dif)-.1 +F(fers)-.25 E .066(from POSIX.2 to match the standard.)72 582 R .067 +(POSIX mode is entered when bash is started with the)5.066 F F1 .067(-o posix) +2.567 F F0(option)2.567 E .382(or when)72 594 R F1 .382(set -o posix)2.882 F F0 +.381(is e)2.881 F -.15(xe)-.15 G 2.881(cuted. F).15 F .381 +(or compatibility with other GNU softw)-.15 F .381 +(are that attempts to be POSIX.2)-.1 F 5.752 +(compliant, bash also enters POSIX mode if either of the v)72 606 R(ariables) +-.25 E F1(POSIX_PED)8.253 E(ANTIC)-.35 E F0(or)8.253 E F1(POSIXL)72 618 Q +(Y_CORRECT)-.92 E F0 1.179(is set when bash is started or assigned a v)3.679 F +1.178(alue during e)-.25 F -.15(xe)-.15 G 3.678(cution. When).15 F 1.178 +(bash is)3.678 F .218(started in POSIX mode, for e)72 630 R .218(xample, the) +-.15 F F1(kill)2.718 E F0 -.2(bu)2.718 G(iltin').2 E(s)-.55 E F12.718 E +F0 .218(option beha)2.718 F -.15(ve)-.2 G 2.718(sd).15 G(if)370.166 630 Q .219 +(ferently: it lists the names of all)-.25 F 1.084(signals on a single line sep\ +arated by spaces, rather than listing the signal names and their corresponding) +72 642 R(numbers.)72 654 Q .865(Some of the def)97 669.6 R .865(ault bash beha) +-.1 F .865(vior dif)-.2 F .865 +(fers from other shells as a result of the POSIX standard.)-.25 F -.15(Fo)5.866 +G(r).15 E 1.16(instance, bash includes the)72 681.6 R F1(!)3.66 E F0(reserv) +6.16 E 1.16(ed w)-.15 F 1.16(ord to ne)-.1 F -.05(ga)-.15 G 1.16 +(te the return status of a pipeline because it has been).05 F +(de\214ned by POSIX.2.)72 693.6 Q +(Neither sh nor ksh has implemented that feature.)5 E EP +%%Page: 10 10 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-1)277.17 48 S 2.5(0-)288 48 S/F1 10/Times-Bold@0 +SF 2.5(4.4. F)72 84 R(eatur)-.25 E(es Unique to ksh)-.18 E F0 .177 +(Ksh includes a number of features not in the currently-released v)97 99.6 R +.178(ersion of bash, v)-.15 F .178(ersion 1.14.)-.15 F(Unless)5.178 E .822 +(noted, none of these features is in the POSIX.2 standard.)72 111.6 R .821 +(Where appropriate the equi)5.821 F -.25(va)-.25 G .821(lent bash features).25 +F(are noted.)72 123.6 Q F1 2.5(4.4.1. The)72 147.6 R(ksh Language)2.5 E F0 +2.955(An)97 163.2 S .955 -.25(ew c)112.175 163.2 T .455(ompound command folds) +.25 F F1(test)2.955 E F0 .456(into the ksh language, delimited by the reserv) +2.955 F .456(ed w)-.15 F(ords)-.1 E F1([[)2.956 E F0(and)2.956 E F1(]])72 175.2 +Q F0 5.726(.T)C .726(he syntax is identical to)92.996 175.2 R F1(test)3.225 E +F0 .725(with a fe)3.225 F 3.225(wc)-.25 G .725 +(hanges: for instance, instead of)262.855 175.2 R F13.225 E F0(and)3.225 +E F13.225 E F0(,)A F1(&&)3.225 E F0(and)3.225 E/F2 10/Symbol SF +3.225 E F0(are)3.225 E 3.32(used. The)72 187.2 R -.1(wo)3.32 G .82(rds between) +.1 F F1([[)3.32 E F0(and)3.32 E F1(]])3.32 E F0 .82(are not processed for w) +3.32 F .82(ord splitting or \214lename generation.)-.1 F .82(The ne)5.82 F(w) +-.25 E .926 +(command does pattern matching as well as string comparison, a la the)72 199.2 +R F1(case)3.425 E F0 3.425(command. This)3.425 F(ne)3.425 E 3.425(wc)-.25 G +(ontrol)480.11 199.2 Q .165(structure does ha)72 211.2 R .465 -.15(ve t)-.2 H +.165(he adv).15 F .166(antage of reducing common ar)-.25 F .166 +(gument problems encountered using test \(e.g.)-.18 F F1(test)2.666 E +("$string")72 223.2 Q F0 2.928(,w)C(here)125.748 223.2 Q F1($string)2.928 E F0 +-.15(ex)2.928 G .428(pands to).15 F F12.928 E F0 .428(\), b)B .428 +(ut at the cost of bloating the language.)-.2 F .427(The POSIX.2 test algo-) +5.427 F 2.752(rithm that bash uses, along with some programmer care, alle)72 +235.2 R 2.752(viates those problems in a backw)-.25 F(ards-)-.1 E .854 +(compatible w)72 247.2 R .853(ay with no additions to the language.)-.1 F .853 +(The one capability of)5.853 F F1 .853([[ ]])3.353 F F0 .853(not a)3.353 F -.25 +(va)-.2 G .853(ilable in bash is its).25 F(ability to test whether an indi)72 +259.2 Q(vidual)-.25 E F1(set \255o)2.5 E F0(option is turned on or of)2.5 E(f.) +-.25 E .339(Other parts of the ksh language are not common to bash.)97 274.8 R +(The)5.34 E F1(\(\(...\)\))2.84 E F0(operator)5.34 E 2.84(,e)-.4 G(qui)419.33 +274.8 Q -.25(va)-.25 G .34(lent to).25 F F1 .34(let "...")2.84 F F0(,)A .197 +(is unique to ksh, as are the concept of co-processes and the)72 286.8 R F1 +(time)2.697 E F0 -.1(ke)2.696 G(yw)-.05 E .196 +(ord to time commands and pipelines.)-.1 F F1 2.5(4.4.2. Functions)72 310.8 R +(and Aliases)2.5 E F0 1.022(The K)97 326.4 R 1.022(orn shell has)-.35 F/F3 10 +/Times-Italic@0 SF(autoloaded)3.522 E F0 3.522(functions. A)3.522 F 1.022 +(function mark)3.522 F 1.022(ed as)-.1 F F3(autoload)3.522 E F0 1.022 +(is not de\214ned until it is)5.188 F 1.042(\214rst e)72 338.4 R -.15(xe)-.15 G +3.542(cuted. When).15 F 1.042(such a function is e)3.542 F -.15(xe)-.15 G 1.042 +(cuted, a search is made through the directories in).15 F F1(FP)3.541 E -.95 +(AT)-.74 G(H).95 E F0(\(a)3.541 E .27 +(colon-separated list of directories similar to)72 350.4 R F1 -.74(PA)2.77 G +(TH)-.21 E F0 2.77(\)f)C .27(or a \214le with the same name as the function.) +285.78 350.4 R .27(That \214le)5.27 F .548(is then read in as with the)72 362.4 +R F1(.)3.881 E F0 .547(command; presumably the function is de\214ned therein.) +3.047 F .547(There is a pair of shell)5.547 F .886 +(functions included in the bash distrib)72 374.4 R .886(ution \()-.2 F F3 -.2 +(ex)C(amples/functions/autoload).2 E F0 5.886(\)t)C .886(hat pro)378.35 374.4 R +.886(vide much of this func-)-.15 F +(tionality without changing the shell itself.)72 386.4 Q .116 +(Ksh functions are scoped in such a w)97 402 R .116(ay that the en)-.1 F .116 +(vironment in which the)-.4 F 2.616(ya)-.15 G .116(re e)405.144 402 R -.15(xe) +-.15 G .115(cuted is closer to a).15 F .827(shell script en)72 414 R 3.327 +(vironment. Bash)-.4 F .827(uses the POSIX.2 scoping rules, which mak)3.327 F +3.327(et)-.1 G .827(he function e)392.517 414 R -.15(xe)-.15 G .828(cution en) +.15 F(vi-)-.4 E 1.2(ronment an e)72 426 R 1.2(xact cop)-.15 F 3.7(yo)-.1 G 3.7 +(ft)174.86 426 S 1.199(he shell en)184.67 426 R 1.199 +(vironment with the replacement of the shell')-.4 F 3.699(sp)-.55 G 1.199 +(ositional paramters)426.421 426 R(with the function ar)72 438 Q 2.5 +(guments. K)-.18 F +(orn shell functions do not share options or traps with the in)-.35 E -.2(vo) +-.4 G(king shell.).2 E .451(Ksh has)97 453.6 R F3(tr)2.951 E(ac)-.15 E -.1(ke) +-.2 G(d).1 E F0 .452(aliases, which alias a command name to its full pathname.) +2.952 F .452(Bash has true command)5.452 F(hashing.)72 465.6 Q F1 2.5 +(4.4.3. Arrays)72 489.6 R F0 .246 +(Arrays are an aspect of ksh that has no real bash equi)97 505.2 R -.25(va)-.25 +G 2.746(lent. The).25 F 2.746(ya)-.15 G .246(re easy to create and manipulate:) +371.42 505.2 R 1.637 +(an array is created automatically by using subscript assignment \()72 517.2 R +F1(name)A F0([)A F3(inde)A(x)-.2 E F0(]=)A F1 -.1(va)C(lue).1 E F0 1.637 +(\), and an)B 4.137(yv)-.15 G(ariable)476.79 517.2 Q 1.967 +(may be referred to as an array)72 529.2 R 6.967(.K)-.65 G 1.967(sh arrays, ho) +219.229 529.2 R(we)-.25 E -.15(ve)-.25 G 2.767 -.4(r, h).15 H -2.25 -.2(av e).4 +H(se)4.667 E -.15(ve)-.25 G 1.967(ral anno).15 F 1.967(ying limitations: the) +-.1 F 4.466(ym)-.15 G 1.966(ay be)480.654 529.2 R(inde)72 541.2 Q -.15(xe)-.15 +G 3.498(do).15 G .998(nly up to 512 or 1024 elements, depending on ho)111.858 +541.2 R 3.498(wt)-.25 G .999(he shell is compiled, and there is only the) +330.188 541.2 R(clumsy)72 553.2 Q F1 .223(set -A)2.723 F F0 .223 +(to assign a list of v)2.723 F .223(alues sequentially)-.25 F 5.223(.D)-.65 G +.223(espite these limits, arrays are useful, if underutilized)293.31 553.2 R +(by shell programmers.)72 565.2 Q F1 2.5(4.4.4. Builtin)72 589.2 R(Commands)2.5 +E F0 .112(Some of the b)97 604.8 R .112(uiltin commands ha)-.2 F .412 -.15 +(ve b)-.2 H .112(een e).15 F .112(xtended or are ne)-.15 F 2.612(wi)-.25 G +2.613(nk)351.402 604.8 S 2.613(sh. The)364.015 604.8 R F1(print)2.613 E F0 -.2 +(bu)2.613 G .113(iltin w).2 F .113(as included)-.1 F .242(to w)72 616.8 R .242 +(ork around the incompatibilities and limitations of)-.1 F F1(echo)2.741 E F0 +5.241(.T)C(he)328.234 616.8 Q F1(whence)2.741 E F0 .241(command tells what w) +2.741 F .241(ould hap-)-.1 F .418(pen if each ar)72 628.8 R .418 +(gument were typed as a command name.)-.18 F(The)5.418 E F1(cd)2.919 E F0 -.2 +(bu)2.919 G .419(iltin has been e).2 F .419(xtended to tak)-.15 F 2.919(eu)-.1 +G 2.919(pt)470.482 628.8 S 2.919(ot)481.181 628.8 S -.1(wo)491.88 628.8 S(ar)72 +640.8 Q 1.425(guments: if tw)-.18 F 3.925(oa)-.1 G -.18(rg)153.485 640.8 S +1.424(uments are supplied, the second is substituted for the \214rst in the cu\ +rrent directory).18 F 2.294 +(name and the shell changes to the resultant directory name.)72 652.8 R 2.295 +(The ksh)7.294 F F1(trap)4.795 E F0 -.2(bu)4.795 G 2.295(iltin accepts).2 F F1 +(ERR)4.795 E F0(and)4.795 E F1(DEB)72 664.8 Q(UG)-.1 E F0 .15(as trap names.) +2.65 F(The)5.15 E F1(ERR)2.65 E F0 .15(trap is e)2.65 F -.15(xe)-.15 G .15 +(cuted when a command f).15 F(ails;)-.1 E F1(DEB)2.65 E(UG)-.1 E F0 .15(is e) +2.65 F -.15(xe)-.15 G .15(cuted after e).15 F -.15(ve)-.25 G(ry).15 E +(simple command.)72 676.8 Q .05(The bash distrib)97 692.4 R .05 +(ution includes shell functions that implement)-.2 F F1(print)2.55 E F0(and) +2.55 E F1(whence)2.55 E F0 .05(and the e)2.55 F .05(xtensions to)-.15 F F1(cd) +72 704.4 Q F0(.)A EP +%%Page: 11 11 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-1)277.17 48 S 2.5(1-)288 48 S/F1 10/Times-Bold@0 +SF 2.5(4.4.5. Expansion)72 84 R F0 .282(The ksh \214lename generation \()97 +99.6 R/F2 10/Times-Italic@0 SF(globbing)A F0 2.782(\)f)C .282(acilities ha) +262.45 99.6 R .581 -.15(ve b)-.2 H .281(een e).15 F .281(xtended be)-.15 F .281 +(yond their bash and sh coun-)-.15 F 3.68(terparts. In)72 111.6 R 1.181 +(this area, ksh can be thought of as)3.681 F F2 -.4(eg)3.681 G -.37(re).4 G(p) +.37 E F0 1.181(to the bash)5.347 F F2(gr)3.681 E(ep)-.37 E F0 6.181(.K)1.666 G +1.181(sh globbing of)382.406 111.6 R 1.181(fers things lik)-.25 F(e)-.1 E 1.018 +(alternation, the ability to match zero or more instances of a pattern, and th\ +e ability to match e)72 123.6 R 1.018(xactly one)-.15 F(occurrence of an)72 +135.6 Q 2.5(yo)-.15 G 2.5(fal)150.98 135.6 S(ist of patterns.)166.53 135.6 Q F1 +2.5(4.4.6. Startup)72 159.6 R(Files)2.5 E F0 .977(Ksh and bash e)97 175.2 R +-.15(xe)-.15 G .977(cute startup \214les dif).15 F(ferently)-.25 E 5.977(.K) +-.65 G .977(sh e)297.879 175.2 R(xpands)-.15 E F1(ENV)3.478 E F0 .978 +(and sources the \214le it names for)3.478 F -2.15 -.25(ev e)72 187.2 T 1.85 +(ry shell.).25 F 1.85(Bash sources)6.85 F F1($ENV)4.35 E F0 1.85 +(only in non-interacti)4.35 F 2.15 -.15(ve s)-.25 H 1.85(hells; interacti).15 F +2.15 -.15(ve s)-.25 H 1.85(hells source \214x).15 F 1.85(ed \214les, as)-.15 F +-.15(ex)72 199.2 S 1.285(plained in the pre).15 F 1.285(vious section.)-.25 F +1.285(The POSIX standard has speci\214ed the ksh beha)6.285 F(vior)-.2 E 3.785 +(,s)-.4 G 3.785(ob)441.545 199.2 S 1.285(ash acts the)455.33 199.2 R +(same as ksh if started with the)72 211.2 Q F1(\255posix)2.5 E F0(or)2.5 E F1 +(\255o posix)2.5 E F0(options.)2.5 E F1 2.5(4.4.7. History)72 235.2 R F0 +(Finally)97 250.8 Q 3.372(,t)-.65 G .872(he ksh history implementation dif) +133.342 250.8 R .871(fers slightly from bash.)-.25 F .871 +(Each instance of bash k)5.871 F .871(eeps the)-.1 F .633 +(history list in memory and of)72 262.8 R .633(fers options to the)-.25 F F1 +(history)3.133 E F0 -.2(bu)3.133 G .634 +(iltin to write the list to or read it from a named).2 F 3.216(\214le. Ksh)72 +274.8 R -.1(ke)3.216 G .716 +(eps the history in a \214le, which it accesses each time a command is sa).1 F +-.15(ve)-.2 G 3.215(dt).15 G 3.215(oo)426.445 274.8 S 3.215(rr)439.66 274.8 S +(etrie)449.535 274.8 Q -.15(ve)-.25 G 3.215(df).15 G(rom)487.89 274.8 Q .338 +(the history)72 286.8 R 5.338(.K)-.65 G .338 +(sh history \214les may be shared among dif)129.246 286.8 R .338 +(ferent concurrent instances of ksh, which could be a)-.25 F +(bene\214t to the user)72 298.8 Q(.)-.55 E F1 2.5(5. F)72 322.8 R(eatur)-.25 E +(es in Bash-2.0)-.18 E F0 .657(The ne)97 338.4 R .657 +(xt release of bash, 2.0, will be a major o)-.15 F -.15(ve)-.15 G 3.157 +(rhaul. It).15 F .656(will include man)3.157 F 3.156(yn)-.15 G 1.156 -.25(ew f) +419.532 338.4 T .656(eatures, for both).25 F .705(programming and interacti)72 +350.4 R 1.005 -.15(ve u)-.25 H 3.205(se. Redundant).15 F -.15(ex)3.205 G .705 +(isting functions will be remo).15 F -.15(ve)-.15 G 3.206(d. There).15 F .706 +(are se)3.206 F -.15(ve)-.25 G .706(ral cases).15 F 1.34(where bash treats a v) +72 362.4 R 1.34(ariable specially to enable functionality a)-.25 F -.25(va)-.2 +G 1.34(ilable another w).25 F 1.34(ay \()-.1 F F1($nolinks)A F0(vs.)3.84 E F1 +1.34(set -o)3.84 F(ph)72 374.4 Q(ysical)-.15 E F0 2.5(,f)C(or e)115.19 374.4 Q +(xample\); the special treatment of the v)-.15 E(ariable name will be remo)-.25 +E -.15(ve)-.15 G(d.).15 E F1 2.5(5.1. Arrays)72 398.4 R F0 .546(Bash-2.0 will \ +include arrays which are a superset of those in ksh, with the size limitations\ + remo)97 414 R -.15(ve)-.15 G(d.).15 E(The)72 426 Q F1(declar)3.086 E(e)-.18 E +F0(,)A F1 -.18(re)3.086 G(adonly).18 E F0 3.086(,a)C(nd)174.768 426 Q F1 +(export)3.086 E F0 -.2(bu)3.086 G .586 +(iltins will accept options to specify arrays, and the).2 F F1 -.18(re)3.085 G +(ad).18 E F0 -.2(bu)3.085 G .585(iltin will).2 F(ha)72 438 Q .81 -.15(ve a)-.2 +H 3.01(no).15 G .51(ption to read a list of w)110.99 438 R .51 +(ords and assign them directly to an array)-.1 F 5.51(.T)-.65 G .51 +(here will also be a ne)386.23 438 R 3.01(wa)-.25 G(rray)487.9 438 Q F2 .262 +(compound assignment)72 450 R F0 .262(syntax a)2.762 F -.25(va)-.2 G .262 +(ilable for assignment statements and the).25 F F1(declar)2.761 E(e)-.18 E F0 +-.2(bu)2.761 G 2.761(iltin. This).2 F(ne)2.761 E 2.761(ws)-.25 G(yntax)481.78 +450 Q .441(has the form)72 462 R F2(name)2.941 E F0(=\()A F2(value1)A F0(...) +2.941 E F2(valueN)2.941 E F0 .441(\), where each)B F2(value)2.942 E F0 .442 +(has the form [)4.608 F F2(subscript)A F0(]=)A F2(string)A F0 5.442(.O)C .442 +(nly the)449.776 462 R F2(string)2.942 E F0 1.395(is required.)72 474 R 1.395 +(If the optional brack)6.395 F 1.395(ets and)-.1 F F2(subscript)3.894 E F0 +1.394(are included, that inde)3.894 F 3.894(xi)-.15 G 3.894(sa)388.714 474 S +1.394(ssigned to, otherwise the)400.938 474 R(inde)72 486 Q 3.656(xo)-.15 G +3.656(ft)102.726 486 S 1.156(he element assigned is the last inde)112.492 486 R +3.657(xa)-.15 G 1.157(ssigned to by the statement plus one.)272.917 486 R(Inde) +6.157 E 1.157(xing starts at)-.15 F 2.73(zero. The)72 498 R .23 +(same syntax is accepted by)2.73 F F1(declar)2.73 E(e)-.18 E F0 5.229(.I)C(ndi) +269.159 498 Q .229(vidual array elements may be assigned to using the ksh)-.25 +F F2(name)72 510 Q F0([)A F2(subscript)A F0(]=)A F2(value)A F0(.)A F1 2.5 +(5.2. Dynamic)72 534 R(Loading)2.5 E F0 .348(On systems that support the)97 +549.6 R F2(dlopen)2.848 E F0 .349(\(3\) library function, bash-2.0 will allo)B +2.849(wn)-.25 G .849 -.25(ew b)407.504 549.6 T .349(uiltins to be loaded).05 F +.049(into a running shell from a shared object \214le.)72 561.6 R .049(The ne) +5.049 F 2.549(wb)-.25 G .049(uiltins will ha)298.999 561.6 R .348 -.15(ve a)-.2 +H .048(ccess to the rest of the shell f).15 F(acil-)-.1 E .649(ities, b)72 +573.6 R .649(ut programmers will be subject to a fe)-.2 F 3.149(ws)-.25 G .649 +(tructural rules.)269.591 573.6 R .65(This will be pro)5.65 F .65 +(vided via a ne)-.15 F 3.15(wo)-.25 G .65(ption to)472.51 573.6 R F1(enable)72 +585.6 Q F0(.)A F1 2.5(5.3. Builtins)72 609.6 R F0 .889(Some of the e)97 625.2 R +.889(xisting b)-.15 F .889(uiltins will change in bash-2.0.)-.2 F .888(As pre) +5.888 F .888(viously noted,)-.25 F F1(declar)3.388 E(e)-.18 E F0(,)A F1(export) +3.388 E F0(,)A F1 -.18(re)3.388 G(ad-).18 E(only)72 637.2 Q F0 2.873(,a)C(nd) +100.153 637.2 Q F1 -.18(re)2.873 G(ad).18 E F0 .373(will accept ne)2.873 F +2.873(wo)-.25 G .374(ptions to specify arrays.)206.288 637.2 R(The)5.374 E F1 +(jobs)2.874 E F0 -.2(bu)2.874 G .374(iltin will be able to list only stopped).2 +F .323(or running jobs.)72 649.2 R(The)5.322 E F1(enable)2.822 E F0 .322 +(command will tak)2.822 F 2.822(ean)-.1 G -.25(ew)282.84 649.2 S F13.072 +E F0 .322(option to restrict its actions to the POSIX.2)2.822 F F2(spe-)2.822 E +(cial)72 661.2 Q F0 -.2(bu)3.14 G(iltins.).2 E F1(Kill)5.64 E F0 .64 +(will be able to list signal numbers corresponding to indi)3.14 F .64 +(vidual signal names.)-.25 F .64(The read-)5.64 F .703(line library interf)72 +673.2 R(ace,)-.1 E F1(bind)3.203 E F0 3.203(,w)C .703(ill ha)193.032 673.2 R +1.003 -.15(ve a)-.2 H 3.203(no).15 G .703(ption to remo)243.951 673.2 R 1.003 +-.15(ve t)-.15 H .703(he binding for an).15 F 3.203(yk)-.15 G 1.002 -.15(ey s) +398.032 673.2 T .702(equence \(which is not).15 F +(the same as binding it to self-insert\).)72 685.2 Q .494(There will be tw)97 +700.8 R 2.994(on)-.1 G .994 -.25(ew b)177.196 700.8 T .495 +(uiltin commands in bash-2.0.).05 F(The)5.495 E F1(diso)2.995 E(wn)-.1 E F0 +.495(command will remo)2.995 F .795 -.15(ve j)-.15 H .495(obs from).15 F(bash') +72 712.8 Q 3.445(si)-.55 G .945(nternal jobs table when job control is acti) +103.225 712.8 R -.15(ve)-.25 G 5.945(.A).15 G(diso)303.25 712.8 Q .944 +(wned job will not be listed by the jobs com-)-.25 F .666(mand, nor will its e) +72 724.8 R .666(xit status be reported.)-.15 F(Diso)5.667 E .667 +(wned jobs will not be sent a)-.25 F F1(SIGHUP)3.167 E F0 .667 +(when an interacti)3.167 F -.15(ve)-.25 G EP +%%Page: 12 12 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-1)277.17 48 S 2.5(2-)288 48 S .688(shell e)72 84 R +3.187(xits. Most)-.15 F .687(of the shell')3.187 F 3.187(so)-.55 G .687 +(ptional or)205.423 84 R/F1 10/Times-Italic@0 SF(to)3.187 E -.1(gg)-.1 G(led).1 +E F0 .687(functionality will be folded into the ne)3.187 F(w)-.25 E/F2 10 +/Times-Bold@0 SF(shopt)3.187 E F0 -.2(bu)3.187 G(iltin.).2 E(Man)72 96 Q 3.714 +(yo)-.15 G 3.714(ft)103.894 96 S 1.214(he v)113.718 96 R 1.214 +(ariables which alter the shell')-.25 F 3.714(sb)-.55 G(eha)266.282 96 Q 1.214 +(vior when set \(re)-.2 F -.05(ga)-.15 G 1.214(rdless of their v).05 F 1.215 +(alue\) will be made)-.25 F 6(options settable with)72 108 R F2(shopt)8.5 E F0 +11(.E)C 6(xamples of such v)218.23 108 R 6(ariables include)-.25 F F2(allo)8.5 +E(w_null_glob_expansion)-.1 E F0(,)A F2(glob_dot_\214lenames)72 120 Q F0 2.5 +(,a)C(nd)163.67 120 Q F2(MAIL_W)2.5 E(ARNING)-1.2 E F0(.)A F2 2.5(5.4. V)72 144 +R(ariables and V)-.92 E(ariable Expansion)-.92 E F0 .047 +(Bash-2.0 will implement se)97 159.6 R -.15(ve)-.25 G .048(ral ne).15 F 2.548 +(wv)-.25 G .048(ariable e)252.988 159.6 R 2.548(xpansions. These)-.15 F .048 +(will answer se)2.548 F -.15(ve)-.25 G .048(ral of the most per).15 F(-)-.2 E +.213(sistant requests for ne)72 171.6 R 2.713(wf)-.25 G 2.713(eatures. It) +172.582 171.6 R .213(will be possible to `)2.713 F .212(`indirectly reference') +-.74 F 2.712('av)-.74 G .212(ariable with an e)398.534 171.6 R(xpansion,)-.15 E +(lik)72 183.6 Q 3.01(eu)-.1 G(sing)94.91 183.6 Q/F3 10/Courier@0 SF .51 +(eval \\$${name})3.01 F F0 .51(to reference a v)3.01 F .51(ariable named by) +-.25 F F3(${name})3.01 E F0 5.51(.E)C .51(xpansions will be a)394.32 183.6 R +-.25(va)-.2 G(ilable).25 E .462(to retrie)72 195.6 R .762 -.15(ve s)-.25 H .462 +(ubstrings of v).15 F .461(ariables in an)-.25 F F1(awk)2.961 E F0(-lik)A 2.961 +(em)-.1 G .461(anner: starting at a speci\214c inde)277.692 195.6 R .461 +(x, retrie)-.15 F .461(ving some num-)-.25 F .941 +(ber of characters or the rest of the string.)72 207.6 R .941 +(It will be possible to retrie)5.941 F 1.241 -.15(ve s)-.25 H .941 +(equences of array elements lik).15 F(e)-.1 E .354(this, too.)72 219.6 R .354 +(It w)5.354 F .354(ould be nice to ha)-.1 F .654 -.15(ve a w)-.2 H .354 +(ay to replace portions of a v).05 F .353 +(ariable matching a pattern the same w)-.25 F(ay)-.1 E(leading or trailing sub\ +strings are presently stripped; that capability may be a)72 231.6 Q -.25(va)-.2 +G(ilable.).25 E .453(Another ne)97 247.2 R 2.953(we)-.25 G .453 +(xpansion will pro)156.376 247.2 R .453(vide a w)-.15 F .454 +(ay to create strings containing arbitrary characters, which is)-.1 F(incon)72 +259.2 Q -.15(ve)-.4 G 1.636(nient in the current v).15 F 4.136(ersion. W)-.15 F +1.635(ords of the form $')-.8 F F1(string)A F0 4.135('w)C 1.635(ill e)355.145 +259.2 R 1.635(xpand to)-.15 F F1(string)4.135 E F0 1.635(with backslash-)4.135 +F 1.231(escaped characters in)72 271.2 R F1(string)3.731 E F0 1.231 +(replaced as speci\214ed by the ANSI C standard.)3.731 F 1.232 +(As with other single-quoted)6.232 F +(shell strings, the only character that may not appear in)72 283.2 Q F1(string) +2.5 E F0(is a single quote.)2.5 E 1.436(The shell v)97 298.8 R 1.436 +(ariables will change also.)-.25 F 3.936(An)6.436 G 1.936 -.25(ew va)272.052 +298.8 T(riable).25 E F2(HISTIGNORE)3.936 E F0 1.435(will supersede)3.936 F F2 +(HISTCON-)3.935 E(TR)72 310.8 Q(OL)-.3 E F0(.)A F2(HISTIGNORE)5.327 E F0 .327 +(is the history analogy of)2.827 F F2(FIGNORE)2.828 E F0 2.828(:ac)C .328 +(olon-separated list of patterns specifying)339.938 310.8 R 1.082 +(commands to omit from the history list.)72 322.8 R 1.081 +(The special pattern '&' will match the pre)6.081 F 1.081 +(vious history line, to)-.25 F(pro)72 334.8 Q 1.568(vide the)-.15 F F2 +(HISTCONTR)4.068 E(OL)-.3 E F1(ignor)4.068 E(edups)-.37 E F0(beha)5.734 E(vior) +-.2 E 6.568(.M)-.55 G(an)303.546 334.8 Q 4.069(yv)-.15 G 1.569 +(ariables which modify the shell')326.655 334.8 R 4.069(sb)-.55 G(eha)474.21 +334.8 Q(vior)-.2 E .395(will lose their special meaning.)72 346.8 R -1.11(Va) +5.395 G .395(riables such as)1.11 F F2(notify)2.895 E F0(and)2.895 E F2(noclob) +2.895 E(ber)-.1 E F0 .395(which pro)2.895 F .395(vide functionality a)-.15 F +-.25(va)-.2 G(il-).25 E .931 +(able via other mechanisms will no longer be treated specially)72 358.8 R 5.931 +(.O)-.65 G .931(ther v)340.06 358.8 R .932(ariables will be folded into)-.25 F +F2(shopt)3.432 E F0(.)A(The)72 370.8 Q F2(history_contr)5.519 E(ol)-.18 E F0 +(and)5.519 E F2(hostname_completion_\214le)5.519 E F0 -.25(va)5.519 G 3.019 +(riables, superseded by).25 F F2(HISTCONTR)5.518 E(OL)-.3 E F0(and)5.518 E F2 +(HOSTFILE)72 382.8 Q F0(respecti)2.5 E -.15(ve)-.25 G(ly).15 E 2.5(,w)-.65 G +(ill be remo)185.12 382.8 Q -.15(ve)-.15 G(d.).15 E F2 2.5(5.5. Readline)72 +406.8 R F0(Naturally)97 422.4 Q 2.94(,t)-.65 G .44(here will be impro)142.34 +422.4 R -.15(ve)-.15 G .441(ments to readline as well.).15 F .441 +(All of the POSIX.2)5.441 F F1(vi)2.941 E F0 .441(-mode editing com-)B .33 +(mands will be implemented; missing commands lik)72 434.4 R 2.829(e`)-.1 G .329 +(m' to sa)290.599 434.4 R .629 -.15(ve t)-.2 H .329 +(he current cursor position \().15 F F1(mark)A F0 2.829(\)a)C .329(nd the) +478.951 434.4 R .36(`@' command for macro e)72 446.4 R .36(xpansion will be a) +-.15 F -.25(va)-.2 G 2.861(ilable. The).25 F .361 +(ability to set the mark and e)2.861 F .361(xchange the current)-.15 F .764 +(cursor position \()72 458.4 R F1(point)A F0 3.264(\)a)C .764 +(nd mark will be added to the readline emacs mode as well.)170.672 458.4 R .763 +(Since there are com-)5.764 F .196 +(mands to set the mark, commands to manipulate the re)72 470.4 R .197 +(gion \(the characters between the point and the mark\))-.15 F .111(will be a) +72 482.4 R -.25(va)-.2 G 2.611(ilable. Commands).25 F(ha)2.611 E .411 -.15 +(ve b)-.2 H .11 +(een added to the readline emacs mode for more complete ksh compati-).15 F +(bility)72 494.4 Q 2.5(,s)-.65 G(uch as the C-])101.36 494.4 Q F1(c)A F0 +(character search command.)2.5 E F2 2.5(5.6. Con\214guration)72 518.4 R F0 .318 +(Bash w)97 534 R .318 +(as the \214rst GNU program to completely autocon\214gure.)-.1 F .319 +(Its autocon\214guration mechanism pre-)5.319 F(dates)72 546 Q F1(autoconf)4.07 +E F0 4.07(,t)C 1.569 +(he current GNU con\214guration program, and needs updating.)140.97 546 R 1.569 +(Bash-2.0 may include an)6.569 F .603 +(autoconf-based con\214guration script, if necessary ne)72 558 R 3.103(wf)-.25 +G .603(unctionality can be added to autoconf, or its limita-)294.476 558 R +(tions bypassed.)72 570 Q F2 2.5(5.7. Miscellaneous)72 594 R F0 1.632 +(The POSIX mode will be impro)97 609.6 R -.15(ve)-.15 G 4.131(di).15 G 4.131 +(nb)254.26 609.6 S 1.631(ash-2.0; it will pro)268.391 609.6 R 1.631 +(vide a more complete superset of the)-.15 F(POSIX standard.)72 621.6 Q -.15 +(Fo)5 G 2.5(rt).15 G(he \214rst time, bash will recognize the e)163.79 621.6 Q +(xistance of the POSIX.2)-.15 E F1(special)2.5 E F0 -.2(bu)2.5 G(iltins.).2 E +2.627(An)97 637.2 S .627 -.25(ew t)111.847 637.2 T .127(rap v).25 F(alue,)-.25 +E F2(DEB)2.627 E(UG)-.1 E F0 2.627(,w)C .128(ill be present, as in ksh.)218.405 +637.2 R .128(Commands speci\214ed with a)5.128 F F2(DEB)2.628 E(UG)-.1 E F0 +.128(trap will)2.628 F 1.908(be e)72 649.2 R -.15(xe)-.15 G 1.908 +(cuted after e).15 F -.15(ve)-.25 G 1.908(ry simple command.).15 F 1.908 +(Since this mak)6.908 F 1.908(es shell script deb)-.1 F 1.908 +(uggers possible, I hope to)-.2 F(include a bash deb)72 661.2 Q +(ugger in the bash-2.0 release.)-.2 E F2 2.5(6. A)72 685.2 R -.1(va)-1 G +(ilability).1 E F0 5.997(The current v)97 700.8 R 5.997(ersion of bash is a) +-.15 F -.25(va)-.2 G 5.998(ilable for anon).25 F 5.998 +(ymous FTP from prep.ai.mit.edu as)-.15 F F1(/pub/gnu/bash-1.14.2.tar)72 712.8 +Q(.gz)-1.11 E F0(.)1.666 E EP +%%Page: 13 13 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 2.5(-1)277.17 48 S 2.5(3-)288 48 S/F1 10/Times-Bold@0 +SF 2.5(7. Conclusion)72 84 R F0 .755(This paper has presented an o)97 99.6 R +-.15(ve)-.15 G(rvie).15 E 3.255(wo)-.25 G 3.255(fb)259.27 99.6 S .755 +(ash, compared its features with those of other shells, and)270.855 99.6 R +(hinted at features in the ne)72 111.6 Q(xt release, bash-2.0.)-.15 E .483 +(Bash is a solid replacement for sh.)97 127.2 R .483(It is suf)5.483 F .483 +(\214ciently portable to run on nearly e)-.25 F -.15(ve)-.25 G .484(ry v).15 F +.484(ersion of)-.15 F/F2 9/Times-Roman@0 SF(UNIX)2.984 E F0 .514 +(from 4.3 BSD to SVR4.2, and se)72 139.2 R -.15(ve)-.25 G(ral).15 E F2(UNIX) +3.013 E F0 -.1(wo)3.013 G(rkalik).1 E .513(es, and rob)-.1 F .513 +(ust enough to replace sh on most of those)-.2 F .771(systems, It is v)72 151.2 +R .771(ery close to POSIX.2-conformant in POSIX mode, and is getting f)-.15 F +(aster)-.1 E 5.771(.I)-.55 G 3.272(ti)436.684 151.2 S 3.272(sn)445.516 151.2 S +.772(ot, unfortu-)457.678 151.2 R(nately)72 163.2 Q 2.663(,g)-.65 G .163 +(etting smaller)105.953 163.2 R 2.663(,b)-.4 G .163(ut there are man)170.399 +163.2 R 2.663(yo)-.15 G .163(ptional features.)248.101 163.2 R .163(It is v) +5.163 F .162(ery easy to b)-.15 F .162(uild a small subset to use as)-.2 F 2.5 +(ad)72 175.2 S(irect replacement for /bin/sh.)83.94 175.2 Q .909 +(Bash has thousands of users w)97 190.8 R .909(orldwide, all of whom ha)-.1 F +1.209 -.15(ve h)-.2 H .91(elped to mak).15 F 3.41(ei)-.1 G 3.41(tb)409.34 190.8 +S(etter)420.53 190.8 Q 5.91(.A)-.55 G .91(nother testa-)453.38 190.8 R +(ment to the bene\214ts of free softw)72 202.8 Q(are.)-.1 E F1 2.5(8. Refer)72 +226.8 R(ences)-.18 E F0 .432([1] S. R. Bourne, `)72 242.4 R .432(`UNIX T)-.74 F +.432(ime-Sharing System:)-.35 F .431(The UNIX Shell')5.431 F(',)-.74 E/F3 10 +/Times-Italic@0 SF .431(Bell System T)2.931 F(ec)-.92 E .431(hnical J)-.15 F +(ournal)-.25 E F0 2.931(,5)C(7\(6\),)484.84 242.4 Q +(July-August, 1978, pp. 1971-1990.)72 254.4 Q .736([2] Morris Bolsk)72 270 R +3.237(ya)-.15 G .737(nd Da)153.22 270 R .737(vid K)-.2 F(orn,)-.35 E F3 .737 +(The K)3.237 F .737(ornShell Command and Pr)-.4 F -.1(og)-.45 G -.15(ra).1 G +.737(mming Langua).15 F -.1(ge)-.1 G F0 3.237(,P).1 G .737(rentice Hall,) +453.833 270 R(1989.)72 282 Q .142([3] Bill Jo)72 297.6 R 1.442 -.65(y, A)-.1 H +2.642(nI).65 G .141(ntroduction to the C Shell,)140.428 297.6 R F3 .141 +(UNIX User')2.641 F 2.641(sS)-.4 G .141(upplementary Documents)309.346 297.6 R +F0 2.641(,U)C(ni)424.328 297.6 Q -.15(ve)-.25 G .141(rsity of Califor).15 F(-) +-.2 E(nia at Berk)72 309.6 Q(ele)-.1 E 1.3 -.65(y, 1)-.15 H(986.).65 E .283 +([4] IEEE,)72 325.2 R F3 .283(IEEE Standar)2.783 F 2.783(df)-.37 G .283 +(or Information T)179.692 325.2 R(ec)-.92 E(hnolo)-.15 E .283(gy -- P)-.1 F +.283(ortable Oper)-.8 F .283(ating System Interface \(POSIX\) P)-.15 F(art)-.8 +E(2: Shell and Utilities)72 337.2 Q F0 2.5(,1)C(992.)165.06 337.2 Q F1 2.5 +(9. A)72 361.2 R(uthor Inf)-.5 E(ormation)-.25 E F0 .937(Chet Rame)97 376.8 R +3.437(yi)-.15 G 3.437(sas)153.724 376.8 S(oftw)172.818 376.8 Q .936 +(are engineer w)-.1 F .936(orking at Case W)-.1 F .936(estern Reserv)-.8 F +3.436(eU)-.15 G(ni)393.43 376.8 Q -.15(ve)-.25 G(rsity).15 E 5.936(.H)-.65 G +3.436(eh)443.036 376.8 S .936(as a B.S. in)455.912 376.8 R .072 +(Computer Engineering and an M.S. in Computer Science, both from CWR)72 388.8 R +2.573(U. He)-.4 F .073(has been w)2.573 F .073(orking on bash)-.1 F +(for six years, and the primary maintainer for one.)72 400.8 Q EP +%%Trailer +end +%%EOF diff --git a/doc/texinfo.tex b/doc/texinfo.tex new file mode 100644 index 0000000..03c2998 --- /dev/null +++ b/doc/texinfo.tex @@ -0,0 +1,9250 @@ +% 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{2009-01-18.17} +% +% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007, 2008, 2009 Free Software Foundation, Inc. +% +% This texinfo.tex file is free software: you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation, either version 3 of the +% License, or (at your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see . +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or +% ftp://tug.org/tex/texinfo.tex +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + + +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t +\let\ptextop=\top +{\catcode`\'=\active +\global\let\ptexquoteright'}% Math-mode def from plain.tex. +\let\ptexraggedright=\raggedright + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% Since the category of space is not known, we have to be careful. +\chardef\spacecat = 10 +\def\spaceisspace{\catcode`\ =\spacecat} + +% sometimes characters are active, so we need control sequences. +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dashChar = `\- +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\lquoteChar= `\` +\chardef\questChar = `\? +\chardef\rquoteChar= `\' +\chardef\semiChar = `\; +\chardef\underChar = `\_ + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% 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} + +% @| 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 + }% + }% +} + +% 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 + \errorcontextlines16 +}% + +% 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 + +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page. The solution is +% described on page 260 of The TeXbook. It involves outputting two +% marks for the sectioning macros, one before the section break, and +% one after. I won't pretend I can describe this better than DEK... +\def\domark{% + \toks0=\expandafter{\lastchapterdefs}% + \toks2=\expandafter{\lastsectiondefs}% + \toks4=\expandafter{\prevchapterdefs}% + \toks6=\expandafter{\prevsectiondefs}% + \toks8=\expandafter{\lastcolordefs}% + \mark{% + \the\toks0 \the\toks2 + \noexpand\or \the\toks4 \the\toks6 + \noexpand\else \the\toks8 + }% +} +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% + \ifcase0\topmark\fi + \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} + +% 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). + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi + \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. + % + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + % We don't want .vr (or whatever) entries like this: + % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} + % "\acronym" won't work when it's read back in; + % it needs to be + % {\code {{\tt \backslashcurfont }acronym} + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingyyy.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 24pt + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1\relax \unvbox#1\relax +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% 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{\parseargusing{}} +\def\parseargusing#1#2{% + \def\argtorun{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurrence of `\^^M' or `\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \argtorun. +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as environments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At run-time, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Environment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% 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/toc files. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi + \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + +% 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} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% + \fi\fi +} + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% 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 + +% Old definition--didn't work. +%\parseargdef\need{\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 +%}} + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. +% +\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 -- \input text of FILE. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable % we want to expand any @value in FILE. + \turnoffactive % and allow special characters in the expansion + \indexnofonts % Allow `@@' and other weird things in file names. + \edef\temp{\noexpand\input #1 }% + % + % This trickery is to read FILE outside of a group, in case it makes + % definitions, etc. + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other + \catcode`\`=\other + \catcode`\'=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} + +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} + +% @sp n outputs n lines of vertical space + +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\begingroup \catcode`\^^M=\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. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode`\_ = \active + \gdef\mathunderscore{% + \catcode`\_=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a \ 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 + \mathunderscore + \let\\ = \mathbackslash + \mathactive + % make the texinfo accent commands work in math mode + \let\"=\ddot + \let\'=\acute + \let\==\bar + \let\^=\hat + \let\`=\grave + \let\u=\breve + \let\v=\check + \let\~=\tilde + \let\dotaccent=\dot + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \catcode`' = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + \let' = \ptexquoteright + } +} + +% Some math mode symbols. +\def\bullet{$\ptexbullet$} +\def\geq{\ifmmode \ge\else $\ge$\fi} +\def\leq{\ifmmode \le\else $\le$\fi} +\def\minus{\ifmmode -\else $-$\fi} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em. So do +% whichever is larger. +% +\def\dots{% + \leavevmode + \setbox0=\hbox{...}% get width of three periods + \ifdim\wd0 > 1.5em + \dimen0 = \wd0 + \else + \dimen0 = 1.5em + \fi + \hbox to \dimen0{% + \hskip 0pt plus.25fil + .\hskip 0pt plus1fil + .\hskip 0pt plus1fil + .\hskip 0pt plus.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , + +% @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{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \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 + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html +% (and related messages, the final outcome is that it is up to the TeX +% user to double the backslashes and otherwise make the string valid, so +% that's what we do). + +% double active backslashes. +% +{\catcode`\@=0 \catcode`\\=\active + @gdef@activebackslashdouble{% + @catcode`@\=@active + @let\=@doublebackslash} +} + +% To handle parens, we must adopt a different approach, since parens are +% not active characters. hyperref.dtx (which has the same problem as +% us) handles it with this amazing macro to replace tokens, with minor +% changes for Texinfo. It is included here under the GPL by permission +% from the author, Heiko Oberdiek. +% +% #1 is the tokens to replace. +% #2 is the replacement. +% #3 is the control sequence with the string. +% +\def\HyPsdSubst#1#2#3{% + \def\HyPsdReplace##1#1##2\END{% + ##1% + \ifx\\##2\\% + \else + #2% + \HyReturnAfterFi{% + \HyPsdReplace##2\END + }% + \fi + }% + \xdef#3{\expandafter\HyPsdReplace#3#1\END}% +} +\long\def\HyReturnAfterFi#1\fi{\fi#1} + +% #1 is a control sequence in which to do the replacements. +\def\backslashparens#1{% + \xdef#1{#1}% redefine it as its expansion; the definition is simply + % \lastnode when called from \setref -> \pdfmkdest. + \HyPsdSubst{(}{\realbackslash(}{#1}% + \HyPsdSubst{)}{\realbackslash)}{#1}% +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found. (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} + +\ifpdf + % + % Color manipulation macros based on pdfcolor.tex. + \def\cmykDarkRed{0.28 1 1 0.35} + \def\cmykBlack{0 0 0 1} + % + % k sets the color for filling (usual text, etc.); + % K sets the color for stroking (thin rules, e.g., normal _'s). + \def\pdfsetcolor#1{\pdfliteral{#1 k #1 K}} + % + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\cmykBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % + \pdfcatalog{/PageMode /UseOutlines} + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % pdftex (and the PDF format) support .png, .jpg, .pdf (among + % others). Let's try in that order. + \let\pdfimgext=\empty + \begingroup + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \errhelp = \nopdfimagehelp + \errmessage{Could not find image file #1 for pdf}% + \else \gdef\pdfimgext{PDF}% + \fi + \else \gdef\pdfimgext{pdf}% + \fi + \else \gdef\pdfimgext{JPG}% + \fi + \else \gdef\pdfimgext{jpeg}% + \fi + \else \gdef\pdfimgext{jpg}% + \fi + \else \gdef\pdfimgext{png}% + \fi + \closein 1 + \endgroup + % + % without \immediate, ancient pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifdim \wd0 >0pt width \imagewidth \fi + \ifdim \wd2 >0pt height \imageheight \fi + \ifnum\pdftexversion<13 + #1.\pdfimgext + \else + {#1.\pdfimgext}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + % + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \turnoffactive + \activebackslashdouble + \makevalueexpandable + \def\pdfdestname{#1}% + \backslashparens\pdfdestname + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + }} + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1} + % + % by default, use a color that is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. + \def\urlcolor{\cmykDarkRed} + \def\linkcolor{\cmykDarkRed} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \else + % Doubled backslashes in the name. + {\activebackslashdouble \xdef\pdfoutlinedest{#3}% + \backslashparens\pdfoutlinedest}% + \fi + % + % Also double the backslashes in the display string. + {\activebackslashdouble \xdef\pdfoutlinetext{#1}% + \backslashparens\pdfoutlinetext}% + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. + \indexnofonts + \setupdatafile + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + % + \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 + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + % do we want to go so far as to use \indexnofonts instead of just + % special-casing \var here? + \def\var##1{##1}% + % + \leavevmode\setcolor{\urlcolor}% + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + % non-pdf mode + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\setcolor = \gobble + \let\pdfsetcolor = \gobble + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Unfortunately, we have to override this for titles and the like, since +% in those cases "rm" is bold. Sigh. +\def\rmisbold{\rm\def\curfontstyle{bf}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + + +% 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} +% +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +% +\def\setleading#1{% + \dimen0 = #1\relax + \normalbaselineskip = \baselinefactor\dimen0 + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% PDF CMaps. See also LaTeX's t1.cmap. +% +% do nothing with this by default. +\expandafter\let\csname cmapOT1\endcsname\gobble +\expandafter\let\csname cmapOT1IT\endcsname\gobble +\expandafter\let\csname cmapOT1TT\endcsname\gobble + +% if we are producing pdf, and we have \pdffontattr, then define cmaps. +% (\pdffontattr was introduced many years ago, but people still run +% older pdftex's; it's easy to conditionalize, so we do.) +\ifpdf \ifx\pdffontattr\undefined \else + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1IT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1IT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1TT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1TT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +\fi\fi + + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap +% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass +% empty to omit). +\def\setfont#1#2#3#4#5{% + \font#1=\fontprefix#2#3 scaled #4 + \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble +% emacs-page end of cmaps + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\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} + +% Definitions for a main text size of 11pt. This is the default in +% Texinfo. +% +\def\definetextfontsizexi{% +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728} + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2}{OT1} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440} + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315}{OT1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200} + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +% reset the current fonts +\textfonts +\rm +} % end of 11pt text font size definitions + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit. This is for the GNU +% Press printing of the Emacs 22 manual. Maybe other manuals in the +% future. Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acro in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +% reduce space between paragraphs +\divide\parskip by 2 + +% reset the current fonts +\textfonts +\rm +} % end of 10pt text font size definitions + + +% We provide the user-level command +% @fonttextsize 10 +% (or 11) to redefine the text font size. pt is assumed. +% +\def\xword{10} +\def\xiword{11} +% +\parseargdef\fonttextsize{% + \def\textsizearg{#1}% + \wlog{doing @fonttextsize \textsizearg}% + % + % Set \globaldefs so that documents can use this inside @tex, since + % makeinfo 4.8 does not support it, but we need it nonetheless. + % + \begingroup \globaldefs=1 + \ifx\textsizearg\xword \definetextfontsizex + \else \ifx\textsizearg\xiword \definetextfontsizexi + \else + \errhelp=\EMsimple + \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} + \fi\fi + \endgroup +} + + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. 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 because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rmisbold #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \resetmathfonts \setleading{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 + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + +% Define these just so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% --karl, 24jan03. + +% Set up the default fonts, so we can use them for creating boxes. +% +\definetextfontsizexi + + +\message{markup,} + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will +% define and register \INITMACRO to be called on markup style changes. +% \INITMACRO can check \currentmarkupstyle for the innermost +% style and the set of \ifmarkupSTYLE switches for all styles +% currently in effect. +\newif\ifmarkupvar +\newif\ifmarkupsamp +\newif\ifmarkupkey +%\newif\ifmarkupfile % @file == @samp. +%\newif\ifmarkupoption % @option == @samp. +\newif\ifmarkupcode +\newif\ifmarkupkbd +%\newif\ifmarkupenv % @env == @code. +%\newif\ifmarkupcommand % @command == @code. +\newif\ifmarkuptex % @tex (and part of @math, for now). +\newif\ifmarkupexample +\newif\ifmarkupverb +\newif\ifmarkupverbatim + +\let\currentmarkupstyle\empty + +\def\setupmarkupstyle#1{% + \csname markup#1true\endcsname + \def\currentmarkupstyle{#1}% + \markupstylesetup +} + +\let\markupstylesetup\empty + +\def\defmarkupstylesetup#1{% + \expandafter\def\expandafter\markupstylesetup + \expandafter{\markupstylesetup #1}% + \def#1% +} + +% Markup style setup for left and right quotes. +\defmarkupstylesetup\markupsetuplq{% + \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuplqdefault \else \temp \fi +} + +\defmarkupstylesetup\markupsetuprq{% + \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuprqdefault \else \temp \fi +} + +{ +\catcode`\'=\active +\catcode`\`=\active + +\gdef\markupsetuplqdefault{\let`\lq} +\gdef\markupsetuprqdefault{\let'\rq} + +\gdef\markupsetcodequoteleft{\let`\codequoteleft} +\gdef\markupsetcodequoteright{\let'\codequoteright} + +\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} +} + +\let\markupsetuplqcode \markupsetcodequoteleft +\let\markupsetuprqcode \markupsetcodequoteright +\let\markupsetuplqexample \markupsetcodequoteleft +\let\markupsetuprqexample \markupsetcodequoteright +\let\markupsetuplqverb \markupsetcodequoteleft +\let\markupsetuprqverb \markupsetcodequoteright +\let\markupsetuplqverbatim \markupsetcodequoteleft +\let\markupsetuprqverbatim \markupsetcodequoteright + +\let\markupsetuplqsamp \markupsetnoligaturesquoteleft +\let\markupsetuplqkbd \markupsetnoligaturesquoteleft + +% Allow an option to not replace quotes with a regular directed right +% quote/apostrophe (char 0x27), but instead use the undirected quote +% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it +% the default, but it works for pasting with more pdf viewers (at least +% evince), the lilypond developers report. xpdf does work with the +% regular 0x27. +% +\def\codequoteright{% + \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax + \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax + '% + \else \char'15 \fi + \else \char'15 \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% + \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax + \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax + % [Knuth] pp. 380,381,391 + % \relax disables Spanish ligatures ?` and !` of \tt font. + \relax`% + \else \char'22 \fi + \else \char'22 \fi +} + +% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. +\def\noligaturesquoteleft{\relax\lq} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +%% 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 + \ptexslash\fi\fi\fi} +\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% @cite is like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @b, explicit bold. Also @strong. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +% @t, explicit typewriter. +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} + +% @samp. +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} + +% definition of @key that produces a lozenge. Doesn't adjust to text size. +%\setfont\keyrm\rmshape{8}{1000}{OT1} +%\font\keysy=cmsy9 +%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% +% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% +% \vbox{\hrule\kern-0.4pt +% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% +% \kern-0.4pt\hrule}% +% \kern-.06em\raise0.4pt\hbox{\angleright}}}} + +% definition of @key with no lozenge. If the current font is already +% monospace, don't change it; that way, we respect @kbdinputstyle. But +% if it isn't monospace, then use \tt. +% +\def\key#1{{\setupmarkupstyle{key}% + \nohyphenation + \ifmonospace\else\tt\fi + #1}\null} + +% ctrl is no longer a Texinfo command. +\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 + \plainfrenchspacing + #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 + \catcode`\'=\active \catcode`\`=\active + \global\let'=\rq \global\let`=\lq % default definitions + % + \global\def\code{\begingroup + \setupmarkupstyle{code}% + % The following should really be moved into \setupmarkupstyle handlers. + \catcode\dashChar=\active \catcode\underChar=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\realdash + \let_\realunder + \fi + \codex + } +} + +\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} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is undesirable in +% some manuals, especially if they don't have long identifiers in +% general. @allowcodebreaks provides a way to control this. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg'}% + \fi\fi +} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. +\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle option `\txiarg'}% + \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\setupmarkupstyle{kbd}\look}}\fi +\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @clicksequence{File @click{} Open ...} +\def\clicksequence#1{\begingroup #1\endgroup} + +% @clickstyle @arrow (by default) +\parseargdef\clickstyle{\def\click{#1}} +\def\click{\arrow} + +% @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} + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% 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} + +% @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} + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + + +\message{glyphs,} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, they should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% Hacks for glyphs from the EC fonts similar to \euro. We don't +% use \let for the aliases, because sometimes we redefine the original +% macro, and the alias should reflect the redefinition. +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +% This positioning is not perfect (see the ogonek LaTeX package), but +% we have the precomposed glyphs for the most common cases. We put the +% tests to use those glyphs in the single \ogonek macro so we have fewer +% dummy definitions to worry about for index entries, etc. +% +% ogonek is also used with other letters in Lithuanian (IOU), but using +% the precomposed glyphs for those is not so easy since they aren't in +% the same EC font. +\def\ogonek#1{{% + \def\temp{#1}% + \ifx\temp\macrocharA\Aogonek + \else\ifx\temp\macrochara\aogonek + \else\ifx\temp\macrocharE\Eogonek + \else\ifx\temp\macrochare\eogonek + \else + \ecfont \setbox0=\hbox{#1}% + \ifdim\ht0=1ex\accent"0C #1% + \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% + \fi + \fi\fi\fi\fi + }% +} +\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} +\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} +\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} +\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} +% +\def\ecfont{% + % We can't distinguish serif/sans and italic/slanted, but this + % is used for crude hacks anyway (like adding French and German + % quotes to documents typeset with CM, where we lose kerning), so + % hopefully nobody will notice/care. + \edef\ecsize{\csname\curfontsize ecsize\endcsname}% + \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% + \ifx\curfontstyle\bfstylename + % bold: + \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize + \else + % regular: + \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \fi + \thisecfont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rmisbold #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\secfonts\rmisbold \leftline{#1}}% + \fi +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -12pt + \global\advance\vsize by -12pt +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + +% @evenheadingmarks top \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} + \headingmarks{odd}{heading}{#1} } +\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} + \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% + \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname + \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{% +\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{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + % + % Try typesetting the item mark that if the document erroneously says + % something like @itemize @samp (intending @table), there's an error + % right away at the @itemize. It's not the best error message in the + % world, but it's better than leaving it to the @item. This means if + % the user wants an empty mark, they have to say @w{} not just @w. + \def\itemcontents{#1}% + \setbox0 = \hbox{\itemcontents}% + % + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + % + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + % + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a . + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. \everycr resets \everytab so we don't have to +% undo it ourselves. +\def\headitemfont{\b}% for people to use in the template row; not changeable +\def\headitem{% + \checkenv\multitable + \crcr + \global\everytab={\bf}% can't use \headitemfont since the parsing differs + \the\everytab % for the first item +}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we again encounter the problem the 1sp was intended to solve. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % 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. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \obeylines + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1'. + \long\def\doignoretext##1^^M@end #1{% + \doignoretextyyy##1^^M@#1\_STOP_}% + % + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +{ \obeylines% + % Ignore anything after the last `@end #1'; this matters in verbatim + % environments, where otherwise the newline after an ignored conditional + % would result in a blank line in the output. + \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named 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 \relax + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all \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{% + \escapechar = `\\ % use backslash in output files. + \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 + % + % I don't entirely understand this, but when an index entry is + % generated from a macro call, the \endinput which \scanmacro inserts + % causes processing to be prematurely terminated. This is, + % apparently, because \indexsorttmp is fully expanded, and \endinput + % is an expandable command. The redefinition below makes \endinput + % disappear altogether for that purpose -- although logging shows that + % processing continues to some further point. On the other hand, it + % seems \endinput does not hurt in the printed index arg, since that + % is still getting written without apparent harm. + % + % Sample source (mac-idx3.tex, reported by Graham Percival to + % help-texinfo, 22may06): + % @macro funindex {WORD} + % @findex xyz + % @end macro + % ... + % @funindex commtest + % + % The above is not enough to reproduce the bug, but it gives the flavor. + % + % Sample whatsit resulting: + % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} + % + % So: + \let\endinput = \empty + % + % Do the redefinitions. + \commondummies +} + +% For the aux and toc files, @ is the escape character. So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files). When everything uses @, +% this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % Do the redefinitions. + \commondummies + \otherbackslash +} + +% Called from \indexdummies and \atdummies. +% +\def\commondummies{% + % + % \definedummyword defines \#1 as \string\#1\space, thus effectively + % preventing its expansion. This is used only for control% words, + % not control letters, because the \space would be incorrect for + % control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword ##1{\def##1{\string##1\space}}% + \def\definedummyletter##1{\def##1{\string##1}}% + \let\definedummyaccent\definedummyletter + % + \commondummiesnofonts + % + \definedummyletter\_% + % + % 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 + \definedummyword\exclamdown + \definedummyword\questiondown + \definedummyword\ordf + \definedummyword\ordm + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\guillemetleft + \definedummyword\guillemetright + \definedummyword\guilsinglleft + \definedummyword\guilsinglright + \definedummyword\expansion + \definedummyword\minus + \definedummyword\ogonek + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\quotedblbase + \definedummyword\quotedblleft + \definedummyword\quotedblright + \definedummyword\quoteleft + \definedummyword\quoteright + \definedummyword\quotesinglbase + \definedummyword\result + \definedummyword\textdegree + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + % + \normalturnoffactive + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +\def\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter\!% + \definedummyaccent\"% + \definedummyaccent\'% + \definedummyletter\*% + \definedummyaccent\,% + \definedummyletter\.% + \definedummyletter\/% + \definedummyletter\:% + \definedummyaccent\=% + \definedummyletter\?% + \definedummyaccent\^% + \definedummyaccent\`% + \definedummyaccent\~% + \definedummyword\u + \definedummyword\v + \definedummyword\H + \definedummyword\dotaccent + \definedummyword\ogonek + \definedummyword\ringaccent + \definedummyword\tieaccent + \definedummyword\ubaraccent + \definedummyword\udotaccent + \definedummyword\dotless + % + % Texinfo font commands. + \definedummyword\b + \definedummyword\i + \definedummyword\r + \definedummyword\sc + \definedummyword\t + % + % Commands that take arguments. + \definedummyword\acronym + \definedummyword\cite + \definedummyword\code + \definedummyword\command + \definedummyword\dfn + \definedummyword\emph + \definedummyword\env + \definedummyword\file + \definedummyword\kbd + \definedummyword\key + \definedummyword\math + \definedummyword\option + \definedummyword\pxref + \definedummyword\ref + \definedummyword\samp + \definedummyword\strong + \definedummyword\tie + \definedummyword\uref + \definedummyword\url + \definedummyword\var + \definedummyword\verb + \definedummyword\w + \definedummyword\xref +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\definedummyletter##1{\let##1\empty}% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + % how to handle braces? + \def\_{\normalunderscore}% + % + % 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{?}% + \def\ordf{a}% + \def\ordm{o}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\guillemetleft{<<}% + \def\guillemetright{>>}% + \def\guilsinglleft{<}% + \def\guilsinglright{>}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\quotedblbase{"}% + \def\quotedblleft{"}% + \def\quotedblright{"}% + \def\quoteleft{`}% + \def\quoteright{'}% + \def\quotesinglbase{,}% + \def\result{=>}% + \def\textdegree{degrees}% + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist +} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% 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 most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \safewhatsit\dosubindwrite + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % 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\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks/skips around a whatsit: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write or \pdfdest will make \lastskip zero. The result is that +% sequences like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +\newskip\whatsitskip +\newcount\whatsitpenalty +% +% ..., ready, GO: +% +\def\safewhatsit#1{% +\ifhmode + #1% +\else + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \whatsitskip = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \whatsitpenalty = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\whatsitskip glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\whatsitskip + \fi + % + #1% + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\whatsitskip + \fi +\fi +} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \plainfrenchspacing + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \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{\backslashcurfont}% + \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. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this freezes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \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 + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % 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. + \setbox\boxA = \hbox{#1}% + \ifdim\wd\boxA = 0pt + \ % + \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#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like plain.tex's \dotfill, except uses up at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu.\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{% + % The following penalty ensures that the page builder is exercised + % _before_ we change the output routine. This is necessary in the + % following situation: + % + % The last section of the index consists only of a single entry. + % Before this section, \pagetotal is less than \pagegoal, so no + % break occurs before the last section starts. However, the last + % section, consisting of \initial and the single \entry, does not + % fit on the page and has to be broken off. Without the following + % penalty the page builder will not be exercised until \eject + % below, and by that time we'll already have changed the output + % routine to the \balancecolumns version, so the next-to-last + % double-column page will be processed with \balancecolumns, which + % is wrong: The two columns will go to the main vertical list, with + % the broken-off section in the recent contributions. As soon as + % the output routine finishes, TeX starts reconsidering the page + % break. The two columns and the broken-off section both fit on the + % page, because the two columns now take up only half of the page + % goal. When TeX sees \eject from below which follows the final + % section, it invokes the new output routine that we've set after + % \balancecolumns below; \onepageout will try to fit the two columns + % and the final section into the vbox of \pageheight (see + % \pagebody), causing an overfull box. + % + % Note that glue won't work here, because glue does not exercise the + % page builder, unlike penalties (see The TeXbook, pp. 280-281). + \penalty0 + % + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% 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. + +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter. Page headings and footings can use +% these. @section does likewise. +\def\thischapter{} +\def\thischapternum{} +\def\thischaptername{} +\def\thissection{} +\def\thissectionnum{} +\def\thissectionname{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + \message{\putwordChapter\space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + \def\appendixnum{\putwordAppendix\space \appendixletter}% + \message{\appendixnum}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the to achieve this: TeX expands \the only once, + % simply yielding the contents of . (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% 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{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\ptexraggedright + \rmisbold #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +%%% 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} +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong. But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% + \chappager + \ifodd\pageno \else + \begingroup + \evenheadline={\hfil}\evenfootline={\hfil}% + \oddheadline={\hfil}\oddfootline={\hfil}% + \hbox to 0pt{}% + \chappager + \endgroup + \fi +} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + % Insert the first mark before the heading break (see notes for \domark). + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \gdef\thissection{}}% + % + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{\thischaptername}}% + \else\ifx\temptype\Yomitfromtockeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{}}% + \else\ifx\temptype\Yappendixkeyword + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\appendixletter}% + \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \else + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\the\chapno}% + \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert the chapter heading break. + \pchapsepmacro + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \domark + % + {% + \chapfonts \rmisbold + % + % Have to define \lastsection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\lastsection{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \nobreak % Avoid page breaks at the interline glue. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright + \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\ptexraggedright + \rmisbold #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 {\rmisbold #1}\hfill}}\bigskip \par\nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\seckeyword{sec} +% +\def\sectionheading#1#2#3#4{% + {% + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rmisbold + % + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + % Insert first mark before the heading break (see notes for \domark). + \let\prevsectiondefs=\lastsectiondefs + \ifx\temptype\Ynothingkeyword + \ifx\sectionlevel\seckeyword + \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\thissection{\thissectionname}}% + \fi + \else\ifx\temptype\Yomitfromtockeyword + % Don't redefine \thissection. + \else\ifx\temptype\Yappendixkeyword + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \else + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \fi\fi\fi + % + % Go into vertical mode. Usually we'll already be there, but we + % don't want the following whatsit to end up in a preceding paragraph + % if the document didn't happen to have a blank line. + \par + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevsectiondefs=\lastsectiondefs + \domark + % + % Only insert the space after the number if we have a section number. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\lastsection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \lastsection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\lastsection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\lastsection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chapmacro. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chapmacro. + \donoderef{#3}% + % + % Interline glue will be inserted when the vbox is completed. + % That glue will be a valid breakpoint for the page, since it'll be + % preceded by a whatsit (usually from the \donoderef, or from the + % \writetocentry if there was no node). We don't want to allow that + % break, since then the whatsits could end up on page n while the + % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. + \nobreak + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + }% + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \tocreadfilename +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + +% redefined for the two-volume lispref. We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc} + +% Normal (long) toc. +% +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\envdef\tex{% + \setupmarkupstyle{tex}% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \catcode`\`=\other + \catcode`\'=\other + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + \expandafter \let\csname top\endcsname=\ptextop % outer + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing = t% + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\newdimen\nonfillparindent +\def\nonfillstart{% + \aboveenvbreak + \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 + % Turn off paragraph indentation but redefine \indent to emulate + % the normal \indent. + \nonfillparindent=\parindent + \parindent = 0pt + \let\indent\nonfillindent + % + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +\begingroup +\obeyspaces +% We want to swallow spaces (but not other tokens) after the fake +% @indent in our nonfill-environments, where spaces are normally +% active and set to @tie, resulting in them not being ignored after +% @indent. +\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% +\gdef\nonfillindentcheck{% +\ifx\temp % +\expandafter\nonfillindentgobble% +\else% +\leavevmode\nonfillindentbox% +\fi% +}% +\endgroup +\def\nonfillindentgobble#1{\nonfillindent} +\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + % end paragraph for sake of leading, in case document has no blank + % line. This is redundant with what happens in \aboveenvbreak, but + % we need to do it before changing the fonts, and it's inconvenient + % to change the fonts afterward. + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt\setupmarkupstyle{example}% + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @raggedright does more-or-less normal line breaking but no right +% justification. From plain.tex. +\envdef\raggedright{% + \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax +} +\let\Eraggedright\par + +\envdef\raggedleft{% + \parindent=0pt \leftskip0pt plus2em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedleft\par + +\envdef\raggedcenter{% + \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedcenter\par + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\def\quotationstart{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \parsearg\quotationlabel +} + +\envdef\quotation{% + \setnormaldispenv + \quotationstart +} + +\envdef\smallquotation{% + \setsmalldispenv + \quotationstart +} +\let\Esmallquotation = \Equotation + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + + +% LaTeX-like @verbatim...@end verbatim and @verb{...} +% If we want to allow any as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% + % Don't do the quotes -- if we do, @set txicodequoteundirected and + % @set txicodequotebacktick will not have effect on @verb and + % @verbatim, and ?` and !` ligatures won't get disabled. + %\do\`\do\'% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \setupmarkupstyle{verb}% + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\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 + +% start the verbatim environment. +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + % Easiest (and conventionally used) font for verbatim + \tt + \def\par{\leavevmode\egroup\box0\endgraf}% + \tabexpand + \setupmarkupstyle{verbatim}% + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'#1'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \indexnofonts % Allow `@@' and other weird things in file names. + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \defunpenalty=10003 % Will keep this @deffn together with the + % following @def command, see below. + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \printdefunline, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + % As a minor refinement, we avoid "club" headers by signalling + % with penalty of 10003 after the very first @deffn in the + % sequence (see above), and penalty of 10002 after any following + % @def command. + \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty\defunpenalty % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remaining is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format 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. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers). +\def\badparencount{% + \message{Warning: unbalanced parentheses in @def...}% + \global\parencount=0 +} +\def\badbrackcount{% + \message{Warning: unbalanced square brackets in @def...}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\definedummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion. Must do this non-globally, to +% confine the change to the current group. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other + \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% + \scanctxt + \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% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\definedummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\definedummyword \noexpand#1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% 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\macnamexxx=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \macnamexxx} + + +% @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{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \lastsection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\lastsection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout + }% + \fi +} + +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref#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\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% + \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\printedrefname{\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\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + {\indexnofonts + \turnoffactive + % This expands tokens, so do it after making catcode changes, so _ + % etc. don't get their TeX definitions. + \getfilename{#4}% + % + % See comments at \activebackslashdouble. + {\activebackslashdouble \xdef\pdfxrefdest{#1}% + \backslashparens\pdfxrefdest}% + % + \leavevmode + \startlink attr{/Border [0 0 0]}% + \ifnum\filenamelength>0 + goto file{\the\filename.pdf} name{\pdfxrefdest}% + \else + goto name{\pdfmkpgn{\pdfxrefdest}}% + \fi + }% + \setcolor{\linkcolor}% + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}{}% + \else + \printedrefname + \fi + % + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % 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. + \ifdim \wd1 > 0pt + \putwordSection{} ``\printedrefname'' \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 + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi + \fi + \endlink +\endgroup} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. +% +\def\refx#1#2{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \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. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + {% The node name might contain 8-bit characters, which in our current + % implementation are changed to commands like @'e. Don't let these + % mess up the control sequence name. + \indexnofonts + \turnoffactive + \xdef\safexrefname{#1}% + }% + % + \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR\safexrefname\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 + {\safexrefname}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count1=128 + \def\loop{% + \catcode\count1=\other + \advance\count1 by 1 + \ifnum \count1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % 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 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarly, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\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\medskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \fi + % + % Leave vertical mode so that indentation from an enclosing + % environment such as @quotation is respected. On the other hand, if + % it's at the top level, we don't want the normal paragraph indentation. + \noindent + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode \medskip \fi % space after the standalone image +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \lastsection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\lastsection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies + % + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start floating, we have to issue warning + % whenever an insert appears inside a float which could possibly + % float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \lastsection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + + +\message{localization,} + +% For single-language documents, @documentlanguage is usually given very +% early, just after @documentencoding. Single argument is the language +% (de) or locale (de_DE) abbreviation. +% +{ + \catcode`\_ = \active + \globaldefs=1 +\parseargdef\documentlanguage{\begingroup + \let_=\normalunderscore % normal _ character for filenames + \tex % read txi-??.tex file in plain TeX. + % Read the file by the name they passed if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \documentlanguagetrywithoutunderscore{#1_\finish}% + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 + \endgroup % end raw TeX +\endgroup} +} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\def\documentlanguagetrywithoutunderscore#1_#2\finish{% + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \input txi-#1.tex + \fi + \closein 1 +} +% +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? Putting it in the current +directory should work if nowhere else does.} + +% This macro is called from txi-??.tex files; the first argument is the +% \language name to set (without the "\lang@" prefix), the second and +% third args are \{left,right}hyphenmin. +% +% The language names to pass are determined when the format is built. +% See the etex.log file created at that time, e.g., +% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. +% +% With TeX Live 2008, etex now includes hyphenation patterns for all +% available languages. This means we can support hyphenation in +% Texinfo, at least to some extent. (This still doesn't solve the +% accented characters problem.) +% +\catcode`@=11 +\def\txisetlanguage#1#2#3{% + % do not set the language if the name is undefined in the current TeX. + \expandafter\ifx\csname lang@#1\endcsname \relax + \message{no patterns for #1}% + \else + \global\language = \csname lang@#1\endcsname + \fi + % but there is no harm in adjusting the hyphenmin values regardless. + \global\lefthyphenmin = #2\relax + \global\righthyphenmin = #3\relax +} + +% Helpers for encodings. +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% + \count255=128 + \loop\ifnum\count255<256 + \global\catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +\def\setnonasciicharscatcodenonglobal#1{% + \count255=128 + \loop\ifnum\count255<256 + \catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding. +% +\parseargdef\documentencoding{% + % Encoding being declared for the document. + \def\declaredencoding{\csname #1.enc\endcsname}% + % + % Supported encodings: names converted to tokens in order to be able + % to compare them with \ifx. + \def\ascii{\csname US-ASCII.enc\endcsname}% + \def\latnine{\csname ISO-8859-15.enc\endcsname}% + \def\latone{\csname ISO-8859-1.enc\endcsname}% + \def\lattwo{\csname ISO-8859-2.enc\endcsname}% + \def\utfeight{\csname UTF-8.enc\endcsname}% + % + \ifx \declaredencoding \ascii + \asciichardefs + % + \else \ifx \declaredencoding \lattwo + \setnonasciicharscatcode\active + \lattwochardefs + % + \else \ifx \declaredencoding \latone + \setnonasciicharscatcode\active + \latonechardefs + % + \else \ifx \declaredencoding \latnine + \setnonasciicharscatcode\active + \latninechardefs + % + \else \ifx \declaredencoding \utfeight + \setnonasciicharscatcode\active + \utfeightchardefs + % + \else + \message{Unknown document encoding #1, ignoring.}% + % + \fi % utfeight + \fi % latnine + \fi % latone + \fi % lattwo + \fi % ascii +} + +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% + \gdef^^a0{~} + \gdef^^a1{\exclamdown} + \gdef^^a2{\missingcharmsg{CENT SIGN}} + \gdef^^a3{{\pounds}} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\missingcharmsg{YEN SIGN}} + \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\copyright} + \gdef^^aa{\ordf} + \gdef^^ab{\guillemetleft} + \gdef^^ac{$\lnot$} + \gdef^^ad{\-} + \gdef^^ae{\registeredsymbol} + \gdef^^af{\={}} + % + \gdef^^b0{\textdegree} + \gdef^^b1{$\pm$} + \gdef^^b2{$^2$} + \gdef^^b3{$^3$} + \gdef^^b4{\'{}} + \gdef^^b5{$\mu$} + \gdef^^b6{\P} + % + \gdef^^b7{$^.$} + \gdef^^b8{\cedilla\ } + \gdef^^b9{$^1$} + \gdef^^ba{\ordm} + % + \gdef^^bb{\guilletright} + \gdef^^bc{$1\over4$} + \gdef^^bd{$1\over2$} + \gdef^^be{$3\over4$} + \gdef^^bf{\questiondown} + % + \gdef^^c0{\`A} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\~A} + \gdef^^c4{\"A} + \gdef^^c5{\ringaccent A} + \gdef^^c6{\AE} + \gdef^^c7{\cedilla C} + \gdef^^c8{\`E} + \gdef^^c9{\'E} + \gdef^^ca{\^E} + \gdef^^cb{\"E} + \gdef^^cc{\`I} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\"I} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}} + \gdef^^d1{\~N} + \gdef^^d2{\`O} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\~O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\O} + \gdef^^d9{\`U} + \gdef^^da{\'U} + \gdef^^db{\^U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}} + \gdef^^df{\ss} + % + \gdef^^e0{\`a} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\~a} + \gdef^^e4{\"a} + \gdef^^e5{\ringaccent a} + \gdef^^e6{\ae} + \gdef^^e7{\cedilla c} + \gdef^^e8{\`e} + \gdef^^e9{\'e} + \gdef^^ea{\^e} + \gdef^^eb{\"e} + \gdef^^ec{\`{\dotless i}} + \gdef^^ed{\'{\dotless i}} + \gdef^^ee{\^{\dotless i}} + \gdef^^ef{\"{\dotless i}} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}} + \gdef^^f1{\~n} + \gdef^^f2{\`o} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\~o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\o} + \gdef^^f9{\`u} + \gdef^^fa{\'u} + \gdef^^fb{\^u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}} + \gdef^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% + % Encoding is almost identical to Latin1. + \latonechardefs + % + \gdef^^a4{\euro} + \gdef^^a6{\v S} + \gdef^^a8{\v s} + \gdef^^b4{\v Z} + \gdef^^b8{\v z} + \gdef^^bc{\OE} + \gdef^^bd{\oe} + \gdef^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% + \gdef^^a0{~} + \gdef^^a1{\ogonek{A}} + \gdef^^a2{\u{}} + \gdef^^a3{\L} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\v L} + \gdef^^a6{\'S} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\v S} + \gdef^^aa{\cedilla S} + \gdef^^ab{\v T} + \gdef^^ac{\'Z} + \gdef^^ad{\-} + \gdef^^ae{\v Z} + \gdef^^af{\dotaccent Z} + % + \gdef^^b0{\textdegree} + \gdef^^b1{\ogonek{a}} + \gdef^^b2{\ogonek{ }} + \gdef^^b3{\l} + \gdef^^b4{\'{}} + \gdef^^b5{\v l} + \gdef^^b6{\'s} + \gdef^^b7{\v{}} + \gdef^^b8{\cedilla\ } + \gdef^^b9{\v s} + \gdef^^ba{\cedilla s} + \gdef^^bb{\v t} + \gdef^^bc{\'z} + \gdef^^bd{\H{}} + \gdef^^be{\v z} + \gdef^^bf{\dotaccent z} + % + \gdef^^c0{\'R} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\u A} + \gdef^^c4{\"A} + \gdef^^c5{\'L} + \gdef^^c6{\'C} + \gdef^^c7{\cedilla C} + \gdef^^c8{\v C} + \gdef^^c9{\'E} + \gdef^^ca{\ogonek{E}} + \gdef^^cb{\"E} + \gdef^^cc{\v E} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\v D} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}} + \gdef^^d1{\'N} + \gdef^^d2{\v N} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\H O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\v R} + \gdef^^d9{\ringaccent U} + \gdef^^da{\'U} + \gdef^^db{\H U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\cedilla T} + \gdef^^df{\ss} + % + \gdef^^e0{\'r} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\u a} + \gdef^^e4{\"a} + \gdef^^e5{\'l} + \gdef^^e6{\'c} + \gdef^^e7{\cedilla c} + \gdef^^e8{\v c} + \gdef^^e9{\'e} + \gdef^^ea{\ogonek{e}} + \gdef^^eb{\"e} + \gdef^^ec{\v e} + \gdef^^ed{\'\i} + \gdef^^ee{\^\i} + \gdef^^ef{\v d} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}} + \gdef^^f1{\'n} + \gdef^^f2{\v n} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\H o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\v r} + \gdef^^f9{\ringaccent u} + \gdef^^fa{\'u} + \gdef^^fb{\H u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\cedilla t} + \gdef^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions. It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% + \ifx #1\relax + \message{\linenumber Unicode char \string #1 not defined for Texinfo}% + \else + \expandafter #1% + \fi +} + +\begingroup + \catcode`\~13 + \catcode`\"12 + + \def\UTFviiiLoop{% + \global\catcode\countUTFx\active + \uccode`\~\countUTFx + \uppercase\expandafter{\UTFviiiTmp}% + \advance\countUTFx by 1 + \ifnum\countUTFx < \countUTFy + \expandafter\UTFviiiLoop + \fi} + + \countUTFx = "C2 + \countUTFy = "E0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiTwoOctets\string~}} + \UTFviiiLoop + + \countUTFx = "E0 + \countUTFy = "F0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiThreeOctets\string~}} + \UTFviiiLoop + + \countUTFx = "F0 + \countUTFy = "F4 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiFourOctets\string~}} + \UTFviiiLoop +\endgroup + +\begingroup + \catcode`\"=12 + \catcode`\<=12 + \catcode`\.=12 + \catcode`\,=12 + \catcode`\;=12 + \catcode`\!=12 + \catcode`\~=13 + + \gdef\DeclareUnicodeCharacter#1#2{% + \countUTFz = "#1\relax + \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% + \begingroup + \parseXMLCharref + \def\UTFviiiTwoOctets##1##2{% + \csname u8:##1\string ##2\endcsname}% + \def\UTFviiiThreeOctets##1##2##3{% + \csname u8:##1\string ##2\string ##3\endcsname}% + \def\UTFviiiFourOctets##1##2##3##4{% + \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \gdef\UTFviiiTmp{#2}% + \endgroup} + + \gdef\parseXMLCharref{% + \ifnum\countUTFz < "A0\relax + \errhelp = \EMsimple + \errmessage{Cannot define Unicode char value < 00A0}% + \else\ifnum\countUTFz < "800\relax + \parseUTFviiiA,% + \parseUTFviiiB C\UTFviiiTwoOctets.,% + \else\ifnum\countUTFz < "10000\relax + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% + \else + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiA!% + \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% + \fi\fi\fi + } + + \gdef\parseUTFviiiA#1{% + \countUTFx = \countUTFz + \divide\countUTFz by 64 + \countUTFy = \countUTFz + \multiply\countUTFz by 64 + \advance\countUTFx by -\countUTFz + \advance\countUTFx by 128 + \uccode `#1\countUTFx + \countUTFz = \countUTFy} + + \gdef\parseUTFviiiB#1#2#3#4{% + \advance\countUTFz by "#10\relax + \uccode `#3\countUTFz + \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +\def\utfeightchardefs{% + \DeclareUnicodeCharacter{00A0}{\tie} + \DeclareUnicodeCharacter{00A1}{\exclamdown} + \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A8}{\"{ }} + \DeclareUnicodeCharacter{00A9}{\copyright} + \DeclareUnicodeCharacter{00AA}{\ordf} + \DeclareUnicodeCharacter{00AB}{\guillemetleft} + \DeclareUnicodeCharacter{00AD}{\-} + \DeclareUnicodeCharacter{00AE}{\registeredsymbol} + \DeclareUnicodeCharacter{00AF}{\={ }} + + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} + \DeclareUnicodeCharacter{00B4}{\'{ }} + \DeclareUnicodeCharacter{00B8}{\cedilla{ }} + \DeclareUnicodeCharacter{00BA}{\ordm} + \DeclareUnicodeCharacter{00BB}{\guillemetright} + \DeclareUnicodeCharacter{00BF}{\questiondown} + + \DeclareUnicodeCharacter{00C0}{\`A} + \DeclareUnicodeCharacter{00C1}{\'A} + \DeclareUnicodeCharacter{00C2}{\^A} + \DeclareUnicodeCharacter{00C3}{\~A} + \DeclareUnicodeCharacter{00C4}{\"A} + \DeclareUnicodeCharacter{00C5}{\AA} + \DeclareUnicodeCharacter{00C6}{\AE} + \DeclareUnicodeCharacter{00C7}{\cedilla{C}} + \DeclareUnicodeCharacter{00C8}{\`E} + \DeclareUnicodeCharacter{00C9}{\'E} + \DeclareUnicodeCharacter{00CA}{\^E} + \DeclareUnicodeCharacter{00CB}{\"E} + \DeclareUnicodeCharacter{00CC}{\`I} + \DeclareUnicodeCharacter{00CD}{\'I} + \DeclareUnicodeCharacter{00CE}{\^I} + \DeclareUnicodeCharacter{00CF}{\"I} + + \DeclareUnicodeCharacter{00D1}{\~N} + \DeclareUnicodeCharacter{00D2}{\`O} + \DeclareUnicodeCharacter{00D3}{\'O} + \DeclareUnicodeCharacter{00D4}{\^O} + \DeclareUnicodeCharacter{00D5}{\~O} + \DeclareUnicodeCharacter{00D6}{\"O} + \DeclareUnicodeCharacter{00D8}{\O} + \DeclareUnicodeCharacter{00D9}{\`U} + \DeclareUnicodeCharacter{00DA}{\'U} + \DeclareUnicodeCharacter{00DB}{\^U} + \DeclareUnicodeCharacter{00DC}{\"U} + \DeclareUnicodeCharacter{00DD}{\'Y} + \DeclareUnicodeCharacter{00DF}{\ss} + + \DeclareUnicodeCharacter{00E0}{\`a} + \DeclareUnicodeCharacter{00E1}{\'a} + \DeclareUnicodeCharacter{00E2}{\^a} + \DeclareUnicodeCharacter{00E3}{\~a} + \DeclareUnicodeCharacter{00E4}{\"a} + \DeclareUnicodeCharacter{00E5}{\aa} + \DeclareUnicodeCharacter{00E6}{\ae} + \DeclareUnicodeCharacter{00E7}{\cedilla{c}} + \DeclareUnicodeCharacter{00E8}{\`e} + \DeclareUnicodeCharacter{00E9}{\'e} + \DeclareUnicodeCharacter{00EA}{\^e} + \DeclareUnicodeCharacter{00EB}{\"e} + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + + \DeclareUnicodeCharacter{00F1}{\~n} + \DeclareUnicodeCharacter{00F2}{\`o} + \DeclareUnicodeCharacter{00F3}{\'o} + \DeclareUnicodeCharacter{00F4}{\^o} + \DeclareUnicodeCharacter{00F5}{\~o} + \DeclareUnicodeCharacter{00F6}{\"o} + \DeclareUnicodeCharacter{00F8}{\o} + \DeclareUnicodeCharacter{00F9}{\`u} + \DeclareUnicodeCharacter{00FA}{\'u} + \DeclareUnicodeCharacter{00FB}{\^u} + \DeclareUnicodeCharacter{00FC}{\"u} + \DeclareUnicodeCharacter{00FD}{\'y} + \DeclareUnicodeCharacter{00FF}{\"y} + + \DeclareUnicodeCharacter{0100}{\=A} + \DeclareUnicodeCharacter{0101}{\=a} + \DeclareUnicodeCharacter{0102}{\u{A}} + \DeclareUnicodeCharacter{0103}{\u{a}} + \DeclareUnicodeCharacter{0104}{\ogonek{A}} + \DeclareUnicodeCharacter{0105}{\ogonek{a}} + \DeclareUnicodeCharacter{0106}{\'C} + \DeclareUnicodeCharacter{0107}{\'c} + \DeclareUnicodeCharacter{0108}{\^C} + \DeclareUnicodeCharacter{0109}{\^c} + \DeclareUnicodeCharacter{0118}{\ogonek{E}} + \DeclareUnicodeCharacter{0119}{\ogonek{e}} + \DeclareUnicodeCharacter{010A}{\dotaccent{C}} + \DeclareUnicodeCharacter{010B}{\dotaccent{c}} + \DeclareUnicodeCharacter{010C}{\v{C}} + \DeclareUnicodeCharacter{010D}{\v{c}} + \DeclareUnicodeCharacter{010E}{\v{D}} + + \DeclareUnicodeCharacter{0112}{\=E} + \DeclareUnicodeCharacter{0113}{\=e} + \DeclareUnicodeCharacter{0114}{\u{E}} + \DeclareUnicodeCharacter{0115}{\u{e}} + \DeclareUnicodeCharacter{0116}{\dotaccent{E}} + \DeclareUnicodeCharacter{0117}{\dotaccent{e}} + \DeclareUnicodeCharacter{011A}{\v{E}} + \DeclareUnicodeCharacter{011B}{\v{e}} + \DeclareUnicodeCharacter{011C}{\^G} + \DeclareUnicodeCharacter{011D}{\^g} + \DeclareUnicodeCharacter{011E}{\u{G}} + \DeclareUnicodeCharacter{011F}{\u{g}} + + \DeclareUnicodeCharacter{0120}{\dotaccent{G}} + \DeclareUnicodeCharacter{0121}{\dotaccent{g}} + \DeclareUnicodeCharacter{0124}{\^H} + \DeclareUnicodeCharacter{0125}{\^h} + \DeclareUnicodeCharacter{0128}{\~I} + \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} + \DeclareUnicodeCharacter{012A}{\=I} + \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} + \DeclareUnicodeCharacter{012C}{\u{I}} + \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + + \DeclareUnicodeCharacter{0130}{\dotaccent{I}} + \DeclareUnicodeCharacter{0131}{\dotless{i}} + \DeclareUnicodeCharacter{0132}{IJ} + \DeclareUnicodeCharacter{0133}{ij} + \DeclareUnicodeCharacter{0134}{\^J} + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} + \DeclareUnicodeCharacter{0139}{\'L} + \DeclareUnicodeCharacter{013A}{\'l} + + \DeclareUnicodeCharacter{0141}{\L} + \DeclareUnicodeCharacter{0142}{\l} + \DeclareUnicodeCharacter{0143}{\'N} + \DeclareUnicodeCharacter{0144}{\'n} + \DeclareUnicodeCharacter{0147}{\v{N}} + \DeclareUnicodeCharacter{0148}{\v{n}} + \DeclareUnicodeCharacter{014C}{\=O} + \DeclareUnicodeCharacter{014D}{\=o} + \DeclareUnicodeCharacter{014E}{\u{O}} + \DeclareUnicodeCharacter{014F}{\u{o}} + + \DeclareUnicodeCharacter{0150}{\H{O}} + \DeclareUnicodeCharacter{0151}{\H{o}} + \DeclareUnicodeCharacter{0152}{\OE} + \DeclareUnicodeCharacter{0153}{\oe} + \DeclareUnicodeCharacter{0154}{\'R} + \DeclareUnicodeCharacter{0155}{\'r} + \DeclareUnicodeCharacter{0158}{\v{R}} + \DeclareUnicodeCharacter{0159}{\v{r}} + \DeclareUnicodeCharacter{015A}{\'S} + \DeclareUnicodeCharacter{015B}{\'s} + \DeclareUnicodeCharacter{015C}{\^S} + \DeclareUnicodeCharacter{015D}{\^s} + \DeclareUnicodeCharacter{015E}{\cedilla{S}} + \DeclareUnicodeCharacter{015F}{\cedilla{s}} + + \DeclareUnicodeCharacter{0160}{\v{S}} + \DeclareUnicodeCharacter{0161}{\v{s}} + \DeclareUnicodeCharacter{0162}{\cedilla{t}} + \DeclareUnicodeCharacter{0163}{\cedilla{T}} + \DeclareUnicodeCharacter{0164}{\v{T}} + + \DeclareUnicodeCharacter{0168}{\~U} + \DeclareUnicodeCharacter{0169}{\~u} + \DeclareUnicodeCharacter{016A}{\=U} + \DeclareUnicodeCharacter{016B}{\=u} + \DeclareUnicodeCharacter{016C}{\u{U}} + \DeclareUnicodeCharacter{016D}{\u{u}} + \DeclareUnicodeCharacter{016E}{\ringaccent{U}} + \DeclareUnicodeCharacter{016F}{\ringaccent{u}} + + \DeclareUnicodeCharacter{0170}{\H{U}} + \DeclareUnicodeCharacter{0171}{\H{u}} + \DeclareUnicodeCharacter{0174}{\^W} + \DeclareUnicodeCharacter{0175}{\^w} + \DeclareUnicodeCharacter{0176}{\^Y} + \DeclareUnicodeCharacter{0177}{\^y} + \DeclareUnicodeCharacter{0178}{\"Y} + \DeclareUnicodeCharacter{0179}{\'Z} + \DeclareUnicodeCharacter{017A}{\'z} + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} + \DeclareUnicodeCharacter{017C}{\dotaccent{z}} + \DeclareUnicodeCharacter{017D}{\v{Z}} + \DeclareUnicodeCharacter{017E}{\v{z}} + + \DeclareUnicodeCharacter{01C4}{D\v{Z}} + \DeclareUnicodeCharacter{01C5}{D\v{z}} + \DeclareUnicodeCharacter{01C6}{d\v{z}} + \DeclareUnicodeCharacter{01C7}{LJ} + \DeclareUnicodeCharacter{01C8}{Lj} + \DeclareUnicodeCharacter{01C9}{lj} + \DeclareUnicodeCharacter{01CA}{NJ} + \DeclareUnicodeCharacter{01CB}{Nj} + \DeclareUnicodeCharacter{01CC}{nj} + \DeclareUnicodeCharacter{01CD}{\v{A}} + \DeclareUnicodeCharacter{01CE}{\v{a}} + \DeclareUnicodeCharacter{01CF}{\v{I}} + + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} + \DeclareUnicodeCharacter{01D1}{\v{O}} + \DeclareUnicodeCharacter{01D2}{\v{o}} + \DeclareUnicodeCharacter{01D3}{\v{U}} + \DeclareUnicodeCharacter{01D4}{\v{u}} + + \DeclareUnicodeCharacter{01E2}{\={\AE}} + \DeclareUnicodeCharacter{01E3}{\={\ae}} + \DeclareUnicodeCharacter{01E6}{\v{G}} + \DeclareUnicodeCharacter{01E7}{\v{g}} + \DeclareUnicodeCharacter{01E8}{\v{K}} + \DeclareUnicodeCharacter{01E9}{\v{k}} + + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} + \DeclareUnicodeCharacter{01F1}{DZ} + \DeclareUnicodeCharacter{01F2}{Dz} + \DeclareUnicodeCharacter{01F3}{dz} + \DeclareUnicodeCharacter{01F4}{\'G} + \DeclareUnicodeCharacter{01F5}{\'g} + \DeclareUnicodeCharacter{01F8}{\`N} + \DeclareUnicodeCharacter{01F9}{\`n} + \DeclareUnicodeCharacter{01FC}{\'{\AE}} + \DeclareUnicodeCharacter{01FD}{\'{\ae}} + \DeclareUnicodeCharacter{01FE}{\'{\O}} + \DeclareUnicodeCharacter{01FF}{\'{\o}} + + \DeclareUnicodeCharacter{021E}{\v{H}} + \DeclareUnicodeCharacter{021F}{\v{h}} + + \DeclareUnicodeCharacter{0226}{\dotaccent{A}} + \DeclareUnicodeCharacter{0227}{\dotaccent{a}} + \DeclareUnicodeCharacter{0228}{\cedilla{E}} + \DeclareUnicodeCharacter{0229}{\cedilla{e}} + \DeclareUnicodeCharacter{022E}{\dotaccent{O}} + \DeclareUnicodeCharacter{022F}{\dotaccent{o}} + + \DeclareUnicodeCharacter{0232}{\=Y} + \DeclareUnicodeCharacter{0233}{\=y} + \DeclareUnicodeCharacter{0237}{\dotless{j}} + + \DeclareUnicodeCharacter{02DB}{\ogonek{ }} + + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} + + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} + + \DeclareUnicodeCharacter{1E20}{\=G} + \DeclareUnicodeCharacter{1E21}{\=g} + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} + \DeclareUnicodeCharacter{1E26}{\"H} + \DeclareUnicodeCharacter{1E27}{\"h} + + \DeclareUnicodeCharacter{1E30}{\'K} + \DeclareUnicodeCharacter{1E31}{\'k} + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} + \DeclareUnicodeCharacter{1E3E}{\'M} + \DeclareUnicodeCharacter{1E3F}{\'m} + + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} + + \DeclareUnicodeCharacter{1E54}{\'P} + \DeclareUnicodeCharacter{1E55}{\'p} + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} + + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} + + \DeclareUnicodeCharacter{1E7C}{\~V} + \DeclareUnicodeCharacter{1E7D}{\~v} + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} + + \DeclareUnicodeCharacter{1E80}{\`W} + \DeclareUnicodeCharacter{1E81}{\`w} + \DeclareUnicodeCharacter{1E82}{\'W} + \DeclareUnicodeCharacter{1E83}{\'w} + \DeclareUnicodeCharacter{1E84}{\"W} + \DeclareUnicodeCharacter{1E85}{\"w} + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} + \DeclareUnicodeCharacter{1E8C}{\"X} + \DeclareUnicodeCharacter{1E8D}{\"x} + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} + + \DeclareUnicodeCharacter{1E90}{\^Z} + \DeclareUnicodeCharacter{1E91}{\^z} + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} + \DeclareUnicodeCharacter{1E97}{\"t} + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} + + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} + + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} + \DeclareUnicodeCharacter{1EBC}{\~E} + \DeclareUnicodeCharacter{1EBD}{\~e} + + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} + + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} + + \DeclareUnicodeCharacter{1EF2}{\`Y} + \DeclareUnicodeCharacter{1EF3}{\`y} + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} + + \DeclareUnicodeCharacter{1EF8}{\~Y} + \DeclareUnicodeCharacter{1EF9}{\~y} + + \DeclareUnicodeCharacter{2013}{--} + \DeclareUnicodeCharacter{2014}{---} + \DeclareUnicodeCharacter{2018}{\quoteleft} + \DeclareUnicodeCharacter{2019}{\quoteright} + \DeclareUnicodeCharacter{201A}{\quotesinglbase} + \DeclareUnicodeCharacter{201C}{\quotedblleft} + \DeclareUnicodeCharacter{201D}{\quotedblright} + \DeclareUnicodeCharacter{201E}{\quotedblbase} + \DeclareUnicodeCharacter{2022}{\bullet} + \DeclareUnicodeCharacter{2026}{\dots} + \DeclareUnicodeCharacter{2039}{\guilsinglleft} + \DeclareUnicodeCharacter{203A}{\guilsinglright} + \DeclareUnicodeCharacter{20AC}{\euro} + + \DeclareUnicodeCharacter{2192}{\expansion} + \DeclareUnicodeCharacter{21D2}{\result} + + \DeclareUnicodeCharacter{2212}{\minus} + \DeclareUnicodeCharacter{2217}{\point} + \DeclareUnicodeCharacter{2261}{\equiv} +}% end of \utfeightchardefs + + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done + \relax +} + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} + +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % if we don't reset these, they will remain at "1 true in" of + % whatever layout pdftex was dumped with. + \pdfhorigin = 1 true in + \pdfvorigin = 1 true in + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{607.2pt}{6in}% that's 46 lines + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {-.2in}{0in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{673.2pt}{160mm}% that's 51 lines + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1\relax + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% DEL is a comment character, in case @c does not suffice. +\catcode`\^^? = 14 + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\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 \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\let\realunder=_ +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% 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} + +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% + \normalturnoffactive + \otherbackslash +} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active +@def@normalbackslash{{@tt@backslashcurfont}} +% On startup, @fixbackslash assigns: +% @let \ = @normalbackslash + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. +% +@def@normalturnoffactive{% + @let\=@normalbackslash + @let"=@normaldoublequote + @let~=@normaltilde + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let<=@normalless + @let>=@normalgreater + @let+=@normalplus + @let$=@normaldollar %$ font-lock fix + @markupsetuplqdefault + @markupsetuprqdefault + @unsepspaces +} + +% 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 turn back 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 Finally, make ` and ' active, so that txicodequoteundirected and +@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we +@c don't make ` and ' active, @code will not get them as active chars. +@c Do this last of all since we use ` in the previous @catcode assignments. +@catcode`@'=@active +@catcode`@`=@active +@markupsetuplqdefault +@markupsetuprqdefault + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore diff --git a/doc/version.texi b/doc/version.texi new file mode 100644 index 0000000..80a2209 --- /dev/null +++ b/doc/version.texi @@ -0,0 +1,10 @@ +@ignore +Copyright (C) 1988-2009 Free Software Foundation, Inc. +@end ignore + +@set LASTCHANGE Wed Dec 23 16:29:41 EST 2009 + +@set EDITION 4.1 +@set VERSION 4.1 +@set UPDATED 23 December 2009 +@set UPDATED-MONTH December 2009 -- cgit v1.1