Annotation of researchv10dc/man/manb/ksh.1, revision 1.1

1.1     ! root        1: .ds OK [\|
        !             2: .ds CK \|]
        !             3: .ds ' \s+4\[email protected]@\'\[email protected]@\s-4
        !             4: .ds ` \s+4\[email protected]@\`\[email protected]@\s-4
        !             5: .de P
        !             6: .br
        !             7: ..
        !             8: .TH KSH 1
        !             9: .SH NAME
        !            10: ksh \- Korn shell, the not standard command programming language
        !            11: .SH SYNOPSIS
        !            12: .B ksh
        !            13: [
        !            14: .B \-acefhikmnorstuvx
        !            15: ] [
        !            16: .B \-o
        !            17: option ] .\|.\|.
        !            18: [ arg  .\|.\|. ]
        !            19: .br
        !            20: .SH DESCRIPTION
        !            21: .I Ksh\^
        !            22: is a command programming language
        !            23: that executes commands read from a terminal
        !            24: or a file.
        !            25: .I Rsh\^
        !            26: is a restricted version of the standard command interpreter
        !            27: .IR sh ;
        !            28: it is used to set up login names and execution environments whose
        !            29: capabilities are more controlled than those of the standard shell.
        !            30: See
        !            31: .I Invocation\^
        !            32: below
        !            33: for the meaning of arguments to the shell.
        !            34: .SS Definitions.
        !            35: A
        !            36: .I metacharacter\^
        !            37: is one of the following characters:
        !            38: .RS
        !            39: .PP
        !            40: \f3;   &   (   )   \(bv   <   >   new-line   space   tab\fP
        !            41: .RE
        !            42: .PP
        !            43: A
        !            44: .I blank\^
        !            45: is a
        !            46: .B tab
        !            47: or a
        !            48: .BR space .
        !            49: An
        !            50: .I identifier\^
        !            51: is a sequence of letters, digits, or underscores
        !            52: starting with a letter or underscore.
        !            53: Identifiers are used as names for
        !            54: .IR aliases ,
        !            55: .IR functions ,
        !            56: and
        !            57: .IR "named parameters" .
        !            58: A
        !            59: .I word\^
        !            60: is a sequence of
        !            61: .I characters\^
        !            62: separated by one or more non-quoted
        !            63: .IR metacharacters .
        !            64: .SS Commands.
        !            65: A
        !            66: .I simple-command\^
        !            67: is a sequence of
        !            68: .I blank\^
        !            69: separated words
        !            70: which may be preceded by a parameter assignment list.
        !            71: (See
        !            72: .I Environment\^
        !            73: below).
        !            74: The first word specifies the name of the command to
        !            75: be executed.
        !            76: Except as specified below,
        !            77: the remaining words are passed as arguments
        !            78: to the invoked command.
        !            79: The command name is passed as argument 0
        !            80: (see
        !            81: .IR exec (2)).
        !            82: The
        !            83: .I value\^
        !            84: of a simple-command is its exit status
        !            85: if it terminates normally, or (octal) 200+\f2status\^\fP if
        !            86: it terminates abnormally (see
        !            87: .IR signal (2)
        !            88: for a list of
        !            89: status values).
        !            90: .PP
        !            91: A
        !            92: .I pipeline\^
        !            93: is a sequence of one or more
        !            94: .I commands\^
        !            95: separated by
        !            96: .BR \(bv .
        !            97: The standard output of each command but the last
        !            98: is connected by a
        !            99: .IR pipe (2)
        !           100: to the standard input of the next command.
        !           101: Each command is run as a separate process;
        !           102: the shell waits for the last command to terminate.
        !           103: The exit status of a pipeline is the exit
        !           104: status of the last command.
        !           105: .PP
        !           106: A
        !           107: .I list\^
        !           108: is a sequence of one or more
        !           109: pipelines
        !           110: separated by
        !           111: .BR ; ,
        !           112: .BR & ,
        !           113: .BR && ,
        !           114: or
        !           115: .BR \(bv\|\(bv ,
        !           116: and optionally terminated by
        !           117: .BR ; ,
        !           118: .BR & ,
        !           119: or
        !           120: .BR \(bv& .
        !           121: Of these five symbols,
        !           122: .BR ; ,
        !           123: .BR & ,
        !           124: and
        !           125: .BR \(bv&
        !           126: have equal precedence,
        !           127: which is lower than that of
        !           128: .B &&
        !           129: and
        !           130: .BR \(bv\|\(bv .
        !           131: The symbols
        !           132: .B &&
        !           133: and
        !           134: .B \(bv\|\(bv
        !           135: also have equal precedence.
        !           136: A semicolon
        !           137: .RB ( ; )
        !           138: causes sequential execution of the preceding pipeline; an ampersand
        !           139: .RB ( & )
        !           140: causes asynchronous execution of the preceding pipeline (i.e., the shell does
        !           141: .I not\^
        !           142: wait for that pipeline to finish).
        !           143: The symbol
        !           144: .B \(bv&
        !           145: causes asynchronous execution of the preceding command or pipeline
        !           146: with a two-way pipe established to the parent shell.
        !           147: The standard input and output of the spawned command
        !           148: can be written to and read from by the parent Shell
        !           149: using the
        !           150: .B \-p
        !           151: option of
        !           152: the special commands
        !           153: .B read
        !           154: and
        !           155: .B print\^
        !           156: described later.
        !           157: Only one such command can be active
        !           158: at any given time.
        !           159: The symbol
        !           160: .B &&
        !           161: .RB (\| \(bv\|\(bv \^)
        !           162: causes the
        !           163: .I list\^
        !           164: following it to be executed only if the preceding
        !           165: pipeline
        !           166: returns a zero (non-zero) value.
        !           167: An arbitrary number of new-lines may appear in a
        !           168: .I list,\^
        !           169: instead of semicolons,
        !           170: to delimit commands.
        !           171: .PP
        !           172: A
        !           173: .I command\^
        !           174: is either a simple-command
        !           175: or one of the following.
        !           176: Unless otherwise stated,
        !           177: the value returned by a command is that of the
        !           178: last simple-command executed in the command.
        !           179: .TP
        !           180: \f3for\fP \f2identifier\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3do\fP \f2list\^\fP \f3done\fP
        !           181: Each time a
        !           182: .B for
        !           183: command is executed,
        !           184: .I identifier\^
        !           185: is set to the next
        !           186: .I word\^
        !           187: taken from the
        !           188: .B in
        !           189: .I word\^
        !           190: list.
        !           191: If
        !           192: .BI in " word\^"
        !           193: \&.\|.\|.
        !           194: is omitted, then
        !           195: the
        !           196: .B for
        !           197: command executes the \f3do\fP \f2list\^\fP once for each positional parameter
        !           198: that is set
        !           199: (see
        !           200: .I "Parameter Substitution\^"
        !           201: below).
        !           202: Execution ends when there are no more words in the list.
        !           203: .TP
        !           204: \f3select\fP \f2identifier\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3do\fP \f2list\^\fP \f3done\fP
        !           205: A
        !           206: .B select
        !           207: command prints on standard error (file descriptor 2), the set of
        !           208: .IR word s,
        !           209: each preceded by a number.
        !           210: If
        !           211: .BI in " word\^"
        !           212: \&.\|.\|.
        !           213: is omitted, then
        !           214: the
        !           215: positional parameters
        !           216: are used instead
        !           217: (see
        !           218: .I "Parameter Substitution\^"
        !           219: below).
        !           220: The
        !           221: .SM
        !           222: .B PS3
        !           223: prompt is printed
        !           224: and a line is read from the standard input.
        !           225: If this line consists of the number
        !           226: of one of the listed
        !           227: .BR word s,
        !           228: then the value of the parameter
        !           229: .I identifier\^
        !           230: is set to the
        !           231: .I word\^
        !           232: corresponding to this number.
        !           233: If this line is empty the selection list is
        !           234: printed again.
        !           235: Otherwise the value of the parameter
        !           236: .I identifier\^
        !           237: is set to
        !           238: .BR null .
        !           239: The contents of the line read from standard input is
        !           240: saved in
        !           241: the parameter
        !           242: .SM
        !           243: .BR REPLY.
        !           244: The
        !           245: .I list\^
        !           246: is executed for each selection until a
        !           247: .B break\^
        !           248: or
        !           249: .I end-of-file\^
        !           250: is encountered.
        !           251: .TP
        !           252: \f3case\fP \f2word\^\fP \f3in\fP \*(OK \f2pattern\^\fP \*(OK \(bv \
        !           253: \f2pattern\^\fP \*(CK .\|.\|. \f3)\fP \f2list\^\fP \f3;;\fP \*(CK .\|.\|. \f3esac\fP
        !           254: A
        !           255: .B case
        !           256: command executes the
        !           257: .I list\^
        !           258: associated with the first
        !           259: .I pattern\^
        !           260: that matches
        !           261: .IR word .
        !           262: The form of the patterns is
        !           263: the same as that used for
        !           264: file-name generation (see 
        !           265: .I "File Name Generation\^"
        !           266: below).
        !           267: .TP
        !           268: \f3if\fP \f2list\^\fP \f3then\fP \f2list\^\fP \*(OK \
        !           269: \f3elif\fP \f2list\^\fP \f3then\fP \f2list\^\fP \*(CK .\|.\|. \
        !           270: \*(OK \f3else\fP \f2list\^\fP \*(CK \f3f\&i\fP
        !           271: The
        !           272: .I list\^
        !           273: following \f3if\fP is executed and,
        !           274: if it
        !           275: returns a zero exit status, the
        !           276: .I list\^
        !           277: following
        !           278: the first
        !           279: .B then
        !           280: is executed.
        !           281: Otherwise, the
        !           282: .I list\^
        !           283: following \f3elif\fP
        !           284: is executed and, if its value is zero,
        !           285: the
        !           286: .I list\^
        !           287: following
        !           288: the next
        !           289: .B then
        !           290: is executed.
        !           291: Failing that, the
        !           292: .B else
        !           293: .I list\^
        !           294: is executed.
        !           295: If no
        !           296: .B else
        !           297: .I list\^
        !           298: or
        !           299: .B then
        !           300: .I list\^
        !           301: is executed, then the
        !           302: .B if
        !           303: command returns a zero exit status.
        !           304: .TP
        !           305: .PD 0
        !           306: \f3while\fP \f2list\^\fP \f3do\fP \f2list\^\fP \f3done\fP
        !           307: .TP
        !           308: \f3until\fP \f2list\^\fP \f3do\fP \f2list\^\fP \f3done\fP
        !           309: .PD
        !           310: A
        !           311: .B while
        !           312: command repeatedly executes the
        !           313: .B while
        !           314: .I list\^
        !           315: and, if the exit status of the last command in the list is zero, executes
        !           316: the
        !           317: .B do
        !           318: .IR list ;
        !           319: otherwise the loop terminates.
        !           320: If no commands in the
        !           321: .B do
        !           322: .I list\^
        !           323: are executed, then the
        !           324: .B while
        !           325: command returns a zero exit status;
        !           326: .B until
        !           327: may be used in place of
        !           328: .B while
        !           329: to negate
        !           330: the loop termination test.
        !           331: .TP
        !           332: \f3(\fP\f2list\^\fP\f3)\fP
        !           333: .br
        !           334: Execute
        !           335: .I list\^
        !           336: in a separate environment.
        !           337: Note, that if two adjacent open parentheses are
        !           338: needed for nesting, a space must be inserted to avoid
        !           339: arithmetic evaluation as described below.
        !           340: .TP
        !           341: \f3{ \fP\f2list\^\fP\f3;}\fP
        !           342: .br
        !           343: .I list\^
        !           344: is simply executed.
        !           345: Note that
        !           346: .B {
        !           347: is a
        !           348: .I keyword\^
        !           349: and requires a blank
        !           350: in order to be recognized.
        !           351: .TP
        !           352: .PD 0
        !           353: \f3function\fP \f2identifier\^\fP  \f3{\fP \f2list\^\fP \f3;}\fP
        !           354: .TP
        !           355: \f2identifier\^\fP  \f3() {\fP \f2list\^\fP \f3;}\fP
        !           356: .PD
        !           357: Define a function which is referenced by
        !           358: .IR identifier .
        !           359: The body of the function is the
        !           360: .I list\^
        !           361: of commands between
        !           362: .B {
        !           363: and
        !           364: .BR } .
        !           365: (See
        !           366: .I Functions\^
        !           367: below).
        !           368: .TP
        !           369: \f3time \fP\f2pipeline\^\fP
        !           370: .br
        !           371: The
        !           372: .I pipeline\^
        !           373: is executed and the elapsed time as well as
        !           374: the user and system time are printed on standard error.
        !           375: .PP
        !           376: The following keywords
        !           377: are only recognized as the first word of a command
        !           378: and when not quoted:
        !           379: .if t .RS
        !           380: .PP
        !           381: .B
        !           382: .if n if then else elif fi case esac for while until do done { } function select time
        !           383: .if t if   then   else   elif   fi   case   esac   for   while   until   do   done   {   }   function   select   time
        !           384: .if t .RE
        !           385: .SS Comments.
        !           386: A word beginning with
        !           387: .B #
        !           388: causes that word and all the following characters up to a new-line
        !           389: to be ignored.
        !           390: .SS Aliasing.
        !           391: The first word of each command is replaced by the text of an
        !           392: .B alias
        !           393: if an
        !           394: .B alias
        !           395: for this word has been defined.
        !           396: The
        !           397: first character of an
        !           398: .B alias
        !           399: name can be any printable character,
        !           400: but the rest of the characters
        !           401: must be the same as for a valid
        !           402: .IR identifier .
        !           403: The replacement string can contain any
        !           404: valid Shell script
        !           405: including the metacharacters listed above.
        !           406: The first word of each command of the
        !           407: replaced text will not be tested for additional aliases.
        !           408: If the last character of the alias value is a
        !           409: .I blank\^
        !           410: then the word following the alias will also be checked for alias
        !           411: substitution.
        !           412: Aliases can be used to redefine special
        !           413: builtin commands but cannot be used to redefine
        !           414: the keywords listed above.
        !           415: Aliases can be created, listed, and exported with the
        !           416: .B alias
        !           417: command and can be removed with the
        !           418: .B unalias
        !           419: command.
        !           420: Exported aliases remain in effect for sub-shells
        !           421: but must be reinitialized for separate invocations
        !           422: of the Shell (See
        !           423: .I Invocation\^
        !           424: below).
        !           425: .PP
        !           426: .I Aliasing\^
        !           427: is performed when
        !           428: scripts are read,
        !           429: not while they are executed.
        !           430: Therefore,
        !           431: for an alias to take effect
        !           432: the
        !           433: .B
        !           434: alias
        !           435: command has to be executed before
        !           436: the command which references the alias is read.
        !           437: .PP
        !           438: Aliases are frequently used as a short hand for full path
        !           439: names.
        !           440: An option to the aliasing facility allows the value of the alias
        !           441: to be automatically set to the full pathname of
        !           442: the corresponding command.
        !           443: These aliases are called
        !           444: .I tracked
        !           445: aliases.
        !           446: The value of a
        !           447: .I tracked
        !           448: alias is defined the first time the identifier
        !           449: is read and becomes undefined each time
        !           450: the
        !           451: .SM
        !           452: .B PATH
        !           453: variable is reset.
        !           454: These aliases remain
        !           455: .I tracked
        !           456: so that the next
        !           457: subsequent reference will redefine the value.
        !           458: Several tracked aliases are compiled into the shell.
        !           459: The
        !           460: .B \-h
        !           461: option of the
        !           462: .B set
        !           463: command makes each command name which is an
        !           464: .I identifier\^
        !           465: into a tracked alias.
        !           466: .PP
        !           467: The following
        !           468: .I exported aliases
        !           469: are compiled into the shell
        !           470: but can be unset or redefined:
        !           471: .RS 20
        !           472: .PD 0
        !           473: .TP
        !           474: .B "echo=\(fmprint \-\(fm"
        !           475: .TP
        !           476: .B "false=\(fmlet 0\(fm"
        !           477: .TP
        !           478: .B "functions=\(fmtypeset \-f\(fm"
        !           479: .TP
        !           480: .B "history=\(fmfc \-l\(fm"
        !           481: .TP
        !           482: .B "integer=\(fmtypeset \-i\(fm"
        !           483: .TP
        !           484: .B "nohup=\(fmnohup \(fm"
        !           485: .TP
        !           486: .B "pwd=\(fmprint \- $\s-1PWD\s+1\(fm"
        !           487: .TP
        !           488: .B "r=\(fmfc \-e \-\(fm"
        !           489: .TP
        !           490: .B "true=\(fm:\(fm"
        !           491: .TP
        !           492: .B "type=\(fmwhence \-v\(fm"
        !           493: .TP
        !           494: .B "hash=\(fmalias \-t\(fm"
        !           495: .PD
        !           496: .RE 
        !           497: .SS Tilde Substitution.
        !           498: After alias substitution is performed, each word
        !           499: is checked to see if it begins with an unquoted
        !           500: .BR \(ap .
        !           501: If it does, then the word up to a
        !           502: .B /
        !           503: is checked to see if it matches a user name in the
        !           504: .B /etc/passwd
        !           505: file.
        !           506: If a match is found, the
        !           507: .B \(ap
        !           508: and the matched login name is replaced by the
        !           509: login directory of the matched user.
        !           510: This is called a
        !           511: .I tilde
        !           512: substitution.
        !           513: If no match is found, the original text is left unchanged.
        !           514: A
        !           515: .B \(ap
        !           516: by itself, or in front of a
        !           517: .BR / ,
        !           518: is replaced by the value of the
        !           519: .B
        !           520: .SM HOME
        !           521: parameter.
        !           522: A
        !           523: .B \(ap
        !           524: followed by a
        !           525: .B +
        !           526: or
        !           527: .B \-
        !           528: is replaced by the value of
        !           529: the parameter
        !           530: .B
        !           531: .SM PWD
        !           532: and
        !           533: .B
        !           534: .SM OLDPWD
        !           535: respectively.
        !           536: .PP
        !           537: In addition, the value of each
        !           538: .I "keyword parameter"
        !           539: is checked to see if it begins with a
        !           540: .B \(ap
        !           541: or if a
        !           542: .B \(ap
        !           543: appears after a
        !           544: .BR : .
        !           545: In either of these cases a
        !           546: .I tilde
        !           547: substitution is attempted.
        !           548: .SS Command Substitution.
        !           549: The standard output from a command enclosed in
        !           550: a pair of grave accents (\^\f3\*`\^\*`\fP\^) may be used as part or all
        !           551: of a word;
        !           552: trailing new-lines are removed.
        !           553: The command substitution
        !           554: \^\f3\*`\^cat file\^\*`\fP\^
        !           555: can be replaced by the equivalent but faster
        !           556: \^\f3\*`\^<file\^\*`\fP\^.
        !           557: Command substitution of most special commands
        !           558: that do not perform input/output redirection are
        !           559: carried out without creating a separate process.
        !           560: .SS Parameter Substitution.
        !           561: A
        !           562: .I parameter\^
        !           563: is an
        !           564: .IR identifier ,
        !           565: a digit,
        !           566: or any of the characters
        !           567: .BR \(** ,
        !           568: .BR @ ,
        !           569: .BR # ,
        !           570: .BR ? ,
        !           571: .BR \- ,
        !           572: .BR $ ,
        !           573: and
        !           574: .BR !\\^ .
        !           575: A
        !           576: .I named parameter\^
        !           577: (a parameter denoted by an identifier)
        !           578: has a
        !           579: .I value\^
        !           580: and zero or more
        !           581: .IR attributes .
        !           582: .I Named parameters \^
        !           583: can be assigned
        !           584: .I values\^
        !           585: and
        !           586: .I attributes
        !           587: by using the
        !           588: .B typeset\^
        !           589: special command.
        !           590: The attributes supported by the Shell are described
        !           591: later with the
        !           592: .B typeset\^
        !           593: special command.
        !           594: Exported parameters pass values and attributes to
        !           595: sub-shells but only values to the environment.
        !           596: .PP
        !           597: The shell supports a limited one-dimensional array facility.
        !           598: An element of an array parameter is referenced by a
        !           599: .IR subscript .
        !           600: A
        !           601: .I subscript\^
        !           602: is denoted by a
        !           603: .BR [ ,
        !           604: followed by an
        !           605: .I arithmetic expression\^
        !           606: (see Arithmetic evaluation below)
        !           607: followed by a
        !           608: .BR ] .
        !           609: The value of all
        !           610: subscripts must be in the
        !           611: range of
        !           612: 0 through 511.
        !           613: Arrays need not be declared.
        !           614: Any reference to a named parameter
        !           615: with a valid subscript is
        !           616: legal and an array will be created if necessary.
        !           617: Referencing an array without a subscript
        !           618: is equivalent to referencing the first element.
        !           619: .PP
        !           620: The
        !           621: .I value\^
        !           622: of a 
        !           623: .I named parameter\^
        !           624: may also be assigned by writing:
        !           625: .RS
        !           626: .PP
        !           627: .IB name = value\^\|
        !           628: \*(OK
        !           629: .IB name = value\^
        !           630: \*(CK .\|.\|.
        !           631: .RE
        !           632: .PP
        !           633: .PD 0
        !           634: If the integer attribute,
        !           635: .BR \-i ,
        !           636: is set for
        !           637: .I name\^
        !           638: the
        !           639: .I value\^
        !           640: is subject to arithmetic evaluation as described below.
        !           641: .PP
        !           642: Positional parameters,
        !           643: parameters denoted by a number,
        !           644: may be assigned values with the
        !           645: .B set\^
        !           646: special command.
        !           647: Parameter
        !           648: .B $0
        !           649: is set from argument zero when the shell
        !           650: is invoked.
        !           651: .PP
        !           652: The character
        !           653: .B $
        !           654: is used to introduce substitutable
        !           655: .IR parameters .
        !           656: .TP
        !           657: \f3${\fP\f2parameter\^\fP\f3}\fP
        !           658: The value, if any, of the parameter is substituted.
        !           659: The braces are required when
        !           660: .I parameter\^
        !           661: is followed by a letter, digit, or underscore
        !           662: that is not to be interpreted as part of its name
        !           663: or when a named parameter is subscripted.
        !           664: If
        !           665: .I parameter\^
        !           666: is a digit then it is a positional parameter.
        !           667: If
        !           668: .I parameter\^
        !           669: is
        !           670: .BR \(**
        !           671: or
        !           672: .BR @ ,
        !           673: then all the positional
        !           674: parameters, starting with
        !           675: .BR $1 ,
        !           676: are substituted
        !           677: (separated by spaces).
        !           678: If an array
        !           679: .I identifier\^
        !           680: with subscript
        !           681: .B \(**
        !           682: or
        !           683: .B @
        !           684: is used,
        !           685: then the value
        !           686: for each of the
        !           687: elements
        !           688: is substituted
        !           689: (separated by spaces).
        !           690: .TP
        !           691: \f3${#\fP\f2parameter\^\fP\f3}\fP
        !           692: If
        !           693: .I parameter\^
        !           694: is not
        !           695: .BR \(** ,
        !           696: the length of the value of the
        !           697: .I parameter\^
        !           698: is substituted.
        !           699: Otherwise, the number of positional parameters is substituted.
        !           700: .TP
        !           701: \f3${#\fP\f2identifier\fP\f3[*]}\fP
        !           702: The number of elements in the array
        !           703: .I identifier\^
        !           704: is substituted.
        !           705: .TP
        !           706: \f3${\fP\f2parameter\^\fP\f3:\-\fP\f2word\^\fP\f3}\fP
        !           707: If
        !           708: .I parameter\^
        !           709: is set and is non-null then substitute its value;
        !           710: otherwise substitute
        !           711: .IR word .
        !           712: .TP
        !           713: \f3${\fP\f2parameter\^\fP\f3:=\fP\f2word\^\fP\f3}\fP
        !           714: If
        !           715: .I parameter\^
        !           716: is not set or is null then set it to
        !           717: .IR word ;
        !           718: the value of the parameter is then substituted.
        !           719: Positional parameters may not be assigned to
        !           720: in this way.
        !           721: .TP
        !           722: \f3${\fP\f2parameter\^\fP\f3:?\fP\f2word\^\fP\f3}\fP
        !           723: If
        !           724: .I parameter\^
        !           725: is set and is non-null then substitute its value;
        !           726: otherwise, print
        !           727: .I word\^
        !           728: and exit from the shell.
        !           729: If
        !           730: .I word\^
        !           731: is omitted then a standard message is printed.
        !           732: .TP
        !           733: \f3${\fP\f2parameter\^\fP\f3:+\fP\f2word\^\fP\f3}\fP
        !           734: If
        !           735: .I parameter\^
        !           736: is set and is non-null then substitute
        !           737: .IR word ;
        !           738: otherwise substitute nothing.
        !           739: .TP
        !           740: .PD 0
        !           741: \f3${\fP\f2parameter\^\fP\f3#\fP\f2pattern\^\fP\f3}\fP
        !           742: .TP
        !           743: \f3${\fP\f2parameter\^\fP\f3##\fP\f2pattern\^\fP\f3}\fP
        !           744: .PD
        !           745: If
        !           746: the Shell
        !           747: .I pattern\^
        !           748: matches the beginning of the value of
        !           749: .IR parameter ,
        !           750: then the value of
        !           751: this substitution is the value of the
        !           752: .I parameter\^
        !           753: with the matched portion deleted;
        !           754: otherwise the value of this
        !           755: .I parameter\^
        !           756: is substituted.
        !           757: In the first form the smallest matching pattern is deleted and in the
        !           758: latter form the largest matching pattern is deleted.
        !           759: .TP
        !           760: .PD 0
        !           761: \f3${\fP\f2parameter\^\fP\f3%\fP\f2pattern\^\fP\f3}\fP
        !           762: .TP
        !           763: \f3${\fP\f2parameter\^\fP\f3%%\fP\f2pattern\^\fP\f3}\fP
        !           764: .PD
        !           765: If
        !           766: the Shell
        !           767: .I pattern\^
        !           768: matches the end of the value of
        !           769: .IR parameter ,
        !           770: then the value of
        !           771: .I parameter\^
        !           772: with the matched part deleted;
        !           773: otherwise substitute the value of
        !           774: .IR parameter .
        !           775: In the first form the smallest matching pattern is deleted and in the
        !           776: latter form the largest matching pattern is deleted.
        !           777: .PD
        !           778: .PP
        !           779: In the above,
        !           780: .I word\^
        !           781: is not evaluated unless it is
        !           782: to be used as the substituted string,
        !           783: so that, in the following example,
        !           784: .B pwd\^
        !           785: is executed only if
        !           786: .B d\^
        !           787: is not set or is null:
        !           788: .RS
        !           789: .PP
        !           790: echo \|${d:\-\^\*`\^pwd\^\*`\^}
        !           791: .RE
        !           792: .PP
        !           793: If the colon (
        !           794: .B : )
        !           795: is omitted from the above expressions,
        !           796: then the shell only checks whether
        !           797: .I parameter\^
        !           798: is set or not.
        !           799: .PP
        !           800: The following
        !           801: parameters
        !           802: are automatically set by the shell:
        !           803: .RS
        !           804: .PD 0
        !           805: .TP
        !           806: .B #
        !           807: The number of positional parameters in decimal.
        !           808: .TP
        !           809: .B \-
        !           810: Flags supplied to the shell on invocation or by
        !           811: the
        !           812: .B set
        !           813: command.
        !           814: .TP
        !           815: .B ?
        !           816: The decimal value returned by the last executed command.
        !           817: .TP
        !           818: .B $
        !           819: The process number of this shell.
        !           820: .TP
        !           821: .B _
        !           822: The last argument of the previous command.
        !           823: This parameter is not set for commands which are asynchronous.
        !           824: .TP
        !           825: .B !
        !           826: The process number of the last background command invoked.
        !           827: .TP
        !           828: .B
        !           829: .SM PPID
        !           830: The process number of the parent of the shell.
        !           831: .TP
        !           832: .B
        !           833: .SM PWD
        !           834: The present working directory set by the
        !           835: .B cd
        !           836: command.
        !           837: .TP
        !           838: .B
        !           839: .SM OLDPWD
        !           840: The previous working directory set by the
        !           841: .B cd
        !           842: command.
        !           843: .TP
        !           844: .B
        !           845: .SM RANDOM
        !           846: Each time this parameter is referenced, a random integer is generated.
        !           847: The sequence of random numbers can be initialized by assigning
        !           848: a numeric value to
        !           849: .SM
        !           850: .BR RANDOM .
        !           851: .TP
        !           852: .B
        !           853: .SM REPLY
        !           854: This parameter is set by the
        !           855: .B select
        !           856: statement and by
        !           857: the
        !           858: .B read
        !           859: special command when no arguments are supplied.
        !           860: .PD
        !           861: .RE
        !           862: .PP
        !           863: The following
        !           864: parameters
        !           865: are used by the shell:
        !           866: .RS
        !           867: .PD 0
        !           868: .TP
        !           869: .B
        !           870: .SM CDPATH
        !           871: The search path for the
        !           872: .I cd
        !           873: command.
        !           874: .TP
        !           875: .B
        !           876: .SM COLUMNS
        !           877: If this variable is set,
        !           878: the value is used to define the width of the edit window
        !           879: for the shell edit modes and for printing
        !           880: .B select
        !           881: lists.
        !           882: .TP
        !           883: .B
        !           884: .SM EDITOR
        !           885: If the value of this variable ends in
        !           886: .IR emacs ,
        !           887: .IR gmacs ,
        !           888: or
        !           889: .I vi
        !           890: and the
        !           891: .B
        !           892: .SM VISUAL
        !           893: variable is not set,
        !           894: then the corresponding option
        !           895: (see Special Command
        !           896: .B set
        !           897: below)
        !           898: will be turned on.
        !           899: .TP
        !           900: .SM
        !           901: .B ENV
        !           902: If this parameter is set, then
        !           903: parameter substitution is performed on
        !           904: the value to generate
        !           905: the  pathname of the script that will be
        !           906: executed when the
        !           907: .I shell\^
        !           908: is invoked.
        !           909: (See
        !           910: .I Invocation\^
        !           911: below.)
        !           912: This file is typically used for
        !           913: .I alias
        !           914: and
        !           915: .I function
        !           916: definitions.
        !           917: .TP
        !           918: .B
        !           919: .SM FCEDIT
        !           920: The default editor name for the
        !           921: .B fc
        !           922: command.
        !           923: .TP
        !           924: .SM
        !           925: .B IFS
        !           926: Internal field separators,
        !           927: normally
        !           928: .BR space ,
        !           929: .BR tab ,
        !           930: and
        !           931: .B new-line
        !           932: that is used to separate command words which result from
        !           933: command or parameter substitution
        !           934: and for separating words with  the special command
        !           935: .BR read .
        !           936: .TP
        !           937: .SM
        !           938: .B HISTFILE
        !           939: If this parameter is set when the shell is invoked, then
        !           940: the value is the  pathname of the file that will be
        !           941: used to store the command history.
        !           942: (See
        !           943: .I "Command re-entry\^"
        !           944: below.)
        !           945: .TP
        !           946: .SM
        !           947: .B HISTSIZE
        !           948: If this parameter is set when the shell is invoked, then
        !           949: the number of previously entered commands that
        !           950: are accessible by this shell
        !           951: will be greater than or equal to this number.
        !           952: The default is 128.
        !           953: .TP
        !           954: .B
        !           955: .SM HOME
        !           956: The default argument (home directory) for the
        !           957: .B cd
        !           958: command.
        !           959: .TP
        !           960: .B
        !           961: .SM MAIL
        !           962: If this parameter is set to the name of a mail file
        !           963: .I and\^
        !           964: the
        !           965: .B
        !           966: .SM MAILPATH
        !           967: parameter is not set,
        !           968: then the shell informs the user of arrival of mail
        !           969: in the specified file.
        !           970: .TP
        !           971: .B
        !           972: .SM MAILCHECK
        !           973: This variable specifies how often (in seconds) the
        !           974: shell will check for changes in the modification time
        !           975: of any of the files specified by the
        !           976: .B
        !           977: .SM MAILPATH
        !           978: or
        !           979: .B
        !           980: .SM MAIL
        !           981: parameters.
        !           982: The default value is 600 seconds.
        !           983: If set to 0,
        !           984: the shell will check before each prompt.
        !           985: .TP
        !           986: .B
        !           987: .SM MAILPATH
        !           988: A colon (
        !           989: .B :
        !           990: )
        !           991: separated list of file names.
        !           992: If this parameter is set
        !           993: then the shell informs the user of
        !           994: any modifications to the specified files
        !           995: that have occurred within the last
        !           996: .B
        !           997: .SM MAILCHECK
        !           998: seconds.
        !           999: Each file name can be followed by a
        !          1000: .B ?
        !          1001: and a message that will be printed.
        !          1002: The message will undergo parameter and command substitution
        !          1003: with the parameter,
        !          1004: .B $_
        !          1005: defined as the name of the file that has changed.
        !          1006: The default message is
        !          1007: .I you have mail in $_\^.
        !          1008: .TP
        !          1009: .B
        !          1010: .SM PATH
        !          1011: The search path for commands (see
        !          1012: .I Execution\^
        !          1013: below).
        !          1014: The user may not change
        !          1015: .B \s-1PATH\s+1
        !          1016: if executing under
        !          1017: .I rsh
        !          1018: (except in
        !          1019: .I .profile\^
        !          1020: ).
        !          1021: .TP
        !          1022: .SM
        !          1023: .B PS1
        !          1024: The value of this parameter is expanded for paramter
        !          1025: substitution to define the
        !          1026: primary prompt string which by default is
        !          1027: .RB `` "$ \|" ''.
        !          1028: The character
        !          1029: .B !
        !          1030: in the primary prompt string is replaced by the
        !          1031: .I command\^ 
        !          1032: number (see
        !          1033: .I Command Re-entry
        !          1034: below).
        !          1035: .TP
        !          1036: .SM
        !          1037: .B PS2
        !          1038: Secondary prompt string, by default
        !          1039: .RB `` "> \|" ''.
        !          1040: .TP
        !          1041: .SM
        !          1042: .B PS3
        !          1043: Selection prompt string
        !          1044: used within a
        !          1045: .B select
        !          1046: loop, by default
        !          1047: .RB `` "#? \|" ''.
        !          1048: .TP
        !          1049: .SM
        !          1050: .B SHELL
        !          1051: The pathname of the
        !          1052: .I shell\^
        !          1053: is kept in the environment.
        !          1054: At invocation, if the value of this variable contains an
        !          1055: .B r
        !          1056: in the basename,
        !          1057: then the shell becomes restricted.
        !          1058: .TP
        !          1059: .B
        !          1060: .SM TMOUT
        !          1061: If set to a value greater than zero,
        !          1062: the shell will terminate if a command is not entered within
        !          1063: the prescribed number of seconds.
        !          1064: (Note that the shell can be compiled with a maximum bound
        !          1065: for this value which cannot be exceeded.)
        !          1066: .TP
        !          1067: .B
        !          1068: .SM VISUAL
        !          1069: If the value of this variable ends in
        !          1070: .IR emacs ,
        !          1071: .IR gmacs ,
        !          1072: or
        !          1073: .I vi
        !          1074: then the corresponding option
        !          1075: (see Special Command
        !          1076: .B set
        !          1077: below)
        !          1078: will be turned on.
        !          1079: .PD
        !          1080: .RE
        !          1081: .PP
        !          1082: The shell gives default values to
        !          1083: \f3\s-1PATH\s+1\fP, \f3\s-1PS1\s+1\fP, \f3\s-1PS2\s+1\fP, \f3\s-1MAILCHECK\s+1\fP,
        !          1084: \f3\s-1TMOUT\s+1\fP  and \f3\s-1IFS\s+1\fP,
        !          1085: while
        !          1086: .SM
        !          1087: .BR HOME ,
        !          1088: .SM
        !          1089: .B SHELL
        !          1090: .SM
        !          1091: .B ENV
        !          1092: and
        !          1093: .SM
        !          1094: .B MAIL
        !          1095: are
        !          1096: not set at all by the shell (although
        !          1097: .SM
        !          1098: .B HOME
        !          1099: .I is\^
        !          1100: set by
        !          1101: .IR login (1)).
        !          1102: On some systems
        !          1103: .SM
        !          1104: .B MAIL
        !          1105: and
        !          1106: .SM
        !          1107: .B SHELL
        !          1108: are also
        !          1109: set by
        !          1110: .IR login (1)).
        !          1111: .SS Blank Interpretation.
        !          1112: After parameter and command substitution,
        !          1113: the results of substitutions are scanned for the field separator
        !          1114: characters (
        !          1115: those found in
        !          1116: .SM
        !          1117: .B IFS
        !          1118: )
        !          1119: and split into distinct arguments where such characters are found.
        !          1120: Explicit null arguments (\^\f3"\^"\fP or \f3\*\(fm\^\*\(fm\fP\^) are retained.
        !          1121: Implicit null arguments
        !          1122: (those resulting from
        !          1123: .I parameters\^
        !          1124: that have no values) are removed.
        !          1125: .SS File Name Generation.
        !          1126: Following substitution, each command
        !          1127: .I word\^
        !          1128: is scanned for
        !          1129: the characters
        !          1130: .BR \(** ,
        !          1131: .BR ? ,
        !          1132: and
        !          1133: .B \*(OK\^ 
        !          1134: unless the
        !          1135: .B \-f
        !          1136: option has been
        !          1137: .BR set .
        !          1138: If one of these characters appears
        !          1139: then the word is regarded as a
        !          1140: .IR pattern .
        !          1141: The word is replaced with alphabetically sorted file names that match the pattern.
        !          1142: If no file name is found that matches the pattern, then
        !          1143: the word is left unchanged.
        !          1144: When a
        !          1145: .I pattern\^
        !          1146: is used for file name generation,
        !          1147: the character
        !          1148: .B .
        !          1149: at the start of a file name
        !          1150: or immediately following a
        !          1151: .BR / ,
        !          1152: as well as the character
        !          1153: .B /
        !          1154: itself,
        !          1155: must be matched explicitly.
        !          1156: In other instances of pattern matching the
        !          1157: .B /
        !          1158: and
        !          1159: .B .
        !          1160: are not treated specially.
        !          1161: .PP
        !          1162: .PD 0
        !          1163: .RS
        !          1164: .TP
        !          1165: .B \(**
        !          1166: Matches any string, including the null string.
        !          1167: .TP
        !          1168: .B ?
        !          1169: Matches any single character.
        !          1170: .TP
        !          1171: .BR \*(OK \^.\|.\|.\^ \*(CK
        !          1172: Matches any one of the enclosed characters.
        !          1173: A pair of characters separated by
        !          1174: .B \-
        !          1175: matches any
        !          1176: character lexically between the pair, inclusive.
        !          1177: If the first character following the opening "[ \|"
        !          1178: is a "! \|" then any character not enclosed is matched.
        !          1179: A
        !          1180: .B \-
        !          1181: can be included in the character set by putting it as the
        !          1182: first or last character.
        !          1183: .PD
        !          1184: .RE
        !          1185: .SS Quoting.
        !          1186: Each of the
        !          1187: .I metacharacters\^
        !          1188: listed above (See
        !          1189: .I Definitions
        !          1190: above).
        !          1191: has a special meaning to the shell
        !          1192: and cause termination of a word unless quoted.
        !          1193: A character may be
        !          1194: .I quoted\^
        !          1195: (i.e., made to stand for itself)
        !          1196: by preceding
        !          1197: it with a
        !          1198: .BR \e .
        !          1199: The pair
        !          1200: .B \enew-line
        !          1201: is ignored.
        !          1202: All characters enclosed between a pair of single quote marks (\^\f3\(fm\^\(fm\fP\^),
        !          1203: except a single quote,
        !          1204: are quoted.
        !          1205: Inside double quote marks
        !          1206: (\f3"\^"\fP),
        !          1207: parameter and command substitution occurs and
        !          1208: .B \e
        !          1209: quotes the characters
        !          1210: .BR \e ,
        !          1211: .BR \(fm ,
        !          1212: \f3"\fP,
        !          1213: and
        !          1214: .BR $ .
        !          1215: .B
        !          1216: "$\(**"
        !          1217: is equivalent to
        !          1218: \f3"$1 \|$2\fP \|.\|.\|.\f3"\fP,
        !          1219: whereas
        !          1220: .B
        !          1221: "$@"
        !          1222: is equivalent to
        !          1223: .B
        !          1224: "$1"\|
        !          1225: .B
        !          1226: "$2"\|
        !          1227: \&.\|.\|.\^.
        !          1228: .PP
        !          1229: The special meaning of keywords can be removed by quoting any
        !          1230: character of the keyword.
        !          1231: The recognition of special command names listed below cannot be altered
        !          1232: by quoting them.
        !          1233: .SS Arithmetic Evaluation.
        !          1234: An ability to perform integer arithmetic
        !          1235: is provided with the special command
        !          1236: .BR let .
        !          1237: Evaluations are performed using
        !          1238: .I long\^
        !          1239: arithmetic.
        !          1240: Constants are of the form
        !          1241: \*(OK\f2base\f3#\^\f1\*(CK\f2n\^\fP
        !          1242: where
        !          1243: .I base\^
        !          1244: is a decimal number between two and thirty-six
        !          1245: representing the arithmetic base
        !          1246: and
        !          1247: .I n\^
        !          1248: is a number in that base.
        !          1249: If
        !          1250: .I base\^
        !          1251: is omitted 
        !          1252: then base 10 is used.
        !          1253: .PP
        !          1254: An internal integer representation of a
        !          1255: .I named parameter\^
        !          1256: can be specified with the
        !          1257: .B \-i
        !          1258: option of the
        !          1259: .B typeset
        !          1260: special command.
        !          1261: When this attribute is selected
        !          1262: the first assignment to the
        !          1263: parameter determines the arithmetic base
        !          1264: to be used when 
        !          1265: parameter substitution occurs.
        !          1266: .PP
        !          1267: Since many of the arithmetic operators require
        !          1268: quoting, an alternative form of the
        !          1269: .B let
        !          1270: command is provided.
        !          1271: For any command which begins with a
        !          1272: .BR (( ,
        !          1273: all the characters until a matching
        !          1274: .B ))
        !          1275: are treated as a quoted expression.
        !          1276: More precisely,
        !          1277: .B ((
        !          1278: \&.\|.\|.
        !          1279: .B ))
        !          1280: is equivalent to
        !          1281: .B let\^
        !          1282: \f3"\fP \|.\|.\|.\f3"\fP.
        !          1283: .SS Prompting.
        !          1284: When used interactively,
        !          1285: the shell prompts with the value of
        !          1286: .SM
        !          1287: .B PS1
        !          1288: before reading a command.
        !          1289: If at any time a new-line is typed and further input is needed
        !          1290: to complete a command, then the secondary prompt
        !          1291: (i.e., the value of
        !          1292: .BR \s-1PS2\s+1 )
        !          1293: is issued.
        !          1294: .SS Input/Output.
        !          1295: Before a command is executed, its input and output
        !          1296: may be redirected using a special notation interpreted by the shell.
        !          1297: The following may appear anywhere in a simple-command
        !          1298: or may precede or follow a
        !          1299: .I command\^
        !          1300: and are
        !          1301: .I not\^
        !          1302: passed on to the invoked command.
        !          1303: Command and parameter substitution occurs before
        !          1304: .I word\^
        !          1305: or
        !          1306: .I digit\^
        !          1307: is used except as noted below.
        !          1308: File name generation
        !          1309: occurs only if the pattern matches a single file
        !          1310: and blank interpretation is not performed.
        !          1311: .TP 14
        !          1312: .BI < word
        !          1313: Use file
        !          1314: .I word\^
        !          1315: as standard input (file descriptor 0).
        !          1316: .TP
        !          1317: .BI > word
        !          1318: Use file
        !          1319: .I word\^
        !          1320: as standard output (file descriptor 1).
        !          1321: If the file does not exist then it is created;
        !          1322: otherwise, it is truncated to zero length.
        !          1323: .TP
        !          1324: .BI >\[email protected]@> word
        !          1325: Use file
        !          1326: .I word\^
        !          1327: as standard output.
        !          1328: If the file exists then output is appended to it (by first seeking to the end-of-file);
        !          1329: otherwise, the file is created.
        !          1330: .TP
        !          1331: \f3<\[email protected]@<\fP\*(OK\f3\-\fP\*(CK\f2word\fP
        !          1332: The shell input is read up to a line that is the same as
        !          1333: .IR word ,
        !          1334: or to an end-of-file.
        !          1335: No parameter substitution, command substitution or
        !          1336: file name generation is performed on
        !          1337: .IR word .
        !          1338: The resulting document,
        !          1339: called a
        !          1340: .IR here-document ,
        !          1341: becomes
        !          1342: the standard input.
        !          1343: If any character of
        !          1344: .I word\^
        !          1345: is quoted, then no interpretation
        !          1346: is placed upon the characters of the document;
        !          1347: otherwise, parameter and command substitution occurs,
        !          1348: .B \enew-line
        !          1349: is ignored,
        !          1350: and
        !          1351: .B \e
        !          1352: must be used to quote the characters
        !          1353: .BR \e ,
        !          1354: .BR $ ,
        !          1355: .BR \*` ,
        !          1356: and the first character of
        !          1357: .IR word .
        !          1358: If
        !          1359: .B \-
        !          1360: is appended to
        !          1361: .BR <\[email protected]@< ,
        !          1362: then all leading tabs are stripped from
        !          1363: .I word\^
        !          1364: and from the document.
        !          1365: .TP
        !          1366: .BI <& digit
        !          1367: The standard input is duplicated from file descriptor
        !          1368: .I digit
        !          1369: (see
        !          1370: .IR dup (2)).
        !          1371: Similarly for the standard output using
        !          1372: .BR >& 
        !          1373: .IR digit .
        !          1374: .TP
        !          1375: .B <&\-
        !          1376: The standard input is closed.
        !          1377: Similarly for the standard output using
        !          1378: .BR >&\- .
        !          1379: .PP
        !          1380: If one of the above is preceded by a digit,
        !          1381: then the
        !          1382: file descriptor number referred to is that specified
        !          1383: by the digit
        !          1384: (instead of the default 0 or 1).
        !          1385: For example:
        !          1386: .RS
        !          1387: .PP
        !          1388: \&.\|.\|. \|2>&1
        !          1389: .RE
        !          1390: .PP
        !          1391: means file descriptor 2 is to be opened
        !          1392: for writing as a duplicate
        !          1393: of file descriptor 1.
        !          1394: .PP
        !          1395: The order in which redirections are specified is significant.
        !          1396: The shell evaluates each redirection in terms of the 
        !          1397: .RI ( "file descriptor" ", " file ) 
        !          1398: association at the time of evaluation.
        !          1399: For example:
        !          1400: .RS
        !          1401: .PP
        !          1402: \&.\|.\|. \|1>\f2fname\^\fP 2>&1
        !          1403: .RE
        !          1404: .PP
        !          1405: first associates file descriptor 1 with file 
        !          1406: .IR fname\^ .
        !          1407: It then associates file descriptor 2 with the file associated with file
        !          1408: descriptor 1 (i.e. 
        !          1409: .IR fname\^ ).
        !          1410: If the order of redirections were reversed, file descriptor 2 would be associated 
        !          1411: with the terminal (assuming file descriptor 1 had been) and then file descriptor 
        !          1412: 1 would be associated with file 
        !          1413: .IR fname\^ .
        !          1414: .PP
        !          1415: If a command is followed by
        !          1416: .B &
        !          1417: and job control is not active,
        !          1418: then the default standard input
        !          1419: for the command
        !          1420: is the empty file
        !          1421: .BR /dev/null .
        !          1422: Otherwise, the environment for the execution of a command contains the
        !          1423: file descriptors of the invoking shell as modified by
        !          1424: input/output specifications.
        !          1425: .SS Environment.
        !          1426: The
        !          1427: .I environment\^
        !          1428: (see
        !          1429: .IR environ (7))
        !          1430: is a list of name-value pairs that is passed to
        !          1431: an executed program in the same way as a normal argument list.
        !          1432: The names must be
        !          1433: .I identifiers\^
        !          1434: and the values are character strings.
        !          1435: The shell interacts with the environment in several ways.
        !          1436: On invocation, the shell scans the environment
        !          1437: and creates a
        !          1438: parameter
        !          1439: for each name found,
        !          1440: giving it the corresponding value and marking it
        !          1441: .I export .
        !          1442: Executed commands inherit the environment.
        !          1443: If the user modifies the values of these
        !          1444: parameters
        !          1445: or creates new ones,
        !          1446: using the
        !          1447: .B export
        !          1448: or
        !          1449: .B typeset \-x
        !          1450: commands they become part of the
        !          1451: environment.
        !          1452: The environment seen by any executed command is thus composed
        !          1453: of any name-value pairs originally inherited by the shell,
        !          1454: whose values may be modified by the current shell,
        !          1455: plus any additions
        !          1456: which must be noted in
        !          1457: .B export
        !          1458: or
        !          1459: .B typeset \-x
        !          1460: commands.
        !          1461: .PP
        !          1462: The environment for any
        !          1463: .I simple-command\^
        !          1464: or function
        !          1465: may be augmented by prefixing it with one or more parameter assignments.
        !          1466: A parameter assignment argument is a word of the form
        !          1467: .IR identifier=value .
        !          1468: Thus:
        !          1469: .RS
        !          1470: .PP
        !          1471: \s-1TERM\s+1=450 \|cmd \|args                          and
        !          1472: .br
        !          1473: (export \|\s-1TERM\s+1; \|\s-1TERM\s+1=450; \|cmd \|args)
        !          1474: .RE
        !          1475: .PP
        !          1476: are equivalent (as far as the above execution of
        !          1477: .I cmd\^
        !          1478: is concerned).
        !          1479: .PP
        !          1480: If the
        !          1481: .B \-k
        !          1482: flag is set,
        !          1483: .I all\^
        !          1484: parameter assignment arguments are placed in the environment,
        !          1485: even if they occur after the command name.
        !          1486: The following
        !          1487: first prints
        !          1488: .B "a=b c"
        !          1489: and then
        !          1490: .BR c:
        !          1491: .PP
        !          1492: .RS
        !          1493: .nf
        !          1494: echo \|a=b \|c
        !          1495: set \|\-k
        !          1496: echo \|a=b \|c
        !          1497: .fi
        !          1498: .RE
        !          1499: .SS Functions.
        !          1500: .PP
        !          1501: The
        !          1502: .B function\^
        !          1503: keyword, described in the
        !          1504: .I Commands
        !          1505: section above,
        !          1506: is used to define shell functions.
        !          1507: Shell functions are read in and stored internally.
        !          1508: Alias names are resolved when the function is read.
        !          1509: Functions are executed like commands with the arguments
        !          1510: passed as positional parameters.
        !          1511: (See
        !          1512: .I Execution
        !          1513: below).
        !          1514: .PP
        !          1515: Functions execute in the same process as the caller and
        !          1516: share all files, traps ( other than
        !          1517: .SM
        !          1518: .B EXIT
        !          1519: and
        !          1520: .SM
        !          1521: .BR ERR )
        !          1522: and present working directory with the
        !          1523: caller.
        !          1524: A trap set on
        !          1525: .SM
        !          1526: .B EXIT
        !          1527: inside a function
        !          1528: is executed after the function completes.
        !          1529: Ordinarily,
        !          1530: variables are shared between the calling program
        !          1531: and the function.
        !          1532: However,
        !          1533: the
        !          1534: .B typeset
        !          1535: special command used within a function
        !          1536: defines local variables whose scope includes
        !          1537: the current function and
        !          1538: all functions it calls.
        !          1539: .PP
        !          1540: The special command
        !          1541: .B return
        !          1542: is used to return
        !          1543: from function calls.
        !          1544: Errors within functions return control to the caller.
        !          1545: .PP
        !          1546: Function identifiers
        !          1547: can be listed with the
        !          1548: .B \-f
        !          1549: option of the
        !          1550: .B typeset
        !          1551: special command.
        !          1552: The text of functions will also
        !          1553: be listed.
        !          1554: Function can be undefined with the
        !          1555: .B \-f
        !          1556: option of the
        !          1557: .B unset
        !          1558: special command.
        !          1559: .PP
        !          1560: Ordinarily,
        !          1561: functions are unset when the shell executes a shell script.
        !          1562: The
        !          1563: .B \-xf
        !          1564: option of the
        !          1565: .B typeset
        !          1566: command allows a function to be exported
        !          1567: to scripts that are executed without a separate
        !          1568: invocation of the shell.
        !          1569: Functions that need to be defined across separate
        !          1570: invocations of the shell should be placed in the
        !          1571: .B
        !          1572: .SM
        !          1573: ENV
        !          1574: file.
        !          1575: .SS Jobs.
        !          1576: .PP
        !          1577: If the
        !          1578: .B monitor
        !          1579: option of the
        !          1580: .B set
        !          1581: command is turned on,
        !          1582: an interactive shell associates a \fIjob\fR with each pipeline.  It keeps
        !          1583: a table of current jobs, printed by the
        !          1584: .B jobs
        !          1585: command, and assigns them small integer numbers.  When
        !          1586: a job is started asynchronously with
        !          1587: .BR & ,
        !          1588: the shell prints a line which looks
        !          1589: like:
        !          1590: .PP
        !          1591: .DT
        !          1592:        [1] 1234
        !          1593: .PP
        !          1594: indicating that the job which was started asynchronously was job number
        !          1595: 1 and had one (top-level) process, whose process id was 1234.
        !          1596: .PP
        !          1597: This paragraph and the next require features that are
        !          1598: not in all versions of UNIX and may not apply.
        !          1599: If you are running a job and wish to do something else you may hit the key
        !          1600: \fB^Z\fR (control-Z) which sends a STOP signal to the current job.
        !          1601: The shell will then normally indicate that the job has been `Stopped',
        !          1602: and print another prompt.  You can then manipulate the state of this job,
        !          1603: putting it in the background with the
        !          1604: .B bg
        !          1605: command, or run some other
        !          1606: commands and then eventually bring the job back into the foreground with
        !          1607: the foreground command
        !          1608: .BR fg .
        !          1609: A \fB^Z\fR takes effect immediately and
        !          1610: is like an interrupt in that pending output and unread input are discarded
        !          1611: when it is typed.
        !          1612: .PP
        !          1613: A job being run in the background will stop if it tries to read
        !          1614: from the terminal.  Background jobs are normally allowed to produce output,
        !          1615: but this can be disabled by giving the command ``stty tostop''.
        !          1616: If you set this
        !          1617: tty option, then background jobs will stop when they try to produce
        !          1618: output like they do when they try to read input.
        !          1619: .PP
        !          1620: There are several ways to refer to jobs in the shell.  The character
        !          1621: .B %
        !          1622: introduces a job name.  If you wish to refer to job number 1, you can
        !          1623: name it as
        !          1624: .B %1 . 
        !          1625: Jobs can also be named by prefixes of the string typed in to
        !          1626: .B kill
        !          1627: or restart them.
        !          1628: Thus, on systems that support job control,
        !          1629: .RB ` fg
        !          1630: .BR %ed '
        !          1631: would normally restart
        !          1632: a suspended
        !          1633: .IR ed (1)
        !          1634: job, if there were a suspended job whose name began with
        !          1635: the string `ed'. 
        !          1636: .PP
        !          1637: The shell maintains a notion of the current and previous jobs.
        !          1638: In output pertaining to jobs, the current job is marked with a
        !          1639: .B +
        !          1640: and the previous job with a
        !          1641: .BR \- .
        !          1642: The abbreviation
        !          1643: .B %+
        !          1644: refers
        !          1645: to the current job and
        !          1646: .B %\-
        !          1647: refers to the previous job.
        !          1648: .B %%
        !          1649: is also a synonym for the current job.
        !          1650: .PP
        !          1651: This shell learns immediately whenever a process changes state.
        !          1652: It normally informs you whenever a job becomes blocked so that
        !          1653: no further progress is possible, but only just before it prints
        !          1654: a prompt.  This is done so that it does not otherwise disturb your work.
        !          1655: .PP
        !          1656: When you try to leave the shell while jobs are running or stopped, you will
        !          1657: be warned that `You have stopped(running) jobs.'  You may use the
        !          1658: .B jobs
        !          1659: command to see what they are.  If you do this or immediately try to
        !          1660: exit again, the shell will not warn you a second time, and the stopped
        !          1661: jobs will be terminated.
        !          1662: .SS Signals.
        !          1663: The \s-1INT\s+1 and \s-1QUIT\s+1 signals for an invoked
        !          1664: command are ignored if the command is followed by
        !          1665: .B & 
        !          1666: and job
        !          1667: .B monitor
        !          1668: option is not active.
        !          1669: Otherwise, signals have the values
        !          1670: inherited by the shell from its parent,
        !          1671: with the exception of signal 11
        !          1672: (but see also
        !          1673: the
        !          1674: .B trap
        !          1675: command below).
        !          1676: .SS Execution.
        !          1677: Each time a command is executed, the above substitutions
        !          1678: are carried out.
        !          1679: If the command name matches one
        !          1680: of the
        !          1681: .I "Special Commands\^"
        !          1682: listed below,
        !          1683: it is executed within the
        !          1684: current shell process.
        !          1685: Next, the command name is checked to see if
        !          1686: it matches one of the user defined functions.
        !          1687: If it does,
        !          1688: the positional parameters are saved
        !          1689: and then reset to the arguments of the
        !          1690: .I function\^
        !          1691: call.
        !          1692: When the
        !          1693: .I function\^
        !          1694: completes or issues a
        !          1695: .BR return ,
        !          1696: the positional parameter list is restored
        !          1697: and any trap set on
        !          1698: .SM
        !          1699: .B EXIT
        !          1700: within the function is executed.
        !          1701: The value of a
        !          1702: .I function\^
        !          1703: is the value of the last command executed.
        !          1704: A function is also executed in the
        !          1705: current shell process.
        !          1706: If a command name is not a
        !          1707: .I "special command\^"
        !          1708: or a user defined
        !          1709: .IR function ,
        !          1710: a process is created and
        !          1711: an attempt is made to execute the command via
        !          1712: .IR exec (2).
        !          1713: .PP
        !          1714: The shell parameter
        !          1715: .B
        !          1716: .SM PATH
        !          1717: defines the search path for
        !          1718: the directory containing the command.
        !          1719: Alternative directory names are separated by
        !          1720: a colon
        !          1721: .RB ( : ).
        !          1722: The default path is
        !          1723: .B :/bin:/usr/bin
        !          1724: (specifying the current directory,
        !          1725: .BR /bin ,
        !          1726: and
        !          1727: .BR /usr/bin ,
        !          1728: in that order).
        !          1729: Note that the current directory
        !          1730: is specified by a null path name,
        !          1731: which can appear immediately after the
        !          1732: equal sign, between colon delimiters,
        !          1733: or at the end of the path list.
        !          1734: If the command name contains a \f3/\fP then the search path
        !          1735: is not used.
        !          1736: Otherwise, each directory in the path is
        !          1737: searched for an executable file.
        !          1738: If the file has execute permission but is not a
        !          1739: directory or an
        !          1740: .B a.out
        !          1741: file,
        !          1742: it is assumed to be a file containing shell commands.
        !          1743: A sub-shell is spawned to read it.
        !          1744: All non-exported aliases,
        !          1745: functions,
        !          1746: and named parameters are removed in this case.
        !          1747: A parenthesized command is also executed in
        !          1748: a sub-shell.
        !          1749: .SS Command Re-entry.
        !          1750: The text of the last
        !          1751: .B
        !          1752: .SM
        !          1753: HISTSIZE
        !          1754: (default 128)
        !          1755: commands entered from a terminal device
        !          1756: is saved in a
        !          1757: .I history
        !          1758: file.
        !          1759: The file
        !          1760: .B \s-1$HOME\s+1/.history
        !          1761: is used if the
        !          1762: .B
        !          1763: .SM
        !          1764: HISTFILE
        !          1765: variable is not set
        !          1766: or is not writable.
        !          1767: A shell can access the commands of
        !          1768: all
        !          1769: .I interactive
        !          1770: shells which use the same named
        !          1771: .SM
        !          1772: .BR HISTFILE .
        !          1773: The special command
        !          1774: .B fc\^
        !          1775: is used to list or
        !          1776: edit a portion this file.
        !          1777: The portion of the file to be edited or listed can be selected by
        !          1778: number or by giving the first character or
        !          1779: characters of the command.
        !          1780: A single command or range of commands can be specified.
        !          1781: If you do not specify an editor program as
        !          1782: an argument to
        !          1783: .B fc\^
        !          1784: then the value of the parameter
        !          1785: .SM
        !          1786: .B FCEDIT
        !          1787: is used.
        !          1788: If
        !          1789: .SM
        !          1790: .B FCEDIT
        !          1791: is not defined then
        !          1792: .I /bin/ed
        !          1793: is used.
        !          1794: The edited command(s) is printed and re-executed upon
        !          1795: leaving the editor.
        !          1796: The editor name
        !          1797: .B \-
        !          1798: is used to skip the editing phase and
        !          1799: to re-execute the command.
        !          1800: In this case a substitution parameter of the form
        !          1801: \f2old\fP\f3=\fP\f2new\fP
        !          1802: can be used to modify the command before execution.
        !          1803: For example, if
        !          1804: .B r
        !          1805: is aliased to
        !          1806: .B \(fmfc \-e \-\(fm
        !          1807: then typing
        !          1808: `\f3r bad=good c\fP'
        !          1809: will re-execute the most recent command which starts with the letter
        !          1810: .BR c ,
        !          1811: replacing the string
        !          1812: .B bad
        !          1813: with the string
        !          1814: .BR good .
        !          1815: .SS In-line Editing Options
        !          1816: Normally, each command line entered from a terminal device is simply
        !          1817: typed followed by a new-line (`RETURN' or `LINE\ FEED').
        !          1818: If either the
        !          1819: .IR emacs ,
        !          1820: .IR gmacs ,
        !          1821: or
        !          1822: .I vi
        !          1823: option is active, the user can edit the command line.
        !          1824: To be in either of these edit modes
        !          1825: .B set
        !          1826: the corresponding
        !          1827: option.
        !          1828: An editing option is automatically selected each time the
        !          1829: .SM
        !          1830: .B VISUAL
        !          1831: or
        !          1832: .SM
        !          1833: .B EDITOR
        !          1834: variable is assigned a value ending in either of these
        !          1835: option names.
        !          1836: .PP
        !          1837: The editing features require that the user's terminal
        !          1838: accept `RETURN' as carriage return without line feed
        !          1839: and that a space (`\ ' must overwrite the current character on
        !          1840: the screen.
        !          1841: ADM terminal users should set the "space\ -\ advance"
        !          1842: switch to `space'.
        !          1843: Hewlett-Packard series 2621 terminal users should set the straps to
        !          1844: `bcGHxZ\ etX'.
        !          1845: .PP
        !          1846: The editing modes implement a concept where the user is looking through a
        !          1847: window at the current line.
        !          1848: The window width is the value of
        !          1849: .SM
        !          1850: .B COLUMNS
        !          1851: if it is defined, otherwise 80.
        !          1852: If the line is longer than the window width minus two, a mark is
        !          1853: displayed at the end of the window to notify the user.
        !          1854: As the cursor moves and reaches the window boundaries the window will be
        !          1855: centered about the cursor.
        !          1856: The mark is a
        !          1857: .BR > " ("
        !          1858: .BR < ", "
        !          1859: .BR * )
        !          1860: if the line extends on the 
        !          1861: right (left, both) side(s) of the window.
        !          1862: .SS Emacs Editing Mode
        !          1863: This mode is entered by enabling either the
        !          1864: .I emacs
        !          1865: or
        !          1866: .I gmacs
        !          1867: option.
        !          1868: The only difference between these two modes is the way
        !          1869: they handle
        !          1870: .BR ^T .
        !          1871: To edit, the user
        !          1872: moves the cursor to the point needing correction and
        !          1873: then inserts or deletes characters or words as needed.
        !          1874: All the editing commands are control characters or escape
        !          1875: sequences.
        !          1876: The notation for control characters is caret (
        !          1877: .B ^
        !          1878: ) followed
        !          1879: by the character.
        !          1880: For example,
        !          1881: .B ^F
        !          1882: is the notation for control
        !          1883: .BR F .
        !          1884: This is entered by depressing `f' while holding down the
        !          1885: `CTRL' (control) key.
        !          1886: The `SHIFT' key is
        !          1887: .I not 
        !          1888: depressed.
        !          1889: (The notation
        !          1890: .B ^?
        !          1891: indicates the DEL (delete) key.)
        !          1892: .PP
        !          1893: The notation for escape sequences is
        !          1894: .B M-
        !          1895: followed by a
        !          1896: character.
        !          1897: For example,
        !          1898: .B M-f
        !          1899: (pronounced Meta f)
        !          1900: is entered by depressing ESC
        !          1901: (ascii
        !          1902: .B 033
        !          1903: )
        !          1904: followed by `f'.
        !          1905: (
        !          1906: .B M-F
        !          1907: would be the notation for ESC followed by `SHIFT' (capital) `F'.)
        !          1908: .PP
        !          1909: All edit commands
        !          1910: operate from any place on the line
        !          1911: (not just at the beginning).
        !          1912: Neither the "RETURN" nor the "LINE FEED" key is
        !          1913: entered after edit commands except when noted.
        !          1914: .PP
        !          1915: .PD 0
        !          1916: .TP 10
        !          1917: .BI ^F
        !          1918: Move cursor forward (right) one character. 
        !          1919: .PP
        !          1920: .TP 10
        !          1921: .BI M-f
        !          1922: Move cursor forward one word.
        !          1923: (The editor's idea of a word is a string of characters
        !          1924: consisting of only letters, digits and underscores.)
        !          1925: .PP
        !          1926: .TP 10
        !          1927: .BI ^B 
        !          1928: Move cursor backward (left) one character.
        !          1929: .PP
        !          1930: .TP 10
        !          1931: .BI M-b
        !          1932: Move cursor backward one word.
        !          1933: .PP
        !          1934: .TP 10
        !          1935: .BI ^A 
        !          1936: Move cursor to start of line.
        !          1937: .PP
        !          1938: .TP 10
        !          1939: .BI ^E 
        !          1940: Move cursor to end of line.
        !          1941: .PP
        !          1942: .TP 10
        !          1943: .BI ^] char 
        !          1944: Move cursor to character
        !          1945: .I char
        !          1946: on current line.
        !          1947: .PP
        !          1948: .TP 10
        !          1949: .BI ^X^X
        !          1950: Interchange the cursor and mark.
        !          1951: .PP
        !          1952: .TP 10
        !          1953: .I erase
        !          1954: (User defined erase character as defined
        !          1955: by the stty command, usually
        !          1956: .B ^H
        !          1957: or
        !          1958: .BR # .)
        !          1959: Delete previous character.
        !          1960: .PP
        !          1961: .TP 10
        !          1962: .BI ^D 
        !          1963: Delete current character.
        !          1964: .PP
        !          1965: .TP 10
        !          1966: .BI M-d
        !          1967: Delete current word.
        !          1968: .PP
        !          1969: .TP 10
        !          1970: .BI M-^H
        !          1971: (Meta-backspace) Delete previous word.
        !          1972: .PP
        !          1973: .TP 10
        !          1974: .BI M-h
        !          1975: Delete previous word.
        !          1976: .PP
        !          1977: .TP 10
        !          1978: .BI M-^?
        !          1979: (Meta-DEL) Delete previous word (if your interrupt character is
        !          1980: .B ^?
        !          1981: (DEL, the default) then this command will not work).
        !          1982: .PP
        !          1983: .TP 10
        !          1984: .BI ^T
        !          1985: Transpose current character with next character in
        !          1986: .I emacs
        !          1987: mode.
        !          1988: Transpose two previous characters in
        !          1989: .I gmacs
        !          1990: mode.
        !          1991: .PP
        !          1992: .TP 10
        !          1993: .BI ^C
        !          1994: Capitalize current character.
        !          1995: .PP
        !          1996: .TP 10
        !          1997: .BI M-C
        !          1998: Capitalize current word.
        !          1999: .PP
        !          2000: .TP 10
        !          2001: .BI ^K 
        !          2002: Kill from the cursor to the end of the line.
        !          2003: If given a parameter of zero then kill from
        !          2004: the start of line to the cursor.
        !          2005: .PP
        !          2006: .TP 10
        !          2007: .BI ^W
        !          2008: Kill from the cursor to the mark.
        !          2009: .PP
        !          2010: .TP 10
        !          2011: .BI M-p
        !          2012: Push the region from the cursor to the mark on the stack.
        !          2013: .PP
        !          2014: .TP 10
        !          2015: .I kill
        !          2016: (User defined kill character as defined
        !          2017: by the stty command, usually
        !          2018: .B ^G
        !          2019: or
        !          2020: .BR @ .)
        !          2021: Kill the entire current line.
        !          2022: If two
        !          2023: .I kill
        !          2024: characters are entered in succession, all
        !          2025: kill characters from then on cause a line feed
        !          2026: (useful when using paper terminals).
        !          2027: .PP
        !          2028: .TP 10
        !          2029: .BI ^Y
        !          2030: Restore last item removed from line. (Yank item back to the line.)
        !          2031: .PP
        !          2032: .TP 10
        !          2033: .BI ^L 
        !          2034: Line feed and print current line.
        !          2035: .PP
        !          2036: .TP 10
        !          2037: .BI ^@
        !          2038: (Null character) Set mark.
        !          2039: .PP
        !          2040: .TP 10
        !          2041: .BI M-
        !          2042: (Meta space) Set mark.
        !          2043: .PP
        !          2044: .TP 10
        !          2045: .BI ^J 
        !          2046: (New\ line)  Execute the current line.
        !          2047: .PP
        !          2048: .TP 10
        !          2049: .BI ^M 
        !          2050: (Return)  Execute the current line.
        !          2051: .PP
        !          2052: .TP 10
        !          2053: .I eof
        !          2054: End-of-file character,
        !          2055: normally
        !          2056: .BR ^D ,
        !          2057: will terminate the shell
        !          2058: if the current line is null.
        !          2059: .PP
        !          2060: .TP 10
        !          2061: .BI ^P
        !          2062: Fetch previous command. 
        !          2063: Each time 
        !          2064: .B ^P 
        !          2065: is entered
        !          2066: the previous command back in time is accessed.
        !          2067: .PP
        !          2068: .TP 10
        !          2069: .BI M-<
        !          2070: Fetch the least recent (oldest) history line.
        !          2071: .PP
        !          2072: .TP 10
        !          2073: .BI M->
        !          2074: Fetch the most recent (youngest) history line.
        !          2075: .PP
        !          2076: .TP 10
        !          2077: .BI ^N
        !          2078: Fetch next command. 
        !          2079: Each time 
        !          2080: .B ^N 
        !          2081: is entered
        !          2082: the next command forward in time is accessed.
        !          2083: .PP
        !          2084: .TP 10
        !          2085: .BI ^R string
        !          2086: Reverse search history for a previous command line containing
        !          2087: .IR string .
        !          2088: If a parameter of zero is given the search is forward.
        !          2089: .I String
        !          2090: is terminated by a "RETURN" or "NEW\ LINE".
        !          2091: .PP
        !          2092: .TP 10
        !          2093: .B  ^O
        !          2094: Operate \- Execute the current line and fetch
        !          2095: the next line relative to current line from the
        !          2096: history file.
        !          2097: .PP
        !          2098: .TP 10
        !          2099: .BI M- digits
        !          2100: (Escape) Define numeric parameter, the digits
        !          2101: are taken as a parameter to the next command.
        !          2102: The commands that accept a parameter are 
        !          2103: .BR ^F ,
        !          2104: .BR ^B ,
        !          2105: .IR erase ,
        !          2106: .BR ^D ,
        !          2107: .BR ^K ,
        !          2108: .BR ^R ,
        !          2109: .B ^P
        !          2110: and
        !          2111: .BR ^N .
        !          2112: .PP
        !          2113: .TP 10
        !          2114: .BI M- letter
        !          2115: Soft-key \- Your alias list is searched for an
        !          2116: alias by the name
        !          2117: .BI _ letter
        !          2118: and if an alias of this name is defined, its
        !          2119: value will be inserted on the line.
        !          2120: The
        !          2121: .I letter
        !          2122: must not be one of the above meta-functions.
        !          2123: .PP
        !          2124: .TP 10
        !          2125: .B  M-_
        !          2126: The last parameter of the previous command is inserted
        !          2127: on the line.
        !          2128: .PP
        !          2129: .TP 10
        !          2130: .B  M-.
        !          2131: The last parameter of the previous command is inserted
        !          2132: on the line.
        !          2133: .PP
        !          2134: .TP 10
        !          2135: .B  M-*
        !          2136: Attempt file name generation on the current word.
        !          2137: .PP
        !          2138: .TP 10
        !          2139: .BI ^U
        !          2140: Multiply parameter of next command by 4.
        !          2141: .PP
        !          2142: .TP 10
        !          2143: .BI \e
        !          2144: Escape next character.  
        !          2145: Editing characters, the user's erase, kill and 
        !          2146: interrupt (normally
        !          2147: .B ^?
        !          2148: )
        !          2149: characters 
        !          2150: may be entered
        !          2151: in a command line or in a search string if preceded by a
        !          2152: .BR \e .
        !          2153: The
        !          2154: .B \e
        !          2155: removes the next character's
        !          2156: editing features (if any).
        !          2157: .PP
        !          2158: .TP 10
        !          2159: .BI ^V
        !          2160: Display version of the shell.
        !          2161: .PD
        !          2162: .SS Vi Editing Mode
        !          2163: There are two typing modes.
        !          2164: Initially, when you enter a command you are in the
        !          2165: .I input\^
        !          2166: mode.
        !          2167: To edit, the user enters
        !          2168: .I control\^
        !          2169: mode by typing ESC (
        !          2170: .B 033
        !          2171: ) and
        !          2172: moves the cursor to the point needing correction and
        !          2173: then inserts or deletes characters or words as needed.
        !          2174: Most control commands accept an optional repeat
        !          2175: .I count
        !          2176: prior to the command.
        !          2177: .P
        !          2178: When in vi mode on most systems,
        !          2179: canonical processing is initially enabled and the
        !          2180: command will be echoed again if the speed is 1200 baud or greater and it
        !          2181: contains any control characters or less than one second has elapsed
        !          2182: since the prompt was printed.
        !          2183: The ESC character terminates canonical processing for the remainder of the command
        !          2184: and the user can than modify the command line.
        !          2185: This scheme has the advantages of canonical processing with the type-ahead
        !          2186: echoing of raw mode.
        !          2187: .P
        !          2188: If the option
        !          2189: .B viraw\^
        !          2190: is also set, the terminal will always have canonical processing
        !          2191: disabled.  This mode is implicit for systems that do not support two
        !          2192: alternate end of line delimiters,
        !          2193: and may be helpful for certain terminals.
        !          2194: .SS "\ \ \ \ \ Input Edit Commands"
        !          2195: .PP
        !          2196: .RS
        !          2197: By default the editor is in input mode.
        !          2198: .PD 0
        !          2199: .TP 10
        !          2200: .I erase
        !          2201: (User defined erase character as defined
        !          2202: by the stty command, usually
        !          2203: .B ^H
        !          2204: or
        !          2205: .BR # .)
        !          2206: Delete previous character.
        !          2207: .TP 10
        !          2208: .BI ^W
        !          2209: Delete the previous blank separated word.
        !          2210: .TP 10
        !          2211: .BI ^D
        !          2212: Terminate the shell.
        !          2213: .TP 10
        !          2214: .BI ^V
        !          2215: Escape next character.  
        !          2216: Editing characters, the user's erase or kill
        !          2217: characters may be entered
        !          2218: in a command line or in a search string if preceded by a
        !          2219: .BR ^V .
        !          2220: The
        !          2221: .B ^V 
        !          2222: removes the next character's
        !          2223: editing features (if any).
        !          2224: .TP 10
        !          2225: .BI \e
        !          2226: Escape the next
        !          2227: .I erase
        !          2228: or
        !          2229: .I kill
        !          2230: character.
        !          2231: .P
        !          2232: .RE
        !          2233: .SS "\ \ \ \ \ Motion Edit Commands"
        !          2234: .RS
        !          2235: These commands will move the cursor.
        !          2236: .TP 10
        !          2237: [\f2count\fP]\f3l\fP
        !          2238: Cursor forward (right) one character. 
        !          2239: .TP 10
        !          2240: [\f2count\fP]\f3w\fP
        !          2241: Cursor forward one alpha-numeric word.
        !          2242: .TP 10
        !          2243: [\f2count\fP]\f3W\fP
        !          2244: Cursor to the beginning of the next word that follows a blank.
        !          2245: .TP 10
        !          2246: [\f2count\fP]\f3e\fP
        !          2247: Cursor to end of word.
        !          2248: .TP 10
        !          2249: [\f2count\fP]\f3E\fP
        !          2250: Cursor to end of the current blank delimited word.
        !          2251: .TP 10
        !          2252: [\f2count\fP]\f3h\fP
        !          2253: Cursor backward (left) one character.
        !          2254: .TP 10
        !          2255: [\f2count\fP]\f3b\fP
        !          2256: Cursor backward one word.
        !          2257: .TP 10
        !          2258: [\f2count\fP]\f3B\fP
        !          2259: Cursor to preceding blank separated word.
        !          2260: .TP 10
        !          2261: [\f2count\fP]\f3f\fP\f2c\fP
        !          2262: Find the next character \fIc\fP in the current line.
        !          2263: .TP 10
        !          2264: [\f2count\fP]\f3F\fP\f2c\fP
        !          2265: Find the previous character \fIc\fP in the current line.
        !          2266: .TP 10
        !          2267: [\f2count\fP]\f3t\fP\f2c\fP
        !          2268: Equivalent to
        !          2269: .B f
        !          2270: followed by
        !          2271: .BR h .
        !          2272: .TP 10
        !          2273: [\f2count\fP]\f3T\fP\f2c\fP
        !          2274: Equivalent to
        !          2275: .B F
        !          2276: followed by
        !          2277: .BR l .
        !          2278: .TP 10
        !          2279: .B ;
        !          2280: Repeats the last single character find command,
        !          2281: .BR f ,
        !          2282: .BR F ,
        !          2283: .BR t ,
        !          2284: or
        !          2285: .BR T .
        !          2286: .TP 10
        !          2287: .B ,
        !          2288: Reverses the last single character find command.
        !          2289: .TP 10
        !          2290: .B 0 
        !          2291: Cursor to start of line.
        !          2292: .TP 10
        !          2293: .B ^ 
        !          2294: Cursor to first non-blank character in line.
        !          2295: .TP 10
        !          2296: .B $ 
        !          2297: Cursor to end of line.
        !          2298: .RE
        !          2299: .SS "\ \ \ \ \ Search Edit Commands"
        !          2300: .RS
        !          2301: These commands access your command history.
        !          2302: .TP 10
        !          2303: [\f2count\fP]\f3k\fP
        !          2304: Fetch previous command. 
        !          2305: Each time 
        !          2306: .B k 
        !          2307: is entered
        !          2308: the previous command back in time is accessed.
        !          2309: .TP 10
        !          2310: [\f2count\fP]\f3\-\fP
        !          2311: Equivalent to
        !          2312: .BR k .
        !          2313: .TP 10
        !          2314: [\f2count\fP]\f3j\fP
        !          2315: Fetch next command. 
        !          2316: Each time 
        !          2317: .B j 
        !          2318: is entered
        !          2319: the next command forward in time is accessed.
        !          2320: .TP 10
        !          2321: [\f2count\fP]\f3+\fP
        !          2322: Equivalent to
        !          2323: .BR j .
        !          2324: .TP 10
        !          2325: [\f2count\fP]\f3G\fP
        !          2326: The command number
        !          2327: .I count
        !          2328: is fetched.
        !          2329: The default is the least recent history command.
        !          2330: .TP 10
        !          2331: .BI / string
        !          2332: Search backward through history for a previous command containing
        !          2333: .IR string .
        !          2334: .I String
        !          2335: is terminated by a "RETURN" or "NEW\ LINE".
        !          2336: If \fIstring\fP is null the previous string will be used.
        !          2337: .TP 10
        !          2338: .BI ? string
        !          2339: Same as
        !          2340: .B /
        !          2341: except that search will be in the forward direction.
        !          2342: .TP 10
        !          2343: .B n
        !          2344: Search for next match of the last pattern to
        !          2345: .B /
        !          2346: or
        !          2347: .B ?
        !          2348: commands.
        !          2349: .TP 10
        !          2350: .B N
        !          2351: Search for next match of the last pattern to
        !          2352: .B /
        !          2353: or
        !          2354: .BR ? ,
        !          2355: but in reverse direction.
        !          2356: Search history for the \fIstring\fP entered by the previous \fB/\fP command.
        !          2357: .RE
        !          2358: .SS "\ \ \ \ \ Text Modification Edit Commands"
        !          2359: .RS
        !          2360: These commands will modify the line.
        !          2361: .TP 10
        !          2362: .B a
        !          2363: Enter input mode and enter text after the current character.
        !          2364: .TP 10
        !          2365: .B A
        !          2366: Append text to the end of the line.  Equivalent to
        !          2367: .BR $a .
        !          2368: .TP 10
        !          2369: [\f2count\fP]\f3c\fP\f2motion\fP
        !          2370: .TP 10
        !          2371: \f3c\fP[\f2count\fP]\f2motion\fP
        !          2372: Delete current character through the character
        !          2373: .I motion
        !          2374: moves the cursor to and enter input mode.
        !          2375: If \fImotion\fP is
        !          2376: .BR c ,
        !          2377: the entire line will be deleted and
        !          2378: input mode entered.
        !          2379: .TP 10
        !          2380: .B C
        !          2381: Delete the current character through the end of line and enter input mode.
        !          2382: Equivalent to
        !          2383: .BR c$ .
        !          2384: .TP 10
        !          2385: .B S
        !          2386: Equivalent to
        !          2387: .BR cc .
        !          2388: .TP 10
        !          2389: .B D
        !          2390: Delete the current character through the end of line.
        !          2391: .TP 10
        !          2392: [\f2count\fP]\f3d\fP\f2motion\fP
        !          2393: .TP 10
        !          2394: \f3d\fP[\f2count\fP]\f2motion\fP
        !          2395: Delete current character through the character
        !          2396: .I motion
        !          2397: moves the cursor to.  Equivalent to
        !          2398: .BR d$ .
        !          2399: If \fImotion\fP is
        !          2400: .B d ,
        !          2401: the entire line will be deleted.
        !          2402: .TP 10
        !          2403: .B i
        !          2404: Enter input mode and insert text before the current character.
        !          2405: .TP 10
        !          2406: .B I
        !          2407: Insert text before the beginning of the line.  Equivalent to
        !          2408: the two character sequence
        !          2409: .BR ^i .
        !          2410: .TP 10
        !          2411: [\f2count\fP]\f3P\fP
        !          2412: Place the previous text modification before the cursor.
        !          2413: .TP 10
        !          2414: [\f2count\fP]\f3p\fP
        !          2415: Place the previous text modification after the cursor.
        !          2416: .TP 10
        !          2417: .B R
        !          2418: Enter input mode and
        !          2419: replace characters on the screen with characters you type overlay fashion.
        !          2420: .TP 10
        !          2421: .BI r c
        !          2422: Replace the current character with
        !          2423: .IR c .
        !          2424: .TP 10
        !          2425: [\f2count\fP]\f3x\fP
        !          2426: Delete current character.
        !          2427: .TP 10
        !          2428: [\f2count\fP]\f3X\fP
        !          2429: Delete preceding character.
        !          2430: .TP 10
        !          2431: [\f2count\fP]\f3.\fP
        !          2432: Repeat the previous text modification command.
        !          2433: .TP 10
        !          2434: .B \(ap
        !          2435: Invert the case of the current character and advance the cursor.
        !          2436: .TP 10
        !          2437: [\f2count\fP]\f3_\fP
        !          2438: Causes the
        !          2439: .I count\^
        !          2440: word of the previous command to be appended and
        !          2441: input mode entered.
        !          2442: The last word is used
        !          2443: if
        !          2444: .I count\^
        !          2445: is omitted.
        !          2446: .TP 10
        !          2447: .B *
        !          2448: Causes an
        !          2449: .B *
        !          2450: to be appended to the current word and file name generation attempted.
        !          2451: If no match is found,
        !          2452: it rings the bell.  Otherwise, the word is replaced
        !          2453: by the matching pattern and input mode is entered.
        !          2454: .RE
        !          2455: .SS "\ \ \ \ \ Other Edit Commands"
        !          2456: .RS
        !          2457: Miscellaneous commands.
        !          2458: .TP 10
        !          2459: .B u
        !          2460: Undo the last text modifying command.
        !          2461: .TP 10
        !          2462: .B U
        !          2463: Undo all the text modifying commands performed on the line.
        !          2464: .TP 10
        !          2465: [\f2count\fP]\f3v\fP
        !          2466: Returns the command
        !          2467: .BI "fc \-e ${\s-1VISUAL\s+1:\-${\s-1EDITOR\s+1:\-vi}}" " count"
        !          2468: in the input buffer.
        !          2469: If
        !          2470: .I count\^
        !          2471: is omitted, then the current line is used.
        !          2472: .TP 10
        !          2473: .BI ^L 
        !          2474: Line feed and print current line.
        !          2475: Has effect only in control mode.
        !          2476: .TP 10
        !          2477: .BI ^J 
        !          2478: (New\ line)  Execute the current line, regardless of mode.
        !          2479: .TP 10
        !          2480: .BI ^M 
        !          2481: (Return)  Execute the current line, regardless of mode.
        !          2482: .TP 10
        !          2483: .B \#
        !          2484: Equivalent to
        !          2485: \f3I#\fP\f2<cr>\fP.
        !          2486: Useful for causing the current line to be
        !          2487: inserted in the history without being executed.
        !          2488: .RE
        !          2489: .PD
        !          2490: .SS Special Commands.
        !          2491: The following simple-commands are executed in the shell process.
        !          2492: Input/Output redirection is permitted.
        !          2493: File descriptor 1 is the default output location.
        !          2494: Parameter assignment lists preceding the command do not
        !          2495: remain in effect when the command completes unless noted.
        !          2496: .TP
        !          2497: \f3:\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
        !          2498: Parameter assignments remain in effect after the command completes.
        !          2499: The command only expands parameters.
        !          2500: A zero exit code is returned.
        !          2501: .br
        !          2502: .ne 2
        !          2503: .TP
        !          2504: \f3\|. \f2file\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
        !          2505: Parameter assignments remain in effect after the command completes.
        !          2506: Read and execute commands from
        !          2507: .I file\^
        !          2508: and return.
        !          2509: The commands are executed in the current Shell environment.
        !          2510: The search path
        !          2511: specified by
        !          2512: .B
        !          2513: .SM PATH
        !          2514: is used to find the directory containing
        !          2515: .IR file .
        !          2516: If any arguments
        !          2517: .I arg\^
        !          2518: are given,
        !          2519: they become the positional parameters.
        !          2520: Otherwise the positional parameters are unchanged.
        !          2521: .TP
        !          2522: \f3alias\fP \*(OK \f3\-tx\fP \*(CK \*(OK \f2name\fP\*(OK \f2=value\^\fP \*(CK  .\|.\|. \*(CK
        !          2523: .I Alias\^
        !          2524: with no arguments prints the list of aliases
        !          2525: in the form
        !          2526: .I name=value\^
        !          2527: on standard output.
        !          2528: An
        !          2529: .I alias\^
        !          2530: is defined
        !          2531: for each name whose
        !          2532: .I value\^
        !          2533: is given.
        !          2534: A trailing space in
        !          2535: .I value\^
        !          2536: causes the next word to be checked for
        !          2537: alias substitution.
        !          2538: The
        !          2539: .B \-t
        !          2540: flag is used to set and list tracked aliases.
        !          2541: The value of a tracked alias is the full pathname
        !          2542: corresponding to the given
        !          2543: .IR name .
        !          2544: The value becomes undefined when the value of
        !          2545: .SM
        !          2546: .B PATH
        !          2547: is reset but the aliases remained tracked.
        !          2548: Without the
        !          2549: .B \-t
        !          2550: flag,
        !          2551: for each
        !          2552: .I name\^
        !          2553: in the argument list
        !          2554: for which no
        !          2555: .I value\^
        !          2556: is given, the name
        !          2557: and value of the alias is printed.
        !          2558: The
        !          2559: .B \-x
        !          2560: flag is used to set or print exported aliases.
        !          2561: An exported alias is defined across sub-shell environments.
        !          2562: Alias returns true unless a
        !          2563: .I name\^
        !          2564: is given for which no alias has been defined.
        !          2565: .TP
        !          2566: \f3bg\fP \*(OK \f3%\f2job\^\fP \*(CK
        !          2567: This command is only built-in on systems that support job control.
        !          2568: Puts the specified
        !          2569: .I job\^
        !          2570: into the background.
        !          2571: The current job is put in the background
        !          2572: if
        !          2573: .I job\^
        !          2574: is not specified.
        !          2575: .TP
        !          2576: \f3break\fP \*(OK \f2n\^\fP \*(CK
        !          2577: Exit from the enclosing
        !          2578: .BR for
        !          2579: .BR while
        !          2580: .BR until
        !          2581: or
        !          2582: .B select\^
        !          2583: loop, if any.
        !          2584: If
        !          2585: .I n\^
        !          2586: is specified then break
        !          2587: .I n\^
        !          2588: levels.
        !          2589: .TP
        !          2590: \f3continue\fP \*(OK \f2n\^\fP \*(CK
        !          2591: Resume the next iteration of the enclosing
        !          2592: .BR for
        !          2593: .BR while
        !          2594: .BR until
        !          2595: or
        !          2596: .B select\^
        !          2597: loop.
        !          2598: If
        !          2599: .I n\^
        !          2600: is specified then resume at the
        !          2601: .IR n -th
        !          2602: enclosing loop.
        !          2603: .TP
        !          2604: .PD 0
        !          2605: \f3cd\fP \*(OK \f2arg\^\fP \*(CK
        !          2606: .TP
        !          2607: \f3cd\fP  \f2old\^\fP \f2new\^\fP
        !          2608: .PD
        !          2609: This command can be in either of two forms.
        !          2610: In the first form it
        !          2611: changes the current directory to
        !          2612: .IR arg .
        !          2613: If
        !          2614: .I arg\^
        !          2615: is
        !          2616: .B \-
        !          2617: the directory is changed to the previous
        !          2618: directory.
        !          2619: The shell
        !          2620: parameter
        !          2621: .B
        !          2622: .SM HOME
        !          2623: is the default
        !          2624: .IR arg .
        !          2625: The parameter
        !          2626: .SM
        !          2627: .B PWD
        !          2628: is set to the current directory.
        !          2629: The shell parameter
        !          2630: .B
        !          2631: .SM CDPATH
        !          2632: defines the search path for
        !          2633: the directory containing 
        !          2634: .IR arg .
        !          2635: Alternative directory names are separated by
        !          2636: a colon
        !          2637: .RB ( : ).
        !          2638: The default path is
        !          2639: .B <null>
        !          2640: (specifying the current directory).
        !          2641: Note that the current directory is specified by a null path name,
        !          2642: which can appear immediately after the equal sign
        !          2643: or between the colon delimiters anywhere else in the path list.
        !          2644: If 
        !          2645: .I arg
        !          2646: begins with a \f3/\fP then the search path
        !          2647: is not used.
        !          2648: Otherwise, each directory in the path is
        !          2649: searched for
        !          2650: .IR arg .
        !          2651: .P
        !          2652: The second form of
        !          2653: .B cd
        !          2654: substitutes the string
        !          2655: .I new
        !          2656: for the string
        !          2657: .I old
        !          2658: in the current directory name,
        !          2659: .SM
        !          2660: .B PWD
        !          2661: and tries to change to this new directory.
        !          2662: .P
        !          2663: The
        !          2664: .B cd\^
        !          2665: command may not be executed by
        !          2666: .I rsh\^.
        !          2667: .TP
        !          2668: \f3eval\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
        !          2669: The arguments are read as input
        !          2670: to the shell
        !          2671: and the resulting command(s) executed.
        !          2672: .TP
        !          2673: \f3exec\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
        !          2674: Parameter assignments remain in effect after the command completes.
        !          2675: If
        !          2676: .I arg\^
        !          2677: is given,
        !          2678: the command specified by
        !          2679: the arguments is executed in place of this shell
        !          2680: without creating a new process.
        !          2681: Input/output arguments may appear and
        !          2682: affect the current process.
        !          2683: If no 
        !          2684: arguments are given
        !          2685: the effect of this command is to
        !          2686: modify file descriptors
        !          2687: as prescribed by the input/output redirection list.
        !          2688: In this case,
        !          2689: any file descriptor numbers greater than 2 that are
        !          2690: opened with this mechanism are closed when invoking
        !          2691: another program.
        !          2692: .TP
        !          2693: \f3exit\fP \*(OK \f2n\^\fP \*(CK
        !          2694: Causes the shell to exit
        !          2695: with the exit status specified by
        !          2696: .IR n .
        !          2697: If
        !          2698: .I n\^
        !          2699: is omitted then the exit status is that of the last command executed.
        !          2700: An end-of-file will also cause the shell to exit
        !          2701: except for a
        !          2702: shell which has the
        !          2703: .I ignoreeof
        !          2704: option (See
        !          2705: .B set
        !          2706: below) turned on.
        !          2707: .TP
        !          2708: \f3export\fP \*(OK \f2name\^\fP .\|.\|. \*(CK
        !          2709: The given
        !          2710: .IR name s
        !          2711: are marked for automatic
        !          2712: export to the
        !          2713: .I environment\^
        !          2714: of subsequently-executed commands.
        !          2715: .TP
        !          2716: .PD 0
        !          2717: \f3fc\fP \*(OK \f3\-e \f2ename\^\fP \ \*(CK \*(OK \f3\-\f3nlr\^\f1 \*(CK \*(OK \f2first\^\fP \*(CK \*(OK \f2last\^\fP \*(CK
        !          2718: .TP
        !          2719: \f3fc \-e \-\fP  \*(OK \f2old\fP\f3\=\fP\f2new\^\fP \*(CK \*(OK \f2command\^\fP \*(CK
        !          2720: .PD
        !          2721: In the first form,
        !          2722: a range of commands from
        !          2723: .I first\^
        !          2724: to
        !          2725: .I last\^
        !          2726: is selected from the last
        !          2727: .SM
        !          2728: .B HISTSIZE
        !          2729: commands that were typed at the terminal.
        !          2730: The arguments
        !          2731: .I first\^
        !          2732: and
        !          2733: .I last\^
        !          2734: may be specified as a number or as a string.
        !          2735: A string is used to locate the most recent command starting with
        !          2736: the given string.
        !          2737: A negative number is used as an offset to the current command number.
        !          2738: If the flag
        !          2739: .BR \-l ,
        !          2740: is selected,
        !          2741: the commands are listed on standard output.
        !          2742: Otherwise, the editor program
        !          2743: .I ename\^
        !          2744: is invoked on a file containing these
        !          2745: keyboard commands.
        !          2746: If
        !          2747: .I ename\^
        !          2748: is not supplied, then the value of the parameter
        !          2749: .SM
        !          2750: .B FCEDIT
        !          2751: (default /bin/ed)
        !          2752: is used as the editor.
        !          2753: When editing is complete, the edited command(s)
        !          2754: is executed.
        !          2755: .I last\^
        !          2756: is not specified
        !          2757: then it will be set to
        !          2758: .IR first .
        !          2759: If
        !          2760: .I first\^
        !          2761: is not specified
        !          2762: the default is the previous command
        !          2763: for editing and \-16 for listing.
        !          2764: The flag
        !          2765: .B \-r
        !          2766: reverses the order of the commands and
        !          2767: the flag
        !          2768: .B \-n
        !          2769: suppresses command numbers when listing.
        !          2770: In the second form the
        !          2771: .I command\^
        !          2772: is re-executed after the substitution
        !          2773: \f2old\^\fP\f3=\fP\f2new\^\fP
        !          2774: is performed.
        !          2775: .TP
        !          2776: \f3fg\fP \*(OK \f3%\f2job\^\fP \*(CK
        !          2777: This command is only built-in on systems that support job control.
        !          2778: If
        !          2779: .I job\^
        !          2780: is specified it brings it to the foreground.
        !          2781: Otherwise, the current job is
        !          2782: brought into the foreground.
        !          2783: .TP
        !          2784: \f3jobs\fP \*(OK \f3\-l\^\fP \*(CK
        !          2785: Lists the active jobs; given the
        !          2786: .B \-l
        !          2787: options lists process id's in addition to the normal information.
        !          2788: .TP
        !          2789: \f3kill\fP \*(OK \f3\-\f2sig\^\fP \*(CK \f2process\^\fP .\|.\|.
        !          2790: Sends either the TERM (terminate) signal or the
        !          2791: specified signal to the specified jobs or processes.
        !          2792: Signals are either given by number or by names (as given in
        !          2793: .I /usr/include/signal.h,
        !          2794: stripped of the prefix ``SIG'').
        !          2795: The signal names are listed by
        !          2796: .BR "kill \-l'" .
        !          2797: There is no default, saying just `kill' does not
        !          2798: send a signal to the current job.
        !          2799: If the signal being sent is TERM (terminate) or HUP (hangup),
        !          2800: then the job or process will be sent a CONT (continue) signal
        !          2801: if it is stopped.
        !          2802: The argument
        !          2803: .I process\^
        !          2804: can be either a process id or a job.
        !          2805: .TP
        !          2806: \f3let\fP  \f2arg\^\fP .\|.\|.
        !          2807: Each
        !          2808: .I arg
        !          2809: is an
        !          2810: .IR "arithmetic expression"
        !          2811: to be evaluated.
        !          2812: All calculations are done as long
        !          2813: integers and no check for overflow
        !          2814: is performed.
        !          2815: Expressions consist of constants,
        !          2816: named parameters, and operators.
        !          2817: The following set of operators,
        !          2818: listed in order of decreasing precedence,
        !          2819: have been implemented:
        !          2820: .RS
        !          2821: .PD 0
        !          2822: .TP
        !          2823: .B \-
        !          2824: unary minus
        !          2825: .TP
        !          2826: .B !
        !          2827: logical negation
        !          2828: .TP
        !          2829: .B "*  /  %"
        !          2830: .br
        !          2831: multiplication, division, remainder
        !          2832: .TP
        !          2833: .B "+  \-"
        !          2834: addition, subtraction
        !          2835: .TP
        !          2836: .B "<=  >=  <  >"
        !          2837: .br
        !          2838: comparison
        !          2839: .TP
        !          2840: .B "==  !="
        !          2841: .br
        !          2842: equality  inequality
        !          2843: .TP
        !          2844: .B =
        !          2845: arithmetic replacement
        !          2846: .PD
        !          2847: .PP
        !          2848: Sub-expressions in parentheses
        !          2849: .B (\|)
        !          2850: are evaluated first and can be used
        !          2851: to override the above precedence rules.
        !          2852: The evaluation within a precedence group
        !          2853: is from right to left for the
        !          2854: .B =
        !          2855: operator
        !          2856: and from left to right for the others.
        !          2857: .PP
        !          2858: A parameter name must be a valid
        !          2859: .IR identifier .
        !          2860: When a parameter is encountered,
        !          2861: the value associated with the
        !          2862: parameter name is substituted and expression evaluation resumes.
        !          2863: Up to nine levels of recursion are
        !          2864: permitted.
        !          2865: .PP
        !          2866: The return code is
        !          2867: 0 if the value of the last expression
        !          2868: is non-zero, and 1 otherwise.
        !          2869: .RE
        !          2870: .TP
        !          2871: \f3newgrp\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
        !          2872: Equivalent to
        !          2873: .BI "exec newgrp" " arg\^"
        !          2874: \&.\|.\|.\^.
        !          2875: .TP
        !          2876: \f3print\fP \*(OK \f3\-Rnprsu\^\fP\*(OK\f2n\fP \*(CK  \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
        !          2877: The shell output mechanism.
        !          2878: With no flags or with flag
        !          2879: .BR \- ,
        !          2880: the arguments are printed
        !          2881: on standard output as described by
        !          2882: .IR echo (1).
        !          2883: In raw mode,
        !          2884: .B \-R
        !          2885: or
        !          2886: .BR \-r ,
        !          2887: the escape conventions of
        !          2888: .I echo
        !          2889: are ignored.
        !          2890: The
        !          2891: .B \-R
        !          2892: option will print all subsequent arguments and options
        !          2893: other than
        !          2894: .BR \-n .
        !          2895: The
        !          2896: .B \-p
        !          2897: option causes the 
        !          2898: arguments to be written onto the pipe
        !          2899: of the process spawned with
        !          2900: .B \(bv& 
        !          2901: instead of standard output.
        !          2902: The
        !          2903: .B \-s
        !          2904: option causes the 
        !          2905: arguments to be written onto the history file
        !          2906: instead of standard output.
        !          2907: The
        !          2908: .B \-u
        !          2909: flag can be used to specify a one digit
        !          2910: file descriptor unit number
        !          2911: .B n\^
        !          2912: on which the
        !          2913: output will be placed.
        !          2914: The default is 1.
        !          2915: If the flag
        !          2916: .B \-n
        !          2917: is used, no 
        !          2918: .B new-line\^
        !          2919: is added to the output.
        !          2920: .TP
        !          2921: \f3read\fP \*(OK \f3\-prsu\^\fP\*(OK \f2n\^\fP \*(CK \*(CK \*(OK \f2name\f3?\f2prompt\^\f1 \*(CK \*(OK \f2name\^\fP .\|.\|. \*(CK
        !          2922: The shell input mechanism.
        !          2923: One line is read and
        !          2924: is broken up into words using the characters in
        !          2925: .B
        !          2926: .SM IFS
        !          2927: as separators.
        !          2928: In raw mode,
        !          2929: .B \-r,
        !          2930: a 
        !          2931: .B \e
        !          2932: at the end of a line does not signify
        !          2933: line continuation.
        !          2934: The first
        !          2935: word is assigned to the first
        !          2936: .IR name ,
        !          2937: the second word
        !          2938: to the second
        !          2939: .IR name ,
        !          2940: etc., with leftover words assigned to the last
        !          2941: .IR name .
        !          2942: The
        !          2943: .B \-p
        !          2944: option causes the input line
        !          2945: to be taken from the input pipe
        !          2946: of a process spawned by the shell
        !          2947: using
        !          2948: .BR \(bv& .
        !          2949: If the
        !          2950: .B \-s
        !          2951: fag is present,
        !          2952: the input will be saved as a command in the history file.
        !          2953: The flag
        !          2954: .B \-u
        !          2955: can be used to specify a one digit file
        !          2956: descriptor unit to read from.
        !          2957: The file descriptor can be opened with the
        !          2958: .B exec\^
        !          2959: special command.
        !          2960: The default value of
        !          2961: .I n\^
        !          2962: is 0.
        !          2963: If
        !          2964: .IR name
        !          2965: is omitted then
        !          2966: .SM
        !          2967: .B REPLY
        !          2968: is used as the default
        !          2969: .IR name.
        !          2970: The return code is 0 unless an end-of-file is encountered.
        !          2971: An end-of-file with the
        !          2972: .B \-p
        !          2973: option causes cleanup for this process
        !          2974: so that another can be spawned.
        !          2975: If the first argument contains a
        !          2976: .BR ? ,
        !          2977: the remainder of this word is used as a
        !          2978: .I prompt\^
        !          2979: when the shell is interactive.
        !          2980: If the given file descriptor is open for writing
        !          2981: and is a terminal device then the prompt is placed
        !          2982: on this unit.
        !          2983: Otherwise the prompt is issued on file descriptor 2.
        !          2984: The return code is 0 unless an end-of-file is encountered.
        !          2985: .TP
        !          2986: \f3readonly\fP \*(OK \f2name\fP .\|.\|. \*(CK
        !          2987: The given
        !          2988: .IR names
        !          2989: are marked
        !          2990: readonly and these
        !          2991: names cannot be changed
        !          2992: by subsequent assignment.
        !          2993: .TP
        !          2994: \f3return\fP \*(OK \f2n\^\fP \*(CK
        !          2995: Causes a shell
        !          2996: .I function
        !          2997: to return
        !          2998: to the invoking script
        !          2999: with the return status specified by
        !          3000: .IR n .
        !          3001: If
        !          3002: .I n\^
        !          3003: is omitted then the return status is that of the last command executed.
        !          3004: If
        !          3005: .B return
        !          3006: is invoked while not in a
        !          3007: .I function
        !          3008: then it is the same as an
        !          3009: .BR exit .
        !          3010: .TP
        !          3011: \f3set\fP \*(OK \f3\-aefhkmnostuvx\fP \*(CK \*(OK \f3\-o\fP \f2option\^\fP .\|.\|. \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
        !          3012: The flags for this command have meaning as follows:
        !          3013: .RS
        !          3014: .PD 0
        !          3015: .TP 8
        !          3016: .B \-a
        !          3017: All subsequent parameters that are defined are automatically exported.
        !          3018: .TP 8
        !          3019: .B \-e
        !          3020: If the shell is non-interactive and if a command fails,
        !          3021: execute the
        !          3022: .SM
        !          3023: .B ERR
        !          3024: trap, if set,
        !          3025: and exit immediately.
        !          3026: This mode is disabled while reading profiles.
        !          3027: .TP 8
        !          3028: .B \-f
        !          3029: Disables file name generation.
        !          3030: .TP 8
        !          3031: .B \-h
        !          3032: Each command whose name is an
        !          3033: .I identifier\^
        !          3034: becomes a tracked alias when first encountered.
        !          3035: .TP 8
        !          3036: .B \-k
        !          3037: All parameter assignment arguments are placed in the environment for a command,
        !          3038: not just those that precede the command name.
        !          3039: .TP 8
        !          3040: .B \-m
        !          3041: Background jobs will run in a separate process group
        !          3042: and a line will print upon completion.
        !          3043: The exit status of background jobs is reported in a completion message.
        !          3044: On systems with job control,
        !          3045: this flag is turned on automatically for
        !          3046: interactive shells.
        !          3047: .TP 8
        !          3048: .B \-n
        !          3049: Read commands but do not execute them.
        !          3050: .TP 8
        !          3051: .B \-o
        !          3052: The following argument can be one of the following option names:
        !          3053: .RS
        !          3054: .TP 8
        !          3055: .B allexport
        !          3056: Same as
        !          3057: .BR \-a .
        !          3058: .TP 8
        !          3059: .B errexit
        !          3060: Same as
        !          3061: .BR \-e .
        !          3062: .TP 8
        !          3063: .B emacs
        !          3064: Puts you in an
        !          3065: .I emacs
        !          3066: style in-line editor for command entry.
        !          3067: .TP 8
        !          3068: .B gmacs
        !          3069: Puts you in a
        !          3070: .I gmacs
        !          3071: style in-line editor for command entry.
        !          3072: .TP 8
        !          3073: .B ignoreeof
        !          3074: The shell will not exit on end-of-file.
        !          3075: The command
        !          3076: .B exit
        !          3077: must be used.
        !          3078: .TP 8
        !          3079: .B keyword
        !          3080: Same as
        !          3081: .BR \-k .
        !          3082: .TP 8
        !          3083: .B markdirs
        !          3084: All directory names resulting from file name generation have a trailing
        !          3085: .B /
        !          3086: appended.
        !          3087: .TP 8
        !          3088: .B monitor
        !          3089: Same as
        !          3090: .BR \-m .
        !          3091: .TP 8
        !          3092: .B noexec
        !          3093: Same as
        !          3094: .BR \-n .
        !          3095: .TP 8
        !          3096: .B noglob
        !          3097: Same as
        !          3098: .BR \-f .
        !          3099: .TP 8
        !          3100: .B nounset
        !          3101: Same as
        !          3102: .BR \-u .
        !          3103: .TP 8
        !          3104: .B verbose
        !          3105: Same as
        !          3106: .BR \-v .
        !          3107: .TP 8
        !          3108: .B trackall
        !          3109: Same as
        !          3110: .BR \-h .
        !          3111: .TP 8
        !          3112: .B vi
        !          3113: Puts you in insert mode of a
        !          3114: .I vi\^
        !          3115: style in-line editor
        !          3116: until you hit escape character
        !          3117: .BR 033 .
        !          3118: This puts you in move mode.
        !          3119: A return sends the line.
        !          3120: .TP 8
        !          3121: .B viraw
        !          3122: Each character is processed as it is typed
        !          3123: in
        !          3124: .I vi\^
        !          3125: mode.
        !          3126: .TP 8
        !          3127: .B xtrace
        !          3128: Same as
        !          3129: .BR \-x .
        !          3130: .TP 8
        !          3131:    
        !          3132: If no option name is supplied then the current option settings are printed.
        !          3133: .RE
        !          3134: .TP 8
        !          3135: .B \-s
        !          3136: Sort the positional parameters.
        !          3137: .TP 8
        !          3138: .B \-t
        !          3139: Exit after reading and executing one command.
        !          3140: .TP 8
        !          3141: .B \-u
        !          3142: Treat unset parameters as an error when substituting.
        !          3143: .TP 8
        !          3144: .B \-v
        !          3145: Print shell input lines as they are read.
        !          3146: .TP 8
        !          3147: .B \-x
        !          3148: Print commands and their arguments as they are executed.
        !          3149: .TP 8
        !          3150: .B \-
        !          3151: Turns off
        !          3152: .B \-x
        !          3153: and
        !          3154: .B \-v
        !          3155: flags and stops examining arguments for flags.
        !          3156: .TP 8
        !          3157: .B \-\-
        !          3158: Do not change any of the flags; useful in setting
        !          3159: .B $1
        !          3160: to a value beginning with
        !          3161: .BR \- .
        !          3162: If no arguments follow this flag then the positional parameters are unset.
        !          3163: .PD
        !          3164: .PP
        !          3165: Using
        !          3166: .B \+
        !          3167: rather than
        !          3168: .B \-
        !          3169: causes these flags to be turned off.
        !          3170: These flags can also be used upon invocation of the shell.
        !          3171: The current set of flags may be found in
        !          3172: .BR $\- .
        !          3173: The remaining arguments are positional
        !          3174: parameters and are assigned, in order,
        !          3175: .if t to\p
        !          3176: .if n to
        !          3177: .BR $1 ,
        !          3178: .BR $2 ,
        !          3179: \&.\|.\|.\^.
        !          3180: If no arguments are given then the values
        !          3181: of all names are printed on the standard output.
        !          3182: .RE
        !          3183: .TP
        !          3184: \f3shift\fP \*(OK \f2n\^\fP \*(CK
        !          3185: .br
        !          3186: The positional parameters from
        !          3187: \f3$\fP\f2n\fP\f3+1\fP
        !          3188: \&.\|.\|.
        !          3189: are renamed
        !          3190: .B $1
        !          3191: \&.\|.\|.\^
        !          3192: , default
        !          3193: .I n\^
        !          3194: is 1.
        !          3195: The parameter
        !          3196: .I n\^
        !          3197: can be any arithmetic expression that evaluates to a non-negative
        !          3198: number less than or equal to
        !          3199: .BR $# .
        !          3200: .TP
        !          3201: \f3test\fP \*(OK \f2expr\^\fP \*(CK
        !          3202: .br
        !          3203: Evaluate conditional expression
        !          3204: .IR expr .
        !          3205: See
        !          3206: .IR test (1)
        !          3207: for usage and description.
        !          3208: The arithmetic comparison operators
        !          3209: are not restricted to integers.
        !          3210: They allow any arithmetic expression.
        !          3211: Four additional primitive expressions are allowed:
        !          3212: .RS
        !          3213: .PD 0
        !          3214: .TP
        !          3215: \f3\-L\fP \f2file\^\fP
        !          3216: True if
        !          3217: .I file\^
        !          3218: is a symbolic link.
        !          3219: .TP
        !          3220: \f2file1\^\fP \f3\-nt\fP \f2file2\^\fP
        !          3221: True if
        !          3222: .I file1\^
        !          3223: is newer than
        !          3224: .IR file2 .
        !          3225: .TP
        !          3226: \f2file1\^\fP \f3\-ot\fP \f2file2\^\fP
        !          3227: True if
        !          3228: .I file1\^
        !          3229: is older than
        !          3230: .IR file2 .
        !          3231: .TP
        !          3232: \f2file1\^\fP \f3\-ef\fP \f2file2\^\fP
        !          3233: True if
        !          3234: .I file1\^
        !          3235: has the same device and i-node number as
        !          3236: .IR file2 .
        !          3237: .PD
        !          3238: .RE
        !          3239: .TP
        !          3240: \f3times\fP
        !          3241: .br
        !          3242: Print the accumulated user and system times for
        !          3243: the shell and for processes
        !          3244: run from the shell.
        !          3245: .TP
        !          3246: \f3trap\fP \*(OK \f2arg\^\fP \*(CK \*(OK \f2sig\^\fP \*(CK .\|.\|.
        !          3247: .I arg\^
        !          3248: is a command to be read and executed when the shell
        !          3249: receives signal(s)
        !          3250: .IR sig .
        !          3251: (Note that
        !          3252: .I arg\^
        !          3253: is scanned once when
        !          3254: the trap is set and once when the trap
        !          3255: is taken.)
        !          3256: Each
        !          3257: .I sig\^
        !          3258: can be given as a number or as the name of the signal.
        !          3259: Trap commands are executed in order of signal number.
        !          3260: Any attempt to set a trap on a signal that
        !          3261: was ignored on entry to the current shell
        !          3262: is ineffective.
        !          3263: An attempt to trap on signal 11 (memory fault) produces an error.
        !          3264: If
        !          3265: .I arg\^
        !          3266: is omitted or is
        !          3267: .BR \- ,
        !          3268: then all trap(s)
        !          3269: .I sig\^
        !          3270: are reset
        !          3271: to their original values.
        !          3272: If
        !          3273: .I arg\^
        !          3274: is the null
        !          3275: string then this signal is ignored by the shell and by the commands
        !          3276: it invokes.
        !          3277: If
        !          3278: .I sig\^
        !          3279: is
        !          3280: .SM
        !          3281: .B ERR
        !          3282: then
        !          3283: .I arg\^
        !          3284: will be executed whenever a command has a non-zero exit code.
        !          3285: This trap is not inherited by functions.
        !          3286: If
        !          3287: .I sig\^
        !          3288: is
        !          3289: .B 0
        !          3290: or
        !          3291: .SM
        !          3292: .B EXIT
        !          3293: and the
        !          3294: .B trap
        !          3295: statement is executed inside the body of a function,
        !          3296: then the command
        !          3297: .I arg\^
        !          3298: is executed
        !          3299: after the function completes.
        !          3300: If
        !          3301: .I sig\^
        !          3302: is
        !          3303: .B 0
        !          3304: or
        !          3305: .SM
        !          3306: .B EXIT
        !          3307: for a
        !          3308: .B trap
        !          3309: set outside any function
        !          3310: then the command
        !          3311: .I arg\^
        !          3312: is executed
        !          3313: on exit from the shell.
        !          3314: The
        !          3315: .B trap
        !          3316: command
        !          3317: with no arguments prints a list
        !          3318: of commands associated with each signal number.
        !          3319: .TP
        !          3320: \f3typeset\fP \*(OK \f3\-FLRZefilprtux\^\fP\*(OK\f2n\fP \*(CK \*(OK \f2name\fP\*(OK \f2=value\^\fP \*(CK \^ \*(CK  .\|.\|. \*(CK
        !          3321: Parameter assignments remain in effect after the command completes.
        !          3322: When invoked inside a function,
        !          3323: a new instance of the parameter
        !          3324: .I name\^
        !          3325: is created.
        !          3326: The parameter value and type are restored
        !          3327: when the function completes.
        !          3328: The following list of attributes may be specified:
        !          3329: .RS
        !          3330: .PD 0
        !          3331: .TP
        !          3332: .B \-F
        !          3333: This flag provides UNIX to host-name file mapping on non-UNIX
        !          3334: machines.
        !          3335: .TP
        !          3336: .B \-L
        !          3337: Left justify and remove leading blanks from
        !          3338: .IR value .
        !          3339: If
        !          3340: .I n
        !          3341: is non-zero it defines the width 
        !          3342: of the field,
        !          3343: otherwise it is determined by the width of the value of
        !          3344: first assignment.
        !          3345: When the parameter is assigned to, it is
        !          3346: filled on the right with blanks or truncated, if necessary,  to
        !          3347: fit into the field.
        !          3348: Leading zeros are removed if the
        !          3349: .B \-Z
        !          3350: flag is also set.
        !          3351: The
        !          3352: .B \-R
        !          3353: flag is turned off.
        !          3354: .TP
        !          3355: .B \-R
        !          3356: Right justify and fill with leading blanks.
        !          3357: If
        !          3358: .I n
        !          3359: is non-zero it defines the width 
        !          3360: of the field,
        !          3361: otherwise it is determined by the width of the value of
        !          3362: first assignment.
        !          3363: The field is left filled with blanks or
        !          3364: truncated from the end if the
        !          3365: parameter is reassigned.
        !          3366: The
        !          3367: .B L
        !          3368: flag is turned off.
        !          3369: .TP
        !          3370: .B \-Z
        !          3371: Right justify and fill with leading zeros if
        !          3372: the first non-blank character is a digit and the
        !          3373: .B \-L
        !          3374: flag has not been set.
        !          3375: If
        !          3376: .I n
        !          3377: is non-zero it defines the width 
        !          3378: of the field,
        !          3379: otherwise it is determined by the width of the value of
        !          3380: first assignment.
        !          3381: .TP
        !          3382: .B \-e
        !          3383: Tag the parameter as having an error.
        !          3384: This tag is currently unused by the shell and can be
        !          3385: set or cleared by the user.
        !          3386: .TP
        !          3387: .B \-f
        !          3388: The names refer to function names rather than
        !          3389: parameter names.
        !          3390: No assignments can be made and the only other
        !          3391: valid flag is
        !          3392: .BR \-x .
        !          3393: .TP
        !          3394: .B \-i
        !          3395: Parameter is an integer.
        !          3396: This makes arithmetic faster.
        !          3397: If
        !          3398: .I n
        !          3399: is non-zero it defines the output arithmetic base, 
        !          3400: otherwise the first assignment determines the output base.
        !          3401: .TP
        !          3402: .B \-l
        !          3403: All upper-case characters
        !          3404: converted to lower-case.
        !          3405: The upper-case flag,
        !          3406: .B \-u
        !          3407: is turned off.
        !          3408: .TP
        !          3409: .B \-p
        !          3410: The output of this command, if any,  is written onto the two-way pipe
        !          3411: .TP
        !          3412: .B \-r
        !          3413: The given
        !          3414: .IR names
        !          3415: are marked
        !          3416: readonly and these
        !          3417: names cannot be changed
        !          3418: by subsequent assignment.
        !          3419: .TP
        !          3420: .B \-t
        !          3421: Tags the named parameters.
        !          3422: Tags are user definable and have no special
        !          3423: meaning to the shell.
        !          3424: .TP
        !          3425: .B \-u
        !          3426: All lower-case characters are converted
        !          3427: to upper-case characters.
        !          3428: The lower-case flag,
        !          3429: .B \-l
        !          3430: is turned off.
        !          3431: .TP
        !          3432: .B \-x
        !          3433: The given
        !          3434: .IR name s
        !          3435: are marked for automatic
        !          3436: export to the
        !          3437: .I environment\^
        !          3438: of subsequently-executed commands.
        !          3439: .PD
        !          3440: .PP
        !          3441: Using
        !          3442: .B \+
        !          3443: rather than
        !          3444: .B \-
        !          3445: causes these flags to be turned off.
        !          3446: If no
        !          3447: .I name\^
        !          3448: arguments are given but flags are specified,
        !          3449: a list of
        !          3450: .I names\^
        !          3451: (and optionally the
        !          3452: .I values\^
        !          3453: )
        !          3454: of the
        !          3455: .I parameters\^
        !          3456: which have these
        !          3457: flags set
        !          3458: is printed.
        !          3459: (Using
        !          3460: .B \+
        !          3461: rather than
        !          3462: .B \-
        !          3463: keeps the
        !          3464: values to be printed.)
        !          3465: If no
        !          3466: .IR name s
        !          3467: and flags
        !          3468: are given,
        !          3469: the
        !          3470: .I names\^
        !          3471: and
        !          3472: .I attributes\^
        !          3473: of all
        !          3474: .I parameters\^
        !          3475: are printed.
        !          3476: .RE
        !          3477: .TP
        !          3478: \f3ulimit\fP \*(OK \f3\-cdfmpt\fP \*(CK \*(OK \f2n\^\fP \*(CK
        !          3479: .RS
        !          3480: .PD 0
        !          3481: .TP
        !          3482: .B \-c
        !          3483: imposes a size limit of 
        !          3484: .I n\^
        !          3485: blocks on the size of core dumps
        !          3486: (\s-1BSD\s+1 only).
        !          3487: .TP
        !          3488: .B \-d
        !          3489: imposes a size limit of 
        !          3490: .I n\^
        !          3491: blocks on the size of the data area
        !          3492: (\s-1BSD\s+1 only).
        !          3493: .TP
        !          3494: .B \-f
        !          3495: imposes a size limit of 
        !          3496: .I n\^
        !          3497: blocks on files written by child processes (files of any size may be read).
        !          3498: .TP
        !          3499: .B \-m
        !          3500: imposes a soft limit of 
        !          3501: .I n\^
        !          3502: blocks on the size of physical memory
        !          3503: (\s-1BSD\s+1 only).
        !          3504: .TP
        !          3505: .B \-p
        !          3506: changes the pipe size to
        !          3507: .I n\^
        !          3508: (\s-1UNIX\s+1/\s-1RT\s+1 only).
        !          3509: .TP
        !          3510: .B \-t
        !          3511: imposes a time limit of 
        !          3512: .I n\^
        !          3513: seconds to be used by each process
        !          3514: (\s-1BSD\s+1 only).
        !          3515: .PD
        !          3516: .PP
        !          3517: If no option is given,
        !          3518: .B \-f
        !          3519: is assumed.
        !          3520: If
        !          3521: .I n\^
        !          3522: is not given the current limit is printed.
        !          3523: .RE
        !          3524: .TP
        !          3525: \f3umask\fP \*(OK \f2nnn\^\fP \*(CK
        !          3526: The user file-creation mask is set to
        !          3527: .I nnn\^
        !          3528: (see
        !          3529: .IR umask (2)).
        !          3530: If
        !          3531: .I nnn\^
        !          3532: is omitted, the current value of the mask is printed.
        !          3533: .TP
        !          3534: \f3unalias\fP \f2name\^\fP .\|.\|.
        !          3535: The
        !          3536: .IR
        !          3537: parameters
        !          3538: given by the list of
        !          3539: .IR name s
        !          3540: are removed from the
        !          3541: .I alias\^
        !          3542: list.
        !          3543: .TP
        !          3544: \f3unset\fP \*(OK \f3\-f\fP \*(CK \f2name\^\fP .\|.\|.
        !          3545: The parameters given by the list of
        !          3546: .IR name s
        !          3547: are unassigned,
        !          3548: i. e.,
        !          3549: their values and attributes are erased.
        !          3550: Readonly variables cannot be unset.
        !          3551: If the flag,
        !          3552: .BR \-f ,
        !          3553: is set, then the names refer to
        !          3554: .I function\^
        !          3555: names.
        !          3556: .TP
        !          3557: \f3wait\fP \*(OK \f2n\^\fP \*(CK
        !          3558: Wait for the specified process and
        !          3559: report its termination status.
        !          3560: If
        !          3561: .I n\^
        !          3562: is not given then all currently active child processes are waited for.
        !          3563: The return code from this command is that of
        !          3564: the process waited for.
        !          3565: .TP
        !          3566: \f3whence\fP \*(OK \f3\-v\fP \*(CK \f2name\^\fP .\|.\|.
        !          3567: For each
        !          3568: .IR name ,
        !          3569: indicate how it
        !          3570: would be interpreted if used as a command name.
        !          3571: .P
        !          3572: The flag,
        !          3573: .BR \-v ,
        !          3574: produces a more verbose report.
        !          3575: .SS Invocation.
        !          3576: If the shell is invoked by
        !          3577: .IR exec (2),
        !          3578: and the first character of argument zero
        !          3579: .RB ( $0 )
        !          3580: is
        !          3581: .BR \- ,
        !          3582: then the shell is assumed to be a
        !          3583: .I login
        !          3584: shell and
        !          3585: commands are read from
        !          3586: .B /etc/profile
        !          3587: and then from either
        !          3588: .B .profile
        !          3589: in the current directory or
        !          3590: .BR \s-1$HOME\s+1/.profile ,
        !          3591: if either file exists.
        !          3592: Next, commands are read from
        !          3593: the file named by
        !          3594: performing parameter substitution on
        !          3595: the value of the environment parameter
        !          3596: .SM
        !          3597: .B ENV
        !          3598: if the file exists.
        !          3599: Commands are then read as described below;
        !          3600: the following flags are interpreted by the shell
        !          3601: when it is invoked:
        !          3602: .PP
        !          3603: .PD 0
        !          3604: .TP 10
        !          3605: .BI \-c "\| string\^"
        !          3606: If the
        !          3607: .B \-c
        !          3608: flag is present then
        !          3609: commands are read from
        !          3610: .IR string .
        !          3611: .TP
        !          3612: .B \-s
        !          3613: If the
        !          3614: .B \-s
        !          3615: flag is present or if no
        !          3616: arguments remain
        !          3617: then commands are read from the standard input.
        !          3618: Shell output,
        !          3619: except for the output of some of the 
        !          3620: .I Special commands\^
        !          3621: listed above,
        !          3622: is written to
        !          3623: file descriptor 2.
        !          3624: .TP
        !          3625: .B \-i
        !          3626: If the
        !          3627: .B \-i
        !          3628: flag is present or
        !          3629: if the shell input and output are attached to a terminal (as told by
        !          3630: .IR gtty (2))
        !          3631: then this shell is
        !          3632: .IR interactive .
        !          3633: In this case \s-1TERMINATE\s+1 is ignored (so that \f3kill 0\fP
        !          3634: does not kill an interactive shell) and \s-1INTERRUPT\s+1 is caught and ignored
        !          3635: (so that
        !          3636: .B wait
        !          3637: is interruptible).
        !          3638: In all cases, \s-1QUIT\s+1 is ignored by the shell.
        !          3639: .TP
        !          3640: .B \-r
        !          3641: If the
        !          3642: .B \-r
        !          3643: flag is present the shell is a restricted shell.
        !          3644: .PD
        !          3645: .PP
        !          3646: The remaining flags and arguments are described under the
        !          3647: .B set
        !          3648: command above.
        !          3649: .SS Rsh Only.
        !          3650: .I Rsh
        !          3651: is used to set up login names and execution environments whose
        !          3652: capabilities are more controlled than those of the standard shell.
        !          3653: The actions of
        !          3654: .I rsh\^
        !          3655: are identical to those of
        !          3656: .IR sh ,
        !          3657: except that the following are disallowed:
        !          3658: .RS
        !          3659: .PD 0
        !          3660: .PP
        !          3661: changing directory (see
        !          3662: .IR cd (1)),
        !          3663: .br
        !          3664: setting the value of
        !          3665: .SM
        !          3666: .B SHELL
        !          3667: or
        !          3668: .SM
        !          3669: .BR PATH\*S,
        !          3670: .br
        !          3671: specifying path or
        !          3672: command names containing
        !          3673: .BR / ,
        !          3674: .br
        !          3675: redirecting output
        !          3676: .RB ( >
        !          3677: and
        !          3678: .BR >> ).
        !          3679: .PD
        !          3680: .RE
        !          3681: .PP
        !          3682: The restrictions above are enforced
        !          3683: after \f3.profile\fP and the
        !          3684: .SM
        !          3685: .B ENV
        !          3686: files are interpreted.
        !          3687: .PP
        !          3688: When a command to be executed is found to be a shell procedure,
        !          3689: .I rsh\^
        !          3690: invokes
        !          3691: .I sh\^
        !          3692: to execute it.
        !          3693: Thus, it is possible to provide to the end-user shell procedures 
        !          3694: that have access to the full power of
        !          3695: the standard shell,
        !          3696: while imposing a limited menu of commands;
        !          3697: this scheme assumes that the end-user does not have write and
        !          3698: execute permissions in the same directory.
        !          3699: .PP
        !          3700: The net effect of these rules is that the writer of the
        !          3701: .B .profile
        !          3702: has complete control over user actions,
        !          3703: by performing guaranteed setup actions
        !          3704: and leaving the user in an appropriate directory
        !          3705: (probably
        !          3706: .I not\^
        !          3707: the login directory).
        !          3708: .PP
        !          3709: The system administrator often sets up a directory
        !          3710: of commands
        !          3711: (i.e.,
        !          3712: .BR /usr/rbin )
        !          3713: that can be safely invoked by
        !          3714: .IR rsh .
        !          3715: Some systems also provide a restricted editor
        !          3716: .IR red .
        !          3717: .SH EXIT STATUS
        !          3718: Errors detected by the shell, such as syntax errors,
        !          3719: cause the shell
        !          3720: to return a non-zero exit status.
        !          3721: If the shell is being used non-interactively
        !          3722: then execution of the shell file is abandoned.
        !          3723: Otherwise, the shell returns the exit status of
        !          3724: the last command executed (see also the
        !          3725: .B exit
        !          3726: command above).
        !          3727: .SH FILES
        !          3728: /etc/passwd
        !          3729: .br
        !          3730: /etc/profile
        !          3731: .br
        !          3732: \s-1$HOME\s+1/\f3.\fPprofile
        !          3733: .br
        !          3734: /tmp/sh\(**
        !          3735: .br
        !          3736: /dev/null
        !          3737: .SH SEE ALSO
        !          3738: cat(1),
        !          3739: cd(1),
        !          3740: echo(1),
        !          3741: emacs(1),
        !          3742: env(1),
        !          3743: gmacs(1),
        !          3744: newgrp(1),
        !          3745: test(1),
        !          3746: umask(1),
        !          3747: vi(1),
        !          3748: dup(2),
        !          3749: exec(2),
        !          3750: fork(2),
        !          3751: gtty(2),
        !          3752: pipe(2),
        !          3753: signal(2),
        !          3754: umask(2),
        !          3755: ulimit(2),
        !          3756: wait(2),
        !          3757: rand(3),
        !          3758: a.out(5),
        !          3759: profile(5),
        !          3760: environ(7).
        !          3761: .SH CAVEATS
        !          3762: .PP
        !          3763: If a command which is a
        !          3764: .I "tracked alias"
        !          3765: is executed, and then a command with the same name is 
        !          3766: installed in a directory in the search path before the directory where the
        !          3767: original command was found, the shell will continue to 
        !          3768: .I exec\^
        !          3769: the original command.
        !          3770: Use the 
        !          3771: .B \-t
        !          3772: option of the
        !          3773: .B alias\^
        !          3774: command to correct this situation
        !          3775: .PP
        !          3776: If you move the current directory or one above it, 
        !          3777: .B pwd\^
        !          3778: may not give the correct response.
        !          3779: Use the 
        !          3780: .B cd\^
        !          3781: command with a full path name
        !          3782: to correct this situation.
        !          3783: .PP
        !          3784: Some very old shell scripts contain a
        !          3785: .B ^
        !          3786: as a synonym for the pipe character
        !          3787: .BR \(bv .

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.