summaryrefslogtreecommitdiff
path: root/static/v10/man1/ksh.1
diff options
context:
space:
mode:
Diffstat (limited to 'static/v10/man1/ksh.1')
-rw-r--r--static/v10/man1/ksh.13787
1 files changed, 3787 insertions, 0 deletions
diff --git a/static/v10/man1/ksh.1 b/static/v10/man1/ksh.1
new file mode 100644
index 00000000..3ed7ef3b
--- /dev/null
+++ b/static/v10/man1/ksh.1
@@ -0,0 +1,3787 @@
+.ds OK [\|
+.ds CK \|]
+.ds ' \s+4\v@.3m@\'\v@-.3m@\s-4
+.ds ` \s+4\v@.3m@\`\v@-.3m@\s-4
+.de P
+.br
+..
+.TH KSH 1
+.SH NAME
+ksh \- Korn shell, the not standard command programming language
+.SH SYNOPSIS
+.B ksh
+[
+.B \-acefhikmnorstuvx
+] [
+.B \-o
+option ] .\|.\|.
+[ arg .\|.\|. ]
+.br
+.SH DESCRIPTION
+.I Ksh\^
+is a command programming language
+that executes commands read from a terminal
+or a file.
+.I Rsh\^
+is a restricted version of the standard command interpreter
+.IR sh ;
+it is used to set up login names and execution environments whose
+capabilities are more controlled than those of the standard shell.
+See
+.I Invocation\^
+below
+for the meaning of arguments to the shell.
+.SS Definitions.
+A
+.I metacharacter\^
+is one of the following characters:
+.RS
+.PP
+\f3; & ( ) \(bv < > new-line space tab\fP
+.RE
+.PP
+A
+.I blank\^
+is a
+.B tab
+or a
+.BR space .
+An
+.I identifier\^
+is a sequence of letters, digits, or underscores
+starting with a letter or underscore.
+Identifiers are used as names for
+.IR aliases ,
+.IR functions ,
+and
+.IR "named parameters" .
+A
+.I word\^
+is a sequence of
+.I characters\^
+separated by one or more non-quoted
+.IR metacharacters .
+.SS Commands.
+A
+.I simple-command\^
+is a sequence of
+.I blank\^
+separated words
+which may be preceded by a parameter assignment list.
+(See
+.I Environment\^
+below).
+The first word specifies the name of the command to
+be executed.
+Except as specified below,
+the remaining words are passed as arguments
+to the invoked command.
+The command name is passed as argument 0
+(see
+.IR exec (2)).
+The
+.I value\^
+of a simple-command is its exit status
+if it terminates normally, or (octal) 200+\f2status\^\fP if
+it terminates abnormally (see
+.IR signal (2)
+for a list of
+status values).
+.PP
+A
+.I pipeline\^
+is a sequence of one or more
+.I commands\^
+separated by
+.BR \(bv .
+The standard output of each command but the last
+is connected by a
+.IR pipe (2)
+to the standard input of the next command.
+Each command is run as a separate process;
+the shell waits for the last command to terminate.
+The exit status of a pipeline is the exit
+status of the last command.
+.PP
+A
+.I list\^
+is a sequence of one or more
+pipelines
+separated by
+.BR ; ,
+.BR & ,
+.BR && ,
+or
+.BR \(bv\|\(bv ,
+and optionally terminated by
+.BR ; ,
+.BR & ,
+or
+.BR \(bv& .
+Of these five symbols,
+.BR ; ,
+.BR & ,
+and
+.BR \(bv&
+have equal precedence,
+which is lower than that of
+.B &&
+and
+.BR \(bv\|\(bv .
+The symbols
+.B &&
+and
+.B \(bv\|\(bv
+also have equal precedence.
+A semicolon
+.RB ( ; )
+causes sequential execution of the preceding pipeline; an ampersand
+.RB ( & )
+causes asynchronous execution of the preceding pipeline (i.e., the shell does
+.I not\^
+wait for that pipeline to finish).
+The symbol
+.B \(bv&
+causes asynchronous execution of the preceding command or pipeline
+with a two-way pipe established to the parent shell.
+The standard input and output of the spawned command
+can be written to and read from by the parent Shell
+using the
+.B \-p
+option of
+the special commands
+.B read
+and
+.B print\^
+described later.
+Only one such command can be active
+at any given time.
+The symbol
+.B &&
+.RB (\| \(bv\|\(bv \^)
+causes the
+.I list\^
+following it to be executed only if the preceding
+pipeline
+returns a zero (non-zero) value.
+An arbitrary number of new-lines may appear in a
+.I list,\^
+instead of semicolons,
+to delimit commands.
+.PP
+A
+.I command\^
+is either a simple-command
+or one of the following.
+Unless otherwise stated,
+the value returned by a command is that of the
+last simple-command executed in the command.
+.TP
+\f3for\fP \f2identifier\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3do\fP \f2list\^\fP \f3done\fP
+Each time a
+.B for
+command is executed,
+.I identifier\^
+is set to the next
+.I word\^
+taken from the
+.B in
+.I word\^
+list.
+If
+.BI in " word\^"
+\&.\|.\|.
+is omitted, then
+the
+.B for
+command executes the \f3do\fP \f2list\^\fP once for each positional parameter
+that is set
+(see
+.I "Parameter Substitution\^"
+below).
+Execution ends when there are no more words in the list.
+.TP
+\f3select\fP \f2identifier\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3do\fP \f2list\^\fP \f3done\fP
+A
+.B select
+command prints on standard error (file descriptor 2), the set of
+.IR word s,
+each preceded by a number.
+If
+.BI in " word\^"
+\&.\|.\|.
+is omitted, then
+the
+positional parameters
+are used instead
+(see
+.I "Parameter Substitution\^"
+below).
+The
+.SM
+.B PS3
+prompt is printed
+and a line is read from the standard input.
+If this line consists of the number
+of one of the listed
+.BR word s,
+then the value of the parameter
+.I identifier\^
+is set to the
+.I word\^
+corresponding to this number.
+If this line is empty the selection list is
+printed again.
+Otherwise the value of the parameter
+.I identifier\^
+is set to
+.BR null .
+The contents of the line read from standard input is
+saved in
+the parameter
+.SM
+.BR REPLY.
+The
+.I list\^
+is executed for each selection until a
+.B break\^
+or
+.I end-of-file\^
+is encountered.
+.TP
+\f3case\fP \f2word\^\fP \f3in\fP \*(OK \f2pattern\^\fP \*(OK \(bv \
+\f2pattern\^\fP \*(CK .\|.\|. \f3)\fP \f2list\^\fP \f3;;\fP \*(CK .\|.\|. \f3esac\fP
+A
+.B case
+command executes the
+.I list\^
+associated with the first
+.I pattern\^
+that matches
+.IR word .
+The form of the patterns is
+the same as that used for
+file-name generation (see
+.I "File Name Generation\^"
+below).
+.TP
+\f3if\fP \f2list\^\fP \f3then\fP \f2list\^\fP \*(OK \
+\f3elif\fP \f2list\^\fP \f3then\fP \f2list\^\fP \*(CK .\|.\|. \
+\*(OK \f3else\fP \f2list\^\fP \*(CK \f3f\&i\fP
+The
+.I list\^
+following \f3if\fP is executed and,
+if it
+returns a zero exit status, the
+.I list\^
+following
+the first
+.B then
+is executed.
+Otherwise, the
+.I list\^
+following \f3elif\fP
+is executed and, if its value is zero,
+the
+.I list\^
+following
+the next
+.B then
+is executed.
+Failing that, the
+.B else
+.I list\^
+is executed.
+If no
+.B else
+.I list\^
+or
+.B then
+.I list\^
+is executed, then the
+.B if
+command returns a zero exit status.
+.TP
+.PD 0
+\f3while\fP \f2list\^\fP \f3do\fP \f2list\^\fP \f3done\fP
+.TP
+\f3until\fP \f2list\^\fP \f3do\fP \f2list\^\fP \f3done\fP
+.PD
+A
+.B while
+command repeatedly executes the
+.B while
+.I list\^
+and, if the exit status of the last command in the list is zero, executes
+the
+.B do
+.IR list ;
+otherwise the loop terminates.
+If no commands in the
+.B do
+.I list\^
+are executed, then the
+.B while
+command returns a zero exit status;
+.B until
+may be used in place of
+.B while
+to negate
+the loop termination test.
+.TP
+\f3(\fP\f2list\^\fP\f3)\fP
+.br
+Execute
+.I list\^
+in a separate environment.
+Note, that if two adjacent open parentheses are
+needed for nesting, a space must be inserted to avoid
+arithmetic evaluation as described below.
+.TP
+\f3{ \fP\f2list\^\fP\f3;}\fP
+.br
+.I list\^
+is simply executed.
+Note that
+.B {
+is a
+.I keyword\^
+and requires a blank
+in order to be recognized.
+.TP
+.PD 0
+\f3function\fP \f2identifier\^\fP \f3{\fP \f2list\^\fP \f3;}\fP
+.TP
+\f2identifier\^\fP \f3() {\fP \f2list\^\fP \f3;}\fP
+.PD
+Define a function which is referenced by
+.IR identifier .
+The body of the function is the
+.I list\^
+of commands between
+.B {
+and
+.BR } .
+(See
+.I Functions\^
+below).
+.TP
+\f3time \fP\f2pipeline\^\fP
+.br
+The
+.I pipeline\^
+is executed and the elapsed time as well as
+the user and system time are printed on standard error.
+.PP
+The following keywords
+are only recognized as the first word of a command
+and when not quoted:
+.if t .RS
+.PP
+.B
+.if n if then else elif fi case esac for while until do done { } function select time
+.if t if then else elif fi case esac for while until do done { } function select time
+.if t .RE
+.SS Comments.
+A word beginning with
+.B #
+causes that word and all the following characters up to a new-line
+to be ignored.
+.SS Aliasing.
+The first word of each command is replaced by the text of an
+.B alias
+if an
+.B alias
+for this word has been defined.
+The
+first character of an
+.B alias
+name can be any printable character,
+but the rest of the characters
+must be the same as for a valid
+.IR identifier .
+The replacement string can contain any
+valid Shell script
+including the metacharacters listed above.
+The first word of each command of the
+replaced text will not be tested for additional aliases.
+If the last character of the alias value is a
+.I blank\^
+then the word following the alias will also be checked for alias
+substitution.
+Aliases can be used to redefine special
+builtin commands but cannot be used to redefine
+the keywords listed above.
+Aliases can be created, listed, and exported with the
+.B alias
+command and can be removed with the
+.B unalias
+command.
+Exported aliases remain in effect for sub-shells
+but must be reinitialized for separate invocations
+of the Shell (See
+.I Invocation\^
+below).
+.PP
+.I Aliasing\^
+is performed when
+scripts are read,
+not while they are executed.
+Therefore,
+for an alias to take effect
+the
+.B
+alias
+command has to be executed before
+the command which references the alias is read.
+.PP
+Aliases are frequently used as a short hand for full path
+names.
+An option to the aliasing facility allows the value of the alias
+to be automatically set to the full pathname of
+the corresponding command.
+These aliases are called
+.I tracked
+aliases.
+The value of a
+.I tracked
+alias is defined the first time the identifier
+is read and becomes undefined each time
+the
+.SM
+.B PATH
+variable is reset.
+These aliases remain
+.I tracked
+so that the next
+subsequent reference will redefine the value.
+Several tracked aliases are compiled into the shell.
+The
+.B \-h
+option of the
+.B set
+command makes each command name which is an
+.I identifier\^
+into a tracked alias.
+.PP
+The following
+.I exported aliases
+are compiled into the shell
+but can be unset or redefined:
+.RS 20
+.PD 0
+.TP
+.B "echo=\(fmprint \-\(fm"
+.TP
+.B "false=\(fmlet 0\(fm"
+.TP
+.B "functions=\(fmtypeset \-f\(fm"
+.TP
+.B "history=\(fmfc \-l\(fm"
+.TP
+.B "integer=\(fmtypeset \-i\(fm"
+.TP
+.B "nohup=\(fmnohup \(fm"
+.TP
+.B "pwd=\(fmprint \- $\s-1PWD\s+1\(fm"
+.TP
+.B "r=\(fmfc \-e \-\(fm"
+.TP
+.B "true=\(fm:\(fm"
+.TP
+.B "type=\(fmwhence \-v\(fm"
+.TP
+.B "hash=\(fmalias \-t\(fm"
+.PD
+.RE
+.SS Tilde Substitution.
+After alias substitution is performed, each word
+is checked to see if it begins with an unquoted
+.BR \(ap .
+If it does, then the word up to a
+.B /
+is checked to see if it matches a user name in the
+.B /etc/passwd
+file.
+If a match is found, the
+.B \(ap
+and the matched login name is replaced by the
+login directory of the matched user.
+This is called a
+.I tilde
+substitution.
+If no match is found, the original text is left unchanged.
+A
+.B \(ap
+by itself, or in front of a
+.BR / ,
+is replaced by the value of the
+.B
+.SM HOME
+parameter.
+A
+.B \(ap
+followed by a
+.B +
+or
+.B \-
+is replaced by the value of
+the parameter
+.B
+.SM PWD
+and
+.B
+.SM OLDPWD
+respectively.
+.PP
+In addition, the value of each
+.I "keyword parameter"
+is checked to see if it begins with a
+.B \(ap
+or if a
+.B \(ap
+appears after a
+.BR : .
+In either of these cases a
+.I tilde
+substitution is attempted.
+.SS Command Substitution.
+The standard output from a command enclosed in
+a pair of grave accents (\^\f3\*`\^\*`\fP\^) may be used as part or all
+of a word;
+trailing new-lines are removed.
+The command substitution
+\^\f3\*`\^cat file\^\*`\fP\^
+can be replaced by the equivalent but faster
+\^\f3\*`\^<file\^\*`\fP\^.
+Command substitution of most special commands
+that do not perform input/output redirection are
+carried out without creating a separate process.
+.SS Parameter Substitution.
+A
+.I parameter\^
+is an
+.IR identifier ,
+a digit,
+or any of the characters
+.BR \(** ,
+.BR @ ,
+.BR # ,
+.BR ? ,
+.BR \- ,
+.BR $ ,
+and
+.BR !\\^ .
+A
+.I named parameter\^
+(a parameter denoted by an identifier)
+has a
+.I value\^
+and zero or more
+.IR attributes .
+.I Named parameters \^
+can be assigned
+.I values\^
+and
+.I attributes
+by using the
+.B typeset\^
+special command.
+The attributes supported by the Shell are described
+later with the
+.B typeset\^
+special command.
+Exported parameters pass values and attributes to
+sub-shells but only values to the environment.
+.PP
+The shell supports a limited one-dimensional array facility.
+An element of an array parameter is referenced by a
+.IR subscript .
+A
+.I subscript\^
+is denoted by a
+.BR [ ,
+followed by an
+.I arithmetic expression\^
+(see Arithmetic evaluation below)
+followed by a
+.BR ] .
+The value of all
+subscripts must be in the
+range of
+0 through 511.
+Arrays need not be declared.
+Any reference to a named parameter
+with a valid subscript is
+legal and an array will be created if necessary.
+Referencing an array without a subscript
+is equivalent to referencing the first element.
+.PP
+The
+.I value\^
+of a
+.I named parameter\^
+may also be assigned by writing:
+.RS
+.PP
+.IB name = value\^\|
+\*(OK
+.IB name = value\^
+\*(CK .\|.\|.
+.RE
+.PP
+.PD 0
+If the integer attribute,
+.BR \-i ,
+is set for
+.I name\^
+the
+.I value\^
+is subject to arithmetic evaluation as described below.
+.PP
+Positional parameters,
+parameters denoted by a number,
+may be assigned values with the
+.B set\^
+special command.
+Parameter
+.B $0
+is set from argument zero when the shell
+is invoked.
+.PP
+The character
+.B $
+is used to introduce substitutable
+.IR parameters .
+.TP
+\f3${\fP\f2parameter\^\fP\f3}\fP
+The value, if any, of the parameter is substituted.
+The braces are required when
+.I parameter\^
+is followed by a letter, digit, or underscore
+that is not to be interpreted as part of its name
+or when a named parameter is subscripted.
+If
+.I parameter\^
+is a digit then it is a positional parameter.
+If
+.I parameter\^
+is
+.BR \(**
+or
+.BR @ ,
+then all the positional
+parameters, starting with
+.BR $1 ,
+are substituted
+(separated by spaces).
+If an array
+.I identifier\^
+with subscript
+.B \(**
+or
+.B @
+is used,
+then the value
+for each of the
+elements
+is substituted
+(separated by spaces).
+.TP
+\f3${#\fP\f2parameter\^\fP\f3}\fP
+If
+.I parameter\^
+is not
+.BR \(** ,
+the length of the value of the
+.I parameter\^
+is substituted.
+Otherwise, the number of positional parameters is substituted.
+.TP
+\f3${#\fP\f2identifier\fP\f3[*]}\fP
+The number of elements in the array
+.I identifier\^
+is substituted.
+.TP
+\f3${\fP\f2parameter\^\fP\f3:\-\fP\f2word\^\fP\f3}\fP
+If
+.I parameter\^
+is set and is non-null then substitute its value;
+otherwise substitute
+.IR word .
+.TP
+\f3${\fP\f2parameter\^\fP\f3:=\fP\f2word\^\fP\f3}\fP
+If
+.I parameter\^
+is not set or is null then set it to
+.IR word ;
+the value of the parameter is then substituted.
+Positional parameters may not be assigned to
+in this way.
+.TP
+\f3${\fP\f2parameter\^\fP\f3:?\fP\f2word\^\fP\f3}\fP
+If
+.I parameter\^
+is set and is non-null then substitute its value;
+otherwise, print
+.I word\^
+and exit from the shell.
+If
+.I word\^
+is omitted then a standard message is printed.
+.TP
+\f3${\fP\f2parameter\^\fP\f3:+\fP\f2word\^\fP\f3}\fP
+If
+.I parameter\^
+is set and is non-null then substitute
+.IR word ;
+otherwise substitute nothing.
+.TP
+.PD 0
+\f3${\fP\f2parameter\^\fP\f3#\fP\f2pattern\^\fP\f3}\fP
+.TP
+\f3${\fP\f2parameter\^\fP\f3##\fP\f2pattern\^\fP\f3}\fP
+.PD
+If
+the Shell
+.I pattern\^
+matches the beginning of the value of
+.IR parameter ,
+then the value of
+this substitution is the value of the
+.I parameter\^
+with the matched portion deleted;
+otherwise the value of this
+.I parameter\^
+is substituted.
+In the first form the smallest matching pattern is deleted and in the
+latter form the largest matching pattern is deleted.
+.TP
+.PD 0
+\f3${\fP\f2parameter\^\fP\f3%\fP\f2pattern\^\fP\f3}\fP
+.TP
+\f3${\fP\f2parameter\^\fP\f3%%\fP\f2pattern\^\fP\f3}\fP
+.PD
+If
+the Shell
+.I pattern\^
+matches the end of the value of
+.IR parameter ,
+then the value of
+.I parameter\^
+with the matched part deleted;
+otherwise substitute the value of
+.IR parameter .
+In the first form the smallest matching pattern is deleted and in the
+latter form the largest matching pattern is deleted.
+.PD
+.PP
+In the above,
+.I word\^
+is not evaluated unless it is
+to be used as the substituted string,
+so that, in the following example,
+.B pwd\^
+is executed only if
+.B d\^
+is not set or is null:
+.RS
+.PP
+echo \|${d:\-\^\*`\^pwd\^\*`\^}
+.RE
+.PP
+If the colon (
+.B : )
+is omitted from the above expressions,
+then the shell only checks whether
+.I parameter\^
+is set or not.
+.PP
+The following
+parameters
+are automatically set by the shell:
+.RS
+.PD 0
+.TP
+.B #
+The number of positional parameters in decimal.
+.TP
+.B \-
+Flags supplied to the shell on invocation or by
+the
+.B set
+command.
+.TP
+.B ?
+The decimal value returned by the last executed command.
+.TP
+.B $
+The process number of this shell.
+.TP
+.B _
+The last argument of the previous command.
+This parameter is not set for commands which are asynchronous.
+.TP
+.B !
+The process number of the last background command invoked.
+.TP
+.B
+.SM PPID
+The process number of the parent of the shell.
+.TP
+.B
+.SM PWD
+The present working directory set by the
+.B cd
+command.
+.TP
+.B
+.SM OLDPWD
+The previous working directory set by the
+.B cd
+command.
+.TP
+.B
+.SM RANDOM
+Each time this parameter is referenced, a random integer is generated.
+The sequence of random numbers can be initialized by assigning
+a numeric value to
+.SM
+.BR RANDOM .
+.TP
+.B
+.SM REPLY
+This parameter is set by the
+.B select
+statement and by
+the
+.B read
+special command when no arguments are supplied.
+.PD
+.RE
+.PP
+The following
+parameters
+are used by the shell:
+.RS
+.PD 0
+.TP
+.B
+.SM CDPATH
+The search path for the
+.I cd
+command.
+.TP
+.B
+.SM COLUMNS
+If this variable is set,
+the value is used to define the width of the edit window
+for the shell edit modes and for printing
+.B select
+lists.
+.TP
+.B
+.SM EDITOR
+If the value of this variable ends in
+.IR emacs ,
+.IR gmacs ,
+or
+.I vi
+and the
+.B
+.SM VISUAL
+variable is not set,
+then the corresponding option
+(see Special Command
+.B set
+below)
+will be turned on.
+.TP
+.SM
+.B ENV
+If this parameter is set, then
+parameter substitution is performed on
+the value to generate
+the pathname of the script that will be
+executed when the
+.I shell\^
+is invoked.
+(See
+.I Invocation\^
+below.)
+This file is typically used for
+.I alias
+and
+.I function
+definitions.
+.TP
+.B
+.SM FCEDIT
+The default editor name for the
+.B fc
+command.
+.TP
+.SM
+.B IFS
+Internal field separators,
+normally
+.BR space ,
+.BR tab ,
+and
+.B new-line
+that is used to separate command words which result from
+command or parameter substitution
+and for separating words with the special command
+.BR read .
+.TP
+.SM
+.B HISTFILE
+If this parameter is set when the shell is invoked, then
+the value is the pathname of the file that will be
+used to store the command history.
+(See
+.I "Command re-entry\^"
+below.)
+.TP
+.SM
+.B HISTSIZE
+If this parameter is set when the shell is invoked, then
+the number of previously entered commands that
+are accessible by this shell
+will be greater than or equal to this number.
+The default is 128.
+.TP
+.B
+.SM HOME
+The default argument (home directory) for the
+.B cd
+command.
+.TP
+.B
+.SM MAIL
+If this parameter is set to the name of a mail file
+.I and\^
+the
+.B
+.SM MAILPATH
+parameter is not set,
+then the shell informs the user of arrival of mail
+in the specified file.
+.TP
+.B
+.SM MAILCHECK
+This variable specifies how often (in seconds) the
+shell will check for changes in the modification time
+of any of the files specified by the
+.B
+.SM MAILPATH
+or
+.B
+.SM MAIL
+parameters.
+The default value is 600 seconds.
+If set to 0,
+the shell will check before each prompt.
+.TP
+.B
+.SM MAILPATH
+A colon (
+.B :
+)
+separated list of file names.
+If this parameter is set
+then the shell informs the user of
+any modifications to the specified files
+that have occurred within the last
+.B
+.SM MAILCHECK
+seconds.
+Each file name can be followed by a
+.B ?
+and a message that will be printed.
+The message will undergo parameter and command substitution
+with the parameter,
+.B $_
+defined as the name of the file that has changed.
+The default message is
+.I you have mail in $_\^.
+.TP
+.B
+.SM PATH
+The search path for commands (see
+.I Execution\^
+below).
+The user may not change
+.B \s-1PATH\s+1
+if executing under
+.I rsh
+(except in
+.I .profile\^
+).
+.TP
+.SM
+.B PS1
+The value of this parameter is expanded for paramter
+substitution to define the
+primary prompt string which by default is
+.RB `` "$ \|" ''.
+The character
+.B !
+in the primary prompt string is replaced by the
+.I command\^
+number (see
+.I Command Re-entry
+below).
+.TP
+.SM
+.B PS2
+Secondary prompt string, by default
+.RB `` "> \|" ''.
+.TP
+.SM
+.B PS3
+Selection prompt string
+used within a
+.B select
+loop, by default
+.RB `` "#? \|" ''.
+.TP
+.SM
+.B SHELL
+The pathname of the
+.I shell\^
+is kept in the environment.
+At invocation, if the value of this variable contains an
+.B r
+in the basename,
+then the shell becomes restricted.
+.TP
+.B
+.SM TMOUT
+If set to a value greater than zero,
+the shell will terminate if a command is not entered within
+the prescribed number of seconds.
+(Note that the shell can be compiled with a maximum bound
+for this value which cannot be exceeded.)
+.TP
+.B
+.SM VISUAL
+If the value of this variable ends in
+.IR emacs ,
+.IR gmacs ,
+or
+.I vi
+then the corresponding option
+(see Special Command
+.B set
+below)
+will be turned on.
+.PD
+.RE
+.PP
+The shell gives default values to
+\f3\s-1PATH\s+1\fP, \f3\s-1PS1\s+1\fP, \f3\s-1PS2\s+1\fP, \f3\s-1MAILCHECK\s+1\fP,
+\f3\s-1TMOUT\s+1\fP and \f3\s-1IFS\s+1\fP,
+while
+.SM
+.BR HOME ,
+.SM
+.B SHELL
+.SM
+.B ENV
+and
+.SM
+.B MAIL
+are
+not set at all by the shell (although
+.SM
+.B HOME
+.I is\^
+set by
+.IR login (1)).
+On some systems
+.SM
+.B MAIL
+and
+.SM
+.B SHELL
+are also
+set by
+.IR login (1)).
+.SS Blank Interpretation.
+After parameter and command substitution,
+the results of substitutions are scanned for the field separator
+characters (
+those found in
+.SM
+.B IFS
+)
+and split into distinct arguments where such characters are found.
+Explicit null arguments (\^\f3"\^"\fP or \f3\*\(fm\^\*\(fm\fP\^) are retained.
+Implicit null arguments
+(those resulting from
+.I parameters\^
+that have no values) are removed.
+.SS File Name Generation.
+Following substitution, each command
+.I word\^
+is scanned for
+the characters
+.BR \(** ,
+.BR ? ,
+and
+.B \*(OK\^
+unless the
+.B \-f
+option has been
+.BR set .
+If one of these characters appears
+then the word is regarded as a
+.IR pattern .
+The word is replaced with alphabetically sorted file names that match the pattern.
+If no file name is found that matches the pattern, then
+the word is left unchanged.
+When a
+.I pattern\^
+is used for file name generation,
+the character
+.B .
+at the start of a file name
+or immediately following a
+.BR / ,
+as well as the character
+.B /
+itself,
+must be matched explicitly.
+In other instances of pattern matching the
+.B /
+and
+.B .
+are not treated specially.
+.PP
+.PD 0
+.RS
+.TP
+.B \(**
+Matches any string, including the null string.
+.TP
+.B ?
+Matches any single character.
+.TP
+.BR \*(OK \^.\|.\|.\^ \*(CK
+Matches any one of the enclosed characters.
+A pair of characters separated by
+.B \-
+matches any
+character lexically between the pair, inclusive.
+If the first character following the opening "[ \|"
+is a "! \|" then any character not enclosed is matched.
+A
+.B \-
+can be included in the character set by putting it as the
+first or last character.
+.PD
+.RE
+.SS Quoting.
+Each of the
+.I metacharacters\^
+listed above (See
+.I Definitions
+above).
+has a special meaning to the shell
+and cause termination of a word unless quoted.
+A character may be
+.I quoted\^
+(i.e., made to stand for itself)
+by preceding
+it with a
+.BR \e .
+The pair
+.B \enew-line
+is ignored.
+All characters enclosed between a pair of single quote marks (\^\f3\(fm\^\(fm\fP\^),
+except a single quote,
+are quoted.
+Inside double quote marks
+(\f3"\^"\fP),
+parameter and command substitution occurs and
+.B \e
+quotes the characters
+.BR \e ,
+.BR \(fm ,
+\f3"\fP,
+and
+.BR $ .
+.B
+"$\(**"
+is equivalent to
+\f3"$1 \|$2\fP \|.\|.\|.\f3"\fP,
+whereas
+.B
+"$@"
+is equivalent to
+.B
+"$1"\|
+.B
+"$2"\|
+\&.\|.\|.\^.
+.PP
+The special meaning of keywords can be removed by quoting any
+character of the keyword.
+The recognition of special command names listed below cannot be altered
+by quoting them.
+.SS Arithmetic Evaluation.
+An ability to perform integer arithmetic
+is provided with the special command
+.BR let .
+Evaluations are performed using
+.I long\^
+arithmetic.
+Constants are of the form
+\*(OK\f2base\f3#\^\f1\*(CK\f2n\^\fP
+where
+.I base\^
+is a decimal number between two and thirty-six
+representing the arithmetic base
+and
+.I n\^
+is a number in that base.
+If
+.I base\^
+is omitted
+then base 10 is used.
+.PP
+An internal integer representation of a
+.I named parameter\^
+can be specified with the
+.B \-i
+option of the
+.B typeset
+special command.
+When this attribute is selected
+the first assignment to the
+parameter determines the arithmetic base
+to be used when
+parameter substitution occurs.
+.PP
+Since many of the arithmetic operators require
+quoting, an alternative form of the
+.B let
+command is provided.
+For any command which begins with a
+.BR (( ,
+all the characters until a matching
+.B ))
+are treated as a quoted expression.
+More precisely,
+.B ((
+\&.\|.\|.
+.B ))
+is equivalent to
+.B let\^
+\f3"\fP \|.\|.\|.\f3"\fP.
+.SS Prompting.
+When used interactively,
+the shell prompts with the value of
+.SM
+.B PS1
+before reading a command.
+If at any time a new-line is typed and further input is needed
+to complete a command, then the secondary prompt
+(i.e., the value of
+.BR \s-1PS2\s+1 )
+is issued.
+.SS Input/Output.
+Before a command is executed, its input and output
+may be redirected using a special notation interpreted by the shell.
+The following may appear anywhere in a simple-command
+or may precede or follow a
+.I command\^
+and are
+.I not\^
+passed on to the invoked command.
+Command and parameter substitution occurs before
+.I word\^
+or
+.I digit\^
+is used except as noted below.
+File name generation
+occurs only if the pattern matches a single file
+and blank interpretation is not performed.
+.TP 14
+.BI < word
+Use file
+.I word\^
+as standard input (file descriptor 0).
+.TP
+.BI > word
+Use file
+.I word\^
+as standard output (file descriptor 1).
+If the file does not exist then it is created;
+otherwise, it is truncated to zero length.
+.TP
+.BI >\h@-.3m@> word
+Use file
+.I word\^
+as standard output.
+If the file exists then output is appended to it (by first seeking to the end-of-file);
+otherwise, the file is created.
+.TP
+\f3<\h@-.3m@<\fP\*(OK\f3\-\fP\*(CK\f2word\fP
+The shell input is read up to a line that is the same as
+.IR word ,
+or to an end-of-file.
+No parameter substitution, command substitution or
+file name generation is performed on
+.IR word .
+The resulting document,
+called a
+.IR here-document ,
+becomes
+the standard input.
+If any character of
+.I word\^
+is quoted, then no interpretation
+is placed upon the characters of the document;
+otherwise, parameter and command substitution occurs,
+.B \enew-line
+is ignored,
+and
+.B \e
+must be used to quote the characters
+.BR \e ,
+.BR $ ,
+.BR \*` ,
+and the first character of
+.IR word .
+If
+.B \-
+is appended to
+.BR <\h@-.3m@< ,
+then all leading tabs are stripped from
+.I word\^
+and from the document.
+.TP
+.BI <& digit
+The standard input is duplicated from file descriptor
+.I digit
+(see
+.IR dup (2)).
+Similarly for the standard output using
+.BR >&
+.IR digit .
+.TP
+.B <&\-
+The standard input is closed.
+Similarly for the standard output using
+.BR >&\- .
+.PP
+If one of the above is preceded by a digit,
+then the
+file descriptor number referred to is that specified
+by the digit
+(instead of the default 0 or 1).
+For example:
+.RS
+.PP
+\&.\|.\|. \|2>&1
+.RE
+.PP
+means file descriptor 2 is to be opened
+for writing as a duplicate
+of file descriptor 1.
+.PP
+The order in which redirections are specified is significant.
+The shell evaluates each redirection in terms of the
+.RI ( "file descriptor" ", " file )
+association at the time of evaluation.
+For example:
+.RS
+.PP
+\&.\|.\|. \|1>\f2fname\^\fP 2>&1
+.RE
+.PP
+first associates file descriptor 1 with file
+.IR fname\^ .
+It then associates file descriptor 2 with the file associated with file
+descriptor 1 (i.e.
+.IR fname\^ ).
+If the order of redirections were reversed, file descriptor 2 would be associated
+with the terminal (assuming file descriptor 1 had been) and then file descriptor
+1 would be associated with file
+.IR fname\^ .
+.PP
+If a command is followed by
+.B &
+and job control is not active,
+then the default standard input
+for the command
+is the empty file
+.BR /dev/null .
+Otherwise, the environment for the execution of a command contains the
+file descriptors of the invoking shell as modified by
+input/output specifications.
+.SS Environment.
+The
+.I environment\^
+(see
+.IR environ (7))
+is a list of name-value pairs that is passed to
+an executed program in the same way as a normal argument list.
+The names must be
+.I identifiers\^
+and the values are character strings.
+The shell interacts with the environment in several ways.
+On invocation, the shell scans the environment
+and creates a
+parameter
+for each name found,
+giving it the corresponding value and marking it
+.I export .
+Executed commands inherit the environment.
+If the user modifies the values of these
+parameters
+or creates new ones,
+using the
+.B export
+or
+.B typeset \-x
+commands they become part of the
+environment.
+The environment seen by any executed command is thus composed
+of any name-value pairs originally inherited by the shell,
+whose values may be modified by the current shell,
+plus any additions
+which must be noted in
+.B export
+or
+.B typeset \-x
+commands.
+.PP
+The environment for any
+.I simple-command\^
+or function
+may be augmented by prefixing it with one or more parameter assignments.
+A parameter assignment argument is a word of the form
+.IR identifier=value .
+Thus:
+.RS
+.PP
+\s-1TERM\s+1=450 \|cmd \|args and
+.br
+(export \|\s-1TERM\s+1; \|\s-1TERM\s+1=450; \|cmd \|args)
+.RE
+.PP
+are equivalent (as far as the above execution of
+.I cmd\^
+is concerned).
+.PP
+If the
+.B \-k
+flag is set,
+.I all\^
+parameter assignment arguments are placed in the environment,
+even if they occur after the command name.
+The following
+first prints
+.B "a=b c"
+and then
+.BR c:
+.PP
+.RS
+.nf
+echo \|a=b \|c
+set \|\-k
+echo \|a=b \|c
+.fi
+.RE
+.SS Functions.
+.PP
+The
+.B function\^
+keyword, described in the
+.I Commands
+section above,
+is used to define shell functions.
+Shell functions are read in and stored internally.
+Alias names are resolved when the function is read.
+Functions are executed like commands with the arguments
+passed as positional parameters.
+(See
+.I Execution
+below).
+.PP
+Functions execute in the same process as the caller and
+share all files, traps ( other than
+.SM
+.B EXIT
+and
+.SM
+.BR ERR )
+and present working directory with the
+caller.
+A trap set on
+.SM
+.B EXIT
+inside a function
+is executed after the function completes.
+Ordinarily,
+variables are shared between the calling program
+and the function.
+However,
+the
+.B typeset
+special command used within a function
+defines local variables whose scope includes
+the current function and
+all functions it calls.
+.PP
+The special command
+.B return
+is used to return
+from function calls.
+Errors within functions return control to the caller.
+.PP
+Function identifiers
+can be listed with the
+.B \-f
+option of the
+.B typeset
+special command.
+The text of functions will also
+be listed.
+Function can be undefined with the
+.B \-f
+option of the
+.B unset
+special command.
+.PP
+Ordinarily,
+functions are unset when the shell executes a shell script.
+The
+.B \-xf
+option of the
+.B typeset
+command allows a function to be exported
+to scripts that are executed without a separate
+invocation of the shell.
+Functions that need to be defined across separate
+invocations of the shell should be placed in the
+.B
+.SM
+ENV
+file.
+.SS Jobs.
+.PP
+If the
+.B monitor
+option of the
+.B set
+command is turned on,
+an interactive shell associates a \fIjob\fR with each pipeline. It keeps
+a table of current jobs, printed by the
+.B jobs
+command, and assigns them small integer numbers. When
+a job is started asynchronously with
+.BR & ,
+the shell prints a line which looks
+like:
+.PP
+.DT
+ [1] 1234
+.PP
+indicating that the job which was started asynchronously was job number
+1 and had one (top-level) process, whose process id was 1234.
+.PP
+This paragraph and the next require features that are
+not in all versions of UNIX and may not apply.
+If you are running a job and wish to do something else you may hit the key
+\fB^Z\fR (control-Z) which sends a STOP signal to the current job.
+The shell will then normally indicate that the job has been `Stopped',
+and print another prompt. You can then manipulate the state of this job,
+putting it in the background with the
+.B bg
+command, or run some other
+commands and then eventually bring the job back into the foreground with
+the foreground command
+.BR fg .
+A \fB^Z\fR takes effect immediately and
+is like an interrupt in that pending output and unread input are discarded
+when it is typed.
+.PP
+A job being run in the background will stop if it tries to read
+from the terminal. Background jobs are normally allowed to produce output,
+but this can be disabled by giving the command ``stty tostop''.
+If you set this
+tty option, then background jobs will stop when they try to produce
+output like they do when they try to read input.
+.PP
+There are several ways to refer to jobs in the shell. The character
+.B %
+introduces a job name. If you wish to refer to job number 1, you can
+name it as
+.B %1 .
+Jobs can also be named by prefixes of the string typed in to
+.B kill
+or restart them.
+Thus, on systems that support job control,
+.RB ` fg
+.BR %ed '
+would normally restart
+a suspended
+.IR ed (1)
+job, if there were a suspended job whose name began with
+the string `ed'.
+.PP
+The shell maintains a notion of the current and previous jobs.
+In output pertaining to jobs, the current job is marked with a
+.B +
+and the previous job with a
+.BR \- .
+The abbreviation
+.B %+
+refers
+to the current job and
+.B %\-
+refers to the previous job.
+.B %%
+is also a synonym for the current job.
+.PP
+This shell learns immediately whenever a process changes state.
+It normally informs you whenever a job becomes blocked so that
+no further progress is possible, but only just before it prints
+a prompt. This is done so that it does not otherwise disturb your work.
+.PP
+When you try to leave the shell while jobs are running or stopped, you will
+be warned that `You have stopped(running) jobs.' You may use the
+.B jobs
+command to see what they are. If you do this or immediately try to
+exit again, the shell will not warn you a second time, and the stopped
+jobs will be terminated.
+.SS Signals.
+The \s-1INT\s+1 and \s-1QUIT\s+1 signals for an invoked
+command are ignored if the command is followed by
+.B &
+and job
+.B monitor
+option is not active.
+Otherwise, signals have the values
+inherited by the shell from its parent,
+with the exception of signal 11
+(but see also
+the
+.B trap
+command below).
+.SS Execution.
+Each time a command is executed, the above substitutions
+are carried out.
+If the command name matches one
+of the
+.I "Special Commands\^"
+listed below,
+it is executed within the
+current shell process.
+Next, the command name is checked to see if
+it matches one of the user defined functions.
+If it does,
+the positional parameters are saved
+and then reset to the arguments of the
+.I function\^
+call.
+When the
+.I function\^
+completes or issues a
+.BR return ,
+the positional parameter list is restored
+and any trap set on
+.SM
+.B EXIT
+within the function is executed.
+The value of a
+.I function\^
+is the value of the last command executed.
+A function is also executed in the
+current shell process.
+If a command name is not a
+.I "special command\^"
+or a user defined
+.IR function ,
+a process is created and
+an attempt is made to execute the command via
+.IR exec (2).
+.PP
+The shell parameter
+.B
+.SM PATH
+defines the search path for
+the directory containing the command.
+Alternative directory names are separated by
+a colon
+.RB ( : ).
+The default path is
+.B :/bin:/usr/bin
+(specifying the current directory,
+.BR /bin ,
+and
+.BR /usr/bin ,
+in that order).
+Note that the current directory
+is specified by a null path name,
+which can appear immediately after the
+equal sign, between colon delimiters,
+or at the end of the path list.
+If the command name contains a \f3/\fP then the search path
+is not used.
+Otherwise, each directory in the path is
+searched for an executable file.
+If the file has execute permission but is not a
+directory or an
+.B a.out
+file,
+it is assumed to be a file containing shell commands.
+A sub-shell is spawned to read it.
+All non-exported aliases,
+functions,
+and named parameters are removed in this case.
+A parenthesized command is also executed in
+a sub-shell.
+.SS Command Re-entry.
+The text of the last
+.B
+.SM
+HISTSIZE
+(default 128)
+commands entered from a terminal device
+is saved in a
+.I history
+file.
+The file
+.B \s-1$HOME\s+1/.history
+is used if the
+.B
+.SM
+HISTFILE
+variable is not set
+or is not writable.
+A shell can access the commands of
+all
+.I interactive
+shells which use the same named
+.SM
+.BR HISTFILE .
+The special command
+.B fc\^
+is used to list or
+edit a portion this file.
+The portion of the file to be edited or listed can be selected by
+number or by giving the first character or
+characters of the command.
+A single command or range of commands can be specified.
+If you do not specify an editor program as
+an argument to
+.B fc\^
+then the value of the parameter
+.SM
+.B FCEDIT
+is used.
+If
+.SM
+.B FCEDIT
+is not defined then
+.I /bin/ed
+is used.
+The edited command(s) is printed and re-executed upon
+leaving the editor.
+The editor name
+.B \-
+is used to skip the editing phase and
+to re-execute the command.
+In this case a substitution parameter of the form
+\f2old\fP\f3=\fP\f2new\fP
+can be used to modify the command before execution.
+For example, if
+.B r
+is aliased to
+.B \(fmfc \-e \-\(fm
+then typing
+`\f3r bad=good c\fP'
+will re-execute the most recent command which starts with the letter
+.BR c ,
+replacing the string
+.B bad
+with the string
+.BR good .
+.SS In-line Editing Options
+Normally, each command line entered from a terminal device is simply
+typed followed by a new-line (`RETURN' or `LINE\ FEED').
+If either the
+.IR emacs ,
+.IR gmacs ,
+or
+.I vi
+option is active, the user can edit the command line.
+To be in either of these edit modes
+.B set
+the corresponding
+option.
+An editing option is automatically selected each time the
+.SM
+.B VISUAL
+or
+.SM
+.B EDITOR
+variable is assigned a value ending in either of these
+option names.
+.PP
+The editing features require that the user's terminal
+accept `RETURN' as carriage return without line feed
+and that a space (`\ ' must overwrite the current character on
+the screen.
+ADM terminal users should set the "space\ -\ advance"
+switch to `space'.
+Hewlett-Packard series 2621 terminal users should set the straps to
+`bcGHxZ\ etX'.
+.PP
+The editing modes implement a concept where the user is looking through a
+window at the current line.
+The window width is the value of
+.SM
+.B COLUMNS
+if it is defined, otherwise 80.
+If the line is longer than the window width minus two, a mark is
+displayed at the end of the window to notify the user.
+As the cursor moves and reaches the window boundaries the window will be
+centered about the cursor.
+The mark is a
+.BR > " ("
+.BR < ", "
+.BR * )
+if the line extends on the
+right (left, both) side(s) of the window.
+.SS Emacs Editing Mode
+This mode is entered by enabling either the
+.I emacs
+or
+.I gmacs
+option.
+The only difference between these two modes is the way
+they handle
+.BR ^T .
+To edit, the user
+moves the cursor to the point needing correction and
+then inserts or deletes characters or words as needed.
+All the editing commands are control characters or escape
+sequences.
+The notation for control characters is caret (
+.B ^
+) followed
+by the character.
+For example,
+.B ^F
+is the notation for control
+.BR F .
+This is entered by depressing `f' while holding down the
+`CTRL' (control) key.
+The `SHIFT' key is
+.I not
+depressed.
+(The notation
+.B ^?
+indicates the DEL (delete) key.)
+.PP
+The notation for escape sequences is
+.B M-
+followed by a
+character.
+For example,
+.B M-f
+(pronounced Meta f)
+is entered by depressing ESC
+(ascii
+.B 033
+)
+followed by `f'.
+(
+.B M-F
+would be the notation for ESC followed by `SHIFT' (capital) `F'.)
+.PP
+All edit commands
+operate from any place on the line
+(not just at the beginning).
+Neither the "RETURN" nor the "LINE FEED" key is
+entered after edit commands except when noted.
+.PP
+.PD 0
+.TP 10
+.BI ^F
+Move cursor forward (right) one character.
+.PP
+.TP 10
+.BI M-f
+Move cursor forward one word.
+(The editor's idea of a word is a string of characters
+consisting of only letters, digits and underscores.)
+.PP
+.TP 10
+.BI ^B
+Move cursor backward (left) one character.
+.PP
+.TP 10
+.BI M-b
+Move cursor backward one word.
+.PP
+.TP 10
+.BI ^A
+Move cursor to start of line.
+.PP
+.TP 10
+.BI ^E
+Move cursor to end of line.
+.PP
+.TP 10
+.BI ^] char
+Move cursor to character
+.I char
+on current line.
+.PP
+.TP 10
+.BI ^X^X
+Interchange the cursor and mark.
+.PP
+.TP 10
+.I erase
+(User defined erase character as defined
+by the stty command, usually
+.B ^H
+or
+.BR # .)
+Delete previous character.
+.PP
+.TP 10
+.BI ^D
+Delete current character.
+.PP
+.TP 10
+.BI M-d
+Delete current word.
+.PP
+.TP 10
+.BI M-^H
+(Meta-backspace) Delete previous word.
+.PP
+.TP 10
+.BI M-h
+Delete previous word.
+.PP
+.TP 10
+.BI M-^?
+(Meta-DEL) Delete previous word (if your interrupt character is
+.B ^?
+(DEL, the default) then this command will not work).
+.PP
+.TP 10
+.BI ^T
+Transpose current character with next character in
+.I emacs
+mode.
+Transpose two previous characters in
+.I gmacs
+mode.
+.PP
+.TP 10
+.BI ^C
+Capitalize current character.
+.PP
+.TP 10
+.BI M-C
+Capitalize current word.
+.PP
+.TP 10
+.BI ^K
+Kill from the cursor to the end of the line.
+If given a parameter of zero then kill from
+the start of line to the cursor.
+.PP
+.TP 10
+.BI ^W
+Kill from the cursor to the mark.
+.PP
+.TP 10
+.BI M-p
+Push the region from the cursor to the mark on the stack.
+.PP
+.TP 10
+.I kill
+(User defined kill character as defined
+by the stty command, usually
+.B ^G
+or
+.BR @ .)
+Kill the entire current line.
+If two
+.I kill
+characters are entered in succession, all
+kill characters from then on cause a line feed
+(useful when using paper terminals).
+.PP
+.TP 10
+.BI ^Y
+Restore last item removed from line. (Yank item back to the line.)
+.PP
+.TP 10
+.BI ^L
+Line feed and print current line.
+.PP
+.TP 10
+.BI ^@
+(Null character) Set mark.
+.PP
+.TP 10
+.BI M-
+(Meta space) Set mark.
+.PP
+.TP 10
+.BI ^J
+(New\ line) Execute the current line.
+.PP
+.TP 10
+.BI ^M
+(Return) Execute the current line.
+.PP
+.TP 10
+.I eof
+End-of-file character,
+normally
+.BR ^D ,
+will terminate the shell
+if the current line is null.
+.PP
+.TP 10
+.BI ^P
+Fetch previous command.
+Each time
+.B ^P
+is entered
+the previous command back in time is accessed.
+.PP
+.TP 10
+.BI M-<
+Fetch the least recent (oldest) history line.
+.PP
+.TP 10
+.BI M->
+Fetch the most recent (youngest) history line.
+.PP
+.TP 10
+.BI ^N
+Fetch next command.
+Each time
+.B ^N
+is entered
+the next command forward in time is accessed.
+.PP
+.TP 10
+.BI ^R string
+Reverse search history for a previous command line containing
+.IR string .
+If a parameter of zero is given the search is forward.
+.I String
+is terminated by a "RETURN" or "NEW\ LINE".
+.PP
+.TP 10
+.B ^O
+Operate \- Execute the current line and fetch
+the next line relative to current line from the
+history file.
+.PP
+.TP 10
+.BI M- digits
+(Escape) Define numeric parameter, the digits
+are taken as a parameter to the next command.
+The commands that accept a parameter are
+.BR ^F ,
+.BR ^B ,
+.IR erase ,
+.BR ^D ,
+.BR ^K ,
+.BR ^R ,
+.B ^P
+and
+.BR ^N .
+.PP
+.TP 10
+.BI M- letter
+Soft-key \- Your alias list is searched for an
+alias by the name
+.BI _ letter
+and if an alias of this name is defined, its
+value will be inserted on the line.
+The
+.I letter
+must not be one of the above meta-functions.
+.PP
+.TP 10
+.B M-_
+The last parameter of the previous command is inserted
+on the line.
+.PP
+.TP 10
+.B M-.
+The last parameter of the previous command is inserted
+on the line.
+.PP
+.TP 10
+.B M-*
+Attempt file name generation on the current word.
+.PP
+.TP 10
+.BI ^U
+Multiply parameter of next command by 4.
+.PP
+.TP 10
+.BI \e
+Escape next character.
+Editing characters, the user's erase, kill and
+interrupt (normally
+.B ^?
+)
+characters
+may be entered
+in a command line or in a search string if preceded by a
+.BR \e .
+The
+.B \e
+removes the next character's
+editing features (if any).
+.PP
+.TP 10
+.BI ^V
+Display version of the shell.
+.PD
+.SS Vi Editing Mode
+There are two typing modes.
+Initially, when you enter a command you are in the
+.I input\^
+mode.
+To edit, the user enters
+.I control\^
+mode by typing ESC (
+.B 033
+) and
+moves the cursor to the point needing correction and
+then inserts or deletes characters or words as needed.
+Most control commands accept an optional repeat
+.I count
+prior to the command.
+.P
+When in vi mode on most systems,
+canonical processing is initially enabled and the
+command will be echoed again if the speed is 1200 baud or greater and it
+contains any control characters or less than one second has elapsed
+since the prompt was printed.
+The ESC character terminates canonical processing for the remainder of the command
+and the user can than modify the command line.
+This scheme has the advantages of canonical processing with the type-ahead
+echoing of raw mode.
+.P
+If the option
+.B viraw\^
+is also set, the terminal will always have canonical processing
+disabled. This mode is implicit for systems that do not support two
+alternate end of line delimiters,
+and may be helpful for certain terminals.
+.SS "\ \ \ \ \ Input Edit Commands"
+.PP
+.RS
+By default the editor is in input mode.
+.PD 0
+.TP 10
+.I erase
+(User defined erase character as defined
+by the stty command, usually
+.B ^H
+or
+.BR # .)
+Delete previous character.
+.TP 10
+.BI ^W
+Delete the previous blank separated word.
+.TP 10
+.BI ^D
+Terminate the shell.
+.TP 10
+.BI ^V
+Escape next character.
+Editing characters, the user's erase or kill
+characters may be entered
+in a command line or in a search string if preceded by a
+.BR ^V .
+The
+.B ^V
+removes the next character's
+editing features (if any).
+.TP 10
+.BI \e
+Escape the next
+.I erase
+or
+.I kill
+character.
+.P
+.RE
+.SS "\ \ \ \ \ Motion Edit Commands"
+.RS
+These commands will move the cursor.
+.TP 10
+[\f2count\fP]\f3l\fP
+Cursor forward (right) one character.
+.TP 10
+[\f2count\fP]\f3w\fP
+Cursor forward one alpha-numeric word.
+.TP 10
+[\f2count\fP]\f3W\fP
+Cursor to the beginning of the next word that follows a blank.
+.TP 10
+[\f2count\fP]\f3e\fP
+Cursor to end of word.
+.TP 10
+[\f2count\fP]\f3E\fP
+Cursor to end of the current blank delimited word.
+.TP 10
+[\f2count\fP]\f3h\fP
+Cursor backward (left) one character.
+.TP 10
+[\f2count\fP]\f3b\fP
+Cursor backward one word.
+.TP 10
+[\f2count\fP]\f3B\fP
+Cursor to preceding blank separated word.
+.TP 10
+[\f2count\fP]\f3f\fP\f2c\fP
+Find the next character \fIc\fP in the current line.
+.TP 10
+[\f2count\fP]\f3F\fP\f2c\fP
+Find the previous character \fIc\fP in the current line.
+.TP 10
+[\f2count\fP]\f3t\fP\f2c\fP
+Equivalent to
+.B f
+followed by
+.BR h .
+.TP 10
+[\f2count\fP]\f3T\fP\f2c\fP
+Equivalent to
+.B F
+followed by
+.BR l .
+.TP 10
+.B ;
+Repeats the last single character find command,
+.BR f ,
+.BR F ,
+.BR t ,
+or
+.BR T .
+.TP 10
+.B ,
+Reverses the last single character find command.
+.TP 10
+.B 0
+Cursor to start of line.
+.TP 10
+.B ^
+Cursor to first non-blank character in line.
+.TP 10
+.B $
+Cursor to end of line.
+.RE
+.SS "\ \ \ \ \ Search Edit Commands"
+.RS
+These commands access your command history.
+.TP 10
+[\f2count\fP]\f3k\fP
+Fetch previous command.
+Each time
+.B k
+is entered
+the previous command back in time is accessed.
+.TP 10
+[\f2count\fP]\f3\-\fP
+Equivalent to
+.BR k .
+.TP 10
+[\f2count\fP]\f3j\fP
+Fetch next command.
+Each time
+.B j
+is entered
+the next command forward in time is accessed.
+.TP 10
+[\f2count\fP]\f3+\fP
+Equivalent to
+.BR j .
+.TP 10
+[\f2count\fP]\f3G\fP
+The command number
+.I count
+is fetched.
+The default is the least recent history command.
+.TP 10
+.BI / string
+Search backward through history for a previous command containing
+.IR string .
+.I String
+is terminated by a "RETURN" or "NEW\ LINE".
+If \fIstring\fP is null the previous string will be used.
+.TP 10
+.BI ? string
+Same as
+.B /
+except that search will be in the forward direction.
+.TP 10
+.B n
+Search for next match of the last pattern to
+.B /
+or
+.B ?
+commands.
+.TP 10
+.B N
+Search for next match of the last pattern to
+.B /
+or
+.BR ? ,
+but in reverse direction.
+Search history for the \fIstring\fP entered by the previous \fB/\fP command.
+.RE
+.SS "\ \ \ \ \ Text Modification Edit Commands"
+.RS
+These commands will modify the line.
+.TP 10
+.B a
+Enter input mode and enter text after the current character.
+.TP 10
+.B A
+Append text to the end of the line. Equivalent to
+.BR $a .
+.TP 10
+[\f2count\fP]\f3c\fP\f2motion\fP
+.TP 10
+\f3c\fP[\f2count\fP]\f2motion\fP
+Delete current character through the character
+.I motion
+moves the cursor to and enter input mode.
+If \fImotion\fP is
+.BR c ,
+the entire line will be deleted and
+input mode entered.
+.TP 10
+.B C
+Delete the current character through the end of line and enter input mode.
+Equivalent to
+.BR c$ .
+.TP 10
+.B S
+Equivalent to
+.BR cc .
+.TP 10
+.B D
+Delete the current character through the end of line.
+.TP 10
+[\f2count\fP]\f3d\fP\f2motion\fP
+.TP 10
+\f3d\fP[\f2count\fP]\f2motion\fP
+Delete current character through the character
+.I motion
+moves the cursor to. Equivalent to
+.BR d$ .
+If \fImotion\fP is
+.B d ,
+the entire line will be deleted.
+.TP 10
+.B i
+Enter input mode and insert text before the current character.
+.TP 10
+.B I
+Insert text before the beginning of the line. Equivalent to
+the two character sequence
+.BR ^i .
+.TP 10
+[\f2count\fP]\f3P\fP
+Place the previous text modification before the cursor.
+.TP 10
+[\f2count\fP]\f3p\fP
+Place the previous text modification after the cursor.
+.TP 10
+.B R
+Enter input mode and
+replace characters on the screen with characters you type overlay fashion.
+.TP 10
+.BI r c
+Replace the current character with
+.IR c .
+.TP 10
+[\f2count\fP]\f3x\fP
+Delete current character.
+.TP 10
+[\f2count\fP]\f3X\fP
+Delete preceding character.
+.TP 10
+[\f2count\fP]\f3.\fP
+Repeat the previous text modification command.
+.TP 10
+.B \(ap
+Invert the case of the current character and advance the cursor.
+.TP 10
+[\f2count\fP]\f3_\fP
+Causes the
+.I count\^
+word of the previous command to be appended and
+input mode entered.
+The last word is used
+if
+.I count\^
+is omitted.
+.TP 10
+.B *
+Causes an
+.B *
+to be appended to the current word and file name generation attempted.
+If no match is found,
+it rings the bell. Otherwise, the word is replaced
+by the matching pattern and input mode is entered.
+.RE
+.SS "\ \ \ \ \ Other Edit Commands"
+.RS
+Miscellaneous commands.
+.TP 10
+.B u
+Undo the last text modifying command.
+.TP 10
+.B U
+Undo all the text modifying commands performed on the line.
+.TP 10
+[\f2count\fP]\f3v\fP
+Returns the command
+.BI "fc \-e ${\s-1VISUAL\s+1:\-${\s-1EDITOR\s+1:\-vi}}" " count"
+in the input buffer.
+If
+.I count\^
+is omitted, then the current line is used.
+.TP 10
+.BI ^L
+Line feed and print current line.
+Has effect only in control mode.
+.TP 10
+.BI ^J
+(New\ line) Execute the current line, regardless of mode.
+.TP 10
+.BI ^M
+(Return) Execute the current line, regardless of mode.
+.TP 10
+.B \#
+Equivalent to
+\f3I#\fP\f2<cr>\fP.
+Useful for causing the current line to be
+inserted in the history without being executed.
+.RE
+.PD
+.SS Special Commands.
+The following simple-commands are executed in the shell process.
+Input/Output redirection is permitted.
+File descriptor 1 is the default output location.
+Parameter assignment lists preceding the command do not
+remain in effect when the command completes unless noted.
+.TP
+\f3:\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
+Parameter assignments remain in effect after the command completes.
+The command only expands parameters.
+A zero exit code is returned.
+.br
+.ne 2
+.TP
+\f3\|. \f2file\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
+Parameter assignments remain in effect after the command completes.
+Read and execute commands from
+.I file\^
+and return.
+The commands are executed in the current Shell environment.
+The search path
+specified by
+.B
+.SM PATH
+is used to find the directory containing
+.IR file .
+If any arguments
+.I arg\^
+are given,
+they become the positional parameters.
+Otherwise the positional parameters are unchanged.
+.TP
+\f3alias\fP \*(OK \f3\-tx\fP \*(CK \*(OK \f2name\fP\*(OK \f2=value\^\fP \*(CK .\|.\|. \*(CK
+.I Alias\^
+with no arguments prints the list of aliases
+in the form
+.I name=value\^
+on standard output.
+An
+.I alias\^
+is defined
+for each name whose
+.I value\^
+is given.
+A trailing space in
+.I value\^
+causes the next word to be checked for
+alias substitution.
+The
+.B \-t
+flag is used to set and list tracked aliases.
+The value of a tracked alias is the full pathname
+corresponding to the given
+.IR name .
+The value becomes undefined when the value of
+.SM
+.B PATH
+is reset but the aliases remained tracked.
+Without the
+.B \-t
+flag,
+for each
+.I name\^
+in the argument list
+for which no
+.I value\^
+is given, the name
+and value of the alias is printed.
+The
+.B \-x
+flag is used to set or print exported aliases.
+An exported alias is defined across sub-shell environments.
+Alias returns true unless a
+.I name\^
+is given for which no alias has been defined.
+.TP
+\f3bg\fP \*(OK \f3%\f2job\^\fP \*(CK
+This command is only built-in on systems that support job control.
+Puts the specified
+.I job\^
+into the background.
+The current job is put in the background
+if
+.I job\^
+is not specified.
+.TP
+\f3break\fP \*(OK \f2n\^\fP \*(CK
+Exit from the enclosing
+.BR for
+.BR while
+.BR until
+or
+.B select\^
+loop, if any.
+If
+.I n\^
+is specified then break
+.I n\^
+levels.
+.TP
+\f3continue\fP \*(OK \f2n\^\fP \*(CK
+Resume the next iteration of the enclosing
+.BR for
+.BR while
+.BR until
+or
+.B select\^
+loop.
+If
+.I n\^
+is specified then resume at the
+.IR n -th
+enclosing loop.
+.TP
+.PD 0
+\f3cd\fP \*(OK \f2arg\^\fP \*(CK
+.TP
+\f3cd\fP \f2old\^\fP \f2new\^\fP
+.PD
+This command can be in either of two forms.
+In the first form it
+changes the current directory to
+.IR arg .
+If
+.I arg\^
+is
+.B \-
+the directory is changed to the previous
+directory.
+The shell
+parameter
+.B
+.SM HOME
+is the default
+.IR arg .
+The parameter
+.SM
+.B PWD
+is set to the current directory.
+The shell parameter
+.B
+.SM CDPATH
+defines the search path for
+the directory containing
+.IR arg .
+Alternative directory names are separated by
+a colon
+.RB ( : ).
+The default path is
+.B <null>
+(specifying the current directory).
+Note that the current directory is specified by a null path name,
+which can appear immediately after the equal sign
+or between the colon delimiters anywhere else in the path list.
+If
+.I arg
+begins with a \f3/\fP then the search path
+is not used.
+Otherwise, each directory in the path is
+searched for
+.IR arg .
+.P
+The second form of
+.B cd
+substitutes the string
+.I new
+for the string
+.I old
+in the current directory name,
+.SM
+.B PWD
+and tries to change to this new directory.
+.P
+The
+.B cd\^
+command may not be executed by
+.I rsh\^.
+.TP
+\f3eval\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
+The arguments are read as input
+to the shell
+and the resulting command(s) executed.
+.TP
+\f3exec\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
+Parameter assignments remain in effect after the command completes.
+If
+.I arg\^
+is given,
+the command specified by
+the arguments is executed in place of this shell
+without creating a new process.
+Input/output arguments may appear and
+affect the current process.
+If no
+arguments are given
+the effect of this command is to
+modify file descriptors
+as prescribed by the input/output redirection list.
+In this case,
+any file descriptor numbers greater than 2 that are
+opened with this mechanism are closed when invoking
+another program.
+.TP
+\f3exit\fP \*(OK \f2n\^\fP \*(CK
+Causes the shell to exit
+with the exit status specified by
+.IR n .
+If
+.I n\^
+is omitted then the exit status is that of the last command executed.
+An end-of-file will also cause the shell to exit
+except for a
+shell which has the
+.I ignoreeof
+option (See
+.B set
+below) turned on.
+.TP
+\f3export\fP \*(OK \f2name\^\fP .\|.\|. \*(CK
+The given
+.IR name s
+are marked for automatic
+export to the
+.I environment\^
+of subsequently-executed commands.
+.TP
+.PD 0
+\f3fc\fP \*(OK \f3\-e \f2ename\^\fP \ \*(CK \*(OK \f3\-\f3nlr\^\f1 \*(CK \*(OK \f2first\^\fP \*(CK \*(OK \f2last\^\fP \*(CK
+.TP
+\f3fc \-e \-\fP \*(OK \f2old\fP\f3\=\fP\f2new\^\fP \*(CK \*(OK \f2command\^\fP \*(CK
+.PD
+In the first form,
+a range of commands from
+.I first\^
+to
+.I last\^
+is selected from the last
+.SM
+.B HISTSIZE
+commands that were typed at the terminal.
+The arguments
+.I first\^
+and
+.I last\^
+may be specified as a number or as a string.
+A string is used to locate the most recent command starting with
+the given string.
+A negative number is used as an offset to the current command number.
+If the flag
+.BR \-l ,
+is selected,
+the commands are listed on standard output.
+Otherwise, the editor program
+.I ename\^
+is invoked on a file containing these
+keyboard commands.
+If
+.I ename\^
+is not supplied, then the value of the parameter
+.SM
+.B FCEDIT
+(default /bin/ed)
+is used as the editor.
+When editing is complete, the edited command(s)
+is executed.
+.I last\^
+is not specified
+then it will be set to
+.IR first .
+If
+.I first\^
+is not specified
+the default is the previous command
+for editing and \-16 for listing.
+The flag
+.B \-r
+reverses the order of the commands and
+the flag
+.B \-n
+suppresses command numbers when listing.
+In the second form the
+.I command\^
+is re-executed after the substitution
+\f2old\^\fP\f3=\fP\f2new\^\fP
+is performed.
+.TP
+\f3fg\fP \*(OK \f3%\f2job\^\fP \*(CK
+This command is only built-in on systems that support job control.
+If
+.I job\^
+is specified it brings it to the foreground.
+Otherwise, the current job is
+brought into the foreground.
+.TP
+\f3jobs\fP \*(OK \f3\-l\^\fP \*(CK
+Lists the active jobs; given the
+.B \-l
+options lists process id's in addition to the normal information.
+.TP
+\f3kill\fP \*(OK \f3\-\f2sig\^\fP \*(CK \f2process\^\fP .\|.\|.
+Sends either the TERM (terminate) signal or the
+specified signal to the specified jobs or processes.
+Signals are either given by number or by names (as given in
+.I /usr/include/signal.h,
+stripped of the prefix ``SIG'').
+The signal names are listed by
+.BR "kill \-l'" .
+There is no default, saying just `kill' does not
+send a signal to the current job.
+If the signal being sent is TERM (terminate) or HUP (hangup),
+then the job or process will be sent a CONT (continue) signal
+if it is stopped.
+The argument
+.I process\^
+can be either a process id or a job.
+.TP
+\f3let\fP \f2arg\^\fP .\|.\|.
+Each
+.I arg
+is an
+.IR "arithmetic expression"
+to be evaluated.
+All calculations are done as long
+integers and no check for overflow
+is performed.
+Expressions consist of constants,
+named parameters, and operators.
+The following set of operators,
+listed in order of decreasing precedence,
+have been implemented:
+.RS
+.PD 0
+.TP
+.B \-
+unary minus
+.TP
+.B !
+logical negation
+.TP
+.B "* / %"
+.br
+multiplication, division, remainder
+.TP
+.B "+ \-"
+addition, subtraction
+.TP
+.B "<= >= < >"
+.br
+comparison
+.TP
+.B "== !="
+.br
+equality inequality
+.TP
+.B =
+arithmetic replacement
+.PD
+.PP
+Sub-expressions in parentheses
+.B (\|)
+are evaluated first and can be used
+to override the above precedence rules.
+The evaluation within a precedence group
+is from right to left for the
+.B =
+operator
+and from left to right for the others.
+.PP
+A parameter name must be a valid
+.IR identifier .
+When a parameter is encountered,
+the value associated with the
+parameter name is substituted and expression evaluation resumes.
+Up to nine levels of recursion are
+permitted.
+.PP
+The return code is
+0 if the value of the last expression
+is non-zero, and 1 otherwise.
+.RE
+.TP
+\f3newgrp\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
+Equivalent to
+.BI "exec newgrp" " arg\^"
+\&.\|.\|.\^.
+.TP
+\f3print\fP \*(OK \f3\-Rnprsu\^\fP\*(OK\f2n\fP \*(CK \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
+The shell output mechanism.
+With no flags or with flag
+.BR \- ,
+the arguments are printed
+on standard output as described by
+.IR echo (1).
+In raw mode,
+.B \-R
+or
+.BR \-r ,
+the escape conventions of
+.I echo
+are ignored.
+The
+.B \-R
+option will print all subsequent arguments and options
+other than
+.BR \-n .
+The
+.B \-p
+option causes the
+arguments to be written onto the pipe
+of the process spawned with
+.B \(bv&
+instead of standard output.
+The
+.B \-s
+option causes the
+arguments to be written onto the history file
+instead of standard output.
+The
+.B \-u
+flag can be used to specify a one digit
+file descriptor unit number
+.B n\^
+on which the
+output will be placed.
+The default is 1.
+If the flag
+.B \-n
+is used, no
+.B new-line\^
+is added to the output.
+.TP
+\f3read\fP \*(OK \f3\-prsu\^\fP\*(OK \f2n\^\fP \*(CK \*(CK \*(OK \f2name\f3?\f2prompt\^\f1 \*(CK \*(OK \f2name\^\fP .\|.\|. \*(CK
+The shell input mechanism.
+One line is read and
+is broken up into words using the characters in
+.B
+.SM IFS
+as separators.
+In raw mode,
+.B \-r,
+a
+.B \e
+at the end of a line does not signify
+line continuation.
+The first
+word is assigned to the first
+.IR name ,
+the second word
+to the second
+.IR name ,
+etc., with leftover words assigned to the last
+.IR name .
+The
+.B \-p
+option causes the input line
+to be taken from the input pipe
+of a process spawned by the shell
+using
+.BR \(bv& .
+If the
+.B \-s
+fag is present,
+the input will be saved as a command in the history file.
+The flag
+.B \-u
+can be used to specify a one digit file
+descriptor unit to read from.
+The file descriptor can be opened with the
+.B exec\^
+special command.
+The default value of
+.I n\^
+is 0.
+If
+.IR name
+is omitted then
+.SM
+.B REPLY
+is used as the default
+.IR name.
+The return code is 0 unless an end-of-file is encountered.
+An end-of-file with the
+.B \-p
+option causes cleanup for this process
+so that another can be spawned.
+If the first argument contains a
+.BR ? ,
+the remainder of this word is used as a
+.I prompt\^
+when the shell is interactive.
+If the given file descriptor is open for writing
+and is a terminal device then the prompt is placed
+on this unit.
+Otherwise the prompt is issued on file descriptor 2.
+The return code is 0 unless an end-of-file is encountered.
+.TP
+\f3readonly\fP \*(OK \f2name\fP .\|.\|. \*(CK
+The given
+.IR names
+are marked
+readonly and these
+names cannot be changed
+by subsequent assignment.
+.TP
+\f3return\fP \*(OK \f2n\^\fP \*(CK
+Causes a shell
+.I function
+to return
+to the invoking script
+with the return status specified by
+.IR n .
+If
+.I n\^
+is omitted then the return status is that of the last command executed.
+If
+.B return
+is invoked while not in a
+.I function
+then it is the same as an
+.BR exit .
+.TP
+\f3set\fP \*(OK \f3\-aefhkmnostuvx\fP \*(CK \*(OK \f3\-o\fP \f2option\^\fP .\|.\|. \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
+The flags for this command have meaning as follows:
+.RS
+.PD 0
+.TP 8
+.B \-a
+All subsequent parameters that are defined are automatically exported.
+.TP 8
+.B \-e
+If the shell is non-interactive and if a command fails,
+execute the
+.SM
+.B ERR
+trap, if set,
+and exit immediately.
+This mode is disabled while reading profiles.
+.TP 8
+.B \-f
+Disables file name generation.
+.TP 8
+.B \-h
+Each command whose name is an
+.I identifier\^
+becomes a tracked alias when first encountered.
+.TP 8
+.B \-k
+All parameter assignment arguments are placed in the environment for a command,
+not just those that precede the command name.
+.TP 8
+.B \-m
+Background jobs will run in a separate process group
+and a line will print upon completion.
+The exit status of background jobs is reported in a completion message.
+On systems with job control,
+this flag is turned on automatically for
+interactive shells.
+.TP 8
+.B \-n
+Read commands but do not execute them.
+.TP 8
+.B \-o
+The following argument can be one of the following option names:
+.RS
+.TP 8
+.B allexport
+Same as
+.BR \-a .
+.TP 8
+.B errexit
+Same as
+.BR \-e .
+.TP 8
+.B emacs
+Puts you in an
+.I emacs
+style in-line editor for command entry.
+.TP 8
+.B gmacs
+Puts you in a
+.I gmacs
+style in-line editor for command entry.
+.TP 8
+.B ignoreeof
+The shell will not exit on end-of-file.
+The command
+.B exit
+must be used.
+.TP 8
+.B keyword
+Same as
+.BR \-k .
+.TP 8
+.B markdirs
+All directory names resulting from file name generation have a trailing
+.B /
+appended.
+.TP 8
+.B monitor
+Same as
+.BR \-m .
+.TP 8
+.B noexec
+Same as
+.BR \-n .
+.TP 8
+.B noglob
+Same as
+.BR \-f .
+.TP 8
+.B nounset
+Same as
+.BR \-u .
+.TP 8
+.B verbose
+Same as
+.BR \-v .
+.TP 8
+.B trackall
+Same as
+.BR \-h .
+.TP 8
+.B vi
+Puts you in insert mode of a
+.I vi\^
+style in-line editor
+until you hit escape character
+.BR 033 .
+This puts you in move mode.
+A return sends the line.
+.TP 8
+.B viraw
+Each character is processed as it is typed
+in
+.I vi\^
+mode.
+.TP 8
+.B xtrace
+Same as
+.BR \-x .
+.TP 8
+
+If no option name is supplied then the current option settings are printed.
+.RE
+.TP 8
+.B \-s
+Sort the positional parameters.
+.TP 8
+.B \-t
+Exit after reading and executing one command.
+.TP 8
+.B \-u
+Treat unset parameters as an error when substituting.
+.TP 8
+.B \-v
+Print shell input lines as they are read.
+.TP 8
+.B \-x
+Print commands and their arguments as they are executed.
+.TP 8
+.B \-
+Turns off
+.B \-x
+and
+.B \-v
+flags and stops examining arguments for flags.
+.TP 8
+.B \-\-
+Do not change any of the flags; useful in setting
+.B $1
+to a value beginning with
+.BR \- .
+If no arguments follow this flag then the positional parameters are unset.
+.PD
+.PP
+Using
+.B \+
+rather than
+.B \-
+causes these flags to be turned off.
+These flags can also be used upon invocation of the shell.
+The current set of flags may be found in
+.BR $\- .
+The remaining arguments are positional
+parameters and are assigned, in order,
+.if t to\p
+.if n to
+.BR $1 ,
+.BR $2 ,
+\&.\|.\|.\^.
+If no arguments are given then the values
+of all names are printed on the standard output.
+.RE
+.TP
+\f3shift\fP \*(OK \f2n\^\fP \*(CK
+.br
+The positional parameters from
+\f3$\fP\f2n\fP\f3+1\fP
+\&.\|.\|.
+are renamed
+.B $1
+\&.\|.\|.\^
+, default
+.I n\^
+is 1.
+The parameter
+.I n\^
+can be any arithmetic expression that evaluates to a non-negative
+number less than or equal to
+.BR $# .
+.TP
+\f3test\fP \*(OK \f2expr\^\fP \*(CK
+.br
+Evaluate conditional expression
+.IR expr .
+See
+.IR test (1)
+for usage and description.
+The arithmetic comparison operators
+are not restricted to integers.
+They allow any arithmetic expression.
+Four additional primitive expressions are allowed:
+.RS
+.PD 0
+.TP
+\f3\-L\fP \f2file\^\fP
+True if
+.I file\^
+is a symbolic link.
+.TP
+\f2file1\^\fP \f3\-nt\fP \f2file2\^\fP
+True if
+.I file1\^
+is newer than
+.IR file2 .
+.TP
+\f2file1\^\fP \f3\-ot\fP \f2file2\^\fP
+True if
+.I file1\^
+is older than
+.IR file2 .
+.TP
+\f2file1\^\fP \f3\-ef\fP \f2file2\^\fP
+True if
+.I file1\^
+has the same device and i-node number as
+.IR file2 .
+.PD
+.RE
+.TP
+\f3times\fP
+.br
+Print the accumulated user and system times for
+the shell and for processes
+run from the shell.
+.TP
+\f3trap\fP \*(OK \f2arg\^\fP \*(CK \*(OK \f2sig\^\fP \*(CK .\|.\|.
+.I arg\^
+is a command to be read and executed when the shell
+receives signal(s)
+.IR sig .
+(Note that
+.I arg\^
+is scanned once when
+the trap is set and once when the trap
+is taken.)
+Each
+.I sig\^
+can be given as a number or as the name of the signal.
+Trap commands are executed in order of signal number.
+Any attempt to set a trap on a signal that
+was ignored on entry to the current shell
+is ineffective.
+An attempt to trap on signal 11 (memory fault) produces an error.
+If
+.I arg\^
+is omitted or is
+.BR \- ,
+then all trap(s)
+.I sig\^
+are reset
+to their original values.
+If
+.I arg\^
+is the null
+string then this signal is ignored by the shell and by the commands
+it invokes.
+If
+.I sig\^
+is
+.SM
+.B ERR
+then
+.I arg\^
+will be executed whenever a command has a non-zero exit code.
+This trap is not inherited by functions.
+If
+.I sig\^
+is
+.B 0
+or
+.SM
+.B EXIT
+and the
+.B trap
+statement is executed inside the body of a function,
+then the command
+.I arg\^
+is executed
+after the function completes.
+If
+.I sig\^
+is
+.B 0
+or
+.SM
+.B EXIT
+for a
+.B trap
+set outside any function
+then the command
+.I arg\^
+is executed
+on exit from the shell.
+The
+.B trap
+command
+with no arguments prints a list
+of commands associated with each signal number.
+.TP
+\f3typeset\fP \*(OK \f3\-FLRZefilprtux\^\fP\*(OK\f2n\fP \*(CK \*(OK \f2name\fP\*(OK \f2=value\^\fP \*(CK \^ \*(CK .\|.\|. \*(CK
+Parameter assignments remain in effect after the command completes.
+When invoked inside a function,
+a new instance of the parameter
+.I name\^
+is created.
+The parameter value and type are restored
+when the function completes.
+The following list of attributes may be specified:
+.RS
+.PD 0
+.TP
+.B \-F
+This flag provides UNIX to host-name file mapping on non-UNIX
+machines.
+.TP
+.B \-L
+Left justify and remove leading blanks from
+.IR value .
+If
+.I n
+is non-zero it defines the width
+of the field,
+otherwise it is determined by the width of the value of
+first assignment.
+When the parameter is assigned to, it is
+filled on the right with blanks or truncated, if necessary, to
+fit into the field.
+Leading zeros are removed if the
+.B \-Z
+flag is also set.
+The
+.B \-R
+flag is turned off.
+.TP
+.B \-R
+Right justify and fill with leading blanks.
+If
+.I n
+is non-zero it defines the width
+of the field,
+otherwise it is determined by the width of the value of
+first assignment.
+The field is left filled with blanks or
+truncated from the end if the
+parameter is reassigned.
+The
+.B L
+flag is turned off.
+.TP
+.B \-Z
+Right justify and fill with leading zeros if
+the first non-blank character is a digit and the
+.B \-L
+flag has not been set.
+If
+.I n
+is non-zero it defines the width
+of the field,
+otherwise it is determined by the width of the value of
+first assignment.
+.TP
+.B \-e
+Tag the parameter as having an error.
+This tag is currently unused by the shell and can be
+set or cleared by the user.
+.TP
+.B \-f
+The names refer to function names rather than
+parameter names.
+No assignments can be made and the only other
+valid flag is
+.BR \-x .
+.TP
+.B \-i
+Parameter is an integer.
+This makes arithmetic faster.
+If
+.I n
+is non-zero it defines the output arithmetic base,
+otherwise the first assignment determines the output base.
+.TP
+.B \-l
+All upper-case characters
+converted to lower-case.
+The upper-case flag,
+.B \-u
+is turned off.
+.TP
+.B \-p
+The output of this command, if any, is written onto the two-way pipe
+.TP
+.B \-r
+The given
+.IR names
+are marked
+readonly and these
+names cannot be changed
+by subsequent assignment.
+.TP
+.B \-t
+Tags the named parameters.
+Tags are user definable and have no special
+meaning to the shell.
+.TP
+.B \-u
+All lower-case characters are converted
+to upper-case characters.
+The lower-case flag,
+.B \-l
+is turned off.
+.TP
+.B \-x
+The given
+.IR name s
+are marked for automatic
+export to the
+.I environment\^
+of subsequently-executed commands.
+.PD
+.PP
+Using
+.B \+
+rather than
+.B \-
+causes these flags to be turned off.
+If no
+.I name\^
+arguments are given but flags are specified,
+a list of
+.I names\^
+(and optionally the
+.I values\^
+)
+of the
+.I parameters\^
+which have these
+flags set
+is printed.
+(Using
+.B \+
+rather than
+.B \-
+keeps the
+values to be printed.)
+If no
+.IR name s
+and flags
+are given,
+the
+.I names\^
+and
+.I attributes\^
+of all
+.I parameters\^
+are printed.
+.RE
+.TP
+\f3ulimit\fP \*(OK \f3\-cdfmpt\fP \*(CK \*(OK \f2n\^\fP \*(CK
+.RS
+.PD 0
+.TP
+.B \-c
+imposes a size limit of
+.I n\^
+blocks on the size of core dumps
+(\s-1BSD\s+1 only).
+.TP
+.B \-d
+imposes a size limit of
+.I n\^
+blocks on the size of the data area
+(\s-1BSD\s+1 only).
+.TP
+.B \-f
+imposes a size limit of
+.I n\^
+blocks on files written by child processes (files of any size may be read).
+.TP
+.B \-m
+imposes a soft limit of
+.I n\^
+blocks on the size of physical memory
+(\s-1BSD\s+1 only).
+.TP
+.B \-p
+changes the pipe size to
+.I n\^
+(\s-1UNIX\s+1/\s-1RT\s+1 only).
+.TP
+.B \-t
+imposes a time limit of
+.I n\^
+seconds to be used by each process
+(\s-1BSD\s+1 only).
+.PD
+.PP
+If no option is given,
+.B \-f
+is assumed.
+If
+.I n\^
+is not given the current limit is printed.
+.RE
+.TP
+\f3umask\fP \*(OK \f2nnn\^\fP \*(CK
+The user file-creation mask is set to
+.I nnn\^
+(see
+.IR umask (2)).
+If
+.I nnn\^
+is omitted, the current value of the mask is printed.
+.TP
+\f3unalias\fP \f2name\^\fP .\|.\|.
+The
+.IR
+parameters
+given by the list of
+.IR name s
+are removed from the
+.I alias\^
+list.
+.TP
+\f3unset\fP \*(OK \f3\-f\fP \*(CK \f2name\^\fP .\|.\|.
+The parameters given by the list of
+.IR name s
+are unassigned,
+i. e.,
+their values and attributes are erased.
+Readonly variables cannot be unset.
+If the flag,
+.BR \-f ,
+is set, then the names refer to
+.I function\^
+names.
+.TP
+\f3wait\fP \*(OK \f2n\^\fP \*(CK
+Wait for the specified process and
+report its termination status.
+If
+.I n\^
+is not given then all currently active child processes are waited for.
+The return code from this command is that of
+the process waited for.
+.TP
+\f3whence\fP \*(OK \f3\-v\fP \*(CK \f2name\^\fP .\|.\|.
+For each
+.IR name ,
+indicate how it
+would be interpreted if used as a command name.
+.P
+The flag,
+.BR \-v ,
+produces a more verbose report.
+.SS Invocation.
+If the shell is invoked by
+.IR exec (2),
+and the first character of argument zero
+.RB ( $0 )
+is
+.BR \- ,
+then the shell is assumed to be a
+.I login
+shell and
+commands are read from
+.B /etc/profile
+and then from either
+.B .profile
+in the current directory or
+.BR \s-1$HOME\s+1/.profile ,
+if either file exists.
+Next, commands are read from
+the file named by
+performing parameter substitution on
+the value of the environment parameter
+.SM
+.B ENV
+if the file exists.
+Commands are then read as described below;
+the following flags are interpreted by the shell
+when it is invoked:
+.PP
+.PD 0
+.TP 10
+.BI \-c "\| string\^"
+If the
+.B \-c
+flag is present then
+commands are read from
+.IR string .
+.TP
+.B \-s
+If the
+.B \-s
+flag is present or if no
+arguments remain
+then commands are read from the standard input.
+Shell output,
+except for the output of some of the
+.I Special commands\^
+listed above,
+is written to
+file descriptor 2.
+.TP
+.B \-i
+If the
+.B \-i
+flag is present or
+if the shell input and output are attached to a terminal (as told by
+.IR gtty (2))
+then this shell is
+.IR interactive .
+In this case \s-1TERMINATE\s+1 is ignored (so that \f3kill 0\fP
+does not kill an interactive shell) and \s-1INTERRUPT\s+1 is caught and ignored
+(so that
+.B wait
+is interruptible).
+In all cases, \s-1QUIT\s+1 is ignored by the shell.
+.TP
+.B \-r
+If the
+.B \-r
+flag is present the shell is a restricted shell.
+.PD
+.PP
+The remaining flags and arguments are described under the
+.B set
+command above.
+.SS Rsh Only.
+.I Rsh
+is used to set up login names and execution environments whose
+capabilities are more controlled than those of the standard shell.
+The actions of
+.I rsh\^
+are identical to those of
+.IR sh ,
+except that the following are disallowed:
+.RS
+.PD 0
+.PP
+changing directory (see
+.IR cd (1)),
+.br
+setting the value of
+.SM
+.B SHELL
+or
+.SM
+.BR PATH\*S,
+.br
+specifying path or
+command names containing
+.BR / ,
+.br
+redirecting output
+.RB ( >
+and
+.BR >> ).
+.PD
+.RE
+.PP
+The restrictions above are enforced
+after \f3.profile\fP and the
+.SM
+.B ENV
+files are interpreted.
+.PP
+When a command to be executed is found to be a shell procedure,
+.I rsh\^
+invokes
+.I sh\^
+to execute it.
+Thus, it is possible to provide to the end-user shell procedures
+that have access to the full power of
+the standard shell,
+while imposing a limited menu of commands;
+this scheme assumes that the end-user does not have write and
+execute permissions in the same directory.
+.PP
+The net effect of these rules is that the writer of the
+.B .profile
+has complete control over user actions,
+by performing guaranteed setup actions
+and leaving the user in an appropriate directory
+(probably
+.I not\^
+the login directory).
+.PP
+The system administrator often sets up a directory
+of commands
+(i.e.,
+.BR /usr/rbin )
+that can be safely invoked by
+.IR rsh .
+Some systems also provide a restricted editor
+.IR red .
+.SH EXIT STATUS
+Errors detected by the shell, such as syntax errors,
+cause the shell
+to return a non-zero exit status.
+If the shell is being used non-interactively
+then execution of the shell file is abandoned.
+Otherwise, the shell returns the exit status of
+the last command executed (see also the
+.B exit
+command above).
+.SH FILES
+/etc/passwd
+.br
+/etc/profile
+.br
+\s-1$HOME\s+1/\f3.\fPprofile
+.br
+/tmp/sh\(**
+.br
+/dev/null
+.SH SEE ALSO
+cat(1),
+cd(1),
+echo(1),
+emacs(1),
+env(1),
+gmacs(1),
+newgrp(1),
+test(1),
+umask(1),
+vi(1),
+dup(2),
+exec(2),
+fork(2),
+gtty(2),
+pipe(2),
+signal(2),
+umask(2),
+ulimit(2),
+wait(2),
+rand(3),
+a.out(5),
+profile(5),
+environ(7).
+.SH CAVEATS
+.PP
+If a command which is a
+.I "tracked alias"
+is executed, and then a command with the same name is
+installed in a directory in the search path before the directory where the
+original command was found, the shell will continue to
+.I exec\^
+the original command.
+Use the
+.B \-t
+option of the
+.B alias\^
+command to correct this situation
+.PP
+If you move the current directory or one above it,
+.B pwd\^
+may not give the correct response.
+Use the
+.B cd\^
+command with a full path name
+to correct this situation.
+.PP
+Some very old shell scripts contain a
+.B ^
+as a synonym for the pipe character
+.BR \(bv .