8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libshell / common / sh.1
blobcf40299f829de07622bf3e0c43a39ea55775b72e
1 .\"
2 .\" David Korn
3 .\" AT&T Bell Laboratories
4 .\"
5 .\" @(#)sh.1 (dgk@research.att.com) 12/28/93
6 .\"
7 .xx labels=5
8 .nr Z 1 \" set to 1 when command name is ksh, 2 for ksh93
9 .ds OK [\|
10 .ds CK \|]
11 .ds ' \s+4\v@.3m@\'\v@-.3m@\s-4
12 .ds ` \s+4\v@.3m@\`\v@-.3m@\s-4
13 .if \nZ=0  \{\
14 .TH SH 1
15 .\}
16 .if \nZ=1 \{\
17 .TH KSH 1 "User Environment Utilities" "RDS Standard"
18 .\}
19 .if \nZ=2 \{\
20 .TH KSH93 1
21 .\}
22 .SH NAME
23 .if \nZ=0 \{\
24 sh, rsh, pfsh \- shell, the standard/restricted command and programming language
25 .\}
26 .if \nZ=1 \{\
27 ksh, rksh, pfksh \- KornShell, a standard/restricted command and programming language
28 .\}
29 .if \nZ=2 \{\
30 ksh93, rksh93, pfksh93 \- KornShell, a standard/restricted command and programming language
31 .\}
32 .SH SYNOPSIS
33 .if \nZ=0 \{\
34 .B sh
35 .\}
36 .if \nZ=1 \{\
37 .B ksh
38 .\}
39 .if \nZ=2 \{\
40 .B ksh93
41 .\}
43 .B \(+-abcefhikmnoprstuvxBCDP
44 ] [
45 .B \-R
46 file ] [
47 .B \(+-o
48 option ] .\|.\|. [
49 .B \-
50 ] [ arg .\|.\|. ]
51 .br
52 .if \nZ=0 \{\
53 .B rsh
54 .\}
55 .if \nZ=1 \{\
56 .B rksh
57 .\}
58 .if \nZ=2 \{\
59 .B rksh93
60 .\}
62 .B \(+-abcefhikmnoprstuvxBCD
63 ] [
64 .B \-R
65 file ] [
66 .B \(+-o
67 option ] .\|.\|.  [
68 .B \-
69 ] [ arg .\|.\|. ]
70 .SH DESCRIPTION
71 .if \nZ=0 .I Sh\^
72 .if \nZ=1 .I Ksh\^
73 .if \nZ=2 .I Ksh93\^
74 is a command and programming language
75 that executes commands read from a terminal
76 or a file.
77 .if \nZ=0 .I Rsh\^
78 .if \nZ=1 .I Rksh\^
79 .if \nZ=2 .I Rksh93\^
80 is a restricted version of the 
81 .if \nZ=0 standard 
82 command interpreter
83 .if \nZ=0 .IR sh ;
84 .if \nZ=1 .IR ksh ;
85 .if \nZ=2 .IR ksh93 ;
86 it is used to set up login names and execution environments whose
87 capabilities are more controlled than those of the standard shell.
88 .if \nZ=0 .I Rpfsh\^
89 .if \nZ=1 .I Rpfksh\^
90 .if \nZ=2 .I Rpfksh93\^
91 is a profile shell version of the
92 .if \nZ=0 standard
93 command interpreter
94 .if \nZ=0 .IR sh ;
95 .if \nZ=1 .IR ksh ;
96 .if \nZ=2 .IR ksh93 ;
97 it is used to to execute commands with the attributes specified by
98 the user's profiles (see
99 .IR pfexec (1)).
101 .I Invocation\^
102 below
103 for the meaning of arguments to the shell.
104 .SS Definitions.
106 .I metacharacter\^
107 is one of the following characters:
110 \f3;   &   (   )   \(bv   <   >   new-line   space   tab\fP
114 .I blank\^
115 is a
116 .B tab
117 or a
118 .BR space .
120 .I identifier\^
121 is a sequence of letters, digits, or underscores
122 starting with a letter or underscore.
123 Identifiers are used as components of
124 .I variable\^
125 names.
127 .I vname\^
128 is a sequence of one or more identifiers
129 separated by a \fB\s+2.\s-2\fP and optionally preceded
130 by a \fB\s+2.\s-2\fP.
131 Vnames are used as function and variable names.
133 .I word\^
134 is a sequence of
135 .I characters\^
136 from the character set defined by the current locale,
137 excluding non-quoted
138 .IR metacharacters .
141 .I command\^
142 is a sequence of characters in the syntax
143 of the shell language.
144 The shell reads each command and
145 carries out the desired action either directly or by invoking
146 separate utilities.
147 A built-in command is a command that is carried out by the
148 shell itself without creating a separate process.
149 Some commands are built-in purely for convenience
150 and are not documented here.
151 Built-ins that cause
152 side effects in the shell environment and 
153 built-ins that are found before performing a
154 path search (see
155 .I Execution\^
156 below)
157 are documented here.
158 For historical reasons, some of
159 these built-ins behave differently than
160 other built-ins and are called
161 .IR "special built-ins" .
162 .SS Commands.
164 .I simple-command\^
165 is a list of variable assignments
166 (see
167 .I Variable Assignments\^
168 below)
169 or a sequence of
170 .I blank\^
171 separated words
172 which may be preceded by a list of variable assignments
173 (see
174 .I Environment\^
175 below).
176 The first word specifies the name of the command to
177 be executed.
178 Except as specified below,
179 the remaining words are passed as arguments
180 to the invoked command.
181 The command name is passed as argument 0
182 (see
183 .IR exec (2)).
185 .I value\^
186 of a simple-command is its exit status; 0-255
187 if it terminates normally; 256+\f2signum\^\fP if
188 it terminates abnormally (the name of the signal corresponding
189 to the exit status can be
190 obtained via the
191 .B \-l
192 option of the
193 .B kill\^
194 built-in utility).
197 .I pipeline\^
198 is a sequence of one or more
199 .I commands\^
200 separated by
201 .BR \(bv .
202 The standard output of each command but the last
203 is connected by a
204 .IR pipe (2)
205 to the standard input of the next command.
206 Each command,
207 except possibly the last,
208 is run as a separate process;
209 the shell waits for the last command to terminate.
210 The exit status of a pipeline is the exit
211 status of the last command unless the
212 .B pipefail
213 option is enabled.
214 Each pipeline can be preceded by the
215 .I "reserved word"
216 .B !
217 which causes the exit status of the pipeline to become
218 0 if the exit status of the last command is non-zero, and
219 1 if the exit status of the last command is 0.
222 .I list\^
223 is a sequence of one or more
224 pipelines
225 separated by
226 .BR ; ,
227 .BR & ,
228 .BR \(bv& ,
229 .BR && ,
231 .BR \(bv\|\(bv ,
232 and optionally terminated by
233 .BR ; ,
234 .BR & ,
236 .BR \(bv& .
237 Of these five symbols,
238 .BR ; ,
239 .BR & ,
241 .B \(bv&
242 have equal precedence,
243 which is lower than that of
244 .B &&
246 .BR \(bv\|\(bv .
247 The symbols
248 .B &&
250 .B \(bv\|\(bv
251 also have equal precedence.
252 A semicolon
253 .RB ( ; )
254 causes sequential execution of the preceding pipeline; an ampersand
255 .RB ( & )
256 causes asynchronous execution of the preceding pipeline (i.e., the shell does
257 .I not\^
258 wait for that pipeline to finish).
259 The symbol
260 .B \(bv&
261 causes asynchronous execution of the preceding pipeline
262 with a two-way pipe established to the parent shell;
263 the standard input and output of the spawned pipeline
264 can be written to and read from by the parent shell
265 by applying
266 the redirection operators
267 .B <&
269 .B >&
270 with arg
271 .B p
272 to commands and by using
273 .B \-p
274 option of
275 the built-in commands
276 .B read
278 .B print
279 described later.
280 The symbol
281 .B &&
282 .RB (\| \(bv\|\(bv \^)
283 causes the
284 .I list\^
285 following it to be executed only if the preceding
286 pipeline
287 returns a zero (non-zero) value.
288 One or more new-lines may appear in a
289 .I list\^
290 instead of a semicolon,
291 to delimit a command.
292 The first
293 .I item \^
294 of the first
295 .I pipeline\^
296 of a
297 .I list\^
298 that is a simple command not beginning
299 with a redirection, and not occurring within a
300 .BR while ,
301 .BR until ,
303 .B if
304 .IR list ,
305 can be preceded by a semicolon.
306 This semicolon
307 is ignored unless the
308 .B showme
309 option is enabled as described with
311 .B set
312 built-in below.
315 .I command\^
316 is either a simple-command
317 or one of the following.
318 Unless otherwise stated,
319 the value returned by a command is that of the
320 last simple-command executed in the command.
322 \f3for\fP \f2vname\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3;do\fP \f2list\^\fP \f3;done\fP
323 Each time a
324 .B for
325 command is executed,
326 .I vname\^
327 is set to the next
328 .I word\^
329 taken from the
330 .B in
331 .I word\^
332 list.
334 .BI in " word\^"
335 \&.\|.\|.
336 is omitted, then
338 .B for
339 command executes the \f3do\fP \f2list\^\fP once for each positional parameter
340 that is set starting from
341 .B 1
342 (see
343 .I "Parameter Expansion\^"
344 below).
345 Execution ends when there are no more words in the list.
347 \f3for ((\fP \*(OK\f2expr1\^\fP\*(CK \f3;\fP \*(OK\f2expr2\^\fP\*(CK \f3;\fP \*(OK\f2expr3\^\fP\*(CK \f3))\fP \f3;do\fP \f2list\^\fP \f3;done\fP
348 The arithmetic expression
349 .I expr1
350 is evaluated first
351 (see
352 .I "Arithmetic evaluation"
353 below).
354 The arithmetic expression
355 .I expr2
356 is repeatedly evaluated until it evaluates to zero and when non-zero,
357 .I list
358 is executed and the arithmetic expression
359 .I expr3
360 evaluated.
361 If any expression
362 is omitted, then it behaves as if it evaluated to 1.
364 \f3select\fP \f2vname\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3;do\fP \f2list\^\fP \f3;done\fP
366 .B select
367 command prints on standard error (file descriptor 2) the set of
368 .IR word s,
369 each preceded by a number.
371 .BI in " word\^"
372 \&.\|.\|.
373 is omitted, then
375 positional parameters starting from
376 .B 1
377 are used instead
378 (see
379 .I "Parameter Expansion\^"
380 below).
383 .B PS3
384 prompt is printed
385 and a line is read from the standard input.
386 If this line consists of the number
387 of one of the listed
388 .IR word s,
389 then the value of the variable
390 .I vname\^
391 is set to the
392 .I word\^
393 corresponding to this number.
394 If this line is empty, the selection list is
395 printed again.
396 Otherwise the value of the variable
397 .I vname\^
398 is set to
399 .IR null .
400 The contents of the line read from standard input is
401 saved in
402 the variable
404 .BR REPLY .
406 .I list\^
407 is executed for each selection until a
408 .B break\^
410 .I end-of-file\^
411 is encountered.
412 If the
414 .B REPLY
415 variable is set to
416 .I null\^
417 by the execution of
418 .IR list ,
419 then the selection list is printed before
420 displaying the
422 .B PS3
423 prompt for the next selection.
425 \f3case\fP \f2word\^\fP \f3in\fP \*(OK \*(OK\f3(\fP\*(CK\f2pattern\^\fP \*(OK \(bv \f2pattern\^\fP \*(CK .\|.\|. \f3)\fP \f2list\^\fP \f3;;\fP \*(CK .\|.\|. \f3esac\fP
427 .B case
428 command executes the
429 .I list\^
430 associated with the first
431 .I pattern\^
432 that matches
433 .IR word .
434 The form of the patterns is
435 the same as that used for
436 file-name generation (see
437 .I "File Name Generation\^"
438 below).
440 .B ;;
441 operator causes execution of
442 .B case
443 to terminate.
445 .B ;&
446 is used in place of
447 .B ;;
448 the next subsequent list, if any,  is executed.
450 \f3if\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(OK \
451 \f3;elif\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(CK .\|.\|. \
452 \*(OK \f3;else\fP \f2list\^\fP \*(CK \f3;f\&i\fP
454 .I list\^
455 following \f3if\fP is executed and,
456 if it
457 returns a zero exit status, the
458 .I list\^
459 following
460 the first
461 .B then
462 is executed.
463 Otherwise, the
464 .I list\^
465 following \f3elif\fP
466 is executed and, if its value is zero,
468 .I list\^
469 following
470 the next
471 .B then
472 is executed.
473 Failing each successive
474 .B elif
475 .IR list\^ ,
477 .B else
478 .I list\^
479 is executed.
480 If the
481 .B if
482 .I list\^
483 has non-zero exit status
484 and there is no
485 .B else
486 .IR list ,
487 then the
488 .B if
489 command returns a zero exit status.
491 .PD 0
492 \f3while\fP \f2list\^\fP \f3;do\fP \f2list\^\fP \f3;done\fP
494 \f3until\fP \f2list\^\fP \f3;do\fP \f2list\^\fP \f3;done\fP
497 .B while
498 command repeatedly executes the
499 .B while
500 .I list\^
501 and, if the exit status of the last command in the list is zero, executes
503 .B do
504 .IR list ;
505 otherwise the loop terminates.
506 If no commands in the
507 .B do
508 .I list\^
509 are executed, then the
510 .B while
511 command returns a zero exit status;
512 .B until
513 may be used in place of
514 .B while
515 to negate
516 the loop termination test.
518 \f3((\fP\f2expression\^\fP\f3))\fP
521 .I expression\^
522 is evaluated using the rules for arithmetic evaluation described below.
523 If the value of the arithmetic expression is non-zero, the exit
524 status is 0, otherwise the exit status is 1.
526 \f3(\fP\f2list\^\fP\f3)\fP
528 Execute
529 .I list\^
530 in a separate environment.
531 Note, that if two adjacent open parentheses are
532 needed for nesting, a space must be inserted to avoid
533 evaluation as an arithmetic command as described above.
535 \f3{ \fP\f2list\^\fP\f3;}\fP
537 .I list\^
538 is simply executed.
539 Note that unlike the metacharacters
540 .B (
542 .BR ) ,
543 .B {
545 .B }
547 .IR "reserved word" s
548 and must occur
549 at the beginning of a line or after a
550 .B ;
551 in order to be recognized.
553 \f3[[\fP\f2 expression \^\fP\f3]]\fP
555 Evaluates
556 .I expression\^
557 and returns a zero exit status when
558 .I expression\^
559 is true.
561 .I "Conditional Expressions\^"
562 below, for a description of
563 .IR expression .
565 .PD 0
566 \f3function\fP \f2varname\^\fP \f3{\fP \f2list\^\fP \f3;}\fP
568 \f2varname\^\fP \f3() {\fP \f2list\^\fP \f3;}\fP
570 Define a function which is referenced by
571 .IR varname .
572 A function whose
573 .I varname\^
574 contains a
575 .B \s+2.\s-2
576 is called a discipline function and the portion
577 of the
578 .I varname\^
579 preceding the last
580 .B \s+2.\s-2
581 must refer to an existing variable. 
582 The body of the function is the
583 .I list\^
584 of commands between
585 .B {
587 .BR } .
588 A function defined with the \f3function\fP \f2varname\^\fP
589 syntax can also be used as an argument to the \f3.\fP
590 special built-in command to get the equivalent behavior
591 as if the \f2varname\^\fP\f3()\fP syntax were used to define it.
592 (See
593 .I Functions\^
594 below.)
596 \f3time\fP \*(OK \f2pipeline\^\fP \*(CK
598 If \f2pipeline\^\fP is omitted the user and system time for
599 the current shell and completed child processes is printed
600 on standard error.
601 Otherwise,
602 .I pipeline\^
603 is executed and the elapsed time as well as
604 the user and system time are printed on standard error.
607 .B TIMEFORMAT
608 variable may be set to a format string that specifies how the timing
609 information should be displayed.
611 .B "Shell Variables"
612 below 
613 for a description of the
615 .B TIMEFORMAT
616 variable.
618 The following reserved words
619 are recognized as reserved only when they are the first word of a command
620 and are not quoted:
622 .if t .RS
624 .if n if then else elif fi case esac for while until do done { } function select time [[ ]] !
625 .if t if   then   else   elif   fi   case   esac   for   while   until   do   done   {   }   function   select   time  [[  ]]   !
626 .if t .RE
627 .SS Variable Assignments.
628 One or more variable assignments can start a simple command
629 or can be arguments to the
630 .BR typeset ,
631 .BR enum ,
632 .BR export ,
634 .B readonly
635 special built-in commands as well as
636 to other declaration commands created as types.
637 The syntax for an \f2assignment\^\fP is of the form:
639 .PD 0
640 \f2varname\^\fP\f3=\fP\f2word\^\fP
642 \f2varname\^\fP\f3[\fP\f2word\^\fP\f3]\fP=\fP\f2word\^\fP
644 No space is permitted between \f2varname\^\fP and the \f3=\fP or
645 between \f3=\fP and \fIword\^\fP.
647 \f2varname\^\fP\f3=(\fP\f2assign_list\^\fP\f3)\fP
648 No space is permitted between \f2varname\^\fP and the \f3=\fP.
649 An \f2assign_list\^\fP can be one of the following:
650 .RS 15
651 .PD 0
653 \f2word\^\fP ...
654 Indexed array assignment.
656 \f3[\fP\f2word\^\fP\f3]=\fP\f2word\^\fP .\|.\|.
657 Associative array assignment.
658 If preceded by
659 .B typeset \-a
660 this will create an indexed array instead.
662 \f2assignment\^\fP .\|.\|.
663 Compound variable assignment.
664 This creates a compound variable \f2varname\^\fP with
665 sub-variables of the form \f2varname\^\fP\f3.\fP\f2name\^\fP,
666 where \f2name\^\fP is the name portion of \f2assignment\^\fP.
667 The value of \f2varname\^\fP will contain all the assignment elements.
668 Additional assignments made to sub-variables of \f2varname\^\fP
669 will also be displayed as part of the value of \f2varname\^\fP.
670 If no \f2assignment\fPs are specified, \f2varname\^\fP will be
671 a compound variable allowing subsequence child elements to be defined.
673 \f3typeset\fP \*(OK\f2options\fP\*(CK \f2assignment\^\fP .\|.\|.
674 Nested variable assignment.  Multiple assignments
675 can be specified by separating each of them with a \f3;\fP.
676 The previous value is unset before the assignment.
677 Other declaration commands such as
678 .BR readonly,
679 .BR enum ,
681 other declaration commands can be used in place of
682 .BR typeset .
684 \f3\|.\fP \f2filename\^\fP
685 Include the assignment commands contained in
686 .IR filename .
690 In addition, a \f3+=\fP can be used in place of the \f3=\fP
691 to signify adding to or appending to the previous value.
692 When \f3+=\fP is applied to an arithmetic type, \f2word\^\fP
693 is evaluated as an arithmetic expression and added to the current value.
694 When applied to a string variable, the value defined by \f2word\^\fP
695 is appended to the value.  For compound assignments, the previous
696 value is not unset and the new values are appended to the
697 current ones provided that the types are compatible.
699 The right hand side of a variable assignment undergoes all the expansion
700 list below except word splitting, brace expansion, and file name generation.
701 When the left hand side is an assignment is a compound variable and
702 the right hand is the name of a compound variable, the compound variable
703 on the right will be copied or appended to the compound variable on the left.
704 .SS Comments.
705 .PD 0
706 A word beginning with
707 .B #
708 causes that word and all the following characters up to a new-line
709 to be ignored.
710 .SS Aliasing.
711 The first word of each command is replaced by the text of an
712 .B alias
713 if an
714 .B alias
715 for this word has been defined.
717 .B alias
718 name consists of any number of characters excluding metacharacters,
719 quoting characters,
720 file expansion characters,
721 parameter expansion and command substitution
722 characters,
724 .BR = .
725 The replacement string can contain any
726 valid shell script
727 including the metacharacters listed above.
728 The first word of each command in the
729 replaced text,
730 other than
731 any that are in the process of being replaced,
732 will be tested for aliases.
733 If the last character of the alias value is a
734 .I blank\^
735 then the word following the alias will also be checked for alias
736 substitution.
737 Aliases can be used to redefine
738 built-in commands but cannot be used to redefine
739 the reserved words listed above.
740 Aliases can be created and listed with the
741 .B alias
742 command and can be removed with the
743 .B unalias
744 command.
746 .I Aliasing\^
747 is performed when
748 scripts are read,
749 not while they are executed.
750 Therefore,
751 for an alias to take effect,
754 alias
755 definition command has to be executed before
756 the command which references the alias is read.
758 The following aliases
759 are compiled into the shell
760 but can be unset or redefined:
761 .RS 20
762 .PD 0
764 .B "autoload=\(fmtypeset \-fu\(fm"
766 .B "command=\(fmcommand  \(fm"
768 .B "compound=\(fmtypeset \-C\(fm"
770 .B "fc=hist"
772 .B "float=\(fmtypeset \-lE\(fm"
774 .B "functions=\(fmtypeset \-f\(fm"
776 .B "hash=\(fmalias \-t \-\^\-\(fm"
778 .B "history=\(fmhist \-l\(fm"
780 .B "integer=\(fmtypeset \-li\(fm"
782 .B "nameref=\(fmtypeset \-n\(fm"
784 .B "nohup=\(fmnohup  \(fm"
786 .B "r=\(fmhist \-s\(fm"
788 .B "redirect=\(fmcommand exec\(fm"
790 .B "source=\(fmcommand \s+2.\s-2\(fm"
792 .B "stop=\(fmkill \-s \s-1STOP\s+1\(fm"
794 .B "suspend=\(fmkill \-s \s-1STOP\s+1 $$\(fm"
796 .B "times=\(fm{ { time;} 2>&1;}\(fm"
798 .B "type=\(fmwhence \-v\(fm"
801 .SS Tilde Substitution.
802 After alias substitution is performed, each word
803 is checked to see if it begins with an unquoted
804 .BR \(ap .
805 For tilde substitution,
806 .I word\^
807 also refers to the
808 .I word\^
809 portion of parameter expansion
810 (see
811 .I "Parameter Expansion\^"
812 below).
813 If it does, then the word up to a
814 .B /
815 is checked to see if it matches a user name in the
816 password database (See
817 .IR getpwname (3).)
818 If a match is found, the
819 .B \(ap
820 and the matched login name are replaced by the
821 login directory of the matched user.
822 If no match is found, the original text is left unchanged.
824 .B \(ap
825 by itself, or in front of a
826 .BR / ,
827 is replaced by
829 .BR $HOME .
831 .B \(ap
832 followed by a
833 .B +
835 .B \-
836 is replaced by the value of
838 .SM $PWD
841 .SM $OLDPWD
842 respectively.
844 In addition,
845 when expanding a
846 .IR "variable assignment" ,
847 .I tilde
848 substitution is attempted when
849 the value of the assignment
850 begins with a
851 .BR \(ap ,
852 and when a
853 .B \(ap
854 appears after a
855 .BR : .
857 .B :
858 also terminates a
859 .B \(ap
860 login name.
861 .SS Command Substitution.
862 The standard output from a command list enclosed in
863 parentheses preceded by a dollar sign (
864 \f3$(\fP\f2list\^\fP\f3)\fP
866 or in a brace group preceded by a dollar sign (
867 \f3${ \fP\f2list\^\fP\f3;}\fP
868 ), or in a pair of grave accents (\^\f3\*`\^\*`\fP\^)
869 may be used as part or all
870 of a word;
871 trailing new-lines are removed.
872 In the second case, the \f3{\fP and \f3}\fP are treated as a reserved words
873 so that \f3{\fP must be followed by a \f2blank\^\fP and \f3}\fP must
874 appear at the beginning of the line or follow a \f3;\fP.
875 In the third (obsolete) form, the string between the quotes is processed
876 for special quoting characters before the command is executed (see
877 .I Quoting\^
878 below).
879 The command substitution
880 \^\f3$(\^cat file\^)\fP\^
881 can be replaced by the equivalent but faster
882 \^\f3$(\^<file\^)\fP\^.
883 The command substitution
884 \^\f3$(\^\fP\f2n\^\fP\f3<#\^)\fP
885 will expand to the current byte offset for file descriptor
886 .IR n .
887 Except for the second form, the command list is run in a subshell so that no
888 side effects are possible.
889 For the second form, the final
890 .B }
891 will be recognized as a reserved word after any token.
892 .SS Arithmetic Substitution.
893 An arithmetic expression enclosed in double
894 parentheses preceded by a dollar sign (
895 .B $((\|))
897 is replaced by the value of the arithmetic expression
898 within the double parentheses.
899 .SS Process Substitution.
900 This feature is only available on
901 versions of the UNIX operating system that support the
902 .B /dev/fd
903 directory for naming open files.
904 Each command argument of the form
905 \f3<(\fP\f2list\^\fP\f3)\fP
907 \f3>(\fP\f2list\^\fP\f3)\fP
908 will run process
909 .I list
910 asynchronously connected to some file in
911 .BR /dev/fd .
912 The name of this file will become the argument to the command.
913 If the form with
914 .B >
915 is selected then writing on this file will provide input for
916 .IR list .
918 .B <
919 is used,
920 then the file passed as an argument will contain the output of the
921 .I list
922 process.
923 For example,
926 \f3paste <(cut \-f1\fP \f2file1\fP\f3) <(cut \-f3\fP \f2file2\f3) | tee >(\fP\f2process1\fP\f3) >(\fP\f2process2\fP\f3)\fP
929 .I cuts
930 fields 1 and 3 from
931 the files
932 .I file1
934 .I file2
935 respectively,
936 .I pastes
937 the results together, and
938 sends it
939 to the processes
940 .I process1
942 .IR process2 ,
943 as well as putting it onto the standard output.
944 Note that the file, which is passed as an argument to the command,
945 is a UNIX
946 .IR pipe (2)
947 so programs that expect to
948 .IR lseek (2)
949 on the file will not work.
951 Process substitution of the form
952 \f3<(\fP\f2list\^\fP\f3)\fP
953 can also be used with the
954 .B <
955 redirection operator which causes the output of
956 .I list\^
957 to be standard input or the input for whatever file descriptor is specified.
958 .SS Parameter Expansion.
960 .I parameter\^
961 is a
962 .IR variable ,
963 one or more digits,
964 or any of the characters
965 .BR \(** ,
966 .BR @ ,
967 .BR # ,
968 .BR ? ,
969 .BR \- ,
970 .BR $ ,
972 .BR !\\^ .
974 .I variable\^
975 is denoted by a \f2vname\fP.
976 To create a variable whose
977 .I vname\^
978 contains a \f3\s+2.\s-2\fP,
979 a variable whose
980 .I vname\^
981 consists of everything before the last \f3\s+2.\s-2\fP must already exist.
983 .I variable\^
984 has a
985 .I value\^
986 and zero or more
987 .IR attributes .
988 .I Variables\^
989 can be assigned
990 .I values\^
992 .I attributes
993 by using the
994 .B typeset\^
995 special built-in command.
996 The attributes supported by the shell are described
997 later with the
998 .B typeset\^
999 special built-in command.
1000 Exported variables pass values and attributes to
1001 the environment.
1003 The shell supports both indexed and associative arrays.
1004 An element of an array variable is referenced by a
1005 .IR subscript .
1007 .I subscript\^
1008 for an indexed array is denoted by
1010 .I arithmetic expression\^
1011 (see
1012 .I "Arithmetic evaluation"
1013 below)
1014 between a
1015 .B [
1016 and a
1017 .BR ] .
1018 To assign values to an indexed array, use
1019 \f2vname\fP\f3=(\fP\f2value\fP .\|.\|.\f3)\fP or
1020 \f3set \-A\fP \f2vname\fP  \f2value\fP .\|.\|. .
1021 The value of all non-negative
1022 subscripts must be in the
1023 range of
1024 0 through 4,194,303.
1025 A negative subscript is treated as an offset from the maximum
1026 current index +1 so that \-1 refers to the last element.
1027 Indexed arrays can be declared with the
1028 .B \-a
1029 option to
1030 .BR typeset.
1031 Indexed arrays need not be declared.
1032 Any reference to a variable
1033 with a valid subscript is
1034 legal and an array will be created if necessary.
1036 An associative array is created with the
1037 .B \-A
1038 option to
1039 .BR typeset.
1041 .I subscript\^
1042 for an associative array is denoted by
1043 a string enclosed between
1044 .B [
1046 .BR ] .
1048 Referencing any array without a subscript
1049 is equivalent to referencing the array with subscript 0.
1052 .I value\^
1053 of a
1054 .I variable\^
1055 may be assigned by writing:
1058 .IB vname = value\^\|
1059 \*(OK
1060 .IB vname = value\^
1061 \*(CK .\|.\|.
1064 .PD 0
1068 .IB vname [ subscript ]= value\^\|
1069 \*(OK
1070 .IB vname [ subscript ]= value\^
1071 \*(CK .\|.\|.
1072 .sp .5
1074 Note that no space is allowed before or after the
1075 .BR = .
1076 .sp .5
1078 .PD 0
1080 .I nameref\^
1081 is a variable that is a reference to another variable.
1082 A nameref is created with the
1083 .B \-n
1084 attribute of
1085 .BR typeset .
1086 The value of the variable at the time of the
1087 .B typeset
1088 command becomes the variable that will be referenced whenever
1089 the nameref variable is used.
1090 The name of a nameref cannot contain a \fB\s+2.\s-2\fP.
1091 When a variable or function name contains a \fB\s+2.\s-2\fP, and the portion
1092 of the name up to the first \fB\s+2.\s-2\fP matches the
1093 name of a nameref, the variable referred to is obtained by
1094 replacing the nameref portion with the name of the variable
1095 referenced by the nameref.
1096 If a nameref is used as the index of a \fBfor\fP loop,
1097 a name reference is established for each item in the list.
1098 A nameref provides a convenient way to refer to the variable
1099 inside a function whose name is passed as an argument to a function.
1100 For example, if the name of a variable is passed as the first
1101 argument to a function, the command
1104 \fBtypeset \-n var=$1\fR
1107 inside the function causes references and assignments to
1108 .B var
1109 to be references and assignments to the variable whose
1110 name has been passed to the function.
1111 .sp .5
1113 If any of the floating point attributes,
1114 .BR \-E ,
1115 .BR \-F ,
1117 .BR \-X ,
1118 or the integer attribute,
1119 .BR \-i ,
1120 is set for
1121 .IR vname ,
1122 then the
1123 .I value\^
1124 is subject to arithmetic evaluation as described below.
1125 .sp .5
1127 Positional parameters,
1128 parameters denoted by a number,
1129 may be assigned values with the
1130 .B set\^
1131 special built-in command.
1132 Parameter
1133 .B $0
1134 is set from argument zero when the shell
1135 is invoked.
1136 .sp .5
1138 The character
1139 .B $
1140 is used to introduce substitutable
1141 .IR parameters .
1143 \f3${\fP\f2parameter\^\fP\f3}\fP
1144 The shell
1145 reads all the characters from
1146 .B ${
1147 to the matching
1148 .B }
1149 as part of the same word even if it contains
1150 braces or metacharacters.
1151 The value, if any, of the parameter is substituted.
1152 The braces are required when
1153 .I parameter\^
1154 is followed by a letter, digit, or underscore
1155 that is not to be interpreted as part of its name,
1156 when the variable name contains a \fB\s+2.\s-2\fP.
1157 The braces are also required when a variable is subscripted
1158 unless it is part of an Arithmetic Expression
1159 or a Conditional Expression.
1161 .I parameter\^
1162 is one or more digits then it is a positional parameter.
1163 A positional parameter of more than one digit must be
1164 enclosed in braces.
1166 .I parameter\^
1168 .B \(**
1170 .BR @ ,
1171 then all the positional
1172 parameters, starting with
1173 .BR $1 ,
1174 are substituted
1175 (separated by a field separator character).
1176 If an array
1177 .I vname\^
1178 with subscript
1179 .B \(**
1180 .BR @ ,
1181 or of the form
1182 .I sub1\^
1183 .B ..
1184 .IR sub2 .
1185 is used,
1186 then the value
1187 for each of the
1188 elements between
1189 .I sub1\^
1191 .I sub2\^
1192 inclusive (or all elements for
1193 .B \(**
1195 .BR @ )
1196 is substituted,
1197 separated by
1198 the first character of
1199 the value of
1201 .BR IFS .
1203 \f3${#\fP\f2parameter\^\fP\f3}\fP
1205 .I parameter\^
1207 .B \(**
1209 .BR @ ,
1210 the number of positional parameters is substituted.
1211 Otherwise, the length of the value of the
1212 .I parameter\^
1213 is substituted.
1215 .PD 0
1216 \f3${#\fP\f2vname\fP\f3[*]}\fP
1219 \f3${#\fP\f2vname\fP\f3[@]}\fP
1220 The number of elements in the array
1221 .I vname\^
1222 is substituted.
1224 .PD 0
1225 \f3${@\fP\f2vname\^\fP\f3}\fP
1226 Expands to the type name (See
1227 .I "Type Variables"\^
1228 below) or attributes of the variable referred to by 
1229 .IR vname .
1231 \f3${!\fP\f2vname\^\fP\f3}\fP
1232 Expands to the name of the variable referred to by
1233 .IR vname .
1234 This will be
1235 .I vname\^
1236 except when
1237 .I vname\^
1238 is a name reference.
1240 \f3${!\fP\f2vname\^\fP\f3[\f2subscript\^\f3]}\fP
1241 Expands to name of the subscript unless
1242 .I subscript\^
1244 .BR * ,
1245 .BR @ .
1246 or of the form
1247 .I sub1\^
1248 .B ..
1249 .IR sub2 .
1250 When
1251 .I subscript\^
1253 .BR * ,
1254 the list of array subscripts for \f2vname\^\fP
1255 is generated.
1256 For a variable that is not an array, the value is 0 if the variable
1257 is set.  Otherwise it is null.
1258 When
1259 .I subscript\^
1261 .BR @ ,
1262 same as above, except that when used in double quotes,
1263 each array subscript yields a separate
1264 argument.
1265 When
1266 .I subscript\^
1267 is of the form
1268 .I sub1\^
1269 .B ..
1270 .I sub2\^ 
1271 it expands
1272 to the list of subscripts between
1273 .I sub1\^
1275 .I sub2\^ 
1276 inclusive using the same quoting rules as
1277 .BR @ .
1279 \f3${!\fP\f2prefix\^\fP\f3*}\fP
1280 Expands to the names of the variables whose names begin with
1281 .IR prefix .
1283 \f3${\fP\f2parameter\^\fP\f3:\-\fP\f2word\^\fP\f3}\fP
1285 .I parameter\^
1286 is set and is non-null then substitute its value;
1287 otherwise substitute
1288 .IR word .
1290 \f3${\fP\f2parameter\^\fP\f3:=\fP\f2word\^\fP\f3}\fP
1292 .I parameter\^
1293 is not set or is null then set it to
1294 .IR word ;
1295 the value of the parameter is then substituted.
1296 Positional parameters may not be assigned to
1297 in this way.
1299 \f3${\fP\f2parameter\^\fP\f3:?\fP\f2word\^\fP\f3}\fP
1301 .I parameter\^
1302 is set and is non-null then substitute its value;
1303 otherwise, print
1304 .I word\^
1305 and exit from the shell (if not interactive).
1307 .I word\^
1308 is omitted then a standard message is printed.
1310 \f3${\fP\f2parameter\^\fP\f3:+\fP\f2word\^\fP\f3}\fP
1312 .I parameter\^
1313 is set and is non-null then substitute
1314 .IR word ;
1315 otherwise substitute nothing.
1317 In the above,
1318 .I word\^
1319 is not evaluated unless it is
1320 to be used as the substituted string,
1321 so that, in the following example,
1322 .B pwd
1323 is executed only if
1324 .B d
1325 is not set or is null:
1328 print \|${d:\-\^$(\^pwd\^)\^}
1331 If the colon (
1332 .B : )
1333 is omitted from the above expressions,
1334 then the shell only checks whether
1335 .I parameter\^
1336 is set or not.
1338 .PD 0
1339 \f3${\fP\f2parameter\^\fP\f3:\fP\f2offset\^\fP\f3:\fP\f2length\^\fP\f3}\fP
1341 \f3${\fP\f2parameter\^\fP\f3:\fP\f2offset\^\fP\f3}\fP
1342 Expands to the portion of the value of
1343 .I parameter\^
1344 starting at the character (counting from
1345 .BR 0\^ )
1346 determined by expanding
1347 .I offset\^
1348 as an arithmetic expression and consisting of the
1349 number of characters determined by the arithmetic expression
1350 defined by
1351 .IR length.
1352 In the second form, the remainder of the value is used. 
1354 A negative
1355 .I offset\^
1356 counts backwards from the end of
1357 .IR parameter .
1358 Note that one or more
1359 .IR blank s
1360 is required in front of a minus sign
1361 to prevent the shell from interpreting the operator as
1362 .BR :\- .
1364 .I parameter\^
1366 .B \(**
1368 .BR @ ,
1369 or is an array name indexed by
1370 .B \(**
1372 .BR @ ,
1373 then
1374 .I offset\^
1376 .I length\^
1377 refer to the array index and number
1378 of elements respectively.
1379 A negative
1380 .I offset\^
1381 is taken relative to one greater than the highest subscript
1382 for indexed arrays.
1383 The order for associate arrays is unspecified.
1385 .PD 0
1386 \f3${\fP\f2parameter\^\fP\f3#\fP\f2pattern\^\fP\f3}\fP
1388 \f3${\fP\f2parameter\^\fP\f3##\fP\f2pattern\^\fP\f3}\fP
1391 the shell
1392 .I pattern\^
1393 matches the beginning of the value of
1394 .IR parameter ,
1395 then the value of
1396 this expansion is the value of the
1397 .I parameter\^
1398 with the matched portion deleted;
1399 otherwise the value of this
1400 .I parameter\^
1401 is substituted.
1402 In the first form the smallest matching pattern is deleted and in the
1403 second form the largest matching pattern is deleted.
1404 When
1405 .I parameter\^
1407 .BR @ ,
1408 .BR * ,
1409 or an array variable with subscript
1410 .B @
1412 .BR * ,
1413 the substring operation is applied to each element in turn.
1415 .PD 0
1416 \f3${\fP\f2parameter\^\fP\f3%\fP\f2pattern\^\fP\f3}\fP
1418 \f3${\fP\f2parameter\^\fP\f3%%\fP\f2pattern\^\fP\f3}\fP
1421 the shell
1422 .I pattern\^
1423 matches the end of the value of
1424 .IR parameter ,
1425 then the value of
1426 this expansion is the value of the
1427 .I parameter\^
1428 with the matched part deleted;
1429 otherwise substitute the value of
1430 .IR parameter .
1431 In the first form the smallest matching pattern is deleted and in the
1432 second form the largest matching pattern is deleted.
1433 When
1434 .I parameter\^
1436 .BR @ ,
1437 .BR * ,
1438 or an array variable with subscript
1439 .B @
1441 .BR * ,
1442 the substring operation is applied to each element in turn.
1444 .PD 0
1445 \f3${\fP\f2parameter\^\fP\f3/\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP
1447 \f3${\fP\f2parameter\^\fP\f3//\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP
1449 \f3${\fP\f2parameter\^\fP\f3/#\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP
1451 \f3${\fP\f2parameter\^\fP\f3/%\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP
1453 Expands
1454 .I parameter\^
1455 and replaces the longest match of
1456 .I pattern\^
1457 with the given
1458 .IR string.
1459 Each occurrence of \f3\e\fP\f2n\^\fP in
1460 .I string
1461 is replaced by the portion of \f2parameter\^\fP
1462 that matches the \f2n\^\fP-th sub-pattern.
1463 In the first form,
1464 only the first occurrence of
1465 .I pattern\^
1466 is replaced.
1467 In the second form,
1468 each match for
1469 .I pattern\^
1470 is replaced by the given
1471 .IR string.
1472 The third form restricts the pattern match to the beginning of the string
1473 while the fourth form restricts the pattern match to the end of
1474 the string.
1475 When 
1476 .I string\^
1477 is null, the
1478 .I pattern\^
1479 will be deleted and the
1480 .B /
1481 in front of
1482 .I string\^
1483 may be omitted.
1484 When
1485 .I parameter\^
1487 .BR @ ,
1488 .BR * ,
1489 or an array variable with subscript
1490 .B @
1492 .BR * ,
1493 the substitution operation is applied to each element in turn.
1494 In this case, the
1495 .I string\^
1496 portion of
1497 .I word\^
1498 will be re-evaluated for each element.
1500 The following
1501 parameters
1502 are automatically set by the shell:
1504 .PD 0
1506 .B #
1507 The number of positional parameters in decimal.
1509 .B \-
1510 Options supplied to the shell on invocation or by
1512 .B set
1513 command.
1515 .B ?
1516 The decimal value returned by the last executed command.
1518 .B $
1519 The process number of this shell.
1521 .B _
1522 Initially, the value of
1523 .B _
1524 is an absolute pathname of the shell or script being executed
1525 as passed in the
1526 .IR environment .
1527 Subsequently it is assigned the last argument of the previous command.
1528 This parameter is not set for commands which are asynchronous.
1529 This parameter is also used to hold the name of the matching
1531 .SM MAIL
1532 file when checking for mail.
1533 While defining a compound variable or a type,
1534 .B _
1535 is initialized as a reference to the compound variable or type.
1536 When a discipline function is invoked,
1537 .B _
1538 is initialized as a reference to the variable associated with
1539 the call to this function.
1540 Finally when
1541 .B _
1542 is used as the name of the first variable of a type definition,
1543 the new type is derived from the type of the first variable (See
1544 .I "Type Variables"\^
1545 below.).
1547 .B !
1548 The process number of the last background command invoked or
1549 the most recent job put in the background with the
1550 .B bg
1551 built-in command.
1553 .B .sh.command
1554 When processing a
1556 .B DEBUG
1557 trap, this variable contains the current command line
1558 that is about to run.
1560 .B .sh.edchar
1561 This variable contains the value of the keyboard character
1562 (or sequence of characters if the first character is an ESC, ascii
1563 .BR 033\^ )
1564 that has
1565 been entered when processing a
1567 .SM KEYBD
1568 trap
1569 (see
1570 .I "Key Bindings\^"
1571 below).
1572 If the value is changed as part of the trap action, then the new
1573 value replaces the key (or key sequence) that caused the trap.
1575 .B .sh.edcol
1576 The character position of the cursor at the time of the most recent
1578 .SM KEYBD
1579 trap.
1581 .B .sh.edmode
1582 The value is set to ESC when processing a
1584 .SM KEYBD
1585 trap while in
1586 .B vi
1587 insert mode.  (See
1588 .I "Vi Editing Mode"\^
1589 below.)
1590 Otherwise,
1591 .B .sh.edmode
1592 is null when processing a
1594 .SM KEYBD
1595 trap.
1597 .B .sh.edtext
1598 The characters in the input buffer at the time of the most recent
1600 .SM KEYBD
1601 trap.
1602 The value is null when not processing a
1604 .SM KEYBD
1605 trap.
1607 .B .sh.file
1608 The pathname of the file than contains the current command.
1610 .B .sh.fun
1611 The name of the current function that is being executed.
1613 .B .sh.level
1614 Set to the current function depth.  This can be changed
1615 inside a DEBUG trap and will set the context to the specified
1616 level.
1618 .B .sh.lineno
1619 Set during a DEBUG trap to the line number for the caller of
1620 each function.
1622 .B .sh.match
1623 An indexed array which stores the most recent match and sub-pattern
1624 matches after conditional pattern matches that match and after
1625 variables expansions using the operators
1626 .BR # ,
1627 .BR % ,
1629 .BR / .
1631 .BR 0 -th
1632 element stores the complete match and the
1633 .IR i\^ -th.
1634 element stores the
1635 .IR i\^ -th
1636 submatch.
1638 .B .sh.match
1639 variable
1640 becomes unset when the variable that has expanded
1641 is assigned a new value.
1643 .B .sh.name
1644 Set to the name of the variable at the time that a
1645 discipline function is invoked.
1647 .B .sh.subscript
1648 Set to the name subscript of the variable at the time that a
1649 discipline function is invoked.
1651 .B .sh.subshell
1652 The current depth for subshells and command substitution.
1654 .B .sh.value
1655 Set to the value of the variable at the time that the
1656 .B set
1658 .B append
1659 discipline function is invoked.
1661 .B .sh.version
1662 Set to a value that identifies the version of this shell.
1665 .SM KSH_VERSION
1666 A name reference to
1667 .BR .sh.version .
1670 .SM LINENO
1671 The current line number within the script or
1672 function being executed.
1675 .SM OLDPWD
1676 The previous working directory set by the
1677 .B cd
1678 command.
1681 .SM OPTARG
1682 The value of the last option argument processed by the
1683 .B getopts
1684 built-in command.
1687 .SM OPTIND
1688 The index of the last option argument processed by the
1689 .B getopts
1690 built-in command.
1693 .SM PPID
1694 The process number of the parent of the shell.
1697 .SM PWD
1698 The present working directory set by the
1699 .B cd
1700 command.
1703 .SM RANDOM
1704 Each time this variable is referenced, a random integer,
1705 uniformly distributed between 0 and 32767, is generated.
1706 The sequence of random numbers can be initialized by assigning
1707 a numeric value to
1709 .BR RANDOM .
1712 .SM REPLY
1713 This variable is set by the
1714 .B select
1715 statement and by
1717 .B read
1718 built-in command when no arguments are supplied.
1721 .SM SECONDS
1722 Each time this variable is referenced, the number of
1723 seconds since shell invocation is returned.
1724 If this variable is
1725 assigned a value, then the value returned upon reference will
1726 be the value that was assigned plus the number of seconds since the assignment.
1729 .B SHLVL
1730 An integer variable the is incremented each time the shell
1731 is invoked and is exported.
1732 If 
1734 .B SHLVL
1735 is not in the environment when the shell is invoked, it is set
1736 to 1.
1740 The following
1741 variables
1742 are used by the shell:
1744 .PD 0
1747 .SM CDPATH
1748 The search path for the
1749 .B cd
1750 command.
1753 .SM COLUMNS
1754 If this variable is set,
1755 the value is used to define the width of the edit window
1756 for the shell edit modes and for printing
1757 .B select
1758 lists.
1761 .SM EDITOR
1762 If the
1764 .SM VISUAL
1765 variable is not set,
1766 the value of this variable will be checked for the patterns
1767 as described with
1769 .SM VISUAL
1770 below and the corresponding editing option
1771 (see Special Command
1772 .B set
1773 below)
1774 will be turned on.
1777 .B ENV
1778 If this variable is set, then
1779 parameter expansion, command substitution, and arithmetic substitution
1780 are performed on
1781 the value to generate
1782 the pathname of the script that will be
1783 executed when the shell
1784 is invoked interactively
1785 (see
1786 .I Invocation\^
1787 below).
1788 This file is typically used for
1789 .B alias
1791 .B function
1792 definitions.
1793 The default value is \fB$HOME/.kshrc\fP.
1794 On systems that support a system wide  \fB/etc/ksh.kshrc\fP initialization file,
1795 if the filename generated by the expansion of
1797 .B ENV
1798 begins with 
1799 .B /./
1801 .B .\^/.\^/
1802 the system wide initialization file will not be executed.
1805 .SM FCEDIT
1806 Obsolete name for
1807 the default editor name for the
1808 .B hist
1809 command.
1811 .SM FCEDIT
1812 is not used when
1814 .SM HISTEDIT
1815 is set.
1818 .B FIGNORE
1819 A pattern that defines the set of filenames that will be
1820 ignored when performing filename matching.
1823 .B FPATH
1824 The search path for function definitions.
1825 The directories in this path are searched for a file with the same name
1826 as the function or command when a function with the
1827 .B \-u
1828 attribute is referenced and when a command is not found.
1829 If an executable file with the name of that command is found,
1830 then it is read and executed
1831 in the current environment.
1832 Unlike
1834 .BR PATH ,
1835 the current directory must be represented
1836 explicitly by
1837 .B .
1838 rather than by adjacent
1839 .B :
1840 characters or a beginning or ending
1841 .BR : .
1844 .SM HISTCMD
1845 Number of the current command in the history file.
1848 .SM HISTEDIT
1849 Name for
1850 the default editor name for the
1851 .B hist
1852 command.
1855 .B HISTFILE
1856 If this variable is set when the shell is invoked, then
1857 the value is the pathname of the file that will be
1858 used to store the command history (see
1859 .I "Command Re-entry\^"
1860 below).
1863 .B HISTSIZE
1864 If this variable is set when the shell is invoked, then
1865 the number of previously entered commands that
1866 are accessible by this shell
1867 will be greater than or equal to this number.
1868 The default is 512.
1871 .SM HOME
1872 The default argument (home directory) for the
1873 .B cd
1874 command.
1877 .B IFS
1878 Internal field separators,
1879 normally
1880 .BR space ,
1881 .BR tab ,
1883 .B new-line
1884 that are used to separate the results of
1885 command substitution or parameter expansion
1886 and to separate fields with the built-in command
1887 .BR read .
1888 The first character of the
1890 .B IFS
1891 variable is used to separate arguments for the
1893 "$\(**"
1894 substitution (see
1895 .I Quoting
1896 below).
1897 Each single occurrence of
1900 .B IFS
1901 character in the string to be split,
1902 that is not in the \f2isspace\^\fP character class, and any
1903 adjacent characters in
1905 .B IFS
1906 that are in the \f2isspace\^\fP character class, delimit a field.
1907 One or more
1908 characters in
1910 .B IFS
1911 that belong to the \f2isspace\^\fP character class,
1912 delimit a field.
1913 In addition, if the same \f2isspace\^\fP character appears
1914 consecutively inside
1916 .BR IFS ,
1917 this character is treated as if it were not in the \f2isspace\^\fP
1918 class, so that if
1920 .BR IFS
1921 consists of two
1922 .B tab
1923 characters,
1924 then two adjacent
1925 .B tab
1926 characters delimit a null field.
1929 .SM JOBMAX
1930 This variable defines the maximum number running background jobs
1931 that can run at a time.  When this limit is reached, the
1932 shell will wait for a job to complete before staring a new job.
1935 .SM LANG
1936 This variable determines the locale category for any
1937 category not specifically selected with a variable
1938 starting with
1940 .SM LC_
1943 .BR LANG .
1946 .SM LC_ALL
1947 This variable overrides the value of the
1949 .SM LANG
1950 variable and any other
1952 .SM LC_
1953 variable.
1956 .SM LC_COLLATE
1957 This variable determines the locale category for character
1958 collation information.
1961 .SM LC_CTYPE
1962 This variable determines the locale category for character
1963 handling functions.
1964 It determines the character classes for pattern matching (see
1965 .I "File Name Generation\^"
1966 below).
1969 .SM LC_NUMERIC
1970 This variable determines the locale category for the
1971 decimal point character.
1974 .SM LINES
1975 If this variable is set,
1976 the value is used to determine the column length for printing
1977 .B select
1978 lists.
1979 Select lists will print vertically until about two-thirds of
1981 .SM LINES
1982 lines are filled.
1985 .SM MAIL
1986 If this variable is set to the name of a mail file
1987 .I and\^
1990 .SM MAILPATH
1991 variable is not set,
1992 then the shell informs the user of arrival of mail
1993 in the specified file.
1996 .SM MAILCHECK
1997 This variable specifies how often (in seconds) the
1998 shell will check for changes in the modification time
1999 of any of the files specified by the
2001 .SM MAILPATH
2004 .SM MAIL
2005 variables.
2006 The default value is 600 seconds.
2007 When the time has elapsed
2008 the shell will check before issuing the next prompt.
2011 .SM MAILPATH
2012 A colon (
2013 .B :
2015 separated list of file names.
2016 If this variable is set,
2017 then the shell informs the user of
2018 any modifications to the specified files
2019 that have occurred within the last
2021 .SM MAILCHECK
2022 seconds.
2023 Each file name can be followed by a
2024 .B ?
2025 and a message that will be printed.
2026 The message will undergo parameter expansion, command substitution,
2027 and arithmetic substitution
2028 with the variable
2029 .B $_
2030 defined as the name of the file that has changed.
2031 The default message is
2032 .I you have mail in $_\^.
2035 .SM PATH
2036 The search path for commands (see
2037 .I Execution\^
2038 below).
2039 The user may not change
2040 .B \s-1PATH\s+1
2041 if executing under
2042 .if \nZ=0 .B rsh
2043 .if \nZ=1 .B rksh
2044 .if \nZ=2 .B rksh93
2045 (except in
2046 .BR .profile\^).
2049 .B PS1
2050 The value of this variable is expanded for parameter
2051 expansion, command substitution, and arithmetic substitution to define the
2052 primary prompt string which by default is
2053 .RB `` "$\|\|\|" ''.
2054 The character
2055 .B !
2056 in the primary prompt string is replaced by the
2057 .I command\^
2058 number (see
2059 .I "Command Re-entry\^"
2060 below).
2061 Two successive occurrences of
2062 .B !
2063 will produce a single
2064 .B !
2065 when the prompt string is printed.
2068 .B PS2
2069 Secondary prompt string, by default
2070 .RB `` "> \|" ''.
2073 .B PS3
2074 Selection prompt string
2075 used within a
2076 .B select
2077 loop, by default
2078 .RB `` "#? \|" ''.
2081 .B PS4
2082 The value of this variable is expanded for parameter evaluation,
2083 command substitution, and arithmetic substitution
2084 and precedes each line of an execution trace.
2085 By default,
2087 .B PS4
2089 .RB `` "+ \|" ''.
2090 In addition
2091 when
2093 .B PS4
2094 is unset,
2095 the execution trace prompt is also
2096 .RB `` "+ \|" ''.
2099 .B SHELL
2100 The pathname of the
2101 .I shell\^
2102 is kept in the environment.
2103 At invocation, if the basename of this variable is
2104 .BR rsh ,
2105 .BR rksh ,
2107 .BR krsh ,
2108 then the shell becomes restricted.
2109 If it is
2110 .BR pfsh
2112 .BR pfksh ,
2113 then the shell becomes a profile shell (see
2114 .IR pfexec (1)).
2117 .B TIMEFORMAT
2118 The value of this parameter is used as a format string specifying
2119 how the timing information for pipelines prefixed with the
2120 .B time
2121 reserved word should be displayed.
2122 The \fB%\fP character introduces a format sequence that is
2123 expanded to a time value or other information.
2124 The format sequences and their meanings are as follows.
2125 .sp .5
2127 .PD 0
2128 .TP 10
2129 .B %%
2130 A literal \fB%\fP.
2132 .B %[\fIp\fP][l]R
2133 The elapsed time in seconds.
2135 .B %[\fIp\fP][l]U
2136 The number of CPU seconds spent in user mode.
2138 .B %[\fIp\fP][l]S
2139 The number of CPU seconds spent in system mode.
2141 .B %P
2142 The CPU percentage, computed as (U + S) / R.
2146 The brackets denote optional portions.
2147 The optional \fIp\fP is a digit specifying the \fIprecision\fP,
2148 the number of fractional digits after a decimal point.
2149 A value of 0 causes no decimal point or fraction to be output.
2150 At most three places after the decimal point can be displayed;
2151 values of \fIp\fP greater than 3 are treated as 3.
2152 If \fIp\fP is not specified, the value 3 is used.
2154 The optional \fBl\fP specifies a longer format, including
2155 hours if greater than zero,
2156 minutes, and seconds of the form \fIHH\fPh\fIMM\fPm\fISS\fP.\fIFF\fPs.
2157 The value of \fIp\fP determines whether or not the fraction is
2158 included.
2160 All other characters are output without change and a trailing
2161 newline is added.
2162 If unset, the default value, \fB$'\enreal\et%2lR\enuser\et%2lU\ensys\t%2lS'\fP,
2163 is used.  If the value is null, no timing information is displayed.
2166 .SM TMOUT
2167 If set to a value greater than zero,
2169 .SM TMOUT
2170 will be the default timeout value for the
2171 .B read
2172 built-in command.
2174 .B select
2175 compound command terminates after
2177 .SM TMOUT
2178 seconds when input is from a terminal.
2179 Otherwise,
2180 the shell will terminate if a line is not entered within
2181 the prescribed number of seconds while reading from a terminal.
2182 (Note that the shell can be compiled with a maximum bound
2183 for this value which cannot be exceeded.)
2186 .SM VISUAL
2187 If the value of this variable matches the pattern
2188 .IR *[Vv][Ii]* ,
2189 then the
2190 .B vi
2191 option
2192 (see Special Command
2193 .B set
2194 below)
2195 is turned on.
2196 If the value matches the pattern
2197 .I *gmacs* ,
2199 .B gmacs
2200 option is turned on.
2201 If the value matches the pattern
2202 .IR *macs* ,
2203 then the
2204 .B emacs
2205 option
2206 will be turned on.
2207 The value of
2209 .SM VISUAL
2210 overrides the value of
2212 .SM EDITOR.
2216 The shell gives default values to
2217 \f3\s-1PATH\s+1\fP, \f3\s-1PS1\s+1\fP, \f3\s-1PS2\s+1\fP,
2218 \f3\s-1PS3\s+1\fP, \f3\s-1PS4\s+1\fP, \f3\s-1MAILCHECK\s+1\fP, \f3\s-1FCEDIT\s+1\fP,
2219 \f3\s-1TMOUT\s+1\fP and \f3\s-1IFS\s+1\fP,
2220 while
2222 .BR HOME ,
2224 .BR SHELL ,
2226 .BR ENV ,
2229 .B MAIL
2231 not set at all by the shell (although
2233 .B HOME
2234 .I is\^
2235 set by
2236 .IR login (1)).
2237 On some systems
2239 .B MAIL
2242 .B SHELL
2243 are also
2244 set by
2245 .IR login (1).
2246 .SS Field Splitting.
2247 After parameter expansion and command substitution,
2248 the results of substitutions are scanned for the field separator
2249 characters (those found in
2251 .B IFS\^\c
2253 and split into distinct fields where such characters are found.
2254 Explicit null fields (\^\f3"\^"\fP or \f3\(fm\^\(fm\fP\^) are retained.
2255 Implicit null fields
2256 (those resulting from
2257 .I parameters\^
2258 that have no values or command substitutions with no output) are removed.
2260 If the
2261 .B braceexpand
2262 .RB ( \-B )
2263 option is set then each of the fields resulting from
2265 .B IFS
2266 are checked to see if they contain one or more of the brace patterns
2267 .BR {*,*} ,
2268 .BI { l1 .. l2 }
2270 .BI { n1 .. n2 }
2272 .BI { n1 .. n2 %
2273 .IB fmt }
2275 .BI { n1 .. n2
2276 .BI  .. n3 }
2277 , or
2278 .BI { n1 .. n2
2279 .BI  .. n3 % fmt }
2280 , where
2281 .B *
2282 represents any character,
2283 .IR l1\^ , l2\^
2284 are letters and
2285 .IR n1\^ , n2\^ , n3\^
2286 are signed numbers and
2287 .I fmt\^
2288 is a format specified as used by
2289 .BR printf .
2290 In each case, fields are created
2291 by prepending the characters before the
2292 .B {
2293 and appending the characters after the
2294 .B } 
2295 to each of the strings generated by the characters between
2297 .B {
2299 .BR } .
2300 The resulting fields are checked to see if they have any
2301 brace patterns.
2303 In the first form, a field is created for each string between
2304 .BR {
2306 .BR , ,
2307 between
2308 .BR ,
2310 .BR , ,
2311 and between
2312 .BR ,
2314 .BR } .
2315 The string represented by
2316 .B *
2317 can contain embedded matching
2318 .B {
2320 .B }
2321 without quoting.
2322 Otherwise, each
2323 .B {
2325 .B }
2326 with
2327 .B *
2328 must be quoted.
2330 In the seconds form,
2331 .I l1\^
2333 .I l2\^
2334 must both be either upper case or both be lower case characters
2335 in the C locale.  In this case a field is created for each character
2336 from
2337 .I l1\^
2338 thru
2339 .IR l2\^ .
2341 In the remaining forms, a field is created for each number starting at
2342 .I n1\^
2343 and continuing until it reaches
2344 .I n2\^
2345 incrementing 
2346 .I n1\^
2348 .IR n3\^ .
2349 The cases where
2350 .I n3\^
2351 is not specified behave as if
2352 .I n3\^
2353 where
2354 .B 1
2356 .IB n1 <= n2
2358 .B \-1
2359 otherwise.
2360 If forms which specify
2361 .BI % fmt\^
2362 any format flags, widths and precisions can be specified
2364 .I fmt\^
2365 can end in any of the specifiers
2366 .BR cdiouxX .
2367 For example,
2368 .B {a,z}{1..5..3%02d}{b..c}x
2369 expands to the 8 fields,
2370 .BR a01bx ,
2371 .BR a01cx ,
2372 .BR a04bx ,
2373 .BR a04cx ,
2374 .BR z01bx ,
2375 .BR z01cx ,
2376 .B z04bx
2378 .BR z4cx .
2379 .SS File Name Generation.
2380 Following splitting, each field is scanned for the characters
2381 .BR \(** ,
2382 .BR ? ,
2383 .BR ( ,
2385 .B \*(OK\^
2386 unless the
2387 .B \-f
2388 option has been set.
2389 If one of these characters appears,
2390 then the word is regarded as a
2391 .IR pattern .
2392 Each file name component that contains any pattern character
2393 is replaced with a lexicographically sorted set of names
2394 that matches the pattern
2395 from
2396 that directory.
2397 If no file name is found that matches the pattern, then
2398 that component of the filename is left unchanged unless
2399 the pattern is prefixed with
2400 .B \(ap(N)\fP
2401 in which case it is removed as described below.
2404 .B FIGNORE
2405 is set,
2406 then each file name component
2407 that matches the pattern defined by the value of 
2409 .B FIGNORE
2410 is ignored when generating the matching filenames.
2411 The names
2412 .B .
2414 .B ..
2415 are also ignored.
2418 .B FIGNORE
2419 is not set,
2420 the character
2421 .B .
2422 at the start of each file name component
2423 will be ignored unless the first character of the pattern
2424 corresponding to this component is the character
2425 .BR .
2426 itself.
2427 Note, that for other
2428 uses of pattern matching the
2429 .B /
2431 .B .
2432 are not treated specially.
2434 .PD 0
2437 .B \(**
2438 Matches any string, including the null string.
2439 When used for filename expansion,
2440 if the
2441 .B globstar
2442 option is on, two adjacent
2443 .BR \(** 's
2444 by itself
2445 will match all files and zero or more directories
2446 and subdirectories.
2447 If followed by a
2448 .B /
2449 then only directories and subdirectories will match.
2451 .B ?
2452 Matches any single character.
2454 .BR \*(OK \^.\|.\|.\^ \*(CK
2455 Matches any one of the enclosed characters.
2456 A pair of characters separated by
2457 .B \-
2458 matches any
2459 character lexically between the pair, inclusive.
2460 If the first character following the opening
2461 .B \*(OK\^
2462 is a
2463 .B !
2464 then any character not enclosed is matched.
2466 .B \-
2467 can be included in the character set by putting it as the
2468 first or last character.
2470 Within
2471 .B \*(OK\^
2473 .BR \*(CK\^ ,
2474 character classes can be specified with the syntax
2475 \f3[:\fP\f2class\fP\f3:]\fP
2476 where class is one of the following classes defined in the ANSI-C standard:
2477 (Note that \f3word\fP is equivalent to \f3alnum\fP plus the character \f3_\fP).
2479 .if t .RS
2481 .if n alnum alpha blank cntrl digit graph lower print punct space upper word xdigit
2482 .if t alnum   alpha   blank   cntrl   digit   graph   lower   print   punct   space   upper   word    xdigit
2484 Within
2485 .B \*(OK\^
2487 .BR \*(CK\^ ,
2488 an equivalence class can be specified with the syntax
2489 \f3[=\fP\f2c\fP\f3=]\fP
2490 which matches all characters with the same primary
2491 collation weight (as defined by the current locale) as
2492 the character \f2c\fP.
2494 Within
2495 .B \*(OK\^
2497 .BR \*(CK\^ ,
2498 \f3[.\fP\f2symbol\fP\f3.]\fP
2499 matches the collating symbol \f2symbol\fP.
2500 .if t .RE
2504 .I pattern-list
2505 is a list of one or more patterns separated from each other
2506 with a
2507 .B &
2509 .BR \(bv .
2511 .B &
2512 signifies that all patterns must be matched whereas
2513 .BR \(bv
2514 requires that only one pattern be matched.
2515 Composite patterns can be formed with one or more of the following sub-patterns:
2516 .PD 0
2519 \f3?(\fP\f2pattern-list\^\fP\f3)\fP
2520 Optionally matches any one of the given patterns.
2522 \f3*(\fP\f2pattern-list\^\fP\f3)\fP
2523 Matches zero or more occurrences of the given patterns.
2525 \f3+(\fP\f2pattern-list\^\fP\f3)\fP
2526 Matches one or more occurrences of the given patterns.
2528 \f3{\fP\f2n\^\fP\f3}\fP(\fP\f2pattern-list\^\fP\f3)\fP
2529 Matches \f2n\^\fP occurrences of the given patterns.
2531 \f3{\fP\f2m\^\fP\f3,\fP\f2n\^\fP\f3}\fP(\fP\f2pattern-list\^\fP\f3)\fP
2532 Matches from \f2m\^\fP to \f2n\^\fP occurrences of the given patterns.
2533 If \f2m\^\fP is omitted, \f30\fP will be used.  If \f2n\^\fP
2534 is omitted at least \f2m\^\fP occurrences will be matched.
2536 \f3\&@\&(\fP\f2pattern-list\^\fP\f3)\fP
2537 Matches exactly one of the given patterns.
2540 \f3!(\fP\f2pattern-list\^\fP\f3)\fP
2541 Matches anything except one of the given patterns.
2544 By default, each pattern, or sub-pattern will match the
2545 longest string possible consistent with generating
2546 the longest overall match.  If more than one match is
2547 possible, the one starting closest to the beginning
2548 of the string will be chosen.   However, for each of the above
2549 compound patterns a \f3\-\fP can be inserted in front of the \f3(\fP
2550 to cause the shortest match to the specified \f2pattern-list\^\fP
2551 to be used.
2553 When \f2pattern-list\^\fP is contained within parentheses,
2554 the backslash character \f3\e\fP is treated specially even
2555 when inside a character class.   All ANSI-C character escapes are
2556 recognized and match the specified character.  In addition
2557 the following escape sequences are recognized: 
2558 .PD 0
2561 .B \ed
2562 Matches any character in the \f3digit\fP class.
2564 .B \eD
2565 Matches any character not in the \f3digit\fP class.
2567 .B \es
2568 Matches any character in the \f3space\fP class.
2570 .B \eS
2571 Matches any character not in the \f3space\fP class.
2573 .B \ew
2574 Matches any character in the \f3word\fP class.
2576 .B \eW
2577 Matches any character not in the \f3word\fP class.
2581 A pattern of the form
2582 \f3%(\fP\f2pattern-pair\^\fP(s)\f3)\fP
2583 is a sub-pattern that
2584 can be used to match nested character expressions.
2585 Each
2586 .I pattern-pair\^
2587 is a two character sequence which cannot contain
2588 .B &
2590 .BR \(bv .
2591 The first
2592 .I pattern-pair\^
2593 specifies the starting and ending characters for the match.
2594 Each subsequent
2595 .I pattern-pair\^
2596 represents the beginning and ending characters of a nested group that
2597 will be skipped over when counting starting and ending character matches.
2598 The behavior is unspecified when the first character of a
2599 .I pattern-pair\^
2600 is alpha-numeric
2601 except for the following:
2602 .PD 0
2605 .B D
2606 Causes the ending character to terminate the search for this pattern without
2607 finding a match.
2609 .B E
2610 Causes the ending character to be interpreted as an escape character.
2612 .B L
2613 Causes the ending character to be interpreted as a quote character
2614 causing all characters to be ignored when looking for a match.
2616 .B Q
2617 Causes the ending character to be interpreted as a quote character
2618 causing all characters other than any escape character to be ignored
2619 when looking for a match.
2622 Thus,
2623 \f3%(\^{\^}Q"E\e\^)\fP,
2624 matches characters starting at
2625 .B {
2626 until the matching
2627 .B }
2628 is found not counting any
2629 .B {
2631 .B }
2632 that is inside a double quoted string or preceded by the escape character
2633 .BR \e .
2634 Without the
2635 .B {\^}
2636 this pattern matches any C language string.
2638 Each sub-pattern in a composite pattern is numbered,
2639 starting at 1, by the location of the \f3(\fP within
2640 the pattern.
2641 The sequence \f3\e\fP\f2n\^\fP, where \f2n\^\fP 
2642 is a single digit and \f3\e\fP\f2n\^\fP comes after
2643 the \f2n\fP-th. sub-pattern,
2644 matches the same string as the sub-pattern itself.
2646 Finally a pattern can contain sub-patterns of the form
2647 \f3\(ap(\fP\f2options\^\fP\f3:\fP\f2pattern-list\^\fP\f3)\fP,
2648 where either \f2options\^\fP or \f3:\fP\f2pattern-list\^\fP
2649 can be omitted.  Unlike the other compound patterns,
2650 these sub-patterns are not counted in the numbered sub-patterns.
2651 If \f2options\^\fP is present, it can consist of one or more
2652 of the following:
2653 .PD 0
2656 .B +
2657 Enable the following options.  This is the default.
2659 .B \-
2660 Disable the following options.
2662 .B E
2663 The remainder of the pattern uses extended regular expression syntax
2664 like the
2665 .IR egrep (1)
2666 command.
2668 .B F
2669 The remainder of the pattern uses
2670 .IR fgrep (1)
2671 expression syntax.
2673 .B G
2674 The remainder of the pattern uses basic regular expression syntax
2675 like the
2676 .IR grep (1)
2677 command.
2679 .B K
2680 The remainder of the pattern uses shell pattern syntax.
2681 This is the default.
2683 .B N
2684 This is ignored.  However, when it is the first letter and is
2685 used with file name generation, and no matches occur,
2686 the file pattern expands to the empty string.
2688 .B i
2689 Treat the match as case insensitive.
2691 .B g
2692 File the longest match (greedy).  This is the default.
2694 .B l
2695 Left anchor the pattern.  This is the default for
2696 .B K
2697 style patterns.
2699 .B r
2700 Right anchor the pattern.  This is the default for
2701 .B K
2702 style patterns.
2705 If both \f2options\^\fP and \f3:\fP\f2pattern-list\^\fP
2706 are specified, then the options apply only to  \f2pattern-list\^\fP.
2707 Otherwise, these options remain in effect until they are disabled
2708 by a subsequent \f3\(ap(\fP\f2...\^\fP\f3)\fP or at the end of
2709 the sub-pattern containing \f3\(ap(\fP\f2...\^\fP\f3)\fP.
2710 .SS Quoting.
2711 Each of the
2712 .I metacharacters\^
2713 listed earlier (see
2714 .I Definitions\^
2715 above)
2716 has a special meaning to the shell
2717 and causes termination of a word unless quoted.
2718 A character may be
2719 .I quoted\^
2720 (i.e., made to stand for itself)
2721 by preceding
2722 it with a
2723 .BR \e .
2724 The pair
2725 .B \enew-line
2726 is removed.
2727 All characters enclosed between a pair of single quote marks
2728 (\^\f3\(fm\^\(fm\fP\^)
2729 that is not preceded by a
2730 .B $
2731 are quoted.
2732 A single quote cannot appear within the single quotes.
2733 A single quoted string preceded by an unquoted
2734 .B $
2735 is processed as an ANSI-C string
2736 except for the following:
2737 .PD 0
2739 .B \e0
2740 Causes the remainder of the string to be ignored.
2742 .B \eE
2743 Equivalent to the escape character
2744 (ascii
2745 .BR 033 ),
2747 .B \ee
2748 Equivalent to the escape character
2749 (ascii
2750 .BR 033 ),
2752 .BI \ec x
2753 Expands to the character control-\f2x\fP.
2755 .BI \eC[. name .]
2756 Expands to the collating element \f2name\fP.
2759 Inside double quote marks
2760 (\f3"\^"\fP),
2761 parameter and command substitution occur and
2762 .B \e
2763 quotes the characters
2764 .BR \e ,
2765 .BR \*` ,
2766 \f3"\fP,
2768 .BR $ .
2770 .B $
2771 in front of a double quoted string will be ignored
2772 in the "C" or "POSIX" locale, and may cause
2773 the string to be replaced by a locale specific string otherwise.
2774 The meaning of
2775 .B "$\(**"
2777 .B "$@"
2778 is identical when not quoted or when used as a variable assignment value
2779 or as a file name.
2780 However, when used as a command argument,
2782 "$\(**"
2783 is equivalent to
2784 \f3"$1\fP\f2d\fP\f3\|$2\fP\f2d\fP\|.\|.\|.\f3"\fP,
2785 where
2786 .I d
2787 is the first character of the
2789 .B IFS
2790 variable, whereas
2792 "$@"
2793 is equivalent to
2795 "$1"\|
2797 "$2"\|
2798 \&.\|.\|.\^.
2799 Inside grave quote marks
2800 (\f3\*`\^\*`\fP),
2801 .B \e
2802 quotes the characters
2803 .BR \e ,
2804 .BR \*` ,
2806 .BR $ .
2807 If the grave quotes occur within double quotes, then
2808 .B \e
2809 also quotes the character
2810 \f3"\fP.
2812 The special meaning of reserved words or aliases can be removed by quoting any
2813 character of the reserved word.
2814 The recognition of function names or built-in command names listed below
2815 cannot be altered by quoting them.
2816 .SS Arithmetic Evaluation.
2817 The shell performs arithmetic evaluation for
2818 arithmetic substitution, to evaluate an arithmetic command,
2819 to evaluate an indexed array subscript, 
2820 and to evaluate arguments to
2821 the built-in commands
2822 .B shift\^
2824 .BR let .
2825 Evaluations are performed using
2826 double precision floating point
2827 arithmetic or long double precision floating point for
2828 systems that provide this data type.
2829 Floating point constants follow the ANSI-C programming language
2830 floating point conventions.
2831 Integer constants follow the ANSI-C programming language
2832 integer constant conventions although only single byte
2833 character constants are recognized and character casts
2834 are not recognized.
2835 In addition constants can be of the form
2836 \*(OK\f2base\f3#\^\f1\*(CK\f2n\^\fP
2837 where
2838 .I base\^
2839 is a decimal number between two and sixty-four
2840 representing the arithmetic base
2842 .I n\^
2843 is a number in that base.
2844 The digits above 9 are represented
2845 by the lower case letters, the upper case letters,
2846 .BR @ ,
2848 .B _
2849 respectively.
2850 For bases less than or equal to 36, upper and lower case
2851 characters can be used interchangeably.
2853 An arithmetic expression uses the same syntax, precedence, and
2854 associativity of
2855 expression as the C language.
2856 All the C language operators
2857 that apply to floating point quantities can be used.
2858 In addition, the operator
2859 .B **
2860 can be used for exponentiation.
2861 It has higher precedence than multiplication and is left associative.
2862 In addition, when the value of an arithmetic variable
2863 or sub-expression can be represented as a long integer,
2864 all C language integer arithmetic operations can be performed. 
2865 Variables can be referenced by name within an arithmetic expression
2866 without using the parameter expansion syntax.
2867 When a variable is referenced, its value is evaluated as
2868 an arithmetic expression.
2870 Any of the following math library functions that are in the C math library
2871 can be used within an arithmetic expression: 
2873 .if t .RS
2875 .if n abs acos acosh asin asinh atan atan2 atanh cbrt copysign cos cosh erf erfc exp exp2 expm1 fabs fdim finite floor fma fmax fmod hypot ilogb int isinf isnan j0 j1 jn lgamma log log2 logb nearbyint nextafter nexttoward pow remainder rint round sin sinh sqrt tan tanh tgamma trunc y0 y1 yn
2876 .if t abs   acos   acosh   asin   asinh   atan   atan2   atanh   cbrt   copysign   cos   cosh   erf  erfc   exp   exp2   expm1   fabs   fdim   finite   floor  fma   fmax   fmod   j0      j1      jn      hypot   ilogb   int   isinf   isnan   lgamma   log   log2   logb   nearbyint   nextafter   nexttoward  pow   rint   round   sin   sinh   sqrt   tan   tanh   tgamma   trunc   y0      y1      yn
2877 .if t .RE
2879 An internal representation of a
2880 .I variable\^
2881 as a double precision floating point can be specified with the
2882 \f3\-E\fP \*(OK\f2n\^\fP\*(CK,
2883 \f3\-F\fP \*(OK\f2n\^\fP\*(CK,
2885 \f3\-X\fP \*(OK\f2n\^\fP\*(CK
2886 option of the
2887 .B typeset
2888 special built-in command.
2890 .B \-E
2891 option causes the expansion of the value to be represented using
2892 scientific notation when it is expanded.
2893 The optional option argument
2894 .I n
2895 defines the number of significant figures.
2897 .B \-F
2898 option causes the expansion to be represented as a floating decimal number
2899 when it is expanded.
2901 .B \-X
2902 option cause the expansion to be represented using the
2903 .B %a
2904 format defined by ISO C-99.
2905 The optional option argument
2906 .I n
2907 defines the number of places after the decimal (or radix) point in this case.
2909 An internal integer representation of a
2910 .I variable\^
2911 can be specified with the
2912 \f3\-i\fP \*(OK\f2n\^\fP\*(CK
2913 option of the
2914 .B typeset
2915 special built-in command.
2916 The optional option argument
2917 .I n
2918 specifies an arithmetic base to be used when expanding the variable.
2919 If you do not specify an arithmetic base,
2920 base 10 will be used.
2922 Arithmetic evaluation is performed on the value of each
2923 assignment to a variable with the
2924 .BR \-E ,
2925 .BR \-F ,
2926 .BR \-X ,
2928 .B \-i
2929 attribute.
2930 Assigning a floating point number to a
2931 variable whose type is an integer causes the fractional
2932 part to be truncated.
2934 .SS Prompting.
2935 When used interactively,
2936 the shell prompts with the value of
2938 .B PS1
2939 after expanding it for parameter expansion, command substitution, and
2940 arithmetic substitution,
2941 before reading a command.
2942 In addition, each single
2943 .B !
2944 in the prompt is replaced by the command number.
2946 .B !!
2947 is required to place
2948 .B !
2949 in the prompt.
2950 If at any time a new-line is typed and further input is needed
2951 to complete a command, then the secondary prompt
2952 (i.e., the value of
2953 .BR \s-1PS2\s+1 )
2954 is issued.
2955 .SS Conditional Expressions.
2957 .I "conditional expression"
2958 is used with the
2959 .B [[
2960 compound command to test attributes of files and to compare
2961 strings.
2962 Field splitting and file name generation are
2963 not performed on the words between
2964 .B [[
2966 .BR ]] .
2967 Each expression can be constructed from one or more
2968 of the following unary or binary expressions:
2969 .PD 0
2971 \f2string\fP
2972 True, if
2973 .I string
2974 is not null.
2976 \f3\-a\fP \f2file\fP
2977 Same as \f3\-e\fP below.
2978 This is obsolete.
2980 \f3\-b\fP \f2file\fP
2981 True, if
2982 .I file\^
2983 exists and is a block special file.
2985 \f3\-c\fP \f2file\fP
2986 True, if
2987 .I file\^
2988 exists and is a character special file.
2990 \f3\-d\fP \f2file\fP
2991 True, if
2992 .I file\^
2993 exists and is a directory.
2995 \f3\-e\fP \f2file\fP
2996 True, if
2997 .I file\^
2998 exists.
3000 \f3\-f\fP \f2file\fP
3001 True, if
3002 .I file\^
3003 exists and is an ordinary file.
3005 \f3\-g\fP \f2file\fP
3006 True, if
3007 .I file\^
3008 exists and it has its setgid bit set.
3010 \f3\-k\fP \f2file\fP
3011 True, if
3012 .I file\^
3013 exists and it has its sticky bit set.
3015 \f3\-n\fP \f2string\fP
3016 True, if length of
3017 .I string\^
3018 is non-zero.
3020 \f3\-o\fP \f3?\fP\f2option\fP
3021 True, if option named
3022 .I option\^
3023 is a valid option name.
3025 \f3\-o\fP \f2option\fP
3026 True, if option named
3027 .I option\^
3028 is on.
3030 \f3\-p\fP \f2file\fP
3031 True, if
3032 .I file\^
3033 exists and is a fifo special file or a pipe.
3035 \f3\-r\fP \f2file\fP
3036 True, if
3037 .I file\^
3038 exists and is readable by current process.
3040 \f3\-s\fP \f2file\fP
3041 True, if
3042 .I file\^
3043 exists and has size greater than zero.
3045 \f3\-t\fP \f2fildes\fP
3046 True, if file descriptor number
3047 .I fildes\^
3048 is open and associated with a terminal device.
3050 \f3\-u\fP \f2file\fP
3051 True, if
3052 .I file\^
3053 exists and it has its setuid bit set.
3055 \f3\-w\fP \f2file\fP
3056 True, if
3057 .I file\^
3058 exists and is writable by current process.
3060 \f3\-x\fP \f2file\fP
3061 True, if
3062 .I file\^
3063 exists and is executable by current process.
3065 .I file\^
3066 exists and is a directory, then true if the current process
3067 has permission to search in the directory.
3069 \f3\-z\fP \f2string\fP
3070 True, if length of
3071 .I string\^
3072 is zero.
3074 \f3\-L\fP \f2file\fP
3075 True, if
3076 .I file\^
3077 exists and is a symbolic link.
3079 \f3\-h\fP \f2file\fP
3080 True, if
3081 .I file\^
3082 exists and is a symbolic link.
3084 \f3\-N\fP \f2file\fP
3085 True, if
3086 .I file\^
3087 exists and the modification time is greater than the last access time.
3089 \f3\-O\fP \f2file\fP
3090 True, if
3091 .I file\^
3092 exists and is owned by the effective user id of this process.
3094 \f3\-G\fP \f2file\fP
3095 True, if
3096 .I file\^
3097 exists and its group matches the effective group id of this process.
3099 \f3\-S\fP \f2file\fP
3100 True, if
3101 .I file\^
3102 exists and is a socket.
3104 \f2file1\fP \f3\-nt\fP \f2file2\fP
3105 True, if
3106 .I file1\^
3107 exists and
3108 .I file2\^
3109 does not, or
3110 .I file1\^
3111 is newer than
3112 .IR file2 .
3114 \f2file1\fP \f3\-ot\fP \f2file2\fP
3115 True, if
3116 .I file2\^
3117 exists and
3118 .I file1\^
3119 does not, or
3120 .I file1\^
3121 is older than
3122 .IR file2 .
3124 \f2file1\fP \f3\-ef\fP \f2file2\fP
3125 True, if
3126 .I file1\^
3127 and 
3128 .I file2\^
3129 exist and refer to the same file.
3131 \f2string\fP \f3==\fP \f2pattern\fP
3132 True, if
3133 .I string\^
3134 matches
3135 .IR pattern .
3136 Any part of
3137 .I pattern\^
3138 can be quoted to cause it to be matched as a string.
3139 With a successful match to a pattern, the
3140 .B .sh.match
3141 array variable will contain the match and sub-pattern matches.
3143 \f2string\fP \f3=\fP \f2pattern\fP
3144 Same as \f3==\fP above, but is obsolete.
3146 \f2string\fP \f3!=\fP \f2pattern\fP
3147 True, if
3148 .I string\^
3149 does not match
3150 .IR pattern .
3151 When the
3152 .I string\^
3153 matches the
3154 .I pattern\^
3156 .B .sh.match
3157 array variable will contain the match and sub-pattern matches.
3159 \f2string\fP \f3=\(ap\fP \f2ere\fP
3160 True if
3161 .I string\^
3162 matches the pattern
3163 .BI \(ap(E) ere\^
3164 where
3165 .I ere\^
3166 is an extended regular expression.
3168 \f2string1\fP \f3<\fP \f2string2\fP
3169 True, if
3170 .I string1\^
3171 comes before
3172 .I string2\^
3173 based on ASCII value of their characters.
3175 \f2string1\fP \f3>\fP \f2string2\fP
3176 True, if
3177 .I string1\^
3178 comes after
3179 .I string2\^
3180 based on ASCII value of their characters.
3182 The following obsolete arithmetic comparisons are also permitted:
3183 .PD 0
3185 \f2exp1\fP \f3\-eq\fP \f2exp2\fP
3186 True, if
3187 .I exp1\^
3188 is equal to
3189 .IR exp2 .
3191 \f2exp1\fP \f3\-ne\fP \f2exp2\fP
3192 True, if
3193 .I exp1\^
3194 is not equal to
3195 .IR exp2 .
3197 \f2exp1\fP \f3\-lt\fP \f2exp2\fP
3198 True, if
3199 .I exp1\^
3200 is less than
3201 .IR exp2 .
3203 \f2exp1\fP \f3\-gt\fP \f2exp2\fP
3204 True, if
3205 .I exp1\^
3206 is greater than
3207 .IR exp2 .
3209 \f2exp1\fP \f3\-le\fP \f2exp2\fP
3210 True, if
3211 .I exp1\^
3212 is less than or equal to
3213 .IR exp2 .
3215 \f2exp1\fP \f3\-ge\fP \f2exp2\fP
3216 True, if
3217 .I exp1\^
3218 is greater than or equal to
3219 .IR exp2 .
3222 In each of the above expressions, if
3223 .I file\^
3224 is of the form
3225 \f3/dev/fd/\fP\f2n\fP,
3226 where
3227 .I n\^
3228 is an integer,
3229 then the test is applied to the open file whose
3230 descriptor number is
3231 .IR n .
3233 A compound expression can be constructed from these primitives by
3234 using any of the following, listed in decreasing order of precedence.
3235 .PD 0
3237 \f3(\fP\f2expression\fP\f3)\fP
3238 True, if
3239 .I expression\^
3240 is true.
3241 Used to group expressions.
3243 \f3!\fP \f2expression\fP
3244 True if
3245 .I expression\^
3246 is false.
3248 \f2expression1\fP \f3&&\fP \f2expression2\fP
3249 True, if
3250 .I expression1\^
3252 .I expression2\^
3253 are both true.
3255 \f2expression1\fP \f3\(bv\(bv\fP \f2expression2\fP
3256 True, if either
3257 .I expression1\^
3259 .I expression2\^
3260 is true.
3262 .SS Input/Output.
3263 Before a command is executed, its input and output
3264 may be redirected using a special notation interpreted by the shell.
3265 The following may appear anywhere in a simple-command
3266 or may precede or follow a
3267 .I command\^
3268 and are
3269 .I not\^
3270 passed on to the invoked command.
3271 Command substitution, parameter expansion,
3272 and arithmetic substitution occur before
3273 .I word\^
3275 .I digit\^
3276 is used except as noted below.
3277 File name generation
3278 occurs only if the shell is interactive and
3279 the pattern matches a single file.
3280 Field splitting is not performed.
3282 In each of the following redirections, if
3283 .I file\^
3284 is of the form
3285 \f3/dev/sctp/\fP\f2host\fP\f3/\fP\f2port\fP,
3286 \f3/dev/tcp/\fP\f2host\fP\f3/\fP\f2port\fP,
3288 \f3/dev/udp/\fP\f2host\fP\f3/\fP\f2port\fP,
3289 where
3290 .I host\^
3291 is a hostname or host address,
3293 .I port\^
3294 is a service given by name or an integer port number,
3295 then the redirection attempts to make a
3296 \f3tcp\fP, \f3sctp\fP or \f3udp\fP connection to the corresponding
3297 socket.
3299 No intervening space is allowed between the characters of redirection operators.
3300 .TP 14
3301 .BI < word
3302 Use file
3303 .I word\^
3304 as standard input (file descriptor 0).
3306 .BI > word
3307 Use file
3308 .I word\^
3309 as standard output (file descriptor 1).
3310 If the file does not exist then it is created.
3311 If the file exists, and the
3312 .B noclobber
3313 option is on,
3314 this causes an error;
3315 otherwise, it is truncated to zero length.
3317 .BI >| word
3318 Sames as
3319 .BR > ,
3320 except that it overrides the
3321 .B noclobber
3322 option.
3324 .BI >; word
3325 Write output to a temporary file.  If the command completes
3326 successfully rename it to
3327 .IR word  ,
3328 otherwise, delete the temporary file.
3329 .BI >; word
3330 cannot be used with the
3331 .IR exec (2).
3332 built-in.
3334 .BI >> word
3335 Use file
3336 .I word\^
3337 as standard output.
3338 If the file exists, then output is appended to it (by first seeking to the end-of-file);
3339 otherwise, the file is created.
3341 .BI <> word
3342 Open file
3343 .I word\^
3344 for reading and writing
3345 as standard output.
3347 .BI <>; word
3348 The same as 
3349 .BI <> word
3350 except that if the command completes successfully,
3351 .I word\^
3352 is truncated to the offset at command completion.
3353 .BI <>; word
3354 cannot be used with the
3355 .IR exec (2).
3356 built-in.
3358 \f3<<\fP\*(OK\f3\-\fP\*(CK\f2word\fP
3359 The shell input is read up to a line that is the same as
3360 .IR word
3361 after any quoting has been removed,
3362 or to an end-of-file.
3363 No parameter substitution, command substitution, arithmetic substitution or
3364 file name generation is performed on
3365 .IR word .
3366 The resulting document,
3367 called a
3368 .IR here-document ,
3369 becomes
3370 the standard input.
3371 If any character of
3372 .I word\^
3373 is quoted, then no interpretation
3374 is placed upon the characters of the document;
3375 otherwise, parameter expansion, command substitution, and arithmetic
3376 substitution occur,
3377 .B \enew-line
3378 is ignored,
3380 .B \e
3381 must be used to quote the characters
3382 .BR \e ,
3383 .BR $ ,
3384 .BR \*` .
3386 .B \-
3387 is appended to
3388 .BR << ,
3389 then all leading tabs are stripped from
3390 .I word\^
3391 and from the document.
3393 .B #
3394 is appended to
3395 .BR << ,
3396 then leading spaces and tabs will be stripped off the first
3397 line of the document and up to an equivalent indentation will
3398 be stripped from the remaining lines and from
3399 .IR word .
3400 A tab stop is assumed to occur at every 8 columns for the
3401 purposes of determining the indentation.
3403 \f3<<<\fP\f2word\fP
3404 A short form of here document in which \f2word\fP becomes the
3405 contents of the here-document after any
3406 parameter expansion, command substitution, and arithmetic
3407 substitution occur.
3409 .BI <& digit
3410 The standard input is duplicated from file descriptor
3411 .I digit
3412 (see
3413 .IR dup (2)).
3414 Similarly for the standard output using
3415 \f3>&\^\f2digit\fR.
3417 .BI <& digit \-
3418 The file descriptor given by
3419 .I digit
3420 is moved to standard input.
3421 Similarly for the standard output using
3422 \f3>&\^\f2digit\f3\-\fR.
3424 .B <&\-
3425 The standard input is closed.
3426 Similarly for the standard output using
3427 .BR >&\- .
3429 .B <&p
3430 The input from the co-process is moved to standard input.
3432 .B >&p
3433 The output to the co-process is moved to standard output.
3435 .BI <# \^\^\^  (( expr ))
3436 Evaluate arithmetic expression
3437 .I expr\^
3438 and position file descriptor 0
3439 to the resulting value
3440 bytes from the start of the file.
3441 The variables
3442 .B CUR
3444 .B EOF
3445 evaluate to the current offset and end-of-file offset
3446 respectively when evaluating
3447 .IR expr.
3449 .BI ># \^\^\^ (( offset ))
3450 The same as
3451 .B <#
3452 except applies to file descriptor 1.
3454 .BI <# pattern 
3455 Seeks forward to the beginning of the next line containing
3456 .IR pattern .
3458 .BI <## pattern 
3459 The same as
3460 .B <#
3461 except that the portion of the file that is skipped is copied to
3462 standard output.
3464 If one of the above is preceded by a digit,
3465 with no intervening space, then the
3466 file descriptor number referred to is that specified
3467 by the digit
3468 (instead of the default 0 or 1).
3469 If one of the above, other than
3470 .BR >&\- 
3471 and the
3472 .B >#
3474 .B <#
3475 forms,
3476 is preceded by
3477 .BI { varname }
3478 with no intervening space,
3479 then a file descriptor number > 10
3480 will be selected by
3481 the shell and stored in the variable
3482 .IR varname .
3484 .B >&\-
3485 or the any of the
3486 .B >#
3488 .B <#
3489 forms
3490 is preceded by
3491 .BI { varname }
3492 the value of
3493 .I varname\^
3494 defines the file descriptor to close or position.
3495 For example:
3498 \fB\&.\|.\|. \|2>&1\fR
3501 means file descriptor 2 is to be opened
3502 for writing as a duplicate
3503 of file descriptor 1 and
3506 \fBexec {n}<file\fR
3509 means open file named
3510 .B file
3511 for reading and store
3512 the file descriptor number in variable
3513 .BR n .
3515 The order in which redirections are specified is significant.
3516 The shell evaluates each redirection in terms of the
3517 .RI ( "file descriptor" ", " file )
3518 association at the time of evaluation.
3519 For example:
3522 \fB\&.\|.\|. \|1>\f2fname\^\fP 2>&1\fR
3525 first associates file descriptor 1 with file
3526 .IR fname\^ .
3527 It then associates file descriptor 2 with the file associated with file
3528 descriptor 1 (i.e.
3529 .IR fname\^ ).
3530 If the order of redirections were reversed, file descriptor 2 would be associated
3531 with the terminal (assuming file descriptor 1 had been) and then file descriptor
3532 1 would be associated with file
3533 .IR fname\^ .
3535 If a command is followed by
3536 .B &
3537 and job control is not active,
3538 then the default standard input
3539 for the command
3540 is the empty file
3541 .BR /dev/null .
3542 Otherwise, the environment for the execution of a command contains the
3543 file descriptors of the invoking shell as modified by
3544 input/output specifications.
3545 .SS Environment.
3547 .I environment\^
3548 (see
3549 .IR environ (7))
3550 is a list of name-value pairs that is passed to
3551 an executed program in the same way as a normal argument list.
3552 The names must be
3553 .I identifiers\^
3554 and the values are character strings.
3555 The shell interacts with the environment in several ways.
3556 On invocation, the shell scans the environment
3557 and creates a
3558 variable
3559 for each name found,
3560 giving it the corresponding value and attributes and marking it
3561 .IR export .
3562 Executed commands inherit the environment.
3563 If the user modifies the values of these
3564 variables
3565 or creates new ones,
3566 using the
3567 .B export
3569 .B typeset \-x
3570 commands, they become part of the
3571 environment.
3572 The environment seen by any executed command is thus composed
3573 of any name-value pairs originally inherited by the shell,
3574 whose values may be modified by the current shell,
3575 plus any additions
3576 which must be noted in
3577 .B export
3579 .B typeset \-x
3580 commands.
3582 The environment for any
3583 .I simple-command\^
3584 or function
3585 may be augmented by prefixing it with one or more variable assignments.
3586 A variable assignment argument is a word of the form
3587 .IR identifier=value .
3588 Thus:
3591 \fB\s-1TERM\s+1=450 \|cmd \|args\fR                             and
3593 \fB(export \|\s-1TERM\s+1; \|\s-1TERM\s+1=450; \|cmd \|args)\fR
3596 are equivalent (as far as the above execution of
3597 .I cmd\^
3598 is concerned except for special built-in commands listed below \-
3599 those that are
3600 preceded with a dagger).
3602 If the obsolete
3603 .B \-k
3604 option is set,
3605 .I all\^
3606 variable assignment arguments are placed in the environment,
3607 even if they occur after the command name.
3608 The following
3609 first prints
3610 .B "a=b c"
3611 and then
3612 .BR c :
3616 .ft B
3617 echo \|a=b \|c
3618 set \|\-k
3619 echo \|a=b \|c
3620 .ft R
3623 This feature is intended for use with scripts written
3624 for early versions of the shell and its use in new scripts
3625 is strongly discouraged.
3626 It is likely to disappear someday.
3627 .SS Functions.
3629 For historical reasons, there are two
3630 ways to define functions,
3632 .IB name (\^)
3633 syntax and
3635 .B function
3636 .I name\^
3637 syntax, described in the
3638 .I Commands
3639 section above.
3640 Shell functions are read in and stored internally.
3641 Alias names are resolved when the function is read.
3642 Functions are executed like commands with the arguments
3643 passed as positional parameters.
3644 (See
3645 .I Execution
3646 below.)
3648 Functions defined by the
3649 .B function
3650 .I name
3651 syntax and called by name execute in the same process as the caller and
3652 share all files
3653 and present working directory with the
3654 caller.
3655 Traps caught by the caller are reset to their default action
3656 inside the function.
3657 A trap condition that is not caught or ignored by the
3658 function causes the function to terminate and the condition
3659 to be passed on to the caller.
3660 A trap on
3662 .B EXIT
3663 set inside a function
3664 is executed
3665 in the environment
3666 of the caller
3667 after the function completes.
3668 Ordinarily,
3669 variables are shared between the calling program
3670 and the function.
3671 However,
3673 .B typeset
3674 special built-in command used within a function
3675 defines local variables whose scope includes
3676 the current function.
3677 They can be passed to functions that they call in the
3678 variable assignment list that precedes the call or as arguments
3679 passed as name references.
3680 Errors within functions return control to the caller.
3682 Functions defined with the
3683 .IB name (\^)
3684 syntax and functions defined with the
3685 .B function
3686 .I name
3687 syntax that are invoked with the \f3\s+2.\s-2\fP
3688 special built-in
3689 are executed in the caller's
3690 environment and share all variables
3691 and traps with the caller.
3692 Errors within these function executions cause the script that contains
3693 them to abort.
3695 The special built-in command
3696 .B return
3697 is used to return
3698 from function calls.
3700 Function names
3701 can be listed with the
3702 .B \-f
3704 .B +f
3705 option of the
3706 .B typeset
3707 special built-in command.
3708 The text of functions, when available, will also
3709 be listed with
3710 .BR \-f .
3711 Functions can be undefined with the
3712 .B \-f
3713 option of the
3714 .B unset
3715 special built-in command.
3717 Ordinarily, functions are unset when the shell executes a shell script.
3718 Functions that need to be defined across separate
3719 invocations of the shell should
3720 be placed in a directory and the
3723 FPATH
3724 variable should contain the name of this directory.
3725 They may also
3726 be specified in the
3730 file.
3731 .SS Discipline Functions.
3732 Each variable can have zero or more discipline functions
3733 associated with it.
3734 The shell initially understands the discipline names \f3get\fP,
3735 \f3set\fP, \f3append\fP, and \f3unset\fP but can be added
3736 when defining new types.  On most systems
3737 others can be added at run time via the 
3738 C programming interface extension provided by the
3739 .B builtin
3740 built-in utility.
3741 If the \f3get\fP discipline is defined for a variable, it is invoked
3742 whenever the given variable is referenced.
3743 If the variable \f3.sh.value\fP is assigned a value inside
3744 the discipline function, the referenced variable will evaluate
3745 to this value instead.
3746 If the \f3set\fP discipline is defined for a variable, it is invoked
3747 whenever the given variable is assigned a value.
3748 If the \f3append\fP discipline is defined for a variable, it is invoked
3749 whenever a value is appended to the given variable.
3750 The variable \f3.sh.value\fP is given the value
3751 of the variable before invoking the discipline, and
3752 the variable will be assigned the value of \f3.sh.value\fP
3753 after the discipline completes.
3754 If \f3.sh.value\fP is unset inside the discipline, then
3755 that value is unchanged.
3756 If the \f3unset\fP discipline is defined for a variable, it is invoked
3757 whenever the given variable is unset.
3758 The variable will not be unset unless it is unset explicitly
3759 from within this discipline function.
3761 The variable
3762 .B .sh.name
3763 contains the name of the variable for which the discipline function is called,
3764 .B .sh.subscript
3765 is the subscript of the variable, and
3766 .B .sh.value
3767 will contain the value being assigned inside the
3768 .B set
3769 discipline function.
3770 The variable
3771 .B _
3772 is a reference to the variable including the subscript if any.
3773 For the \f3set\fP discipline,
3774 changing
3775 .B .sh.value
3776 will change the value that gets assigned.
3777 Finally, the expansion \f3${\fP\f2var\^\fP\f3.\fP\f2name\^\fP\f3}\fP,
3778 when \f2name\^\fP is the name of a discipline, and there is
3779 no variable of this name, is equivalent to the command substitution
3780 \f3${ \fP\f2var\^\fP\f3.\fP\f2name\^\fP\f3;}\fP.
3782 .SS Type Variables.
3783 Typed variables provide a way to create data structure and objects.
3784 A type can be defined either by a shared library, by the
3785 .B enum
3786 built-in command described below, or by using the new
3787 .B \-T
3788 option of the
3789 .B typeset
3790 built-in command.
3791 With the
3792 .B \-T
3793 option of
3794 .BR typeset ,
3795 the type name, specified as an option argument to
3796 .BR \-T ,
3797 is set with a compound variable assignment that defines the type.
3798 Function definitions can appear inside the compound variable
3799 assignment and these become discipline functions for this type and
3800 can be invoked or redefined by each instance of the type.
3801 The function name
3802 .B create
3803 is treated specially.  It is invoked for each instance of
3804 the type that is created but is not inherited and cannot be
3805 redefined for each instance.
3807 When a type is defined a special built-in command of that name
3808 is added.  These built-ins are declaration commands and follow the
3809 same expansion rules as all the special built-in commands defined
3810 below that are preceded by \(dg\(dg.  These commands can subsequently
3811 be used inside further type definitions.  The man page for these commands can
3812 be generated by using the
3813 .B \-\-man
3814 option or any of the other
3815 .B \-\-
3816 options described with
3817 .BR getopts .
3819 .BR \-r ,
3820 .BR \-a ,
3821 .BR \-A ,
3822 .BR \-h ,
3824 .B \-S 
3825 options of
3826 .B typeset
3827 are permitted with each of these new built-ins.
3829 An instance of a type is created by invoking the type name
3830 followed by one or more instance names.
3831 Each instance of the type is initialized with a copy of the sub-variables
3832 except for sub-variables that are defined with the
3833 .B \-S 
3834 option.  Variables defined with the
3835 .B \-S 
3836 are shared by all instances of the type.
3837 Each instance can change the value of any sub-variable and can also
3838 define new discipline functions of the same names
3839 as those defined by the type definition as well as any
3840 standard discipline names.
3841 No additional sub-variables can be defined for any instance.
3843 When defining a type,
3844 if the value of a sub-variable is not set and the
3845 .B \-r
3846 attribute is specified, it causes the sub-variable
3847 to be a required sub-variable.
3848 Whenever an instance of a type is created, all required sub-variables
3849 must be specified.
3850 These sub-variables become readonly in each instance.
3852 When
3853 .B unset
3854 is invoked on a sub-variable within a type,
3855 and the
3856 .B \-r
3857 attribute has not been specified for this field,
3858 the value is reset to the default value associative with
3859 the type.
3860 Invoking
3861 .B unset
3862 on a type instance not contained within another type deletes
3863 all sub-variables and the variable itself.
3865 A type definition can be derived from another type definition
3866 by defining the first sub-variable name as
3867 .B _
3868 and defining its type as the base type.
3869 Any remaining definitions will be additions and modifications
3870 that apply to the new type.
3871 If the new type name is the same is that of the base type,
3872 the type will be replaced and the original type will
3873 no longer be accessible.
3875 .SS Jobs.
3877 If the
3878 .B monitor
3879 option of the
3880 .B set
3881 command is turned on,
3882 an interactive shell associates a \fIjob\fR with each pipeline.
3883 It keeps
3884 a table of current jobs, printed by the
3885 .B jobs
3886 command, and assigns them small integer numbers.
3887 When a job is started asynchronously with
3888 .BR & ,
3889 the shell prints a line which looks
3890 like:
3893         [1] 1234
3895 indicating that the job which was started asynchronously was job number
3896 1 and had one (top-level) process, whose process id was 1234.
3898 This paragraph and the next require features that are
3899 not in all versions of UNIX and may not apply.
3900 If you are running a job and wish to do something else you may hit the key
3901 \fB^Z\fR (control-Z) which sends a STOP signal to the current job.
3902 The shell will then normally indicate that the job has been `Stopped',
3903 and print another prompt.
3904 You can then manipulate the state of this job,
3905 putting it in the background with the
3906 .B bg
3907 command, or run some other
3908 commands and then eventually bring the job back into the foreground with
3909 the foreground command
3910 .BR fg .
3911 A \fB^Z\fR takes effect immediately and
3912 is like an interrupt in that pending output and unread input are discarded
3913 when it is typed.
3915 A job being run in the background will stop if it tries to read
3916 from the terminal.
3917 Background jobs are normally allowed to produce output,
3918 but this can be disabled by giving the command
3919 .BR "stty tostop" .
3920 If you set this
3921 tty option, then background jobs will stop when they try to produce
3922 output like they do when they try to read input.
3924 There are several ways to refer to jobs in the shell.
3925 A job can be referred to by the process id of any process of the job
3926 or by one of the following:
3927 .PD 0
3929 .BI % number
3930 The job with the given number.
3932 .BI % string
3933 Any job whose command line begins with
3934 .IR string .
3936 .BI %? string
3937 Any job whose command line contains
3938 .IR string .
3940 .BI %%
3941 Current job.
3943 .BI %+
3944 Equivalent to
3945 .BR %% .
3947 .BI %\-
3948 Previous job.
3951 The shell learns immediately whenever a process changes state.
3952 It normally informs you whenever a job becomes blocked so that
3953 no further progress is possible, but only just before it prints
3954 a prompt.
3955 This is done so that it does not otherwise disturb your work.
3957 .B notify
3958 option of the
3959 .B set
3960 command causes
3961 the shell to print these job change messages
3962 as soon as they occur.
3964 When the
3965 .B monitor
3966 option is on, each background job that completes
3967 triggers any trap set for
3968 .BR CHLD .
3970 When you try to leave the shell while jobs are running or stopped, you will
3971 be warned that `You have stopped(running) jobs.'
3972 You may use the
3973 .B jobs
3974 command to see what they are.
3975 If you immediately try to
3976 exit again, the shell will not warn you a second time, and the stopped
3977 jobs will be terminated.
3978 When a login shell receives a HUP signal, it sends
3979 a HUP signal to each job that has not been disowned with the
3980 .B disown
3981 built-in command described below.
3982 .SS Signals.
3983 The \s-1INT\s+1 and \s-1QUIT\s+1 signals for an invoked
3984 command are ignored if the command is followed by
3985 .B &
3986 and the
3987 .B monitor
3988 option is not active.
3989 Otherwise, signals have the values
3990 inherited by the shell from its parent
3991 (but see also
3993 .B trap
3994 built-in command below).
3995 .SS Execution.
3996 Each time a command is read, the above substitutions
3997 are carried out.
3998 If the command name matches one
3999 of the
4000 .I "Special Built-in Commands\^"
4001 listed below,
4002 it is executed within the
4003 current shell process.
4004 Next, the command name is checked to see if
4005 it matches a user defined function.
4006 If it does,
4007 the positional parameters are saved
4008 and then reset to the arguments of the
4009 .I function\^
4010 call.
4011 A function is also executed in the
4012 current shell process.
4013 When the
4014 .I function\^
4015 completes or issues a
4016 .BR return ,
4017 the positional parameter list is restored.
4018 For functions defined with the
4019 .B function
4020 .I name\^
4021 syntax,
4022 any trap set on
4024 .B EXIT
4025 within the function is executed.
4026 The exit value of a
4027 .I function\^
4028 is the value of the last command executed.
4029 If a command name is not a
4030 .I "special built-in command\^"
4031 or a user defined
4032 .IR function ,
4033 but it is one of the built-in commands listed below,
4034 it is executed in the current shell process.
4036 The shell variable
4038 .SM PATH
4039 defines the search path for
4040 the directory containing the command.
4041 Alternative directory names are separated by
4042 a colon
4043 .RB ( : ).
4044 The default path is
4045 .B /bin:/usr/bin:
4046 (specifying
4047 .BR /bin ,
4048 .BR /usr/bin ,
4049 and the current directory
4050 in that order).
4051 The current directory can be specified by
4052 two or more adjacent colons, or by a colon
4053 at the beginning or end of the path list.
4054 If the command name contains a \f3/\fP, then the search path
4055 is not used.
4056 Otherwise, each directory in the path is
4057 searched for an executable file
4058 of the given name
4059 that is not a directory.
4060 If found, and if the shell
4061 determines that there is a built-in version
4062 of a command corresponding to a given pathname,
4063 this built-in is invoked in the current process.
4064 If found, and this directory is also contained in the value of the
4066 .SM FPATH
4067 variable,
4068 then this file is loaded into the current shell environment
4069 as if it were the argument to the \fB.\fP command
4070 except that only preset aliases are expanded,
4071 and a function of the given name is executed
4072 as described above.
4073 If not found, and the file
4074 .B .paths
4075 is found, and this file contains a line of the form
4076 .BI FPATH= path
4077 where
4078 .I path\^
4079 names an
4080 existing directory, and this directory contains
4081 a file of the given name,
4082 then this file is loaded into the current shell environment
4083 as if it were the argument to the \fB.\fP special built-in command
4084 and a function of the given name is executed.
4085 Otherwise, if found,
4086 a process is created and
4087 an attempt is made to execute the command via
4088 .IR exec (2).
4090 When an executable is found, the directory where it is found
4091 in is searched for a file named
4092 .BR .paths .
4093 If this file is found and it contains a line of the form
4094 .BI BUILTIN_LIB= value\^
4095 , then the library named by
4096 .I value\^
4097 will be searched for as if it were an option argument to
4098 .BR "builtin -f" ,
4099 and if it contains a built-in of the specified name
4100 this will be executed instead of a command by this name.
4101 Otherwise, if this file is found and it contains a line of the form
4102 .IB name\^ = value\^
4103 in the first or second line, then the environment variable
4104 .I name\^
4105 is modified by prepending the directory specified by
4106 .I value\^
4107 to the directory list.
4109 .I value\^
4110 is not an absolute directory, then it
4111 specifies a directory relative to the directory that the
4112 executable was found.
4113 If the environment variable
4114 .I name\^
4115 does not already exist it will be added to the environment
4116 list for the specified command.
4118 If the file has execute permission but is not an
4119 .B a.out
4120 file,
4121 it is assumed to be a file containing shell commands.
4122 A separate shell is spawned to read it.
4123 All non-exported variables are removed in this case.
4124 If the shell command
4125 file doesn't have read permission,
4126 or if the
4127 .I setuid
4128 and/or
4129 .I setgid
4130 bits are set on the file,
4131 then the shell executes an agent whose job it is to
4132 set up the permissions and execute the shell with the
4133 shell command file passed down as an open file.
4134 A parenthesized command is executed in
4135 a sub-shell without removing non-exported variables.
4136 .SS Command Re-entry.
4137 The text of the last
4140 HISTSIZE
4141 (default 512)
4142 commands entered from a terminal device
4143 is saved in a
4144 .I history
4145 file.
4146 The file
4147 .B \s-1$HOME\s+1/.sh_history
4148 is used if the
4151 HISTFILE
4152 variable is not set
4153 or if the file it names is not writable.
4154 A shell can access the commands of
4156 .I interactive
4157 shells which use the same named
4159 .BR HISTFILE .
4160 The built-in command
4161 .B hist\^
4162 is used to list or
4163 edit a portion of this file.
4164 The portion of the file to be edited or listed can be selected by
4165 number or by giving the first character or
4166 characters of the command.
4167 A single command or range of commands can be specified.
4168 If you do not specify an editor program as
4169 an argument to
4170 .B hist\^
4171 then the value of the variable
4173 .B HISTEDIT
4174 is used.
4177 .B HISTEDIT
4178 is unset, the obsolete variable
4180 .B FCEDIT
4181 is used.
4184 .B FCEDIT
4185 is not defined, then
4186 .B /bin/ed
4187 is used.
4188 The edited command(s) is printed and re-executed upon
4189 leaving the editor unless you quit without writing.
4191 .B \-s
4192 option
4193 (and in obsolete versions, the editor name
4194 .BR \-\^ )
4195 is used to skip the editing phase and
4196 to re-execute the command.
4197 In this case a substitution parameter of the form
4198 \f2old\fP\f3=\fP\f2new\fP
4199 can be used to modify the command before execution.
4200 For example, with the preset alias
4201 .BR r ,
4202 which is aliased to
4203 .BR "\(fmhist \-s\(fm" ,
4204 typing
4205 `\f3r bad=good c\fP'
4206 will re-execute the most recent command which starts with the letter
4207 .BR c ,
4208 replacing the first occurrence of the string
4209 .B bad
4210 with the string
4211 .BR good .
4212 .SS In-line Editing Options.
4213 Normally, each command line entered from a terminal device is simply
4214 typed followed by a \f3new-line\fP (`RETURN' or `LINE\ FEED').
4215 If either the
4216 .BR emacs ,
4217 .BR gmacs ,
4219 .B vi
4220 option is active, the user can edit the command line.
4221 To be in either of these edit modes
4222 .B set
4223 the corresponding
4224 option.
4225 An editing option is automatically selected each time the
4227 .B VISUAL
4230 .B EDITOR
4231 variable is assigned a value ending in either of these
4232 option names.
4234 The editing features require that the user's terminal
4235 accept `RETURN' as carriage return without line feed
4236 and that a space (`\ ') must overwrite the current character on
4237 the screen.
4239 Unless the
4240 .B multiline
4241 option is on,
4242 the editing modes implement a concept where the user is looking through a
4243 window at the current line.
4244 The window width is the value of
4246 .B COLUMNS
4247 if it is defined, otherwise 80.
4248 If the window width is too small to display the prompt and leave
4249 at least 8 columns to enter input, the prompt is truncated from the
4250 left.
4251 If the line is longer than the window width minus two, a mark is
4252 displayed at the end of the window to notify the user.
4253 As the cursor moves and reaches the window boundaries the window will be
4254 centered about the cursor.
4255 The mark is a
4256 .BR > " (<" ,
4257 .BR * )
4258 if the line extends on the
4259 right (left, both) side(s) of the window.
4261 The search commands in each edit mode provide access to the history file.
4262 Only strings are matched, not patterns, although a leading
4263 .B ^
4264 in the string restricts the match
4265 to begin at the first character in the line.
4267 Each of the edit modes has an operation to list the files
4268 or commands that match a partially entered word.
4269 When applied to the first word on the line,
4270 or the first word after a
4271 .BR ; , 
4272 .BR \(bv , 
4273 .BR & , 
4275 .BR ( , 
4276 and the word does not begin with
4277 .B \(ap
4278 or contain a
4279 .BR / ,
4280 the list of aliases, functions, and executable commands
4281 defined by the
4283 .SM PATH
4284 variable that could match the partial word is displayed.
4285 Otherwise, the list of files that match the given
4286 word is displayed.
4287 If the partially entered word does not contain any
4288 file expansion characters, a
4289 .B *
4290 is appended before generating these lists.
4291 After displaying the generated list, the input line
4292 is redrawn.
4293 These operations are called command name listing and file name listing,
4294 respectively.
4295 There are additional operations, referred to as command name
4296 completion and file name completion, which compute the list
4297 of matching commands or files, but instead of printing the list,
4298 replace
4299 the current word with a complete or partial match.
4300 For file name completion,
4301 if the match is unique, a
4302 .B /
4303 is appended if the file is a directory and a space is
4304 appended if the file is not a directory.
4305 Otherwise, the longest common prefix for all the matching
4306 files replaces the word.
4307 For command name completion, only the portion of the file names
4308 after the last
4309 .B /
4310 are used to find the longest command prefix.
4311 If only a single name matches this prefix, then the
4312 word is replaced with the command name followed by a space.
4313 When using a
4314 .I tab\^
4315 for completion that does not yield a unique match,
4316 a subsequent
4317 .I tab\^
4318 will provide a numbered list of matching alternatives.
4319 A specific selection can be made by entering the
4320 selection number followed by a
4321 .IR tab .
4322 .SS Key Bindings.
4325 .SM KEYBD
4326 trap can be used to intercept keys as they are typed
4327 and change the characters that are actually seen by
4328 the shell.
4329 This trap is executed after each character
4330 (or sequence of characters when the first character is ESC)
4331 is entered while reading from a terminal.
4332 The variable
4333 .B .sh.edchar
4334 contains the character or character sequence which
4335 generated the trap.
4336 Changing the value of
4337 .B .sh.edchar
4338 in the trap action causes the shell to behave as if the
4339 new value were entered from the keyboard rather than
4340 the original value.
4342 The variable
4343 .B .sh.edcol
4344 is set to the input column number of the cursor at the time
4345 of the input.
4346 The variable
4347 .B .sh.edmode
4348 is set to
4350 when in
4351 .B vi
4352 insert mode (see below) and is null otherwise.
4353 By prepending
4354 .B ${.sh.editmode}
4355 to a value assigned to
4356 .B .sh.edchar
4357 it will cause the shell
4358 to change to control mode if it is not already in this mode.
4360 This trap is not invoked for characters entered as arguments to
4361 editing directives, or while reading input for a character search.
4362 .SS Emacs Editing Mode.
4363 This mode is entered by enabling either the
4364 .B emacs
4366 .B gmacs
4367 option.
4368 The only difference between these two modes is the way
4369 they handle
4370 .BR ^T .
4371 To edit, the user
4372 moves the cursor to the point needing correction and
4373 then inserts or deletes characters or words as needed.
4374 All the editing commands are control characters or escape
4375 sequences.
4376 The notation for control characters is caret
4377 .RB ( ^ )
4378 followed
4379 by the character.
4380 For example,
4381 .B ^F
4382 is the notation for control
4383 .BR F .
4384 This is entered by depressing `f' while holding down the
4385 `CTRL' (control) key.
4386 The `SHIFT' key is
4387 .I not
4388 depressed.
4389 (The notation
4390 .B ^?
4391 indicates the DEL (delete) key.)
4393 The notation for escape sequences is
4394 .B M-
4395 followed by a
4396 character.
4397 For example,
4398 .B M-f
4399 (pronounced Meta f)
4400 is entered by depressing ESC
4401 (ascii
4402 .BR 033 )
4403 followed by `f'.
4404 .RB ( M-F
4405 would be the notation for ESC followed by `SHIFT' (capital) `F'.)
4407 All edit commands
4408 operate from any place on the line
4409 (not just at the beginning).
4410 Neither the `RETURN' nor the `LINE FEED' key is
4411 entered after edit commands except when noted.
4413 .PD 0
4414 .TP 10
4415 .BI ^F
4416 Move cursor forward (right) one character.
4418 .TP 10
4419 .BI M-[C
4420 Move cursor forward (right) one character.
4422 .TP 10
4423 .BI M-f
4424 Move cursor forward one word.
4425 (The
4426 .B emacs
4427 editor's idea of a word is a string of characters
4428 consisting of only letters, digits and underscores.)
4430 .TP 10
4431 .BI ^B
4432 Move cursor backward (left) one character.
4434 .TP 10
4435 .BI M-[D
4436 Move cursor backward (left) one character.
4438 .TP 10
4439 .BI M-b
4440 Move cursor backward one word.
4442 .TP 10
4443 .BI ^A
4444 Move cursor to start of line.
4446 .TP 10
4447 .BI M-[H
4448 Move cursor to start of line.
4450 .TP 10
4451 .BI ^E
4452 Move cursor to end of line.
4454 .TP 10
4455 .BI M-[Y
4456 Move cursor to end of line.
4458 .TP 10
4459 .BI ^] char
4460 Move cursor forward to character
4461 .I char
4462 on current line.
4464 .TP 10
4465 .BI M-^] char
4466 Move cursor backward to character
4467 .I char
4468 on current line.
4470 .TP 10
4471 .BI ^X^X
4472 Interchange the cursor and mark.
4474 .TP 10
4475 .I erase
4476 (User defined erase character as defined
4477 by the
4478 .IR stty (1)
4479 command, usually
4480 .B ^H
4482 .BR # .)
4483 Delete previous character.
4485 .TP 10
4486 .I lnext
4487 (User defined literal next character as defined
4488 by the
4489 .IR stty (1)
4490 command,
4492 .B ^V
4493 if not defined.)
4494 Removes the next character's
4495 editing features (if any).
4497 .TP 10
4498 .BI ^D
4499 Delete current character.
4501 .TP 10
4502 .BI M-d
4503 Delete current word.
4505 .TP 10
4506 .BI M-^H
4507 (Meta-backspace) Delete previous word.
4509 .TP 10
4510 .BI M-h
4511 Delete previous word.
4513 .TP 10
4514 .BI M-^?
4515 (Meta-DEL) Delete previous word (if your interrupt character is
4516 .B ^?
4517 (DEL, the default) then this command will not work).
4519 .TP 10
4520 .BI ^T
4521 Transpose current character with previous character
4522 and advance the cursor
4524 .I emacs
4525 mode.
4526 Transpose two previous characters in
4527 .I gmacs
4528 mode.
4530 .TP 10
4531 .BI ^C
4532 Capitalize current character.
4534 .TP 10
4535 .BI M-c
4536 Capitalize current word.
4538 .TP 10
4539 .BI M-l
4540 Change the current word to lower case.
4542 .TP 10
4543 .BI ^K
4544 Delete from the cursor to the end of the line.
4545 If preceded by a numerical parameter whose value is less than the
4546 current cursor position, then delete from given position
4547 up to the cursor.
4548 If preceded by a numerical parameter whose value is greater than the
4549 current cursor position, then delete from cursor up to
4550 given cursor position.
4552 .TP 10
4553 .BI ^W
4554 Kill from the cursor to the mark.
4556 .TP 10
4557 .BI M-p
4558 Push the region from the cursor to the mark on the stack.
4560 .TP 10
4561 .I kill
4562 (User defined kill character as defined
4563 by the stty command, usually
4564 .B ^G
4566 .BR @ .)
4567 Kill the entire current line.
4568 If two
4569 .I kill
4570 characters are entered in succession, all
4571 kill characters from then on cause a line feed
4572 (useful when using paper terminals).
4574 .TP 10
4575 .BI ^Y
4576 Restore last item removed from line. (Yank item back to the line.)
4578 .TP 10
4579 .BI ^L
4580 Line feed and print current line.
4582 .TP 10
4583 .BI M-^L
4584 Clear the screen.
4586 .TP 10
4587 .BI ^@
4588 (Null character) Set mark.
4590 .TP 10
4591 .BI M- space
4592 (Meta space) Set mark.
4594 .TP 10
4595 .BI ^J  
4596 (New\ line) Execute the current line.
4598 .TP 10
4599 .BI ^M  
4600 (Return) Execute the current line.
4602 .TP 10
4603 .I eof
4604 End-of-file character,
4605 normally
4606 .BR ^D ,
4607 is processed as an End-of-file only
4608 if the current line is null.
4610 .TP 10
4611 .BI ^P
4612 Fetch previous command.
4613 Each time
4614 .B ^P
4615 is entered
4616 the previous command back in time is accessed.
4617 Moves back one line when not on the first line of a multi-line command.
4619 .TP 10
4620 .BI M-[A
4621 If the cursor is at the end of the line, it is equivalent to
4622 .B ^R
4623 with
4624 .I string\^
4625 set to the contents of the current line.
4626 Otherwise, it is
4627 equivalent to
4628 .BR ^P.
4630 .TP 10
4631 .BI M-<
4632 Fetch the least recent (oldest) history line.
4634 .TP 10
4635 .BI M->
4636 Fetch the most recent (youngest) history line.
4638 .TP 10
4639 .BI ^N
4640 Fetch next command line.
4641 Each time
4642 .B ^N
4643 is entered
4644 the next command line forward in time is accessed.
4646 .TP 10
4647 .BI M-[B
4648 Equivalent to
4649 .BR ^N.
4651 .TP 10
4652 .BI ^R string
4653 Reverse search history for a previous command line containing
4654 .IR string .
4655 If a parameter of zero is given, the search is forward.
4656 .I String
4657 is terminated by a `RETURN' or `NEW\ LINE'.
4658 If string is preceded by a
4659 .BR ^ ,
4660 the matched line must begin with
4661 .IR string .
4663 .I string
4664 is omitted,
4665 then the next command line containing the most recent
4666 .I string
4667 is accessed.
4668 In this case a parameter of zero
4669 reverses the direction of the search.
4671 .TP 10
4672 .B ^O
4673 Operate \- Execute the current line and fetch
4674 the next line relative to current line from the
4675 history file.
4677 .TP 10
4678 .BI M- digits
4679 (Escape) Define numeric parameter, the digits
4680 are taken as a parameter to the next command.
4681 The commands that accept a parameter are
4682 .BR ^F ,
4683 .BR ^B ,
4684 .IR erase ,
4685 .BR ^C ,
4686 .BR ^D ,
4687 .BR ^K ,
4688 .BR ^R ,
4689 .BR ^P ,
4690 .BR ^N ,
4691 .BR ^] ,
4692 .BR M-. ,
4693 .BR M-^] ,
4694 .BR M-_ ,
4695 .BR M-= ,
4696 .BR M-b ,
4697 .BR M-c ,
4698 .BR M-d ,
4699 .BR M-f ,
4700 .BR M-h ,
4701 .B M-l
4703 .BR M-^H .
4705 .TP 10
4706 .BI M- letter
4707 Soft-key \- Your alias list is searched for an
4708 alias by the name
4709 .BI _ letter
4710 and if an alias of this name is defined, its
4711 value will be inserted on the input queue.
4713 .I letter
4714 must not be one of the above meta-functions.
4716 .TP 10
4717 .BI M-[ letter
4718 Soft-key \- Your alias list is searched for an
4719 alias by the name
4720 .BI _\&_ letter
4721 and if an alias of this name is defined, its
4722 value will be inserted on the input queue.
4723 This can be used to program function keys on many terminals.
4725 .TP 10
4726 .B M-.
4727 The last word of the previous command is inserted
4728 on the line.
4729 If preceded by a numeric parameter, the value
4730 of this parameter determines which word to insert rather than
4731 the last word.
4733 .TP 10
4734 .B M-_
4735 Same as
4736 .BR M-. .
4738 .TP 10
4739 .B M-*
4740 Attempt file name generation on the current word.
4741 An asterisk is appended if the word doesn't match any file
4742 or contain any special
4743 pattern characters.
4745 .TP 10
4746 .B M-ESC
4747 Command or file name completion as described above.
4749 .TP 10
4750 .BI ^I " tab"
4751 Attempts command or file name completion as described above.
4752 If a partial completion occurs, repeating this will
4753 behave as if
4754 .B M-=
4755 were entered.
4756 If no match is found or entered after
4757 .IR space\^ ,
4759 .I tab\^
4760 is inserted.
4762 .TP 10
4763 .B M-=
4764 If not preceded by a numeric parameter,
4765 it generates the list of matching commands or
4766 file names as described above.
4767 Otherwise, the word under the cursor is replaced by
4768 the item corresponding to the value of the numeric parameter
4769 from the most recently generated command or file list.
4770 If the cursor is not on a word, it is inserted instead.
4772 .TP 10
4773 .BI ^U
4774 Multiply parameter of next command by 4.
4776 .TP 10
4777 .BI \e
4778 Escape next character.
4779 Editing characters, the user's erase, kill and
4780 interrupt (normally
4781 .BR ^? )
4782 characters
4783 may be entered
4784 in a command line or in a search string if preceded by a
4785 .BR \e .
4787 .B \e
4788 removes the next character's
4789 editing features (if any).
4791 .TP 10
4792 .B M-^V
4793 Display version of the shell.
4795 .TP 10
4796 .B M-#
4797 If the line does not begin with a
4798 .BR # ,
4800 .B #
4801 is inserted
4802 at the beginning of the line
4803 and after each new-line,
4804 and the line is entered.
4805 This causes a comment to be inserted in the history file.
4806 If the line begins with a
4807 .BR # ,
4808 the 
4809 .B #
4810 is deleted and one 
4811 .B #
4812 after each new-line is also deleted.
4814 .SS Vi Editing Mode.
4815 There are two typing modes.
4816 Initially, when you enter a command you are in the
4817 .I input\^
4818 mode.
4819 To edit, the user enters
4820 .I control\^
4821 mode by typing ESC
4822 .RB ( 033 )
4823 and moves the cursor to the point needing correction and
4824 then inserts or deletes characters or words as needed.
4825 Most control commands accept an optional repeat
4826 .I count
4827 prior to the command.
4829 When in
4830 .B vi
4831 mode on most systems,
4832 canonical processing is initially enabled and the
4833 command will be echoed again if the speed is 1200 baud or greater and it
4834 contains any control characters or less than one second has elapsed
4835 since the prompt was printed.
4836 The ESC character terminates canonical processing for the remainder of the command
4837 and the user can then modify the command line.
4838 This scheme has the advantages of canonical processing with the type-ahead
4839 echoing of raw mode.
4841 If the option
4842 .B viraw
4843 is also set, the terminal will always have canonical processing
4844 disabled.
4845 This mode is implicit for systems that do not support two
4846 alternate end of line delimiters,
4847 and may be helpful for certain terminals.
4848 .SS "\ \ \ \ \ Input Edit Commands"
4851 By default the editor is in input mode.
4852 .PD 0
4853 .TP 10
4854 .I erase
4855 (User defined erase character as defined
4856 by the stty command, usually
4857 .B ^H
4859 .BR # .)
4860 Delete previous character.
4861 .TP 10
4862 .BI ^W
4863 Delete the previous blank separated word.
4864 On some systems the \f3viraw\fP option
4865 may be required for this to work.
4866 .TP 10
4867 .I eof
4868 As the first character of the line causes
4869 the shell to terminate unless the \f3ignoreeof\fP
4870 option is set.
4871 Otherwise this character is ignored.
4872 .TP 10
4873 .I lnext
4874 (User defined literal next character as defined
4875 by the
4876 .IR stty (1)
4878 .B ^V
4879 if not defined.)
4880 Removes the next character's
4881 editing features (if any).
4882 On some systems the \f3viraw\fP option
4883 may be required for this to work.
4884 .TP 10
4885 .BI \e
4886 Escape the next
4887 .I erase
4889 .I kill
4890 character.
4891 .TP 10
4892 .BI ^I  " tab"
4893 Attempts command or file name completion as described above
4894 and returns to input mode.
4895 If a partial completion occurs, repeating this will
4896 behave as if
4897 .B =
4898 were entered from control mode.
4899 If no match is found or entered after
4900 .IR space\^ ,
4902 .I tab\^
4903 is inserted.
4905 .SS "\ \ \ \ \ Motion Edit Commands"
4907 These commands will move the cursor.
4908 .TP 10
4909 [\f2count\fP]\f3l\fP
4910 Cursor forward (right) one character.
4911 .TP 10
4912 [\f2count\fP]\f3[C\fP
4913 Cursor forward (right) one character.
4914 .TP 10
4915 [\f2count\fP]\f3w\fP
4916 Cursor forward one alpha-numeric word.
4917 .TP 10
4918 [\f2count\fP]\f3W\fP
4919 Cursor to the beginning of the next word that follows a blank.
4920 .TP 10
4921 [\f2count\fP]\f3e\fP
4922 Cursor to end of word.
4923 .TP 10
4924 [\f2count\fP]\f3E\fP
4925 Cursor to end of the current blank delimited word.
4926 .TP 10
4927 [\f2count\fP]\f3h\fP
4928 Cursor backward (left) one character.
4929 .TP 10
4930 [\f2count\fP]\f3[D\fP
4931 Cursor backward (left) one character.
4932 .TP 10
4933 [\f2count\fP]\f3b\fP
4934 Cursor backward one word.
4935 .TP 10
4936 [\f2count\fP]\f3B\fP
4937 Cursor to preceding blank separated word.
4938 .TP 10
4939 [\f2count\fP]\f3\(bv\fP
4940 Cursor to column
4941 .IR count .
4942 .TP 10
4943 [\f2count\fP]\f3f\fP\f2c\fP
4944 Find the next character \fIc\fP in the current line.
4945 .TP 10
4946 [\f2count\fP]\f3F\fP\f2c\fP
4947 Find the previous character \fIc\fP in the current line.
4948 .TP 10
4949 [\f2count\fP]\f3t\fP\f2c\fP
4950 Equivalent to
4951 .B f
4952 followed by
4953 .BR h .
4954 .TP 10
4955 [\f2count\fP]\f3T\fP\f2c\fP
4956 Equivalent to
4957 .B F
4958 followed by
4959 .BR l .
4960 .TP 10
4961 [\f2count\fP]\f3;\fP
4962 Repeats
4963 .I count
4964 times,
4965 the last single character find command,
4966 .BR f ,
4967 .BR F ,
4968 .BR t ,
4970 .BR T .
4971 .TP 10
4972 [\f2count\fP]\f3,\fP
4973 Reverses the last single character find command
4974 .I count
4975 times.
4976 .TP 10
4977 .B 0
4978 Cursor to start of line.
4979 .TP 10
4980 .B ^
4981 Cursor to start of line.
4982 .TP 10
4983 .B [H
4984 Cursor to first non-blank character in line.
4985 .TP 10
4986 .B $
4987 Cursor to end of line.
4988 .TP 10
4989 .B [Y
4990 Cursor to end of line.
4991 .TP 10
4992 .B %
4993 Moves to balancing
4994 .BR ( ,
4995 .BR ) ,
4996 .BR { ,
4997 .BR } ,
4998 .BR [ ,
5000 .BR ] .
5001 If cursor is not on one of the above characters,
5002 the remainder of the line is searched for the first
5003 occurrence of one of the above characters first.
5005 .SS "\ \ \ \ \ Search Edit Commands"
5007 These commands access your command history.
5008 .TP 10
5009 [\f2count\fP]\f3k\fP
5010 Fetch previous command.
5011 Each time
5012 .B k
5013 is entered
5014 the previous command back in time is accessed.
5015 .TP 10
5016 [\f2count\fP]\f3\-\fP
5017 Equivalent to
5018 .BR k .
5019 .TP 10
5020 [\f2count\fP]\f3[A\fP
5021 If cursor is at the end of the line it is equivalent to
5022 .B /
5023 with
5024 .I string^\
5025 set to the contents of the current line.
5026 Otherwise, it is equivalent to
5027 .BR k .
5028 .TP 10
5029 [\f2count\fP]\f3j\fP
5030 Fetch next command.
5031 Each time
5032 .B j
5033 is entered
5034 the next command forward in time is accessed.
5035 .TP 10
5036 [\f2count\fP]\f3+\fP
5037 Equivalent to
5038 .BR j .
5039 .TP 10
5040 [\f2count\fP]\f3[B\fP
5041 Equivalent to
5042 .BR j .
5043 .TP 10
5044 [\f2count\fP]\f3G\fP
5045 The command number
5046 .I count
5047 is fetched.
5048 The default is the least recent history command.
5049 .TP 10
5050 .BI / string
5051 Search backward through history for a previous command containing
5052 .IR string .
5053 .I String
5054 is terminated by a `RETURN' or `NEW\ LINE'.
5055 If string is preceded by a
5056 .BR ^ ,
5057 the matched line must begin with
5058 .IR string .
5059 If \fIstring\fP is null, the previous string will be used.
5060 .TP 10
5061 .BI ? string
5062 Same as
5063 .B /
5064 except that search will be in the forward direction.
5065 .TP 10
5066 .B n
5067 Search for next match of the last pattern to
5068 .B /
5070 .B ?
5071 commands.
5072 .TP 10
5073 .B N
5074 Search for next match of the last pattern to
5075 .B /
5077 .BR ? ,
5078 but in reverse direction.
5080 .SS "\ \ \ \ \ Text Modification Edit Commands"
5082 These commands will modify the line.
5083 .TP 10
5084 .B a
5085 Enter input mode and enter text after the current character.
5086 .TP 10
5087 .B A
5088 Append text to the end of the line.
5089 Equivalent to
5090 .BR $a .
5091 .TP 10
5092 [\f2count\fP]\f3c\fP\f2motion\fP
5093 .TP 10
5094 \f3c\fP[\f2count\fP]\f2motion\fP
5095 Delete current character through the character that
5096 .I motion
5097 would move the cursor to and enter input mode.
5098 If \fImotion\fP is
5099 .BR c ,
5100 the entire line will be deleted and
5101 input mode entered.
5102 .TP 10
5103 .B C
5104 Delete the current character through the end of line and enter input mode.
5105 Equivalent to
5106 .BR c$ .
5107 .TP 10
5108 .B S
5109 Equivalent to
5110 .BR cc .
5111 .TP 10
5112 [\f2count\fP]\f3s\fP
5113 Replace characters under the cursor in input mode.
5114 .TP 10
5115 .B D
5116 Delete the current character through the end of line.
5117 Equivalent to
5118 .BR d$ .
5119 .TP 10
5120 [\f2count\fP]\f3d\fP\f2motion\fP
5121 .TP 10
5122 \f3d\fP[\f2count\fP]\f2motion\fP
5123 Delete current character through the character that
5124 .I motion
5125 would move to.
5126 If \fImotion\fP is
5127 .B d ,
5128 the entire line will be deleted.
5129 .TP 10
5130 .B i
5131 Enter input mode and insert text before the current character.
5132 .TP 10
5133 .B I
5134 Insert text before the beginning of the line.
5135 Equivalent to
5136 .BR 0i .
5137 .TP 10
5138 [\f2count\fP]\f3P\fP
5139 Place the previous text modification before the cursor.
5140 .TP 10
5141 [\f2count\fP]\f3p\fP
5142 Place the previous text modification after the cursor.
5143 .TP 10
5144 .B R
5145 Enter input mode and
5146 replace characters on the screen with characters you type overlay fashion.
5147 .TP 10
5148 [\f2count\fP]\f3r\fP\f2c\fP
5149 Replace the
5150 .I count
5151 character(s) starting at the current cursor position with
5152 .IR c ,
5153 and advance the cursor.
5154 .TP 10
5155 [\f2count\fP]\f3x\fP
5156 Delete current character.
5157 .TP 10
5158 [\f2count\fP]\f3X\fP
5159 Delete preceding character.
5160 .TP 10
5161 [\f2count\fP]\f3.\fP
5162 Repeat the previous text modification command.
5163 .TP 10
5164 [\f2count\fP]\f3\(ap\fP
5165 Invert the case of the
5166 .I count
5167 character(s) starting at the current cursor position and advance the cursor.
5168 .TP 10
5169 [\f2count\fP]\f3_\fP
5170 Causes the
5171 .I count\^
5172 word of the previous command to be appended and
5173 input mode entered.
5174 The last word is used
5176 .I count\^
5177 is omitted.
5178 .TP 10
5179 .B *
5180 Causes an
5181 .B *
5182 to be appended to the current word and file name generation attempted.
5183 If no match is found,
5184 it rings the bell.
5185 Otherwise, the word is replaced
5186 by the matching pattern and input mode is entered.
5187 .TP 10
5188 .B \e 
5189 Command or file name completion as described above.
5191 .SS "\ \ \ \ \ Other Edit Commands"
5193 Miscellaneous commands.
5194 .TP 10
5195 [\f2count\fP]\f3y\fP\f2motion\fP
5196 .TP 10
5197 \f3y\fP[\f2count\fP]\f2motion\fP
5198 Yank current character through character that
5199 .I motion
5200 would move the cursor to and puts them into the delete buffer.
5201 The text and cursor are unchanged.
5202 .TP 10
5203 .B yy
5204 Yanks the entire line.
5205 .TP 10
5206 .B Y
5207 Yanks from current position to end of line.
5208 Equivalent to
5209 .BR y$ .
5210 .TP 10
5211 .B u
5212 Undo the last text modifying command.
5213 .TP 10
5214 .B U
5215 Undo all the text modifying commands performed on the line.
5216 .TP 10
5217 [\f2count\fP]\f3v\fP
5218 Returns the command
5219 .BI "hist \-e ${\s-1VISUAL\s+1:\-${\s-1EDITOR\s+1:\-vi}}" " count"
5220 in the input buffer.
5222 .I count\^
5223 is omitted, then the current line is used.
5224 .TP 10
5225 .BI ^L
5226 Line feed and print current line.
5227 Has effect only in control mode.
5228 .TP 10
5229 .BI ^J  
5230 (New\ line) Execute the current line, regardless of mode.
5231 .TP 10
5232 .BI ^M  
5233 (Return) Execute the current line, regardless of mode.
5234 .TP 10
5235 .B #
5236 If the first character of the command is a
5237 .BR # ,
5238 then this command deletes this
5239 .B # 
5240 and each
5241 .B # 
5242 that follows a newline.
5243 Otherwise,
5244 sends the line after
5245 inserting a
5246 .B #
5247 in front of each line in the command.
5248 Useful for causing the current line to be
5249 inserted in the history as a comment and
5250 uncommenting previously commented commands
5251 in the history file.
5252 .TP 10
5253 [\f2count\fP]\f3=\fP
5254 If \f2count\fP is not specified,
5255 it generates the list of matching commands or
5256 file names as described above.
5257 Otherwise, the word under the the cursor is replaced by the
5258 \f2count\fP item from the most recently generated command or file list.
5259 If the cursor is not on a word, it is inserted instead.
5260 .TP 10
5261 .BI @ letter
5262 Your alias list is searched for an
5263 alias by the name
5264 .BI _ letter
5265 and if an alias of this name is defined, its
5266 value will be inserted on the input queue for processing.
5267 .TP 10
5268 .BI ^V
5269 Display version of the shell.
5272 .SS Built-in Commands.
5273 The following simple-commands are executed in the shell process.
5274 Input/Output redirection is permitted.
5275 Unless otherwise indicated, the output is written on file descriptor 1
5276 and the exit status, when there is no syntax error, is zero.
5277 Except for
5278 .BR : ,
5279 .BR true ,
5280 .BR false ,
5281 .BR echo ,
5282 .BR newgrp ,
5284 .BR login ,
5285 all built-in commands accept
5286 .B \-\-
5287 to indicate end of options.
5288 They also interpret the option
5289 .B \-\-man
5290 as a request to display the man page onto
5291 standard error and
5292 .B \-?
5293 as a help request which prints a
5294 .I usage\^
5295 message
5296 on standard error.
5297 Commands that are preceded by one or two \(dg symbols
5298 are special built-in commands and
5299 are treated specially in the following ways:
5300 .PD 0
5303 Variable assignment lists preceding the command
5304 remain in effect when the command completes.
5307 I/O redirections are processed after variable assignments.
5310 Errors
5311 cause a script
5312 that contains them to abort.
5315 They are not valid function names.
5318 Words
5319 following a command preceded by \(dg\(dg
5320 that are in the format of a variable assignment
5321 are expanded with the same rules as a variable assignment.
5322 This means that
5323 tilde substitution is performed after the
5324 .B =
5325 sign and field splitting and file name generation are not
5326 performed.
5327 These are called
5328 .I declaration\^
5329 built-ins.
5332 \(dg \f3:\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
5333 The command only expands parameters.
5335 .ne 2
5337 \(dg \f3\|. \f2name\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
5339 .I name\^
5340 is a function defined with the
5341 .B function
5342 .I name\^
5343 reserved word syntax,
5344 the function is executed in the current environment
5345 (as if it had been defined with the
5346 .IB name ()
5347 syntax.)
5348 Otherwise if
5349 .I name\^
5350 refers to a file, the
5351 file is read in its entirety and the commands are
5352 executed in the current shell environment.
5353 The search path
5354 specified by
5356 .SM PATH
5357 is used to find the directory containing the file.
5358 If any arguments
5359 .I arg\^
5360 are given,
5361 they become the positional parameters while processing
5363 .B .
5364 command and the original positional parameters are restored upon completion.
5365 Otherwise the positional parameters are unchanged.
5366 The exit status is the exit status of the last command executed.
5368 \(dg\(dg \f3alias\fP \*(OK \f3\-ptx\fP \*(CK  \*(OK \f2name\fP\*(OK \f3=\fP\f2value\^\fP  \*(CK \*(CK .\|.\|.
5369 .B alias\^
5370 with no arguments prints the list of aliases
5371 in the form
5372 .I name=value\^
5373 on standard output.
5375 .B \-p
5376 option
5377 causes the word
5378 .B alias
5379 to be inserted before each one.
5380 When one or more arguments are given,
5382 .I alias\^
5383 is defined
5384 for each
5385 .I name\^
5386 whose
5387 .I value\^
5388 is given.
5389 A trailing space in
5390 .I value\^
5391 causes the next word to be checked for
5392 alias substitution.
5393 The obsolete
5394 .B \-t
5395 option is used to set and list tracked aliases.
5396 The value of a tracked alias is the full pathname
5397 corresponding to the given
5398 .IR name .
5399 The value becomes undefined when the value of
5401 .B PATH
5402 is reset but the alias remains tracked.
5403 Without the
5404 .B \-t
5405 option,
5406 for each
5407 .I name\^
5408 in the argument list
5409 for which no
5410 .I value\^
5411 is given, the name
5412 and value of the alias is printed.
5413 The obsolete
5414 .B \-x
5415 option has no effect.
5416 The exit status is non-zero if a
5417 .I name\^
5418 is given, but no value, and no alias has been defined for the
5419 .IR name\^ .
5421 \f3bg\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
5422 This command is only on systems that support job control.
5423 Puts each specified
5424 .I job\^
5425 into the background.
5426 The current job is put in the background
5428 .I job\^
5429 is not specified.
5431 .I Jobs
5432 for a description of the format of
5433 .IR job .
5435 \(dg \f3break\fP \*(OK \f2n\^\fP \*(CK
5436 Exit from the enclosing
5437 .BR for\^ ,
5438 .BR while\^ ,
5439 .BR until\^ ,
5441 .B select\^
5442 loop, if any.
5444 .I n\^
5445 is specified, then break
5446 .I n\^
5447 levels.
5449 \f3builtin\fP \*(OK \f3\-ds\fP \*(CK \*(OK \f3\-f\fP \f2file\^\fP \*(CK \*(OK \f2name\^\fP .\|.\|. \*(CK
5451 .I name\^
5452 is not specified,
5453 and no
5454 .B \-f
5455 option is specified,
5456 the built-ins are printed on standard output.
5458 .B \-s
5459 option prints only the special built-ins.
5460 Otherwise, each
5461 .I name\^
5462 represents the pathname whose basename is the name of the built-in.
5463 The entry point function name is determined by prepending
5464 .B b_
5465 to the built-in name.
5466 The ISO C/C++ prototype is
5467 \f3b_\fP\f2mycommand\fP\f3(int\fP \f2argc\fP, \f3char *\fP\f2argv\fP\f3[]\fP, \f3void *\fP\f2context\fP\f3)\fP
5468 for the builtin command
5469 .I mycommand\^
5470 where
5471 .I argv\^
5472 is array an of
5473 .I argc\^
5474 elements and context is an optional pointer to a
5475 .B Shell_t
5476 structure as described in
5477 .BR <ast/shell.h> .
5478 .sp .5
5479 Special built-ins cannot be bound to a pathname or deleted.
5481 .B \-d
5482 option deletes each of the given built-ins.
5483 On systems that support dynamic loading, the
5484 .B \-f
5485 option names a shared library containing the code for built-ins.
5486 The shared library prefix and/or suffix, which depend on the system,
5487 can be omitted.
5488 Once a library is loaded, its symbols become available
5489 for subsequent invocations of
5490 .BR builtin .
5491 Multiple libraries can be specified with separate invocations
5492 of the
5493 .B builtin
5494 command.
5495 Libraries are searched in the reverse order in which they are specified.
5496 When a library is loaded, it looks for a function in the library
5497 whose name is
5498 .B lib_init()
5499 and invokes this function with an argument of
5500 .BR 0 .
5502 .PD 0
5503 \f3cd\fP \*(OK \f3\-LP\fP \*(CK \*(OK \f2arg\^\fP \*(CK
5505 \f3cd\fP \*(OK \f3\-LP\fP \*(CK \f2old\^\fP \f2new\^\fP
5507 This command can be in either of two forms.
5508 In the first form it
5509 changes the current directory to
5510 .IR arg .
5512 .I arg\^
5514 .B \-
5515 the directory is changed to the previous
5516 directory.
5517 The shell
5518 variable
5520 .SM HOME
5521 is the default
5522 .IR arg .
5523 The variable
5525 .B PWD
5526 is set to the current directory.
5527 The shell variable
5529 .SM CDPATH
5530 defines the search path for
5531 the directory containing
5532 .IR arg .
5533 Alternative directory names are separated by
5534 a colon
5535 .RB ( : ).
5536 The default path is
5537 .B <null>
5538 (specifying the current directory).
5539 Note that the current directory is specified by a null path name,
5540 which can appear immediately after the equal sign
5541 or between the colon delimiters anywhere else in the path list.
5543 .I arg
5544 begins with a \f3/\fP then the search path
5545 is not used.
5546 Otherwise, each directory in the path is
5547 searched for
5548 .IR arg .
5549 .sp .5
5550 The second form of
5551 .B cd
5552 substitutes the string
5553 .I new
5554 for the string
5555 .I old
5556 in the current directory name,
5558 .BR PWD ,
5559 and tries to change to this new directory.
5560 .sp .5
5561 By default, symbolic link names are treated literally when
5562 finding the directory name.
5563 This is equivalent to the
5564 .B \-L
5565 option.
5567 .B \-P
5568 option causes
5569 symbolic links to be resolved when determining the directory.
5570 The last instance of
5571 .B \-L
5573 .B \-P
5574 on the command line
5575 determines which method is used.
5576 .sp .5
5578 .B cd\^
5579 command may not be executed by
5580 .if \nZ=0 .B rsh\^.
5581 .if \nZ=1 .B rksh\^.
5582 .if \nZ=1 .B rksh93\^.
5584 \f3command\fP \*(OK \f3\-pvxV\fP \*(CK \f2name\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
5585 Without the
5586 .B \-v
5588 .B \-V
5589 options,
5590 .B command
5591 executes
5592 .I name\^
5593 with the arguments given by
5594 .IR arg .
5596 .B \-p
5597 option causes
5598 a default path to be searched
5599 rather than the one defined by the value of
5601 .BR PATH .
5602 Functions will not be searched for when finding 
5603 .IR name .
5604 In addition, if
5605 .I name\^
5606 refers to a special built-in,
5607 none of the special properties associated with the leading
5608 daggers will be honored.
5609 (For example, the predefined alias
5610 .B "redirect=\(fmcommand exec\(fm"
5611 prevents a script from terminating when an invalid
5612 redirection is given.)
5613 With the
5614 .B \-x
5615 option, 
5616 if command execution would result in a failure because
5617 there are too many arguments, errno
5619 .BR E2BIG ,
5620 the shell will invoke command
5621 .I name\^
5622 multiple times with a subset of the arguments on each invocation.
5623 Arguments that occur prior to the first word that
5624 expands to multiple arguments and after the last word
5625 that expands to multiple arguments will be passed on each invocation.
5626 The exit status will be the maximum invocation exit status.
5627 With the
5628 .B \-v
5629 option,
5630 .B command
5631 is equivalent to the built-in
5632 .B whence
5633 command described below.
5635 .B \-V
5636 option causes
5637 .B command
5638 to act like
5639 .BR "whence \-v" .
5641 \(dg \f3continue\fP \*(OK \f2n\^\fP \*(CK
5642 Resume the next iteration of the enclosing
5643 .BR for\^ ,
5644 .BR while\^ ,
5645 .BR until\^ ,
5647 .B select\^
5648 loop.
5650 .I n\^
5651 is specified, then resume at the
5652 .IR n -th
5653 enclosing loop.
5655 \f3disown\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
5656 Causes the shell not to send a HUP signal to
5657 each given
5658 .IR job ,
5659 or all active jobs if
5660 .I job
5661 is omitted,
5662 when a login shell terminates.
5664 \f3echo\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
5665 When the first
5666 .I arg\^
5667 does not begin with a \-, and
5668 none of the arguments contain a \e,
5669 then
5670 .B echo
5671 prints each of its arguments separated by a space
5672 and terminated by a new-line.
5673 Otherwise, the behavior of
5674 .B echo
5675 is system dependent
5677 .B print
5679 .B printf
5680 described below should be used.
5682 .IR echo (1)
5683 for usage and description.
5685 \(dg\(dg \f3enum\fP \*(OK \f3\-i\fP  \*(CK \f2type\^\fP\*(OK=(\f2value\^\fP .\|.\|.) \*(CK
5686 Creates a declaration command named \f2type\^\fP that is an
5687 integer type that allows one of the specified \f2value\fPs as
5688 enumeration names.  If \f3=(\fP\f2value\^\ .\|.\|.\|\fP\f3)\fP is
5689 omitted, then \f2type\^\fP must be an indexed array variable with at
5690 least two elements and the values are taken from this array variable.
5692 .B -i
5693 is specified the values are case insensitive.
5695 \(dg \f3eval\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
5696 The arguments are read as input
5697 to the shell
5698 and the resulting command(s) executed.
5700 \(dg \f3exec\fP \*(OK \f3\-c\fP \*(CK \*(OK \f3\-a\fP \f2name\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
5702 .I arg\^
5703 is given,
5704 the command specified by
5705 the arguments is executed in place of this shell
5706 without creating a new process.
5708 .B \-c
5709 option causes the environment to be cleared before applying
5710 variable assignments associated with the
5711 .B exec
5712 invocation.
5714 .B \-a
5715 option
5716 causes
5717 .I name\^
5718 rather than the first
5719 .IR arg ,
5720 to become
5721 .B argv[0]
5722 for the new process.
5723 Input/output arguments may appear and
5724 affect the current process.
5726 .I arg\^
5727 is not given,
5728 the effect of this command is to
5729 modify file descriptors
5730 as prescribed by the input/output redirection list.
5731 In this case,
5732 any file descriptor numbers greater than 2 that are
5733 opened with this mechanism are closed when invoking
5734 another program.
5736 \(dg \f3exit\fP \*(OK \f2n\^\fP \*(CK
5737 Causes the shell to exit
5738 with the exit status specified by
5739 .IR n .
5740 The value will be the least significant 8 bits of the specified status.
5742 .I n\^
5743 is omitted, then the exit status is that of the last command executed.
5744 An end-of-file will also cause the shell to exit
5745 except for a
5746 shell which has the
5747 .B ignoreeof
5748 option (see
5749 .B set
5750 below) turned on.
5752 \(dg\(dg \f3export\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2name\^\fP\*(OK\f3=\fP\f2value\^\fP\*(CK \*(CK .\|.\|.
5754 .I name\^
5755 is not given,
5756 the names and values of each variable with
5757 the export attribute are printed with the values
5758 quoted in a manner that allows them to be re-input.
5760 .B \-p
5761 option
5762 causes the word
5763 .B export
5764 to be inserted before each one.
5765 Otherwise, the given
5766 .IR name s
5767 are marked for automatic
5768 export to the
5769 .I environment\^
5770 of subsequently-executed commands.
5772 \f3false\fP
5773 Does nothing, and exits 1. Used with
5774 .B until
5775 for infinite loops.
5777 \f3fg\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
5778 This command is only on systems that support job control.
5779 Each
5780 .I job\^
5781 specified is brought to the foreground and waited for in
5782 the specified order.
5783 Otherwise, the current job is
5784 brought into the foreground.
5786 .I Jobs
5787 for a description of the format of
5788 .IR job .
5790 \f3getconf\fP \*(OK \f2name\^\fP \*(OK \f2pathname\^\fP \*(CK \*(CK
5791 Prints the current value of the configuration parameter given by
5792 .IR name .
5793 The configuration parameters are defined by the IEEE POSIX 1003.1
5794 and IEEE POSIX 1003.2 standards.
5795 (See
5796 .IR pathconf (2)
5798 .IR sysconf (2).)
5800 .I pathname
5801 argument is required for parameters whose value depends on
5802 the location in the file system.
5803 If no arguments are given,
5804 .B getconf
5805 prints the names and values of the current configuration
5806 parameters.
5807 The pathname
5808 .B /
5809 is used for each of the parameters that requires
5810 .IR pathname .
5812 \f3getopts\fP \*(OK \f3\ \-a\fP \f2name\^\fP \*(CK \f2optstring vname\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
5813 Checks
5814 .I arg
5815 for legal options.
5817 .I arg
5818 is omitted,
5819 the positional parameters are used.
5820 An option argument begins with a
5821 .B +
5822 or a
5823 .BR \- .
5824 An option not beginning with
5825 .B +
5826 or 
5827 .B \-
5828 or the argument
5829 .B \-\|\-
5830 ends the options.
5831 Options beginning with
5832 .B +
5833 are only recognized when
5834 .I optstring\^
5835 begins with a
5836 .BR + .
5837 .I optstring\^
5838 contains the letters that
5839 .B getopts
5840 recognizes.
5841 If a letter is followed by a
5842 .BR : ,
5843 that option is expected to have an argument.
5844 The options can be separated from the argument by blanks.
5845 The option
5846 .B \-?
5847 causes
5848 .B getopts
5849 to generate a usage message on standard error.
5851 .B \-a
5852 argument can be used to specify the name to use for the
5853 usage message, which defaults to
5854 .BR $0 .
5855 .sp .5
5857 getopts
5858 places the next option letter it finds inside variable
5859 .I vname\^
5860 each time it is invoked.
5861 The option letter will be prepended with a
5862 .B +
5863 when
5864 .I arg
5865 begins with a
5866 .BR + .
5867 The index of the next
5868 .I arg
5869 is stored in
5871 .BR OPTIND .
5872 The option argument,
5873 if any,
5874 gets stored in
5876 .BR OPTARG .
5877 .sp .5
5878 A leading
5879 .B :
5881 .I optstring
5882 causes
5883 .B getopts
5884 to store the letter of an invalid
5885 option in
5887 .BR OPTARG ,
5888 and to set
5889 .I vname
5891 .B ?
5892 for an unknown option and to
5893 .B :
5894 when a required option argument is missing.
5895 Otherwise,
5896 .B getopts
5897 prints an error message.
5898 The exit status is non-zero when there are no more options.
5899 .sp .5
5900 There is no way to specify any of the options
5901 .BR : ,
5902 .BR + ,
5903 .BR \- ,
5904 .BR ? ,
5905 .BR [ ,
5907 .BR ] .
5908 The option
5909 .B #
5910 can only be specified as the first option.
5912 .PD 0
5913 \f3hist\fP \*(OK \f3\-e\fP \f2ename\^\fP \ \*(CK \*(OK \f3\-nlr\^\fP \*(CK \*(OK \f2first\^\fP \*(OK \f2last\^\fP \*(CK \*(CK
5915 \f3hist \-s \fP \*(OK \f2old\fP\f3\=\fP\f2new\^\fP \*(CK \*(OK \f2command\^\fP \*(CK
5917 In the first form,
5918 a range of commands from
5919 .I first\^
5921 .I last\^
5922 is selected from the last
5924 .B HISTSIZE
5925 commands that were typed at the terminal.
5926 The arguments
5927 .I first\^
5929 .I last\^
5930 may be specified as a number or as a string.
5931 A string is used to locate the most recent command starting with
5932 the given string.
5933 A negative number is used as an offset to the current command number.
5934 If the
5935 .B \-l
5936 option
5937 is selected,
5938 the commands are listed on standard output.
5939 Otherwise, the editor program
5940 .I ename\^
5941 is invoked on a file containing these
5942 keyboard commands.
5944 .I ename\^
5945 is not supplied, then the value of the variable
5947 .B HISTEDIT
5948 is used.
5949 If 
5951 .B HISTEDIT
5952 is not set, then
5954 .B FCEDIT
5955 (default
5956 .BR /bin/ed\^ )
5957 is used as the editor.
5958 When editing is complete, the edited command(s)
5959 is executed if the changes have been saved.
5961 .I last\^
5962 is not specified,
5963 then it will be set to
5964 .IR first .
5966 .I first\^
5967 is not specified,
5968 the default is the previous command
5969 for editing and \-16 for listing.
5970 The option
5971 .B \-r
5972 reverses the order of the commands and
5973 the option
5974 .B \-n
5975 suppresses command numbers when listing.
5976 In the second form,
5977 .I command\^
5978 is interpreted as
5979 .I first\^
5980 described above
5981 and defaults to the last command executed.
5982 The resulting command is executed
5983 after the optional substitution
5984 \f2old\^\fP\f3=\fP\f2new\^\fP
5985 is performed.
5987 \f3jobs\fP \*(OK \f3\-lnp\^\fP \*(CK \*(OK \f2job\^\fP \.\|.\|. \*(CK
5988 Lists information about each given job; or all active jobs if
5989 .I job
5990 is omitted.
5992 .B \-l
5993 option lists process ids in addition to the normal information.
5995 .B \-n
5996 option only displays jobs that have stopped or exited since last
5997 notified.
5999 .B \-p
6000 option causes only the process group to be listed.
6002 .I Jobs
6003 for a description of the format of
6004 .IR job .
6006 .PD 0
6007 \f3kill\fP \*(OK \f3\-s\fP \f2signame\^\fP \*(CK \f2job\^\fP .\|.\|.
6009 .PD 0
6010 \f3kill\fP \*(OK \f3\-n\fP \f2signum\^\fP \*(CK \f2job\^\fP .\|.\|.
6012 \f3kill\fP \f3\-l\fP \*(OK \f2sig\^\fP .\|.\|. \*(CK
6014 Sends either the TERM (terminate) signal or the
6015 specified signal to the specified jobs or processes.
6016 Signals are either given by number with the
6017 .B \-n
6018 option or by name with the
6019 .B \-s
6020 option
6021 (as given in
6022 .BR <signal.h> ,
6023 stripped of the prefix ``SIG'' with
6024 the exception that SIGCLD is named CHLD).
6025 For backward compatibility, the
6026 .B n
6028 .B s
6029 can be omitted and the number or name placed immediately
6030 after the
6031 .BR \- .
6032 If the signal being sent is TERM (terminate) or HUP (hangup),
6033 then the job or process will be sent a CONT (continue) signal
6034 if it is stopped.
6035 The argument
6036 .I job\^
6037 can be the process id of a process that is not a member of one of the
6038 active jobs.
6040 .I Jobs
6041 for a description of the format of
6042 .IR job .
6043 In the third form,
6044 .BR "kill \-l" ,
6046 .I sig\^
6047 is not specified,
6048 the signal names are listed.
6049 Otherwise, for each
6050 .I sig\^
6051 that is a name, the corresponding signal number is listed.
6052 For each
6053 .I sig\^
6054 that is a number, the signal name corresponding to the
6055 least significant 8 bits of
6056 .I sig\^
6057 is listed.
6059 \f3let\fP \f2arg\^\fP .\|.\|.
6060 Each
6061 .I arg
6062 is a separate
6063 .I "arithmetic expression"
6064 to be evaluated.
6066 .I "Arithmetic Evaluation"
6067 above, for a description of arithmetic expression evaluation.
6068 .sp .5
6069 The exit status is
6070 0 if the value of the last expression
6071 is non-zero, and 1 otherwise.
6073 \(dg \f3newgrp\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
6074 Equivalent to
6075 .BI "exec /bin/newgrp" " arg\^"
6076 \&.\|.\|.\^.
6078 \f3print\fP \*(OK \f3\-CRenprsv\^\fP \*(CK \*(OK \f3\-u\fP \f2unit\^\fP\*(CK \*(OK \f3\-f\fP \f2format\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
6079 With no options or with option
6080 .B \-
6082 .BR \-\|\- ,
6083 each
6084 .I arg
6085 is printed
6086 on standard output.
6088 .B \-f
6089 option causes the arguments to be printed as
6090 described by
6091 .BR printf .
6092 In this case, any
6093 .BR e ,
6094 .BR n ,
6095 .BR r ,
6096 .B R
6097 options are ignored.
6098 Otherwise,
6099 unless the
6100 .BR \-C ,
6101 .BR \-R ,
6102 .BR \-r ,
6104 .B \-v
6105 are specified, the following
6106 escape conventions will be applied:
6108 .PD 0
6110 .B \ea
6111 The alert character (ascii
6112 .BR 07 ).
6114 .B \eb
6115 The backspace character (ascii
6116 .BR 010 ).
6118 .B \ec
6119 Causes
6120 .B print
6121 to end without processing more arguments and
6122 not adding a new-line.
6124 .B \ef
6125 The formfeed character (ascii
6126 .BR 014 ).
6128 .B \en
6129 The new-line character (ascii
6130 .BR 012 ).
6132 .B \er
6133 The carriage return character (ascii
6134 .BR 015 ).
6136 .B \et
6137 The tab character (ascii
6138 .BR 011 ).
6140 .B \ev
6141 The vertical tab character (ascii
6142 .BR 013 ).
6144 .B \eE
6145 The escape character (ascii
6146 .BR 033 ).
6148 .B \e\e
6149 The backslash character \e.
6151 .BI \e0 x
6152 The character defined by the 1, 2, or 3-digit octal
6153 string given by \fIx\fP.
6157 .B \-R
6158 option will print all subsequent arguments and options
6159 other than
6160 .BR \-n .
6162 .B \-e
6163 causes the above escape conventions to be applied.
6164 This is the default behavior.
6165 It reverses the effect of an earlier
6166 .BR \-r .
6168 .B \-p
6169 option causes the
6170 arguments to be written onto the pipe
6171 of the process spawned with
6172 .B \(bv&
6173 instead of standard output.
6175 .B \-v
6176 option treats each
6177 .I arg\^
6178 as a variable name and writes the value in
6180 .B printf
6181 .B %B
6182 format.
6184 .B \-C
6185 option treats each
6186 .I arg\^
6187 as a variable name and writes the value in
6189 .B printf
6190 .B %#B
6191 format.
6193 .B \-s
6194 option causes the
6195 arguments to be written onto the history file
6196 instead of standard output.
6198 .B \-u
6199 option can be used to specify a one digit
6200 file descriptor unit number
6201 .I unit\^
6202 on which the
6203 output will be placed.
6204 The default is 1.
6205 If the option
6206 .B \-n
6207 is used, no
6208 .B new-line\^
6209 is added to the output.
6212 \f3printf\fP \f2format\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
6213 The arguments
6214 .I arg\^
6215 are printed on standard output
6216 in accordance with the ANSI-C
6217 formatting rules associated with the format string
6218 .IR format .
6219 If the number of arguments exceeds the number of
6220 format specifications, the
6221 .B format\^
6222 string is reused to format remaining arguments.
6223 The following extensions can also be used:
6225 .PD 0
6227 .B %b
6229 .B %b
6230 format can be used instead of
6231 .B %s
6232 to cause escape sequences in the corresponding
6233 .I arg\^
6234 to be expanded as described in
6235 .BR print.
6237 .B %B
6239 .B %B
6240 option causes each of the arguments to be treated
6241 as variable names and the binary value of variable
6242 will be printed. 
6243 The alternate flag
6244 .B #
6245 causes a compound variable to be output on a single line.
6246 This is most useful for compound variables and variables whose attribute
6248 .BR \-b .
6250 .B %H
6252 .B %H
6253 format can be used instead of
6254 .B %s
6255 to cause characters in
6256 .I arg\^
6257 that are special in HTML and XML
6258 to be output as their entity name.
6260 .B %P
6262 .B %P
6263 format can be used instead of
6264 .B %s
6265 to cause
6266 .I arg\^
6267 to be interpreted as an extended regular
6268 expression and be printed as a shell pattern.
6270 .B %R
6272 .B %R
6273 format can be used instead of
6274 .B %s
6275 to cause
6276 .I arg\^
6277 to be interpreted as a shell pattern
6278 and to be printed as an extended regular expression.
6280 .B %q
6282 .B %q
6283 format can be used instead of
6284 .B %s
6285 to cause the resulting string to be quoted in a manner than can
6286 be reinput to the shell.
6288 .BI %( date-format )T
6290 .BI %( date-format )T
6291 format can be use to treat an argument as a date/time string
6292 and to format the date/time according to the
6293 .I date-format\^
6294 as defined for the
6295 .BR date (1)
6296 command.
6298 .B %Z
6300 .B %Z
6301 format will output a byte whose value is 0.
6303 .B %d
6304 The precision field of the
6305 .B %d
6306 format can be followed by a
6307 .B .
6308 and the output base.
6309 In this case, the 
6310 .B #
6311 flag character causes
6312 .IB base #
6313 to be prepended.
6315 .B #
6317 .B #
6318 flag when used with the
6319 .B d
6320 specifier without an output base,
6321 causes the output to be displayed in thousands units with one of the suffixes
6322 .B "k M G T P E"
6323 to indicate the unit.
6325 .B #
6326 flag when used with the
6327 .B i
6328 specifier causes the output to be displayed in 1024 with one of the suffixes
6329 .B "Ki Mi Gi Ti Pi Ei"
6330 to indicate the unit.
6332 .B =
6334 .B =
6335 flag has been added to center the output within the specified field width.
6340 \f3pwd\fP \*(OK \f3\-LP\fP \*(CK
6341 Outputs the value of the current working
6342 directory.
6344 .B \-L
6345 option is the default; it prints the logical name of the current directory.
6346 If the
6347 .B \-P
6348 option is given,
6349 all symbolic links are resolved from the name.
6350 The last instance of
6351 .B \-L
6353 .B \-P
6354 on the command line
6355 determines which method is used.
6357 \f3read\fP \*(OK \f3\-ACprsv\^\fP \*(CK \*(OK \f3\-d\fP \f2delim\^\fP\*(CK \*(OK \f3\-n\fP \f2n\^\fP\*(CK \*(OK \*(OK \f3\-N\fP \f2n\^\fP\*(CK \*(OK \*(OK \f3\-t\fP \f2timeout\^\fP\*(CK \*(OK \f3\-u\fP \f2unit\^\fP\*(CK \*(OK \f2vname\f3?\f2prompt\^\f1 \*(CK \*(OK \f2vname\^\fP .\|.\|. \*(CK
6358 The shell input mechanism.
6359 One line is read and
6360 is broken up into fields using the characters in
6362 .SM IFS
6363 as separators.
6364 The escape character,
6365 .BR \e ,
6366 is used to remove any special meaning for the next
6367 character and for line continuation.
6369 .B \-d
6370 option
6371 causes the read to continue to the first character of
6372 .I delim\^
6373 rather than new-line.
6375 .B \-n
6376 option causes at most
6377 .I n\^
6378 bytes to read rather a full line
6379 but will return when reading from a slow device
6380 as soon as any characters have been read.
6382 .B \-N
6383 option causes exactly
6384 .I n\^
6385 to be read unless an end-of-file has been encountered or
6386 the read times out because of the
6387 .B \-t
6388 option.
6389 In raw mode,
6390 .B \-r,
6392 .B \e
6393 character is not treated specially.
6394 The first
6395 field is assigned to the first
6396 .IR vname ,
6397 the second field
6398 to the second
6399 .IR vname ,
6400 etc., with leftover fields assigned to the last
6401 .IR vname .
6402 When
6403 .IR vname
6404 has the binary attribute and
6405 .B \-n
6407 .B \-N
6408 is specified, the bytes that are read are stored directly
6409 into the variable.
6410 If the
6411 .B \-v
6412 is specified, then the value of the first
6413 .I vname\^
6414 will be used as a default value when reading from a terminal device.
6416 .B \-A
6417 option causes the variable
6418 .I vname\^
6419 to be unset and each field that is read to be stored in
6420 successive elements of the indexed array
6421 .IR vname.
6423 .B \-C
6424 option causes the variable
6425 .I vname\^
6426 to be read as a compound variable.  Blanks will be ignored when
6427 finding the beginning open parenthesis.
6429 .B \-p
6430 option causes the input line
6431 to be taken from the input pipe
6432 of a process spawned by the shell
6433 using
6434 .BR \(bv& .
6435 If the
6436 .B \-s
6437 option is present,
6438 the input will be saved as a command in the history file.
6439 The option
6440 .B \-u
6441 can be used to specify a one digit file
6442 descriptor unit
6443 .I unit\^
6444 to read from.
6445 The file descriptor can be opened with the
6446 .B exec\^
6447 special built-in command.
6448 The default value of unit
6449 .I n\^
6450 is 0.
6451 The option
6452 .B \-t
6453 is used to specify a timeout in
6454 seconds when reading from a terminal or pipe.
6456 .I vname\^
6457 is omitted, then
6459 .B REPLY
6460 is used as the default
6461 .IR vname .
6462 An end-of-file with the
6463 .B \-p
6464 option causes cleanup for this process
6465 so that another can be spawned.
6466 If the first argument contains a
6467 .BR ? ,
6468 the remainder of this word is used as a
6469 .I prompt\^
6470 on standard error
6471 when the shell is interactive.
6472 The exit status is 0 unless an end-of-file is encountered
6474 .B read
6475 has timed out.
6477 \(dg\(dg \f3readonly\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2vname\fP\*(OK\f3=\fP\f2value\^\fP\*(CK \*(CK .\|.\|.
6479 .I vname\^
6480 is not given,
6481 the names and values of each variable with
6482 the readonly attribute is printed with the values
6483 quoted in a manner that allows them to be re-inputted.
6485 .B \-p
6486 option
6487 causes the word
6488 .B readonly
6489 to be inserted before each one.
6490 Otherwise, the given
6491 .IR vname s
6492 are marked
6493 readonly and these
6494 names cannot be changed
6495 by subsequent assignment.
6496 When defining a type, if the value of a readonly sub-variable is not defined
6497 the value is required when creating each instance.
6499 \(dg \f3return\fP \*(OK \f2n\^\fP \*(CK
6500 Causes a shell
6501 .I function
6503 \f3\|.\fP
6504 script to return
6505 to the invoking script
6506 with the exit status specified by
6507 .IR n .
6508 The value will be the least significant 8 bits of the specified status.
6510 .I n\^
6511 is omitted, then the return status is that of the last command executed.
6513 .B return
6514 is invoked while not in a
6515 .I function
6516 or a
6517 \f3\|.\fP
6518 script,
6519 then it behaves the same as
6520 .BR exit .
6522 \(dg \f3set\fP \*(OK \f3\(+-BCGabefhkmnoprstuvx\fP \*(CK \*(OK \f3\(+-o\fP \*(OK \f2option\^\fP \*(CK \*(CK .\|.\|. \*(OK \f3\(+-A\fP \f2vname\^\fP \*(CK  \*(OK \f2arg\^\fP .\|.\|. \*(CK
6523 The options for this command have meaning as follows:
6525 .PD 0
6526 .TP 8
6527 .B \-A
6528 Array assignment.
6529 Unset the variable
6530 .I vname
6531 and assign values sequentially from the
6532 .I arg\^
6533 list.
6535 .B +A
6536 is used, the variable
6537 .I vname
6538 is not unset first.
6539 .TP 8
6540 .B \-B
6541 Enable brace pattern field generation.
6542 This is the default behavior.
6543 .TP 8
6544 .B \-B
6545 Enable brace group expansion.  On by default.
6546 .TP 8
6547 .B \-C
6548 Prevents redirection
6549 .B >
6550 from truncating existing files.
6551 Files that are created are opened with the O_EXCL mode.
6552 Requires
6553 .B >\(bv
6554 to truncate a file when turned on.
6555 .TP 8
6556 .B \-G
6557 Causes the pattern
6558 .B \(**\(**
6559 by itself to match files and zero or more directories and sub-directories
6560 when used for file name generation.
6561 If followed by a
6562 .B /
6563 only directories and sub-directories are matched.
6564 .TP 8
6565 .B \-a
6566 All subsequent variables that are defined are automatically exported.
6567 .TP 8
6568 .B \-b
6569 Prints job completion messages as soon as a background job changes
6570 state rather than waiting for the next prompt.
6571 .TP 8
6572 .B \-e
6573 Unless contained in a
6574 .B \(bv\(bv 
6576 .B &&
6577 command, or the command following an
6578 .B if
6579 .B while
6581 .B until
6582 command or in the pipeline following
6583 .BR ! ,
6584 if a command has a non-zero exit status,
6585 execute the
6587 .B ERR
6588 trap, if set,
6589 and exit.
6590 This mode is disabled while reading profiles.
6591 .TP 8
6592 .B \-f
6593 Disables file name generation.
6594 .TP 8
6595 .B \-h
6596 Each command
6597 becomes a tracked alias when first encountered.
6598 .TP 8
6599 .B \-k
6600 (Obsolete). All variable assignment arguments are placed in the environment for a command,
6601 not just those that precede the command name.
6602 .TP 8
6603 .B \-m
6604 Background jobs will run in a separate process group
6605 and a line will print upon completion.
6606 The exit status of background jobs is reported in a completion message.
6607 On systems with job control,
6608 this option is turned on automatically for
6609 interactive shells.
6610 .TP 8
6611 .B \-n
6612 Read commands and check them for syntax errors, but do not execute them.
6613 Ignored for interactive shells.
6614 .TP 8
6615 .B \-o
6616 The following argument can be one of the following option names:
6618 .TP 8
6619 .B allexport
6620 Same as
6621 .BR \-a .
6622 .TP 8
6623 .B errexit
6624 Same as
6625 .BR \-e .
6626 .TP 8
6627 .B bgnice
6628 All background jobs are run at a lower priority.
6629 This is the default mode.
6630 .TP 8
6631 .B braceexpand
6632 Same as
6633 .BR \-B .
6634 .TP 8
6635 .B emacs
6636 Puts you in an
6637 .I emacs
6638 style in-line editor for command entry.
6639 .TP 8
6640 .B globstar
6641 Same as
6642 .BR \-G .
6643 .TP 8
6644 .B gmacs
6645 Puts you in a
6646 .I gmacs
6647 style in-line editor for command entry.
6648 .TP 8
6649 .B ignoreeof
6650 The shell will not exit on end-of-file.
6651 The command
6652 .B exit
6653 must be used.
6654 .TP 8
6655 .B keyword
6656 Same as
6657 .BR \-k .
6658 .TP 8
6659 .B markdirs
6660 All directory names resulting from file name generation have a trailing
6661 .B /
6662 appended.
6663 .TP 8
6664 .B monitor
6665 Same as
6666 .BR \-m .
6667 .TP 8
6668 .B multiline
6669 The built-in editors will use multiple lines on the screen for lines
6670 that are longer than the width of the screen.  This may not work
6671 for all terminals.
6672 .TP 8
6673 .B noclobber
6674 Same as
6675 .BR \-C .
6676 .TP 8
6677 .B noexec
6678 Same as
6679 .BR \-n .
6680 .TP 8
6681 .B noglob
6682 Same as
6683 .BR \-f .
6684 .TP 8
6685 .B nolog
6686 Do not save function definitions in the history file.
6687 .TP 8
6688 .B notify
6689 Same as
6690 .BR \-b .
6691 .TP 8
6692 .B nounset
6693 Same as
6694 .BR \-u .
6695 .TP 8
6696 .B pipefail
6697 A pipeline will not complete until all components
6698 of the pipeline have completed, and the return value
6699 will be the value of the last non-zero command
6700 to fail or zero if no command has failed.
6701 .TP 8
6702 .B showme
6703 When enabled, simple commands or pipelines preceded by a semicolon
6704 .RB ( ; )
6705 will be displayed as if the
6706 .B xtrace
6707 option were enabled but will not be executed.
6708 Otherwise, the leading
6709 .B ;
6710 will be ignored.
6711 .TP 8
6712 .B privileged
6713 Same as
6714 .BR \-p .
6715 .TP 8
6716 .B verbose
6717 Same as
6718 .BR \-v .
6719 .TP 8
6720 .B trackall
6721 Same as
6722 .BR \-h .
6723 .TP 8
6724 .B vi
6725 Puts you in insert mode of a
6726 .I vi\^
6727 style in-line editor
6728 until you hit the escape character
6729 .BR 033 .
6730 This puts you in control mode.
6731 A return sends the line.
6732 .TP 8
6733 .B viraw
6734 Each character is processed as it is typed
6736 .I vi\^
6737 mode.
6738 .TP 8
6739 .B xtrace
6740 Same as
6741 .BR \-x .
6743 If no option name is supplied, then the current option settings are printed.
6745 .TP 8
6746 .B \-p
6747 Disables processing of the
6748 .B \s-1$HOME\s+1/.profile
6749 file and uses the file
6750 .B /etc/suid_profile
6751 instead of the
6753 .B ENV
6754 file.
6755 This mode is on whenever the effective uid (gid)
6756 is not equal to the real uid (gid).
6757 Turning this off causes the effective uid and gid to be
6758 set to the real uid and gid.
6759 .TP 8
6760 .B \-r
6761 Enables the restricted shell.  This option cannot be unset
6762 once set.
6763 .TP 8
6764 .B \-s
6765 Sort the positional parameters lexicographically.
6766 .TP 8
6767 .B \-t
6768 (Obsolete).  Exit after reading and executing one command.
6769 .TP 8
6770 .B \-u
6771 Treat unset parameters as an error when substituting.
6772 .TP 8
6773 .B \-v
6774 Print shell input lines as they are read.
6775 .TP 8
6776 .B \-x
6777 Print commands and their arguments as they are executed.
6778 .TP 8
6779 .B \-\|\-
6780 Do not change any of the options; useful in setting
6781 .B $1
6782 to a value beginning with
6783 .BR \- .
6784 If no arguments follow this option then the positional parameters are unset.
6787 As an obsolete feature,
6788 if the first
6789 .I arg\^
6791 .B \-
6792 then the
6793 .B \-x
6795 .B \-v
6796 options are turned off and the next
6797 .I arg
6798 is treated as the first argument.
6799 Using
6800 .B \+
6801 rather than
6802 .B \-
6803 causes these options to be turned off.
6804 These options can also be used upon invocation of the shell.
6805 The current set of options may be found in
6806 .BR $\- .
6807 Unless
6808 .B \-A
6809 is specified,
6810 the remaining arguments are positional
6811 parameters and are assigned, in order, to
6812 .B $1
6813 .B $2
6814 \&.\|.\|.\^.
6815 If no arguments are given, then the names and values
6816 of all variables are printed on the standard output.
6819 \(dg \f3shift\fP \*(OK \f2n\^\fP \*(CK
6821 The positional parameters from
6822 \f3$\fP\f2n\fP\f3+1\fP
6823 \&.\|.\|.
6824 are renamed
6825 .B $1
6826 \&.\|.\|.\^
6827 , default
6828 .I n\^
6829 is 1.
6830 The parameter
6831 .I n\^
6832 can be any arithmetic expression that evaluates to a non-negative
6833 number less than or equal to
6834 .BR $# .
6836 \f3sleep\fP \f2seconds\^\fP
6837 Suspends execution for the number of decimal seconds or fractions of a
6838 second given by
6839 .IR seconds .
6841 \(dg \f3trap\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2action\^\fP \*(CK \*(OK \f2sig\^\fP \*(CK .\|.\|.
6843 .B \-p
6844 option causes the trap
6845 action associated with each trap as specified by the arguments
6846 to be printed with appropriate quoting.
6847 Otherwise,
6848 .I action\^
6849 will be processed as if it were an argument to
6850 .B eval
6851 when the shell
6852 receives signal(s)
6853 .IR sig .
6854 Each
6855 .I sig\^
6856 can be given as a number or as the name of the signal.
6857 Trap commands are executed in order of signal number.
6858 Any attempt to set a trap on a signal that
6859 was ignored on entry to the current shell
6860 is ineffective.
6862 .I action\^
6863 is omitted and the first
6864 .I sig\^
6865 is a number, or if
6866 .I action\^
6868 .BR \- ,
6869 then the trap(s) for each
6870 .I sig\^
6871 are reset
6872 to their original values.
6874 .I action\^
6875 is the null
6876 string then this signal is ignored by the shell and by the commands
6877 it invokes.
6879 .I sig\^
6882 .B ERR
6883 then
6884 .I action\^
6885 will be executed whenever a command has a non-zero exit status.
6887 .I sig\^
6890 .B DEBUG
6891 then
6892 .I action\^
6893 will be executed before each command.
6894 The variable
6895 .B .sh.command
6896 will contain the contents of the current command line
6897 when 
6898 .I action\^
6899 is running.
6900 If the exit status of the trap is
6901 .B 2
6902 the command will not be executed.
6903 If the exit status of the trap is
6904 .B 255
6905 and inside a function or a dot script,
6906 the function or dot script will return.
6908 .I sig\^
6910 .B 0
6913 .B EXIT
6914 and the
6915 .B trap
6916 statement is executed inside the body of a function defined with the
6917 .B function
6918 .I name\^
6919 syntax,
6920 then the command
6921 .I action\^
6922 is executed
6923 after the function completes.
6925 .I sig\^
6927 .B 0
6930 .B EXIT
6931 for a
6932 .B trap
6933 set outside any function
6934 then the command
6935 .I action\^
6936 is executed
6937 on exit from the shell.
6939 .I sig\^
6942 .BR KEYBD ,
6943 then
6944 .I action\^
6945 will be executed whenever a key is read
6946 while in
6947 .BR emacs ,
6948 .BR gmacs ,
6950 .B vi\^
6951 mode.
6953 .B trap
6954 command
6955 with no arguments prints a list
6956 of commands associated with each signal number.
6959 .B exit
6961 .B return
6962 without an argument in a trap action will
6963 preserve the exit status of the command that invoked the trap.
6965 \f3true\fP
6966 Does nothing, and exits 0. Used with
6967 .B while
6968 for infinite loops.
6970 \f3true\fP
6971 Does nothing, and exits 0. Used with
6972 .B while
6973 for infinite loops.
6975 \(dg\(dg \f3typeset\fP \*(OK \f3\(+-ACHSflbnprtux\^\fP \*(CK \*(OK \f3\(+-EFLRXZi\*(OK\f2n\^\fP\*(CK \*(CK  \*(OK \f3\-T \f2tname\fP=(\f2assign_list\fP) \*(CK \*(OK \f3\-h \f2str\fP \*(CK \*(OK \f3\-a\fP \*(OK\f2type\fP\*(CK \*(CK \*(OK \f2vname\^\fP\*(OK\f3=\fP\f2value\^\fP \*(CK \^ \*(CK .\|.\|.
6976 Sets attributes and values for shell variables and functions.
6977 When invoked inside a function defined with the
6978 .B function
6979 .I name\^
6980 syntax,
6981 a new instance of the variable
6982 .I vname\^
6983 is created,
6984 and the variable's value and type are restored
6985 when the function completes.
6986 The following list of attributes may be specified:
6988 .PD 0
6990 .B \-A
6991 Declares
6992 .I vname\^
6993 to be an associative array.
6994 Subscripts are strings rather than arithmetic
6995 expressions.
6997 .B \-C
6998 causes each
6999 .I vname\^
7000 to be a compound variable.
7001 .I value\^
7002 names a compound variable it is copied into
7003 .IR vname .
7004 Otherwise, it unsets each
7005 .IR vname .
7007 .B \-a
7008 Declares
7009 .I vname\^
7010 to be an indexed array.
7011 If 
7012 .I type\^
7013 is specified, it must be the name of an enumeration
7014 type created with the
7015 .B enum
7016 command and it allows enumeration constants to be used
7017 as subscripts.
7019 .B \-E
7020 Declares
7021 .I vname\^
7022 to be a double precision floating point number.
7024 .I n\^
7025 is non-zero, it defines the number of significant figures
7026 that are used when expanding
7027 .IR vname .
7028 Otherwise, ten significant figures will be used.
7030 .B \-F
7031 Declares
7032 .I vname\^
7033 to be a double precision floating point number.
7035 .I n\^
7036 is non-zero, it defines the number of places after the
7037 decimal point that are used when expanding
7038 .IR vname .
7039 Otherwise ten places after the decimal point will be used.
7041 .B \-H
7042 This option provides UNIX to host-name file mapping on non-UNIX
7043 machines.
7045 .B \-L
7046 Left justify and remove leading blanks from
7047 .IR value .
7049 .I n\^
7050 is non-zero, it defines the width
7051 of the field,
7052 otherwise it is determined by the width of the value of
7053 first assignment.
7054 When the variable is assigned to, it is
7055 filled on the right with blanks or truncated, if necessary, to
7056 fit into the field.
7058 .B \-R
7059 option is turned off.
7061 .B \-R
7062 Right justify and fill with leading blanks.
7064 .I n\^
7065 is non-zero, it defines the width
7066 of the field,
7067 otherwise it is determined by the width of the value of
7068 first assignment.
7069 The field is left filled with blanks or
7070 truncated from the end if the
7071 variable is reassigned.
7073 .B \-L
7074 option is turned off.
7076 .B \-S
7077 When used within the
7078 .I assign_list\^
7079 of a type definition, it causes the specified sub-variable
7080 to be shared by all instances of the type.
7081 When used inside a function defined with the
7082 .B function
7083 reserved word, the specified variables will have
7084 .I "function static\^"
7085 scope. 
7086 Otherwise, the variable is unset prior to processing the assignment list.
7088 .B \-T
7089 Creates a type named by \fItname\^\fP using the compound
7090 assignment
7091 .I assign_list\^
7092 to \f2tname\fP.
7094 .B \-X
7095 Declares
7096 .I vname\^
7097 to be a double precision floating point number
7098 and expands using the
7099 .B %a
7100 format of ISO-C99.
7102 .I n\^
7103 is non-zero, it defines the number of hex digits after
7104 the radix point that is used when expanding
7105 .IR vname .
7106 The default is 10.
7108 .B \-Z
7109 Right justify and fill with leading zeros if
7110 the first non-blank character is a digit and the
7111 .B \-L
7112 option has not been set.
7113 Remove leading zeros if the
7114 .B \-L
7115 option is also set.
7117 .I n\^
7118 is non-zero, it defines the width
7119 of the field,
7120 otherwise it is determined by the width of the value of
7121 first assignment.
7123 .B \-f
7124 The names refer to function names rather than
7125 variable names.
7126 No assignments can be made and the only other
7127 valid options are
7128 .BR \-t ,
7129 .B \-u
7131 .BR \-x .
7133 .B \-t
7134 option
7135 turns on execution tracing for this function.
7137 .B \-u
7138 option
7139 causes this function to be marked undefined.
7142 .B FPATH
7143 variable will be searched to find the function definition
7144 when the function is referenced.
7145 If no options other than
7146 .B \-f
7147 is specified, then the function definition will be displayed
7148 on standard output.  If
7149 .B +f
7150 is specified, then a line containing the function name followed
7151 by a shell comment containing the line number and path name of the
7152 file where this function was defined, if any, is displayed.
7154 .B \-b
7155 The variable can hold any number of bytes of data.
7156 The data can be text or binary.
7157 The value is represented by the base64 encoding of the data.
7159 .B \-Z
7160 is also specified, the size in bytes of the
7161 data in the buffer will be determined by the size associated with the
7162 .BR \-Z .
7163 If the base64 string assigned results in more data, it will be
7164 truncated.  Otherwise, it will be filled with bytes
7165 whose value is zero.
7167 .B printf
7168 format
7169 .B %B
7170 can be used to output the actual data in this buffer instead
7171 of the base64 encoding of the data.
7173 .B \-h
7174 Used within type definitions to add information when generating
7175 information about the sub-variable on the man page.
7176 It is ignored when used outside of a type definition.
7177 When used with
7178 .B \-f
7179 the information is associated with the corresponding discipline
7180 function.
7182 .B \-i
7183 Declares
7184 .I vname\^
7185 to be represented internally as integer.
7186 The right hand side of an assignment is evaluated as an
7187 arithmetic expression when assigning to an integer.
7189 .I n\^
7190 is non-zero, it defines the output arithmetic base,
7191 otherwise the output base will be ten.
7193 .B \-l
7194 All upper-case characters are
7195 converted to lower-case.
7196 The upper-case option,
7197 .BR \-u ,
7198 is turned off.
7200 .B \-n
7201 Declares
7202 .I vname\^
7203 to be a reference to the variable whose name is
7204 defined by the value of variable
7205 .IR vname .
7206 This is usually used to reference a variable inside
7207 a function whose name has been passed as an argument.
7209 .B \-p
7210 The name, attributes and values for the given
7211 .IR vname s
7212 are written on standard output in a form that can be
7213 used as shell input.
7215 .B +p
7216 is specified, then the values are not displayed.
7218 .B \-r
7219 The given
7220 .IR vname s
7221 are marked
7222 readonly and these
7223 names cannot be changed
7224 by subsequent assignment.
7226 .B \-t
7227 Tags the variables.
7228 Tags are user definable and have no special
7229 meaning to the shell.
7231 .B \-u
7232 All lower-case characters are converted
7233 to upper-case.
7234 The lower-case option,
7235 .BR \-l ,
7236 is turned off.
7238 .B \-x
7239 The given
7240 .IR vname s
7241 are marked for automatic
7242 export to the
7243 .I environment\^
7244 of subsequently-executed commands.
7245 Variables whose names contain a \fB\s+2.\s-2\fP
7246 cannot be exported.
7250 .B \-i
7251 attribute cannot be specified along with
7252 .BR \-R ,
7253 .BR \-L ,
7254 .BR \-Z ,
7256 .BR \-f .
7258 Using
7259 .B \+
7260 rather than
7261 .B \-
7262 causes these options to be turned off.
7263 If no
7264 .I vname\^
7265 arguments are given,
7266 a list of
7267 .I vnames\^
7268 (and optionally the
7269 .IR values\^ )
7270 of the
7271 .I variables\^
7272 is printed.
7273 (Using
7274 .B \+
7275 rather than
7276 .B \-
7277 keeps the
7278 values from being printed.)
7280 .B \-p
7281 option causes
7282 .B typeset
7283 followed by the option letters
7284 to be printed before each name
7285 rather than the names of the options.
7286 If any option other than
7287 .B \-p
7288 is given,
7289 only those variables
7290 which have all of the given
7291 options are printed.
7292 Otherwise, the
7293 .IR vname s
7295 .I attributes\^
7296 of all
7297 .I variables\^
7298 that have attributes
7299 are printed.
7302 \f3ulimit\fP \*(OK \f3\-HSacdfmnpstv\fP \*(CK \*(OK \f2limit\^\fP \*(CK
7303 Set or display a resource limit.
7304 The available resource limits are listed below.
7305 Many systems do not support one or more of these limits.
7306 The limit for a specified resource is set when
7307 .I limit\^
7308 is specified.
7309 The value of
7310 .I limit\^
7311 can be a number in the unit specified below with each resource,
7312 or the value
7313 .BR unlimited .
7315 .B \-H
7317 .B \-S
7318 options specify whether the hard limit or the
7319 soft limit for the given resource is set.
7320 A hard limit cannot be increased once it is set.  A soft
7321 limit can be increased up to the value of the hard limit.
7322 If neither the
7323 .B H
7325 .B S
7326 option is specified, the limit applies to both.
7327 The current resource limit is printed when 
7328 .I limit\^
7329 is omitted.
7330 In this case, the soft limit is printed unless
7331 .B H
7332 is specified.
7333 When more than one resource is specified, then the limit
7334 name and unit is printed before the value.
7336 .PD 0
7338 .B \-a
7339 Lists all of the current resource limits.
7341 .B \-c
7342 The number of 512-byte blocks on the size of core dumps.
7344 .B \-d
7345 The number of K-bytes on the size of the data area.
7347 .B \-f
7348 The number of 512-byte blocks on files that can be written by the
7349 current process or by child processes (files of any size may be read).
7351 .B \-m
7352 The number of K-bytes on the size of physical memory.
7354 .B \-n
7355 The number of file descriptors plus 1.
7357 .B \-p
7358 The number of 512-byte blocks for pipe buffering.
7360 .B \-s
7361 The number of K-bytes on the size of the stack area.
7363 .B \-t
7364 The number of CPU seconds to be used by each process.
7366 .B \-v
7367 The number of K-bytes for virtual memory.
7370 If no option is given,
7371 .B \-f
7372 is assumed.
7375 \f3umask\fP \*(OK \f3\-S\fP \*(CK \*(OK \f2mask\^\fP \*(CK
7376 The user file-creation mask is set to
7377 .I mask\^
7378 (see
7379 .IR umask (2)).
7380 .I mask
7381 can either be an octal number or
7382 a symbolic value as described in
7383 .IR chmod (1). 
7384 If a symbolic value is given,
7385 the new
7386 umask value is the complement of the result of
7387 applying
7388 .I mask\^
7389 to the complement of the previous umask value.
7391 .I mask\^
7392 is omitted, the current value of the mask is printed.
7394 .B \-S
7395 option causes the mode to be printed as a symbolic
7396 value.  Otherwise, the
7397 mask is printed in octal. 
7399 \(dg \f3unalias\fP \*(OK \f3\-a\fP \*(CK \f2name\^\fP .\|.\|.
7400 The aliases
7401 given by the list of
7402 .IR name s
7403 are removed from the alias list.
7405 .B \-a
7406 option causes all the
7407 aliases to be unset.
7409 \(dg\f3unset\fP \*(OK \f3\-fnv\fP \*(CK \f2vname\^\fP .\|.\|.
7410 The variables given by the list of
7411 .IR vname s
7412 are unassigned,
7413 i.e.,
7414 except for sub-variables within a type,
7415 their values and attributes are erased.
7416 For sub-variables of a type, the values are reset to the
7417 default value from the type definition.
7418 Readonly variables cannot be unset.
7419 If the
7420 .B \-f
7421 option
7422 is set, then the names refer to
7423 .I function\^
7424 names.
7425 If the
7426 .B \-v
7427 option is set, then the names refer to
7428 .I variable\^
7429 names.
7431 .B \-f
7432 option overrides
7433 .BR \-v .
7435 .B \-n
7436 is set and
7437 .I name\^
7438 is a name reference, then
7439 .I name\^
7440 will be unset rather than the variable
7441 that it references.
7442 The default is equivalent to
7443 .BR \-v .
7444 Unsetting
7446 .BR LINENO ,
7448 .BR MAILCHECK ,
7450 .BR OPTARG ,
7452 .BR OPTIND ,
7454 .BR RANDOM ,
7456 .BR SECONDS ,
7458 .BR TMOUT ,
7461 .B _
7462 removes their special meaning even if they are
7463 subsequently assigned to.
7465 \f3wait\fP \*(OK \f2job\^\fP .\|.\|. \*(CK
7466 Wait for the specified
7467 .I job
7469 report its termination status.
7471 .I job\^
7472 is not given, then all currently active child processes are waited for.
7473 The exit status from this command is that of
7474 the last process waited for if
7475 .I job\^
7476 is specified; otherwise it is zero.
7478 .I Jobs
7479 for a description of the format of
7480 .IR job .
7482 \f3whence\fP \*(OK \f3\-afpv\fP \*(CK \f2name\^\fP .\|.\|.
7483 For each
7484 .IR name ,
7485 indicate how it
7486 would be interpreted if used as a command name.
7487 .sp .5
7489 .B \-v
7490 option
7491 produces a more verbose report.
7493 .B \-f
7494 option skips the search for functions.
7496 .B \-p
7497 option
7498 does a path search for
7499 .I name\^
7500 even if name is an alias, a function, or a reserved word.
7502 .B \-p
7503 option turns off the
7504 .B \-v
7505 option.
7507 .B \-a
7508 option
7509 is similar to the
7510 .B \-v
7511 option but causes
7512 all interpretations of the given name to be reported.
7513 .SS Invocation.
7514 If the shell is invoked by
7515 .IR exec (2),
7516 and the first character of argument zero
7517 .RB ( $0 )
7519 .BR \- ,
7520 then the shell is assumed to be a
7521 .I login
7522 shell and
7523 commands are read from
7524 .B /etc/profile
7525 and then from either
7526 .B .profile
7527 in the current directory or
7528 .BR \s-1$HOME\s+1/.profile ,
7529 if either file exists.
7530 Next, for interactive shells, commands are read from
7531 the file named by
7532 performing parameter expansion, command substitution,
7533 and arithmetic substitution on
7534 the value of the environment variable
7536 .B ENV
7537 if the file exists.
7538 If the
7539 .B \-s
7540 option is not present and
7541 .I arg\^
7542 and a file by the name of
7543 .I arg\^
7544 exists, then it reads and executes this script.
7545 Otherwise, if the first 
7546 .I arg\^
7547 does not contain a
7548 .BR / ,
7549 a path search is performed on the first
7550 .I arg\^
7551 to determine the name of the script to execute.
7552 The script
7553 .I arg\^
7554 must have execute permission and any
7555 .I setuid
7557 .I setgid
7558 settings will be ignored.
7559 If the script is not found on the path,
7560 .I arg\^
7561 is processed as if it named a built-in command or function.
7562 Commands are then read as described below;
7563 the following options are interpreted by the shell
7564 when it is invoked:
7566 .PD 0
7567 .TP 8
7568 .B \-D
7569 Do not execute the script, but output the set of double quoted strings
7570 preceded by a
7571 .BR $ .
7572 These strings are needed for localization of the script to different locales.
7573 .TP 8
7574 .B \-E
7575 Reads the file named by the
7576 .B ENV
7577 variable or by
7578 \s-1$HOME\s+1/\f3.\fPkshrc
7579 if not defined after the profiles.
7580 .TP 10
7581 .BI \-c
7582 If the
7583 .B \-c
7584 option is present, then
7585 commands are read from the first
7586 .IR arg .
7587 Any remaining arguments become
7588 positional parameters starting at
7589 .BR 0 .
7591 .B \-s
7592 If the
7593 .B \-s
7594 option is present or if no
7595 arguments remain,
7596 then commands are read from the standard input.
7597 Shell output,
7598 except for the output of the
7599 .I Special Commands\^
7600 listed above,
7601 is written to
7602 file descriptor 2.
7604 .B \-i
7605 If the
7606 .B \-i
7607 option is present or
7608 if the shell input and output are attached to a terminal (as told by
7609 .IR tcgetattr (2)),
7610 then this shell is
7611 .IR interactive .
7612 In this case \s-1TERM\s+1 is ignored (so that \f3kill 0\fP
7613 does not kill an interactive shell) and \s-1INTR\s+1 is caught and ignored
7614 (so that
7615 .B wait
7616 is interruptible).
7617 In all cases, \s-1QUIT\s+1 is ignored by the shell.
7619 .B \-r
7620 If the
7621 .B \-r
7622 option is present, the shell is a restricted shell.
7624 .B \-D
7625 A list of all double quoted strings that are preceded by a
7626 .B $
7627 will be printed on standard output and the shell will exit.
7628 This set of strings will be subject to language translation
7629 when the locale is not C or POSIX.
7630 No commands will be executed.
7633 .B \-P
7635 .B \-P
7637 .B \-o profile
7638 is present, the shell is a profile shell (see
7639 .IR pfexec (1)).
7641 .BI \-R " filename\^"
7643 .B \-R
7644 .I filename\^
7645 option is used
7646 to generate a cross reference database
7647 that can be used by a separate utility
7648 to find definitions and references for variables and commands. 
7650 The remaining options and arguments are described under the
7651 .B set
7652 command above.
7653 An optional
7654 .B \-
7655 as the first argument is ignored.
7656 .if \nZ=0 \{.SS Rsh Only.
7657 .I Rsh\}
7658 .if \nZ=1 \{.SS Rksh Only.
7659 .I Rksh\}
7660 .if \nZ=2 \{.SS Rksh93 Only.
7661 .I Rksh93\}
7662 is used to set up login names and execution environments whose
7663 capabilities are more controlled than those of the standard shell.
7664 The actions of
7665 .if \nZ=0 .B rsh\^
7666 .if \nZ=1 .B rksh\^
7667 .if \nZ=2 .B rksh93\^
7668 are identical to those of
7669 .if \nZ=0 .BR sh\^ ,
7670 .if \nZ=1 .BR ksh\^ ,
7671 .if \nZ=2 .BR ksh93\^ ,
7672 except that the following are disallowed:
7674 .PD 0
7676 Unsetting the restricted option.
7678 changing directory (see
7679 .IR cd (1)),
7681 setting or unsetting the value or attributes of
7683 .BR SHELL ,
7685 .BR ENV ,
7687 .BR FPATH ,
7690 .BR PATH\*S,
7692 specifying path or
7693 command names containing
7694 .BR / ,
7696 redirecting output
7697 .RB ( > ,
7698 .BR >| ,
7699 .BR <> ,
7701 .BR >> ).
7703 adding or deleting built-in commands.
7705 using
7706 .B "command -p"
7707 to invoke a command.
7711 The restrictions above are enforced
7712 after \f3.profile\fP and the
7714 .B ENV
7715 files are interpreted.
7717 When a command to be executed is found to be a shell procedure,
7718 .if \nZ=0 \{.B rsh\^
7719 invokes
7720 .I sh\^\}
7721 .if \nZ=1 \{.B rksh\^
7722 invokes
7723 .I ksh\^\}
7724 .if \nZ=2 \{.B rksh93\^
7725 invokes
7726 .I ksh93\^\}
7727 to execute it.
7728 Thus, it is possible to provide to the end-user shell procedures
7729 that have access to the full power of
7730 the standard shell,
7731 while imposing a limited menu of commands;
7732 this scheme assumes that the end-user does not have write and
7733 execute permissions in the same directory.
7735 The net effect of these rules is that the writer of the
7736 .B .profile
7737 has complete control over user actions,
7738 by performing guaranteed setup actions
7739 and leaving the user in an appropriate directory
7740 (probably
7741 .I not\^
7742 the login directory).
7744 The system administrator often sets up a directory
7745 of commands
7746 (e.g.,
7747 .BR /usr/rbin )
7748 that can be safely invoked by
7749 .if \nZ=0 .BR rsh .
7750 .if \nZ=1 .BR rksh .
7751 .if \nZ=2 .BR rksh93 .
7752 .SH EXIT STATUS
7753 Errors detected by the shell, such as syntax errors,
7754 cause the shell
7755 to return a non-zero exit status.
7756 If the shell is being used non-interactively,
7757 then execution of the shell file is abandoned
7758 unless the error occurs inside a subshell in which case
7759 the subshell is abandoned.
7760 Otherwise, the shell returns the exit status of
7761 the last command executed (see also the
7762 .B exit
7763 command above).
7764 Run time errors detected by the shell are reported by
7765 printing the command or function name and the error condition.
7766 If the line number that the error occurred on is greater than one,
7767 then the line number is also printed in square brackets
7768 .RB ( "[]" )
7769 after the command or function name.
7770 .SH FILES
7772 .B /etc/profile
7773 The system wide initialization file, executed for login shells.
7774 .if \nZ=2 \{.br
7776 .B /etc/ksh.kshrc
7777 The system wide startup file, executed for interactive shells.
7780 .B \s-1$HOME\s+1/\f3.\fPprofile
7781 The personal initialization file, executed for login shells after /etc/profile.
7783 \s-1$HOME\s+1/\f3.\fP.kshrc
7784 Default personal initialization file, executed for interactive shells when
7786 .B ENV
7787 is not set.
7789 .B /etc/suid_profile
7790 Alternative initialization file, executed when instead of personal initialization file when the real and effective user or group id do not match.
7792 .B /dev/null
7793 NULL device
7794 .SH SEE ALSO
7795 cat(1),
7796 cd(1),
7797 chmod(1),
7798 cut(1),
7799 egrep(1),
7800 echo(1),
7801 emacs(1),
7802 env(1),
7803 fgrep(1),
7804 gmacs(1),
7805 grep(1),
7806 newgrp(1),
7807 pfexec(1),
7808 stty(1),
7809 test(1),
7810 umask(1),
7811 vi(1),
7812 dup(2),
7813 exec(2),
7814 fork(2),
7815 getpwnam(3),
7816 ioctl(2),
7817 lseek(2),
7818 paste(1),
7819 pathconf(2),
7820 pipe(2),
7821 sysconf(2),
7822 umask(2),
7823 ulimit(2),
7824 wait(2),
7825 rand(3),
7826 a.out(5),
7827 profile(5),
7828 environ(7).
7830 Morris I. Bolsky and David G. Korn,
7831 .IR "The New KornShell Command and Programming Language" ,
7832 Prentice Hall, 1995.
7834 .I "POSIX \- Part 2: Shell and Utilities,"
7835 IEEE Std 1003.2-1992, ISO/IEC 9945-2, IEEE, 1993.
7836 .SH CAVEATS
7838 If a command
7839 is executed, and then a command with the same name is
7840 installed in a directory in the search path before the directory where the
7841 original command was found, the shell will continue to
7842 .I exec\^
7843 the original command.
7844 Use the
7845 .B \-t
7846 option of the
7847 .B alias\^
7848 command to correct this situation.
7850 Some very old shell scripts contain a
7851 .B ^
7852 as a synonym for the pipe character
7853 .BR \(bv .
7855 Using the
7856 .B hist\^
7857 built-in command within a compound command will cause the whole
7858 command to disappear from the history file.
7860 The built-in command \f3\|.\fP \f2file\^\fP
7861 reads the whole file before any commands are executed.
7862 Therefore,
7863 .B alias
7865 .B unalias
7866 commands in the file
7867 will not apply to any commands defined in the file.
7869 Traps are not processed while a job is waiting for a foreground process.
7870 Thus, a trap on
7871 .B CHLD
7872 won't be executed until the foreground job terminates.
7874 It is a good idea to leave a space after the comma operator in
7875 arithmetic expressions to prevent the comma from being interpreted
7876 as the decimal point character in certain locales.