sync
[bitrig.git] / bin / ksh / sh.1
blobe6219bbf1a2c56696d5fa06971c4dadb59f78a31
1 .\"     $OpenBSD: sh.1,v 1.94 2013/06/13 19:43:09 millert Exp $
2 .\"
3 .\"     Public Domain
4 .\"
5 .Dd $Mdocdate: June 13 2013 $
6 .Dt SH 1
7 .Os
8 .Sh NAME
9 .Nm sh
10 .Nd public domain Bourne shell
11 .Sh SYNOPSIS
12 .Nm sh
13 .Bk -words
14 .Op Fl +abCefhiklmnpruvXx
15 .Op Fl +o Ar option
16 .Op Fl c Ar string \*(Ba Fl s \*(Ba Ar file Op Ar argument ...
17 .Ek
18 .Sh DESCRIPTION
19 .Nm
20 is a reimplementation of the Bourne shell, a command interpreter for both
21 interactive and script use.
22 .Pp
23 The options are as follows:
24 .Bl -tag -width Ds
25 .It Fl c Ar string
26 .Nm
27 will execute the command(s) contained in
28 .Ar string .
29 .It Fl i
30 Interactive shell.
31 A shell is
32 .Dq interactive
33 if this
34 option is used or if both standard input and standard error are attached
35 to a
36 .Xr tty 4 .
37 An interactive shell has job control enabled, ignores the
38 .Dv SIGINT ,
39 .Dv SIGQUIT ,
40 and
41 .Dv SIGTERM
42 signals, and prints prompts before reading input (see the
43 .Ev PS1
44 and
45 .Ev PS2
46 parameters).
47 For non-interactive shells, the
48 .Ic trackall
49 option is on by default (see the
50 .Ic set
51 command below).
52 .It Fl l
53 Login shell.
54 If the basename the shell is called with (i.e. argv[0])
55 starts with
56 .Ql -
57 or if this option is used,
58 the shell is assumed to be a login shell and the shell reads and executes
59 the contents of
60 .Pa /etc/profile
61 and
62 .Pa $HOME/.profile
63 if they exist and are readable.
64 .It Fl p
65 Privileged shell.
66 A shell is
67 .Dq privileged
68 if this option is used
69 or if the real user ID or group ID does not match the
70 effective user ID or group ID (see
71 .Xr getuid 2
72 and
73 .Xr getgid 2 ) .
74 A privileged shell does not process
75 .Pa $HOME/.profile
76 nor the
77 .Ev ENV
78 parameter (see below).
79 Instead, the file
80 .Pa /etc/suid_profile
81 is processed.
82 Clearing the privileged option causes the shell to set
83 its effective user ID (group ID) to its real user ID (group ID).
84 .It Fl r
85 Restricted shell.
86 A shell is
87 .Dq restricted
88 if this
89 option is used;
90 if the basename the shell was invoked with was
91 .Dq rsh ;
92 or if the
93 .Ev SHELL
94 parameter is set to
95 .Dq rsh .
96 The following restrictions come into effect after the shell processes any
97 profile and
98 .Ev ENV
99 files:
101 .Bl -bullet -compact
104 .Ic cd
105 command is disabled.
108 .Ev SHELL ,
109 .Ev ENV ,
111 .Ev PATH
112 parameters cannot be changed.
114 Command names can't be specified with absolute or relative paths.
117 .Fl p
118 option of the built-in command
119 .Ic command
120 can't be used.
122 Redirections that create files can't be used (i.e.\&
123 .Ql \*(Gt ,
124 .Ql \*(Gt\*(Ba ,
125 .Ql \*(Gt\*(Gt ,
126 .Ql \*(Lt\*(Gt ) .
128 .It Fl s
129 The shell reads commands from standard input; all non-option arguments
130 are positional parameters.
133 In addition to the above, the options described in the
134 .Ic set
135 built-in command can also be used on the command line:
136 both
137 .Op Fl +abCefhkmnuvXx
139 .Op Fl +o Ar option
140 can be used for single letter or long options, respectively.
142 If neither the
143 .Fl c
144 nor the
145 .Fl s
146 option is specified, the first non-option argument specifies the name
147 of a file the shell reads commands from.
148 If there are no non-option
149 arguments, the shell reads commands from the standard input.
150 The name of the shell (i.e. the contents of $0)
151 is determined as follows: if the
152 .Fl c
153 option is used and there is a non-option argument, it is used as the name;
154 if commands are being read from a file, the file is used as the name;
155 otherwise, the basename the shell was called with (i.e. argv[0]) is used.
157 If the
158 .Ev ENV
159 parameter is set when an interactive shell starts (or,
160 in the case of login shells,
161 after any profiles are processed), its value is subjected to parameter,
162 command, arithmetic, and tilde
163 .Pq Sq ~
164 substitution and the resulting file
165 (if any) is read and executed.
167 The exit status of the shell is 127 if the command file specified on the
168 command line could not be opened, or non-zero if a fatal syntax error
169 occurred during the execution of a script.
170 In the absence of fatal errors,
171 the exit status is that of the last command executed, or zero, if no
172 command is executed.
173 .Ss Command syntax
174 The shell begins parsing its input by breaking it into
175 .Em words .
176 Words, which are sequences of characters, are delimited by unquoted whitespace
177 characters (space, tab, and newline) or meta-characters
179 .Ql \*(Lt ,
180 .Ql \*(Gt ,
181 .Ql \*(Ba ,
182 .Ql \&; ,
183 .Ql \&( ,
184 .Ql \&) ,
186 .Ql &
187 .Pc .
188 Aside from delimiting words, spaces and tabs are ignored, while newlines
189 usually delimit commands.
190 The meta-characters are used in building the following
191 .Em tokens :
192 .Ql \*(Lt ,
193 .Ql \*(Lt& ,
194 .Ql \*(Lt\*(Lt ,
195 .Ql \*(Gt ,
196 .Ql \*(Gt& ,
197 .Ql \*(Gt\*(Gt ,
198 etc. are used to specify redirections (see
199 .Sx Input/output redirection
200 below);
201 .Ql \*(Ba
202 is used to create pipelines;
203 .Ql \&;
204 is used to separate commands;
205 .Ql &
206 is used to create asynchronous pipelines;
207 .Ql &&
209 .Ql ||
210 are used to specify conditional execution;
211 .Ql ;;
212 is used in
213 .Ic case
214 statements;
215 and lastly,
216 .Ql \&( .. )\&
217 is used to create subshells.
219 Whitespace and meta-characters can be quoted individually using a backslash
220 .Pq Sq \e ,
221 or in groups using double
222 .Pq Sq \&"
223 or single
224 .Pq Sq '
225 quotes.
226 Note that the following characters are also treated specially by the
227 shell and must be quoted if they are to represent themselves:
228 .Ql \e ,
229 .Ql \&" ,
230 .Ql ' ,
231 .Ql # ,
232 .Ql $ ,
233 .Ql ` ,
234 .Ql ~ ,
235 .Ql { ,
236 .Ql } ,
237 .Ql * ,
238 .Ql \&? ,
240 .Ql \&[ .
241 The first three of these are the above mentioned quoting characters (see
242 .Sx Quoting
243 below);
244 .Ql # ,
245 if used at the beginning of a word, introduces a comment \(em everything after
247 .Ql #
248 up to the nearest newline is ignored;
249 .Ql $
250 is used to introduce parameter, command, and arithmetic substitutions (see
251 .Sx Substitution
252 below);
253 .Ql `
254 introduces an old-style command substitution (see
255 .Sx Substitution
256 below);
257 .Ql ~
258 begins a directory expansion (see
259 .Sx Tilde expansion
260 below);
261 and finally,
262 .Ql * ,
263 .Ql \&? ,
265 .Ql \&[
266 are used in file name generation (see
267 .Sx File name patterns
268 below).
270 As words and tokens are parsed, the shell builds commands, of which there
271 are two basic types:
272 .Em simple-commands ,
273 typically programs that are executed, and
274 .Em compound-commands ,
275 such as
276 .Ic for
278 .Ic if
279 statements, grouping constructs, and function definitions.
281 A simple-command consists of some combination of parameter assignments
282 (see
283 .Sx Parameters
284 below),
285 input/output redirections (see
286 .Sx Input/output redirections
287 below),
288 and command words; the only restriction is that parameter assignments come
289 before any command words.
290 The command words, if any, define the command
291 that is to be executed and its arguments.
292 The command may be a shell built-in command, a function,
293 or an external command
294 (i.e. a separate executable file that is located using the
295 .Ev PATH
296 parameter; see
297 .Sx Command execution
298 below).
299 Note that all command constructs have an exit status: for external commands,
300 this is related to the status returned by
301 .Xr wait 2
302 (if the command could not be found, the exit status is 127; if it could not
303 be executed, the exit status is 126); the exit status of other command
304 constructs (built-in commands, functions, compound-commands, pipelines, lists,
305 etc.) are all well-defined and are described where the construct is
306 described.
307 The exit status of a command consisting only of parameter
308 assignments is that of the last command substitution performed during the
309 parameter assignment or 0 if there were no command substitutions.
311 Commands can be chained together using the
312 .Ql |
313 token to form pipelines, in which the standard output of each command but the
314 last is piped (see
315 .Xr pipe 2 )
316 to the standard input of the following command.
317 The exit status of a pipeline is that of its last command.
318 A pipeline may be prefixed by the
319 .Ql \&!
320 reserved word, which causes the exit status of the pipeline to be logically
321 complemented: if the original status was 0, the complemented status will be 1;
322 if the original status was not 0, the complemented status will be 0.
324 .Em Lists
325 of commands can be created by separating pipelines by any of the following
326 tokens:
327 .Ql && ,
328 .Ql || ,
329 .Ql & ,
330 .Ql |& ,
332 .Ql \&; .
333 The first two are for conditional execution:
334 .Dq Ar cmd1 No && Ar cmd2
335 executes
336 .Ar cmd2
337 only if the exit status of
338 .Ar cmd1
339 is zero;
340 .Ql ||
341 is the opposite \(em
342 .Ar cmd2
343 is executed only if the exit status of
344 .Ar cmd1
345 is non-zero.
346 .Ql &&
348 .Ql ||
349 have equal precedence which is higher than that of
350 .Ql & ,
351 .Ql |& ,
353 .Ql \&; ,
354 which also have equal precedence.
355 Note that the
356 .Ql &&
358 .Ql ||
359 operators are
360 .Qq left-associative .
361 For example, both of these commands will print only
362 .Qq bar :
363 .Bd -literal -offset indent
364 $ false && echo foo || echo bar
365 $ true || echo foo && echo bar
369 .Ql &
370 token causes the preceding command to be executed asynchronously; that is,
371 the shell starts the command but does not wait for it to complete (the shell
372 does keep track of the status of asynchronous commands; see
373 .Sx Job control
374 below).
375 When an asynchronous command is started when job control is disabled
376 (i.e. in most scripts), the command is started with signals
377 .Dv SIGINT
379 .Dv SIGQUIT
380 ignored and with input redirected from
381 .Pa /dev/null
382 (however, redirections specified in the asynchronous command have precedence).
383 Note that a command must follow the
384 .Ql &&
386 .Ql ||
387 operators, while it need not follow
388 .Ql & ,
389 .Ql |& ,
391 .Ql \&; .
392 The exit status of a list is that of the last command executed, with the
393 exception of asynchronous lists, for which the exit status is 0.
395 Compound commands are created using the following reserved words.
396 These words
397 are only recognized if they are unquoted and if they are used as the first
398 word of a command (i.e. they can't be preceded by parameter assignments or
399 redirections):
400 .Bd -literal -offset indent
401 case   esac       in       while   ]]
402 do     fi         name     !       {
403 done   for        select   (       }
404 elif   function   then     )
405 else   if         until    [[
408 .Sy Note :
409 Some shells (but not this one) execute control structure commands in a
410 subshell when one or more of their file descriptors are redirected, so any
411 environment changes inside them may fail.
412 To be portable, the
413 .Ic exec
414 statement should be used instead to redirect file descriptors before the
415 control structure.
417 In the following compound command descriptions, command lists (denoted as
418 .Em list )
419 that are followed by reserved words must end with a semicolon, a newline, or
420 a (syntactically correct) reserved word.
421 For example, the following are all valid:
422 .Bd -literal -offset indent
423 $ { echo foo; echo bar; }
424 $ { echo foo; echo bar\*(Ltnewline\*(Gt }
425 $ { { echo foo; echo bar; } }
428 This is not valid:
430 .Dl $ { echo foo; echo bar }
431 .Bl -tag -width Ds
432 .It Pq Ar list
433 Execute
434 .Ar list
435 in a subshell.
436 There is no implicit way to pass environment changes from a
437 subshell back to its parent.
438 .It { Ar list ; No }
439 Compound construct;
440 .Ar list
441 is executed, but not in a subshell.
442 Note that
443 .Ql {
445 .Ql }
446 are reserved words, not meta-characters.
447 .It Xo case Ar word No in
448 .Oo Op \&(
449 .Ar \ pattern
450 .Op \*(Ba Ar pattern
451 .No ... No )
452 .Ar list No ;;\ \& Oc ... esac
455 .Ic case
456 statement attempts to match
457 .Ar word
458 against a specified
459 .Ar pattern ;
461 .Ar list
462 associated with the first successfully matched pattern is executed.
463 Patterns used in
464 .Ic case
465 statements are the same as those used for file name patterns except that the
466 restrictions regarding
467 .Ql \&.
469 .Ql /
470 are dropped.
471 Note that any unquoted space before and after a pattern is
472 stripped; any space within a pattern must be quoted.
473 Both the word and the
474 patterns are subject to parameter, command, and arithmetic substitution, as
475 well as tilde substitution.
476 For historical reasons, open and close braces may be used instead of
477 .Ic in
479 .Ic esac
480 e.g.\&
481 .Ic case $foo { *) echo bar; } .
482 The exit status of a
483 .Ic case
484 statement is that of the executed
485 .Ar list ;
486 if no
487 .Ar list
488 is executed, the exit status is zero.
489 .It Xo for Ar name
490 .Oo in Ar word No ... Oc ;
491 .No do Ar list ; No done
493 For each
494 .Ar word
495 in the specified word list, the parameter
496 .Ar name
497 is set to the word and
498 .Ar list
499 is executed.
501 .Ic in
502 is not used to specify a word list, the positional parameters
503 ($1, $2, etc.)\&
504 are used instead.
505 For historical reasons, open and close braces may be used instead of
506 .Ic do
508 .Ic done
509 e.g.\&
510 .Ic for i; { echo $i; } .
511 The exit status of a
512 .Ic for
513 statement is the last exit status of
514 .Ar list ;
516 .Ar list
517 is never executed, the exit status is zero.
518 .It Xo if Ar list ;
519 .No then Ar list ;
520 .Oo elif Ar list ;
521 .No then Ar list ; Oc
522 .No ...
523 .Oo else Ar list ; Oc
524 .No fi
526 If the exit status of the first
527 .Ar list
528 is zero, the second
529 .Ar list
530 is executed; otherwise, the
531 .Ar list
532 following the
533 .Ic elif ,
534 if any, is executed with similar consequences.
535 If all the lists following the
536 .Ic if
538 .Ic elif Ns s
539 fail (i.e. exit with non-zero status), the
540 .Ar list
541 following the
542 .Ic else
543 is executed.
544 The exit status of an
545 .Ic if
546 statement is that of non-conditional
547 .Ar list
548 that is executed; if no non-conditional
549 .Ar list
550 is executed, the exit status is zero.
551 .It Xo select Ar name
552 .Oo in Ar word No ... Oc ;
553 .No do Ar list ; No done
556 .Ic select
557 statement provides an automatic method of presenting the user with a menu and
558 selecting from it.
559 An enumerated list of the specified
560 .Ar word Ns (s)
561 is printed on standard error, followed by a prompt
563 .Ev PS3: normally
564 .Sq #?\ \&
565 .Pc .
566 A number corresponding to one of the enumerated words is then read from
567 standard input,
568 .Ar name
569 is set to the selected word (or unset if the selection is not valid),
570 .Ev REPLY
571 is set to what was read (leading/trailing space is stripped), and
572 .Ar list
573 is executed.
574 If a blank line (i.e. zero or more
575 .Ev IFS
576 characters) is entered, the menu is reprinted without executing
577 .Ar list .
579 When
580 .Ar list
581 completes, the enumerated list is printed if
582 .Ev REPLY
584 .Dv NULL ,
585 the prompt is printed, and so on.
586 This process continues until an end-of-file
587 is read, an interrupt is received, or a
588 .Ic break
589 statement is executed inside the loop.
591 .Dq in word ...
592 is omitted, the positional parameters are used
593 (i.e. $1, $2, etc.).
594 For historical reasons, open and close braces may be used instead of
595 .Ic do
597 .Ic done
598 e.g.\&
599 .Ic select i; { echo $i; } .
600 The exit status of a
601 .Ic select
602 statement is zero if a
603 .Ic break
604 statement is used to exit the loop, non-zero otherwise.
605 .It Xo until Ar list ;
606 .No do Ar list ;
607 .No done
609 This works like
610 .Ic while ,
611 except that the body is executed only while the exit status of the first
612 .Ar list
613 is non-zero.
614 .It Xo while Ar list ;
615 .No do Ar list ;
616 .No done
619 .Ic while
620 is a pre-checked loop.
621 Its body is executed as often as the exit status of the first
622 .Ar list
623 is zero.
624 The exit status of a
625 .Ic while
626 statement is the last exit status of the
627 .Ar list
628 in the body of the loop; if the body is not executed, the exit status is zero.
629 .It Xo function Ar name
630 .No { Ar list ; No }
632 Defines the function
633 .Ar name
634 (see
635 .Sx Functions
636 below).
637 Note that redirections specified after a function definition are
638 performed whenever the function is executed, not when the function definition
639 is executed.
640 .It Ar name Ns () Ar command
641 Mostly the same as
642 .Ic function
643 (see
644 .Sx Functions
645 below).
646 .It Bq Bq Ar \ \&expression\ \&
647 Similar to the
648 .Ic test
650 .Ic \&[ ... \&]
651 commands (described later), with the following exceptions:
652 .Bl -bullet -offset indent
654 Field splitting and file name generation are not performed on arguments.
657 .Fl a
658 .Pq AND
660 .Fl o
661 .Pq OR
662 operators are replaced with
663 .Ql &&
665 .Ql || ,
666 respectively.
668 Operators (e.g.\&
669 .Sq Fl f ,
670 .Sq = ,
671 .Sq \&! )
672 must be unquoted.
674 The second operand of the
675 .Sq !=
677 .Sq =
678 expressions are patterns (e.g. the comparison
679 .Ic [[ foobar = f*r ]]
680 succeeds).
682 There are two additional binary operators,
683 .Ql \*(Lt
685 .Ql \*(Gt ,
686 which return true if their first string operand is less than, or greater than,
687 their second string operand, respectively.
689 The single argument form of
690 .Ic test ,
691 which tests if the argument has a non-zero length, is not valid; explicit
692 operators must always be used e.g. instead of
693 .No \&[ Ar str No \&]
695 .No \&[[ -n Ar str No \&]] .
697 Parameter, command, and arithmetic substitutions are performed as expressions
698 are evaluated and lazy expression evaluation is used for the
699 .Ql &&
701 .Ql ||
702 operators.
703 This means that in the following statement,
704 .Ic $(\*(Lt foo)
705 is evaluated if and only if the file
706 .Pa foo
707 exists and is readable:
708 .Bd -literal -offset indent
709 $ [[ -r foo && $(\*(Lt foo) = b*r ]]
713 .Ss Quoting
714 Quoting is used to prevent the shell from treating characters or words
715 specially.
716 There are three methods of quoting.
717 First,
718 .Ql \e
719 quotes the following character, unless it is at the end of a line, in which
720 case both the
721 .Ql \e
722 and the newline are stripped.
723 Second, a single quote
724 .Pq Sq '
725 quotes everything up to the next single quote (this may span lines).
726 Third, a double quote
727 .Pq Sq \&"
728 quotes all characters, except
729 .Ql $ ,
730 .Ql `
732 .Ql \e ,
733 up to the next unquoted double quote.
734 .Ql $
736 .Ql `
737 inside double quotes have their usual meaning (i.e. parameter, command, or
738 arithmetic substitution) except no field splitting is carried out on the
739 results of double-quoted substitutions.
740 If a
741 .Ql \e
742 inside a double-quoted string is followed by
743 .Ql \e ,
744 .Ql $ ,
745 .Ql ` ,
747 .Ql \&" ,
748 it is replaced by the second character; if it is followed by a newline, both
750 .Ql \e
751 and the newline are stripped; otherwise, both the
752 .Ql \e
753 and the character following are unchanged.
755 .Sy Note :
757 .Sx POSIX mode
758 below for a special rule regarding
759 differences in quoting when the shell is in POSIX mode.
760 .Ss Aliases
761 There are two types of aliases: normal command aliases and tracked aliases.
762 Command aliases are normally used as a short hand for a long or often used
763 command.
764 The shell expands command aliases (i.e. substitutes the alias name
765 for its value) when it reads the first word of a command.
766 An expanded alias is re-processed to check for more aliases.
767 If a command alias ends in a
768 space or tab, the following word is also checked for alias expansion.
769 The alias expansion process stops when a word that is not an alias is found,
770 when a quoted word is found, or when an alias word that is currently being
771 expanded is found.
773 The following command aliases are defined automatically by the shell:
774 .Bd -literal -offset indent
775 hash='alias -t'
776 type='whence -v'
779 Tracked aliases allow the shell to remember where it found a particular
780 command.
781 The first time the shell does a path search for a command that is
782 marked as a tracked alias, it saves the full path of the command.
783 The next
784 time the command is executed, the shell checks the saved path to see that it
785 is still valid, and if so, avoids repeating the path search.
786 Tracked aliases can be listed and created using
787 .Ic alias -t .
788 Note that changing the
789 .Ev PATH
790 parameter clears the saved paths for all tracked aliases.
791 If the
792 .Ic trackall
793 option is set (i.e.\&
794 .Ic set -o Ic trackall
796 .Ic set -h ) ,
797 the shell tracks all commands.
798 This option is set automatically for non-interactive shells.
799 For interactive shells, only the following commands are
800 automatically tracked:
801 .Xr cat 1 ,
802 .Xr cc 1 ,
803 .Xr chmod 1 ,
804 .Xr cp 1 ,
805 .Xr date 1 ,
806 .Xr ed 1 ,
807 .Xr emacs 1 ,
808 .Xr grep 1 ,
809 .Xr ls 1 ,
810 .Xr mail 1 ,
811 .Xr make 1 ,
812 .Xr mv 1 ,
813 .Xr pr 1 ,
814 .Xr rm 1 ,
815 .Xr sed 1 ,
816 .Xr vi 1 ,
818 .Xr who 1 .
819 .Ss Substitution
820 The first step the shell takes in executing a simple-command is to perform
821 substitutions on the words of the command.
822 There are three kinds of
823 substitution: parameter, command, and arithmetic.
824 Parameter substitutions,
825 which are described in detail in the next section, take the form
826 .Pf $ Ns Ar name
828 .Pf ${ Ns Ar ... Ns } ;
829 command substitutions take the form
830 .Pf $( Ns Ar command Ns \&)
832 .Pf ` Ns Ar command Ns ` ;
833 and arithmetic substitutions take the form
834 .Pf $(( Ns Ar expression Ns )) .
836 If a substitution appears outside of double quotes, the results of the
837 substitution are generally subject to word or field splitting according to
838 the current value of the
839 .Ev IFS
840 parameter.
842 .Ev IFS
843 parameter specifies a list of characters which are used to break a string up
844 into several words; any characters from the set space, tab, and newline that
845 appear in the
846 .Ev IFS
847 characters are called
848 .Dq IFS whitespace .
849 Sequences of one or more
850 .Ev IFS
851 whitespace characters, in combination with zero or one
852 .Pf non- Ev IFS
853 whitespace
854 characters, delimit a field.
855 As a special case, leading and trailing
856 .Ev IFS
857 whitespace is stripped (i.e. no leading or trailing empty field is created by
858 it); leading
859 .Pf non- Ev IFS
860 whitespace does create an empty field.
862 Example: If
863 .Ev IFS
864 is set to
865 .Dq \*(Ltspace\*(Gt: ,
866 and VAR is set to
867 .Dq \*(Ltspace\*(GtA\*(Ltspace\*(Gt:\*(Ltspace\*(Gt\*(Ltspace\*(GtB::D ,
868 the substitution for $VAR results in four fields:
869 .Sq A ,
870 .Sq B ,
872 (an empty field),
874 .Sq D .
875 Note that if the
876 .Ev IFS
877 parameter is set to the
878 .Dv NULL
879 string, no field splitting is done; if the parameter is unset, the default
880 value of space, tab, and newline is used.
882 Also, note that the field splitting applies only to the immediate result of
883 the substitution.
884 Using the previous example, the substitution for $VAR:E
885 results in the fields:
886 .Sq A ,
887 .Sq B ,
888 .Sq ,
890 .Sq D:E ,
892 .Sq A ,
893 .Sq B ,
894 .Sq ,
895 .Sq D ,
897 .Sq E .
898 This behavior is POSIX compliant, but incompatible with some other shell
899 implementations which do field splitting on the word which contained the
900 substitution or use
901 .Dv IFS
902 as a general whitespace delimiter.
904 The results of substitution are, unless otherwise specified, also subject to
905 file name expansion (see the relevant section below).
907 A command substitution is replaced by the output generated by the specified
908 command, which is run in a subshell.
910 .Pf $( Ns Ar command Ns \&)
911 substitutions, normal quoting rules are used when
912 .Ar command
913 is parsed; however, for the
914 .Pf ` Ns Ar command Ns `
915 form, a
916 .Ql \e
917 followed by any of
918 .Ql $ ,
919 .Ql ` ,
921 .Ql \e
922 is stripped (a
923 .Ql \e
924 followed by any other character is unchanged).
925 As a special case in command substitutions, a command of the form
926 .Pf \*(Lt Ar file
927 is interpreted to mean substitute the contents of
928 .Ar file .
929 Note that
930 .Ic $(\*(Lt foo)
931 has the same effect as
932 .Ic $(cat foo) ,
933 but it is carried out more efficiently because no process is started.
935 .Sy Note :
936 .Pf $( Ns Ar command Ns \&)
937 expressions are currently parsed by finding the matching parenthesis,
938 regardless of quoting.
939 This should be fixed soon.
941 Arithmetic substitutions are replaced by the value of the specified expression.
942 For example, the command
943 .Ic echo $((2+3*4))
944 prints 14.
946 .Sx Arithmetic expressions
947 for a description of an expression.
948 .Ss Parameters
949 Parameters are shell variables; they can be assigned values and their values
950 can be accessed using a parameter substitution.
951 A parameter name is either one
952 of the special single punctuation or digit character parameters described
953 below, or a letter followed by zero or more letters or digits
955 .Ql _
956 counts as a letter
957 .Pc .
958 Parameter substitutions take the form
959 .Pf $ Ns Ar name ,
960 .Pf ${ Ns Ar name Ns } ,
962 .Sm off
963 .Pf ${ Ar name Oo Ar expr Oc }
964 .Sm on
965 where
966 .Ar name
967 is a parameter name.
968 If substitution is performed on a parameter
969 that is not set, a null string is substituted unless the
970 .Ic nounset
971 option
973 .Ic set Fl o Ic nounset
975 .Ic set Fl u
977 is set, in which case an error occurs.
979 Parameters can be assigned values in a number of ways.
980 First, the shell implicitly sets some parameters like
981 .Ql # ,
982 .Ql PWD ,
984 .Ql $ ;
985 this is the only way the special single character parameters are set.
986 Second, parameters are imported from the shell's environment at startup.
987 Third, parameters can be assigned values on the command line: for example,
988 .Ic FOO=bar
989 sets the parameter
990 .Dq FOO
992 .Dq bar ;
993 multiple parameter assignments can be given on a single command line and they
994 can be followed by a simple-command, in which case the assignments are in
995 effect only for the duration of the command (such assignments are also
996 exported; see below for the implications of this).
997 Note that both the parameter name and the
998 .Ql =
999 must be unquoted for the shell to recognize a parameter assignment.
1000 The fourth way of setting a parameter is with the
1001 .Ic export ,
1002 .Ic readonly ,
1004 .Ic typeset
1005 commands; see their descriptions in the
1006 .Sx Command execution
1007 section.
1008 Fifth,
1009 .Ic for
1010 loops set parameters as well as the
1011 .Ic getopts ,
1012 .Ic read ,
1014 .Ic set -A
1015 commands.
1016 Lastly, parameters can be assigned values using assignment operators
1017 inside arithmetic expressions (see
1018 .Sx Arithmetic expressions
1019 below) or using the
1020 .Sm off
1021 .Pf ${ Ar name No = Ar value No }
1022 .Sm on
1023 form of the parameter substitution (see below).
1025 Parameters with the export attribute (set using the
1026 .Ic export
1028 .Ic typeset Fl x
1029 commands, or by parameter assignments followed by simple commands) are put in
1030 the environment (see
1031 .Xr environ 7 )
1032 of commands run by the shell as
1033 .Ar name Ns = Ns Ar value
1034 pairs.
1035 The order in which parameters appear in the environment of a command is
1036 unspecified.
1037 When the shell starts up, it extracts parameters and their values
1038 from its environment and automatically sets the export attribute for those
1039 parameters.
1041 Modifiers can be applied to the
1042 .Pf ${ Ns Ar name Ns }
1043 form of parameter substitution:
1044 .Bl -tag -width Ds
1045 .Sm off
1046 .It ${ Ar name No :- Ar word No }
1047 .Sm on
1049 .Ar name
1050 is set and not
1051 .Dv NULL ,
1052 it is substituted; otherwise,
1053 .Ar word
1054 is substituted.
1055 .Sm off
1056 .It ${ Ar name No :+ Ar word No }
1057 .Sm on
1059 .Ar name
1060 is set and not
1061 .Dv NULL ,
1062 .Ar word
1063 is substituted; otherwise, nothing is substituted.
1064 .Sm off
1065 .It ${ Ar name No := Ar word No }
1066 .Sm on
1068 .Ar name
1069 is set and not
1070 .Dv NULL ,
1071 it is substituted; otherwise, it is assigned
1072 .Ar word
1073 and the resulting value of
1074 .Ar name
1075 is substituted.
1076 .Sm off
1077 .It ${ Ar name No :? Ar word No }
1078 .Sm on
1080 .Ar name
1081 is set and not
1082 .Dv NULL ,
1083 it is substituted; otherwise,
1084 .Ar word
1085 is printed on standard error (preceded by
1086 .Ar name : )
1087 and an error occurs (normally causing termination of a shell script, function,
1088 or script sourced using the
1089 .Sq \&.
1090 built-in).
1092 .Ar word
1093 is omitted, the string
1094 .Dq parameter null or not set
1095 is used instead.
1098 In the above modifiers, the
1099 .Ql \&:
1100 can be omitted, in which case the conditions only depend on
1101 .Ar name
1102 being set (as opposed to set and not
1103 .Dv NULL ) .
1105 .Ar word
1106 is needed, parameter, command, arithmetic, and tilde substitution are performed
1107 on it; if
1108 .Ar word
1109 is not needed, it is not evaluated.
1111 The following forms of parameter substitution can also be used:
1113 .Bl -tag -width Ds -compact
1114 .It Pf ${# Ns Ar name Ns \&}
1115 The number of positional parameters if
1116 .Ar name
1118 .Ql * ,
1119 .Ql @ ,
1120 or not specified; otherwise the length of the string value of parameter
1121 .Ar name .
1123 .It Pf ${# Ns Ar name Ns [*]}
1124 .It Pf ${# Ns Ar name Ns [@]}
1125 The number of elements in the array
1126 .Ar name .
1128 .Sm off
1129 .It Xo
1130 .Pf ${ Ar name
1131 .Pf # Ar pattern No }
1133 .It Xo
1134 .Pf ${ Ar name
1135 .Pf ## Ar pattern No }
1137 .Sm on
1139 .Ar pattern
1140 matches the beginning of the value of parameter
1141 .Ar name ,
1142 the matched text is deleted from the result of substitution.
1143 A single
1144 .Ql #
1145 results in the shortest match, and two
1146 of them result in the longest match.
1148 .Sm off
1149 .It Xo
1150 .Pf ${ Ar name
1151 .Pf % Ar pattern No }
1153 .It Xo
1154 .Pf ${ Ar name
1155 .Pf %% Ar pattern No }
1157 .Sm on
1158 Like ${..#..} substitution, but it deletes from the end of the value.
1161 The following special parameters are implicitly set by the shell and cannot be
1162 set directly using assignments:
1163 .Bl -tag -width "1 ... 9"
1164 .It Ev \&!
1165 Process ID of the last background process started.
1166 If no background processes have been started, the parameter is not set.
1167 .It Ev \&#
1168 The number of positional parameters ($1, $2, etc.).
1169 .It Ev \&$
1170 The PID of the shell, or the PID of the original shell if it is a subshell.
1172 .Em NOT
1173 use this mechanism for generating temporary file names; see
1174 .Xr mktemp 1
1175 instead.
1176 .It Ev -
1177 The concatenation of the current single letter options (see the
1178 .Ic set
1179 command below for a list of options).
1180 .It Ev \&?
1181 The exit status of the last non-asynchronous command executed.
1182 If the last command was killed by a signal,
1183 .Ic $?\&
1184 is set to 128 plus the signal number.
1185 .It Ev 0
1186 The name of the shell, determined as follows:
1187 the first argument to
1189 if it was invoked with the
1190 .Fl c
1191 option and arguments were given; otherwise the
1192 .Ar file
1193 argument, if it was supplied;
1194 or else the basename the shell was invoked with (i.e.\&
1195 .Li argv[0] ) .
1196 .Ev $0
1197 is also set to the name of the current script or
1198 the name of the current function, if it was defined with the
1199 .Ic function
1200 keyword (i.e. a Korn shell style function).
1201 .It Ev 1 No ... Ev 9
1202 The first nine positional parameters that were supplied to the shell, function,
1203 or script sourced using the
1204 .Sq \&.
1205 built-in.
1206 Further positional parameters may be accessed using
1207 .Pf ${ Ar number Ns } .
1208 .It Ev *
1209 All positional parameters (except parameter 0) i.e. $1, $2, $3, ...
1210 If used
1211 outside of double quotes, parameters are separate words (which are subjected
1212 to word splitting); if used within double quotes, parameters are separated
1213 by the first character of the
1214 .Ev IFS
1215 parameter (or the empty string if
1216 .Ev IFS
1218 .Dv NULL ) .
1219 .It Ev @
1220 Same as
1221 .Ic $* ,
1222 unless it is used inside double quotes, in which case a separate word is
1223 generated for each positional parameter.
1224 If there are no positional parameters, no word is generated.
1225 .Ic $@
1226 can be used to access arguments, verbatim, without losing
1227 .Dv NULL
1228 arguments or splitting arguments with spaces.
1231 The following parameters are set and/or used by the shell:
1232 .Bl -tag -width "EXECSHELL"
1233 .It Ev CDPATH
1234 Search path for the
1235 .Ic cd
1236 built-in command.
1237 It works the same way as
1238 .Ev PATH
1239 for those directories not beginning with
1240 .Ql /
1242 .Ic cd
1243 commands.
1244 Note that if
1245 .Ev CDPATH
1246 is set and does not contain
1247 .Sq \&.
1248 or contains an empty path, the current directory is not searched.
1249 Also, the
1250 .Ic cd
1251 built-in command will display the resulting directory when a match is found
1252 in any search path other than the empty path.
1253 .It Ev COLUMNS
1254 Set to the number of columns on the terminal or window.
1255 Currently set to the
1256 .Dq cols
1257 value as reported by
1258 .Xr stty 1
1259 if that value is non-zero.
1260 This parameter is used by the
1261 .Ic set -o
1263 .Ic kill -l
1264 commands to format information columns.
1265 .It Ev ENV
1266 If this parameter is found to be set after any profile files are executed, the
1267 expanded value is used as a shell startup file.
1268 It typically contains function and alias definitions.
1269 .It Ev ERRNO
1270 Integer value of the shell's
1271 .Va errno
1272 variable.
1273 It indicates the reason the last system call failed.
1274 Not yet implemented.
1275 .It Ev EXECSHELL
1276 If set, this parameter is assumed to contain the shell that is to be used to
1277 execute commands that
1278 .Xr execve 2
1279 fails to execute and which do not start with a
1280 .Dq #! Ns Ar shell
1281 sequence.
1282 .It Ev FCEDIT
1283 The editor used by the
1284 .Ic fc
1285 command (see below).
1286 .It Ev FPATH
1287 Like
1288 .Ev PATH ,
1289 but used when an undefined function is executed to locate the file defining the
1290 function.
1291 It is also searched when a command can't be found using
1292 .Ev PATH .
1294 .Sx Functions
1295 below for more information.
1296 .It Ev HOME
1297 The default directory for the
1298 .Ic cd
1299 command and the value substituted for an unqualified
1300 .Ic ~
1301 (see
1302 .Sx Tilde expansion
1303 below).
1304 .It Ev IFS
1305 Internal field separator, used during substitution and by the
1306 .Ic read
1307 command, to split values into distinct arguments; normally set to space, tab,
1308 and newline.
1310 .Sx Substitution
1311 above for details.
1313 .Sy Note :
1314 This parameter is not imported from the environment when the shell is
1315 started.
1316 .It Ev SH_VERSION
1317 The version of shell and the date the version was created (read-only).
1318 .It Ev LINENO
1319 The line number of the function or shell script that is currently being
1320 executed.
1321 .It Ev LINES
1322 Set to the number of lines on the terminal or window.
1323 .It Ev OLDPWD
1324 The previous working directory.
1325 Unset if
1326 .Ic cd
1327 has not successfully changed directories since the shell started, or if the
1328 shell doesn't know where it is.
1329 .It Ev OPTARG
1330 When using
1331 .Ic getopts ,
1332 it contains the argument for a parsed option, if it requires one.
1333 .It Ev OPTIND
1334 The index of the next argument to be processed when using
1335 .Ic getopts .
1336 Assigning 1 to this parameter causes
1337 .Ic getopts
1338 to process arguments from the beginning the next time it is invoked.
1339 .It Ev PATH
1340 A colon separated list of directories that are searched when looking for
1341 commands and files sourced using the
1342 .Sq \&.
1343 command (see below).
1344 An empty string resulting from a leading or trailing
1345 colon, or two adjacent colons, is treated as a
1346 .Sq \&.
1347 (the current directory).
1348 .It Ev POSIXLY_CORRECT
1349 If set, this parameter causes the
1350 .Ic posix
1351 option to be enabled.
1353 .Sx POSIX mode
1354 below.
1355 .It Ev PPID
1356 The process ID of the shell's parent (read-only).
1357 .It Ev PS1
1358 The primary prompt for interactive shells.
1359 Parameter, command, and arithmetic
1360 substitutions are performed.
1361 .Ql \&!
1362 is replaced with the current command number (see the
1363 .Ic fc
1364 command below).
1365 A literal
1366 .Ql \&!
1367 can be put in the prompt by placing
1368 .Ql !!
1370 .Ev PS1 .
1371 The default is
1372 .Sq $\ \&
1373 for non-root users,
1374 .Sq #\ \&
1375 for root.
1376 .It Ev PS2
1377 Secondary prompt string, by default
1378 .Sq \*(Gt\ \& ,
1379 used when more input is needed to complete a command.
1380 .It Ev PS4
1381 Used to prefix commands that are printed during execution tracing (see the
1382 .Ic set Fl x
1383 command below).
1384 Parameter, command, and arithmetic substitutions are performed
1385 before it is printed.
1386 The default is
1387 .Sq +\ \& .
1388 .It Ev PWD
1389 The current working directory.
1390 May be unset or
1391 .Dv NULL
1392 if the shell doesn't know where it is.
1393 .It Ev REPLY
1394 Default parameter for the
1395 .Ic read
1396 command if no names are given.
1397 .It Ev TMPDIR
1398 The directory temporary shell files are created in.
1399 If this parameter is not
1400 set, or does not contain the absolute path of a writable directory, temporary
1401 files are created in
1402 .Pa /tmp .
1404 .Ss Tilde expansion
1405 Tilde expansion, which is done in parallel with parameter substitution, is done
1406 on words starting with an unquoted
1407 .Ql ~ .
1408 The characters following the tilde, up to the first
1409 .Ql / ,
1410 if any, are assumed to be a login name.
1411 If the login name is empty,
1412 .Ql + ,
1414 .Ql - ,
1415 the value of the
1416 .Ev HOME ,
1417 .Ev PWD ,
1419 .Ev OLDPWD
1420 parameter is substituted, respectively.
1421 Otherwise, the password file is
1422 searched for the login name, and the tilde expression is substituted with the
1423 user's home directory.
1424 If the login name is not found in the password file or
1425 if any quoting or parameter substitution occurs in the login name, no
1426 substitution is performed.
1428 In parameter assignments
1429 (such as those preceding a simple-command or those occurring
1430 in the arguments of
1431 .Ic alias ,
1432 .Ic export ,
1433 .Ic readonly ,
1435 .Ic typeset ) ,
1436 tilde expansion is done after any assignment
1437 (i.e. after the equals sign)
1438 or after an unquoted colon
1439 .Pq Sq \&: ;
1440 login names are also delimited by colons.
1442 The home directory of previously expanded login names are cached and re-used.
1444 .Ic alias -d
1445 command may be used to list, change, and add to this cache (e.g.\&
1446 .Ic alias -d fac=/usr/local/facilities; cd ~fac/bin ) .
1447 .Ss File name patterns
1448 A file name pattern is a word containing one or more unquoted
1449 .Ql \&? ,
1450 .Ql * ,
1451 .Ql + ,
1452 .Ql @ ,
1454 .Ql \&!
1455 characters or
1456 .Dq [..]
1457 sequences.
1458 The shell replaces file
1459 name patterns with the sorted names of all the files that match the pattern
1460 (if no files match, the word is left unchanged).
1461 The pattern elements have the following meaning:
1462 .Bl -tag -width Ds
1463 .It \&?
1464 Matches any single character.
1465 .It \&*
1466 Matches any sequence of characters.
1467 .It [..]
1468 Matches any of the characters inside the brackets.
1469 Ranges of characters can be
1470 specified by separating two characters by a
1471 .Ql -
1472 (e.g.\&
1473 .Dq [a0-9]
1474 matches the letter
1475 .Sq a
1476 or any digit).
1477 In order to represent itself, a
1478 .Ql -
1479 must either be quoted or the first or last character in the character list.
1480 Similarly, a
1481 .Ql \&]
1482 must be quoted or the first character in the list if it is to represent itself
1483 instead of the end of the list.
1484 Also, a
1485 .Ql \&!
1486 appearing at the start of the list has special meaning (see below), so to
1487 represent itself it must be quoted or appear later in the list.
1489 Within a bracket expression, the name of a
1490 .Em character class
1491 enclosed in
1492 .Sq [:
1494 .Sq :]
1495 stands for the list of all characters belonging to that class.
1496 Supported character classes:
1497 .Bl -column "xdigit" "xdigit" "xdigit" -offset indent
1498 .It Li "alnum" Ta "cntrl" Ta "lower" Ta "space"
1499 .It Li "alpha" Ta "digit" Ta "print" Ta "upper"
1500 .It Li "blank" Ta "graph" Ta "punct" Ta "xdigit"
1503 These match characters using the macros specified in
1504 .Xr ctype 3 .
1505 A character class may not be used as an endpoint of a range.
1506 .It [!..]
1507 Like [..],
1508 except it matches any character not inside the brackets.
1509 .Sm off
1510 .It *( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
1511 .Sm on
1512 Matches any string of characters that matches zero or more occurrences of the
1513 specified patterns.
1514 Example: The pattern
1515 .Ic *(foo|bar)
1516 matches the strings
1517 .Dq ,
1518 .Dq foo ,
1519 .Dq bar ,
1520 .Dq foobarfoo ,
1521 etc.
1522 .Sm off
1523 .It +( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
1524 .Sm on
1525 Matches any string of characters that matches one or more occurrences of the
1526 specified patterns.
1527 Example: The pattern
1528 .Ic +(foo|bar)
1529 matches the strings
1530 .Dq foo ,
1531 .Dq bar ,
1532 .Dq foobar ,
1533 etc.
1534 .Sm off
1535 .It ?( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
1536 .Sm on
1537 Matches the empty string or a string that matches one of the specified
1538 patterns.
1539 Example: The pattern
1540 .Ic ?(foo|bar)
1541 only matches the strings
1542 .Dq ,
1543 .Dq foo ,
1545 .Dq bar .
1546 .Sm off
1547 .It @( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
1548 .Sm on
1549 Matches a string that matches one of the specified patterns.
1550 Example: The pattern
1551 .Ic @(foo|bar)
1552 only matches the strings
1553 .Dq foo
1555 .Dq bar .
1556 .Sm off
1557 .It !( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
1558 .Sm on
1559 Matches any string that does not match one of the specified patterns.
1560 Examples: The pattern
1561 .Ic !(foo|bar)
1562 matches all strings except
1563 .Dq foo
1565 .Dq bar ;
1566 the pattern
1567 .Ic !(*)
1568 matches no strings; the pattern
1569 .Ic !(?)*\&
1570 matches all strings (think about it).
1573 Note that
1574 .Nm pdksh
1575 currently never matches
1576 .Sq \&.
1578 .Sq .. ,
1579 but the original
1580 .Nm ksh ,
1581 Bourne
1582 .Nm sh ,
1583 and bash do, so this may have to change (too bad).
1585 Note that none of the above pattern elements match either a period
1586 .Pq Sq \&.
1587 at the start of a file name or a slash
1588 .Pq Sq / ,
1589 even if they are explicitly used in a [..] sequence; also, the names
1590 .Sq \&.
1592 .Sq ..
1593 are never matched, even by the pattern
1594 .Sq .* .
1596 If the
1597 .Ic markdirs
1598 option is set, any directories that result from file name generation are marked
1599 with a trailing
1600 .Ql / .
1601 .Ss Input/output redirection
1602 When a command is executed, its standard input, standard output, and standard
1603 error (file descriptors 0, 1, and 2, respectively) are normally inherited from
1604 the shell.
1605 Three exceptions to this are commands in pipelines, for which
1606 standard input and/or standard output are those set up by the pipeline,
1607 asynchronous commands created when job control is disabled, for which standard
1608 input is initially set to be from
1609 .Pa /dev/null ,
1610 and commands for which any of the following redirections have been specified:
1611 .Bl -tag -width Ds
1612 .It \*(Gt Ar file
1613 Standard output is redirected to
1614 .Ar file .
1616 .Ar file
1617 does not exist, it is created; if it does exist, is a regular file, and the
1618 .Ic noclobber
1619 option is set, an error occurs; otherwise, the file is truncated.
1620 Note that this means the command
1621 .Ic cmd \*(Lt foo \*(Gt foo
1622 will open
1623 .Ar foo
1624 for reading and then truncate it when it opens it for writing, before
1625 .Ar cmd
1626 gets a chance to actually read
1627 .Ar foo .
1628 .It \*(Gt\*(Ba Ar file
1629 Same as
1630 .Ic \*(Gt ,
1631 except the file is truncated, even if the
1632 .Ic noclobber
1633 option is set.
1634 .It \*(Gt\*(Gt Ar file
1635 Same as
1636 .Ic \*(Gt ,
1637 except if
1638 .Ar file
1639 exists it is appended to instead of being truncated.
1640 Also, the file is opened
1641 in append mode, so writes always go to the end of the file (see
1642 .Xr open 2 ) .
1643 .It \*(Lt Ar file
1644 Standard input is redirected from
1645 .Ar file ,
1646 which is opened for reading.
1647 .It \*(Lt\*(Gt Ar file
1648 Same as
1649 .Ic \*(Lt ,
1650 except the file is opened for reading and writing.
1651 .It \*(Lt\*(Lt Ar marker
1652 After reading the command line containing this kind of redirection (called a
1653 .Dq here document ) ,
1654 the shell copies lines from the command source into a temporary file until a
1655 line matching
1656 .Ar marker
1657 is read.
1658 When the command is executed, standard input is redirected from the
1659 temporary file.
1661 .Ar marker
1662 contains no quoted characters, the contents of the temporary file are processed
1663 as if enclosed in double quotes each time the command is executed, so
1664 parameter, command, and arithmetic substitutions are performed, along with
1665 backslash
1666 .Pq Sq \e
1667 escapes for
1668 .Ql $ ,
1669 .Ql ` ,
1670 .Ql \e ,
1672 .Ql \enewline .
1673 If multiple here documents are used on the same command line, they are saved in
1674 order.
1675 .It \*(Lt\*(Lt- Ar marker
1676 Same as
1677 .Ic \*(Lt\*(Lt ,
1678 except leading tabs are stripped from lines in the here document.
1679 .It \*(Lt& Ar fd
1680 Standard input is duplicated from file descriptor
1681 .Ar fd .
1682 .Ar fd
1683 can be a single digit, indicating the number of an existing file descriptor;
1684 the letter
1685 .Ql p ,
1686 indicating the file descriptor associated with the output of the current
1687 co-process; or the character
1688 .Ql - ,
1689 indicating standard input is to be closed.
1690 .It \*(Gt& Ar fd
1691 Same as
1692 .Ic \*(Lt& ,
1693 except the operation is done on standard output.
1696 In any of the above redirections, the file descriptor that is redirected
1697 (i.e. standard input or standard output)
1698 can be explicitly given by preceding the
1699 redirection with a single digit.
1700 Parameter, command, and arithmetic
1701 substitutions, tilde substitutions, and (if the shell is interactive)
1702 file name generation are all performed on the
1703 .Ar file ,
1704 .Ar marker ,
1706 .Ar fd
1707 arguments of redirections.
1708 Note, however, that the results of any file name
1709 generation are only used if a single file is matched; if multiple files match,
1710 the word with the expanded file name generation characters is used.
1711 Note
1712 that in restricted shells, redirections which can create files cannot be used.
1714 For simple-commands, redirections may appear anywhere in the command; for
1715 compound-commands
1717 .Ic if
1718 statements, etc.
1719 .Pc ,
1720 any redirections must appear at the end.
1721 Redirections are processed after
1722 pipelines are created and in the order they are given, so the following
1723 will print an error with a line number prepended to it:
1725 .D1 $ cat /foo/bar 2\*(Gt&1 \*(Gt /dev/null \*(Ba cat -n
1726 .Ss Arithmetic expressions
1727 Integer arithmetic expressions can be used with the
1728 .Ic let
1729 command, inside $((..)) expressions, inside array references (e.g.\&
1730 .Ar name Ns Bq Ar expr ) ,
1731 as numeric arguments to the
1732 .Ic test
1733 command, and as the value of an assignment to an integer parameter.
1735 Expressions may contain alpha-numeric parameter identifiers, array references,
1736 and integer constants and may be combined with the following C operators
1737 (listed and grouped in increasing order of precedence):
1739 Unary operators:
1740 .Bd -literal -offset indent
1741 + - ! ~ ++ --
1744 Binary operators:
1745 .Bd -literal -offset indent
1747 = *= /= %= += -= \*(Lt\*(Lt= \*(Gt\*(Gt= &= ^= \*(Ba=
1748 \*(Ba\*(Ba
1750 \*(Ba
1753 == !=
1754 \*(Lt \*(Lt= \*(Gt= \*(Gt
1755 \*(Lt\*(Lt \*(Gt\*(Gt
1756 + -
1757 * / %
1760 Ternary operators:
1761 .Bd -literal -offset indent
1762 ?: (precedence is immediately higher than assignment)
1765 Grouping operators:
1766 .Bd -literal -offset indent
1767 ( )
1770 A parameter that is NULL or unset evaluates to 0.
1771 Integer constants may be specified with arbitrary bases using the notation
1772 .Ar base Ns # Ns Ar number ,
1773 where
1774 .Ar base
1775 is a decimal integer specifying the base, and
1776 .Ar number
1777 is a number in the specified base.
1778 Additionally,
1779 integers may be prefixed with
1780 .Sq 0X
1782 .Sq 0x
1783 (specifying base 16)
1785 .Sq 0
1786 (base 8)
1787 in all forms of arithmetic expressions,
1788 except as numeric arguments to the
1789 .Ic test
1790 command.
1792 The operators are evaluated as follows:
1793 .Bl -tag -width Ds -offset indent
1794 .It unary +
1795 Result is the argument (included for completeness).
1796 .It unary -
1797 Negation.
1798 .It \&!
1799 Logical NOT;
1800 the result is 1 if argument is zero, 0 if not.
1801 .It ~
1802 Arithmetic (bit-wise) NOT.
1803 .It ++
1804 Increment; must be applied to a parameter (not a literal or other expression).
1805 The parameter is incremented by 1.
1806 When used as a prefix operator, the result
1807 is the incremented value of the parameter; when used as a postfix operator, the
1808 result is the original value of the parameter.
1809 .It --
1810 Similar to
1811 .Ic ++ ,
1812 except the parameter is decremented by 1.
1813 .It \&,
1814 Separates two arithmetic expressions; the left-hand side is evaluated first,
1815 then the right.
1816 The result is the value of the expression on the right-hand side.
1817 .It =
1818 Assignment; the variable on the left is set to the value on the right.
1819 .It Xo
1820 .No *= /= += -= \*(Lt\*(Lt=
1821 .No \*(Gt\*(Gt= &= ^= \*(Ba=
1823 Assignment operators.
1824 .Sm off
1825 .Ao Ar var Ac Xo
1826 .Aq Ar op
1827 .No = Aq Ar expr
1829 .Sm on
1830 is the same as
1831 .Sm off
1832 .Ao Ar var Ac Xo
1833 .No = Aq Ar var
1834 .Aq Ar op
1835 .Aq Ar expr ,
1837 .Sm on
1838 with any operator precedence in
1839 .Aq Ar expr
1840 preserved.
1841 For example,
1842 .Dq var1 *= 5 + 3
1843 is the same as specifying
1844 .Dq var1 = var1 * (5 + 3) .
1845 .It \*(Ba\*(Ba
1846 Logical OR;
1847 the result is 1 if either argument is non-zero, 0 if not.
1848 The right argument is evaluated only if the left argument is zero.
1849 .It &&
1850 Logical AND;
1851 the result is 1 if both arguments are non-zero, 0 if not.
1852 The right argument is evaluated only if the left argument is non-zero.
1853 .It \*(Ba
1854 Arithmetic (bit-wise) OR.
1855 .It ^
1856 Arithmetic (bit-wise) XOR
1857 (exclusive-OR).
1858 .It &
1859 Arithmetic (bit-wise) AND.
1860 .It ==
1861 Equal; the result is 1 if both arguments are equal, 0 if not.
1862 .It !=
1863 Not equal; the result is 0 if both arguments are equal, 1 if not.
1864 .It \*(Lt
1865 Less than; the result is 1 if the left argument is less than the right, 0 if
1866 not.
1867 .It \*(Lt= \*(Gt= \*(Gt
1868 Less than or equal, greater than or equal, greater than.
1870 .Ic \*(Lt .
1871 .It \*(Lt\*(Lt \*(Gt\*(Gt
1872 Shift left (right); the result is the left argument with its bits shifted left
1873 (right) by the amount given in the right argument.
1874 .It + - * /
1875 Addition, subtraction, multiplication, and division.
1876 .It %
1877 Remainder; the result is the remainder of the division of the left argument by
1878 the right.
1879 The sign of the result is unspecified if either argument is negative.
1880 .It Xo
1881 .Sm off
1882 .Aq Ar arg1 ?
1883 .Aq Ar arg2 :
1884 .Aq Ar arg3
1885 .Sm on
1888 .Aq Ar arg1
1889 is non-zero, the result is
1890 .Aq Ar arg2 ;
1891 otherwise the result is
1892 .Aq Ar arg3 .
1894 .Ss Functions
1895 Functions are defined using either Korn shell
1896 .Ic function Ar function-name
1897 syntax or the Bourne/POSIX shell
1898 .Ar function-name Ns ()
1899 syntax (see below for the difference between the two forms).
1900 Functions are like
1901 .Li .-scripts
1902 (i.e. scripts sourced using the
1903 .Sq \&.
1904 built-in)
1905 in that they are executed in the current environment.
1906 However, unlike
1907 .Li .-scripts ,
1908 shell arguments (i.e. positional parameters $1, $2, etc.)\&
1909 are never visible inside them.
1910 When the shell is determining the location of a command, functions
1911 are searched after special built-in commands, before regular and
1912 non-regular built-ins, and before the
1913 .Ev PATH
1914 is searched.
1916 An existing function may be deleted using
1917 .Ic unset Fl f Ar function-name .
1918 A list of functions can be obtained using
1919 .Ic typeset +f
1920 and the function definitions can be listed using
1921 .Ic typeset -f .
1923 .Ic autoload
1924 command (which is an alias for
1925 .Ic typeset -fu )
1926 may be used to create undefined functions: when an undefined function is
1927 executed, the shell searches the path specified in the
1928 .Ev FPATH
1929 parameter for a file with the same name as the function, which, if found, is
1930 read and executed.
1931 If after executing the file the named function is found to
1932 be defined, the function is executed; otherwise, the normal command search is
1933 continued (i.e. the shell searches the regular built-in command table and
1934 .Ev PATH ) .
1935 Note that if a command is not found using
1936 .Ev PATH ,
1937 an attempt is made to autoload a function using
1938 .Ev FPATH
1939 (this is an undocumented feature of the original Korn shell).
1941 Functions can have two attributes,
1942 .Dq trace
1944 .Dq export ,
1945 which can be set with
1946 .Ic typeset -ft
1948 .Ic typeset -fx ,
1949 respectively.
1950 When a traced function is executed, the shell's
1951 .Ic xtrace
1952 option is turned on for the function's duration; otherwise, the
1953 .Ic xtrace
1954 option is turned off.
1956 .Dq export
1957 attribute of functions is currently not used.
1958 In the original Korn shell,
1959 exported functions are visible to shell scripts that are executed.
1961 Since functions are executed in the current shell environment, parameter
1962 assignments made inside functions are visible after the function completes.
1963 If this is not the desired effect, the
1964 .Ic typeset
1965 command can be used inside a function to create a local parameter.
1966 Note that special parameters (e.g.\&
1967 .Ic \&$$ , $! )
1968 can't be scoped in this way.
1970 The exit status of a function is that of the last command executed in the
1971 function.
1972 A function can be made to finish immediately using the
1973 .Ic return
1974 command; this may also be used to explicitly specify the exit status.
1976 Functions defined with the
1977 .Ic function
1978 reserved word are treated differently in the following ways from functions
1979 defined with the
1980 .Ic ()
1981 notation:
1982 .Bl -bullet
1984 The $0 parameter is set to the name of the function
1985 (Bourne-style functions leave $0 untouched).
1987 Parameter assignments preceding function calls are not kept in the shell
1988 environment (executing Bourne-style functions will keep assignments).
1990 .Ev OPTIND
1991 is saved/reset and restored on entry and exit from the function so
1992 .Ic getopts
1993 can be used properly both inside and outside the function (Bourne-style
1994 functions leave
1995 .Ev OPTIND
1996 untouched, so using
1997 .Ic getopts
1998 inside a function interferes with using
1999 .Ic getopts
2000 outside the function).
2003 In the future, the following differences will also be added:
2004 .Bl -bullet
2006 A separate trap/signal environment will be used during the execution of
2007 functions.
2008 This will mean that traps set inside a function will not affect the
2009 shell's traps and signals that are not ignored in the shell (but may be
2010 trapped) will have their default effect in a function.
2012 The EXIT trap, if set in a function, will be executed after the function
2013 returns.
2015 .Ss POSIX mode
2016 The shell is intended to be POSIX compliant;
2017 however, in some cases, POSIX behaviour is contrary either to
2018 the original Korn shell behaviour or to user convenience.
2019 How the shell behaves in these cases is determined by the state of the
2020 .Ic posix
2021 option
2022 .Pq Ic set -o posix .
2023 If it is on, the POSIX behaviour is followed; otherwise, it is not.
2025 .Ic posix
2026 option is set automatically when the shell starts up if the environment
2027 contains the
2028 .Ev POSIXLY_CORRECT
2029 parameter.
2030 The shell can also be compiled so that it is in POSIX mode by default;
2031 however, this is usually not desirable.
2033 The following is a list of things that are affected by the state of the
2034 .Ic posix
2035 option:
2036 .Bl -bullet
2038 Reading of
2039 .Ev $ENV :
2040 if not in
2041 .Ic posix
2042 mode, the
2043 .Ev ENV
2044 parameter is not expanded and included when the shell starts.
2046 Occurrences of
2047 .Ic \e\&"
2048 inside double quoted
2049 .Ic `..`
2050 command substitutions.
2051 In POSIX mode, the
2052 .Ic \e\&"
2053 is interpreted when the command is interpreted;
2054 in non-POSIX mode,
2055 the backslash is stripped before the command substitution is interpreted.
2056 For example,
2057 .Ic echo \&"`echo \e\&"hi\e\&"`\&"
2058 produces
2059 .Dq \&"hi\&"
2060 in POSIX mode,
2061 .Dq hi
2062 in non-POSIX mode.
2063 To avoid problems, use the
2064 .Ic $(...)\&
2065 form of command substitution.
2067 .Ic kill -l
2068 output.
2069 In POSIX mode, only signal names are listed (in a single line);
2070 in non-POSIX mode,
2071 signal numbers, names, and descriptions are printed (in columns).
2072 In the future, a new option
2073 .Pq Fl v No perhaps
2074 will be added to distinguish the two behaviours.
2076 .Ic echo
2077 options.
2078 In POSIX mode,
2079 .Fl e
2081 .Fl E
2082 are not treated as options, but printed like other arguments;
2083 in non-POSIX mode, these options control the interpretation
2084 of backslash sequences.
2086 .Ic fg
2087 exit status.
2088 In POSIX mode, the exit status is 0 if no errors occur;
2089 in non-POSIX mode, the exit status is that of the last foregrounded job.
2091 .Ic getopts .
2092 In POSIX mode, options must start with a
2093 .Ql - ;
2094 in non-POSIX mode, options can start with either
2095 .Ql -
2097 .Ql + .
2099 .Ic set - .
2100 In POSIX mode, this does not clear the
2101 .Ic verbose
2103 .Ic xtrace
2104 options; in non-POSIX mode, it does.
2106 .Ic set
2107 exit status.
2108 In POSIX mode, the exit status of
2109 .Ic set
2110 is 0 if there are no errors;
2111 in non-POSIX mode, the exit status is that of any
2112 command substitutions performed in generating the
2113 .Ic set
2114 command.
2115 For example,
2116 .Ic set -- `false`; echo $?\&
2117 prints 0 in POSIX mode, 1 in non-POSIX mode.
2118 This construct is used in most shell scripts that use the old
2119 .Xr getopt 1
2120 command.
2122 Argument expansion of the
2123 .Ic alias ,
2124 .Ic export ,
2125 .Ic readonly ,
2127 .Ic typeset
2128 commands.
2129 In POSIX mode, normal argument expansion is done; in non-POSIX mode,
2130 field splitting, file globbing, and (normal) tilde expansion
2131 are turned off, while assignment tilde expansion is turned on.
2133 Signal specification.
2134 In POSIX mode, signals can be specified as digits, only
2135 if signal numbers match POSIX values
2136 (i.e. HUP=1, INT=2, QUIT=3, ABRT=6, KILL=9, ALRM=14, and TERM=15);
2137 in non-POSIX mode, signals can always be digits.
2139 Alias expansion.
2140 In POSIX mode, alias expansion is only carried out when reading command words;
2141 in non-POSIX mode, alias expansion is carried out on any
2142 word following an alias that ended in a space.
2143 For example, the following
2144 .Ic for
2145 loop uses parameter
2146 .Sq i
2147 in POSIX mode and
2148 .Sq j
2149 in non-POSIX mode:
2150 .Bd -literal -offset indent
2151 alias a='for ' i='j'
2152 a i in 1 2; do echo i=$i j=$j; done
2155 .Ic test .
2156 In POSIX mode, the expression
2157 .Sq Fl t
2158 (preceded by some number of
2159 .Sq \&!
2160 arguments) is always true as it is a non-zero length string;
2161 in non-POSIX mode, it tests if file descriptor 1 is a
2162 .Xr tty 4
2163 (i.e. the
2164 .Ar fd
2165 argument to the
2166 .Fl t
2167 test may be left out and defaults to 1).
2169 .Ss Command execution
2170 After evaluation of command-line arguments, redirections, and parameter
2171 assignments, the type of command is determined: a special built-in, a
2172 function, a regular built-in, or the name of a file to execute found using the
2173 .Ev PATH
2174 parameter.
2175 The checks are made in the above order.
2176 Special built-in commands differ from other commands in that the
2177 .Ev PATH
2178 parameter is not used to find them, an error during their execution can
2179 cause a non-interactive shell to exit, and parameter assignments that are
2180 specified before the command are kept after the command completes.
2181 Just to confuse things, if the
2182 .Ic posix
2183 option is turned off (see the
2184 .Ic set
2185 command below), some special commands are very special in that no field
2186 splitting, file globbing, nor tilde expansion is performed
2187 on arguments that look like assignments.
2188 Regular built-in commands are different only in that the
2189 .Ev PATH
2190 parameter is not used to find them.
2192 The original
2193 .Nm ksh
2194 and POSIX differ somewhat in which commands are considered
2195 special or regular:
2197 POSIX special commands
2199 .Ic \&. , \&: , break , continue ,
2200 .Ic eval , exec , exit , export ,
2201 .Ic readonly , return , set , shift ,
2202 .Ic trap , unset
2204 Additional
2206 special commands
2208 .Ic builtin , times , typeset
2210 Very special commands
2211 .Pq non-POSIX
2213 .Ic alias , readonly , set , typeset
2215 POSIX regular commands
2217 .Ic alias , bg , cd , command ,
2218 .Ic false , fc , fg , getopts ,
2219 .Ic jobs , kill , read , true ,
2220 .Ic umask , unalias , wait
2222 Additional
2224 regular commands
2226 .Ic \&[ , echo , let , print ,
2227 .Ic pwd , test , ulimit , whence
2229 In the future, the additional
2231 special and regular commands may be treated
2232 differently from the POSIX special and regular commands.
2234 Once the type of command has been determined, any command-line parameter
2235 assignments are performed and exported for the duration of the command.
2237 The following describes the special and regular built-in commands:
2239 .Bl -tag -width Ds -compact
2240 .It Ic \&. Ar file Op Ar arg ...
2241 Execute the commands in
2242 .Ar file
2243 in the current environment.
2244 The file is searched for in the directories of
2245 .Ev PATH .
2246 If arguments are given, the positional parameters may be used to access them
2247 while
2248 .Ar file
2249 is being executed.
2250 If no arguments are given, the positional parameters are
2251 those of the environment the command is used in.
2253 .It Ic \&: Op Ar ...
2254 The null command.
2255 Exit status is set to zero.
2257 .It Xo Ic alias
2258 .Oo Fl d \*(Ba t Oo Fl r Oc \*(Ba
2259 .Cm +-x Oc
2260 .Op Fl p
2261 .Op Cm +
2262 .Oo Ar name
2263 .Op Ns = Ns Ar value
2264 .Ar ... Oc
2266 Without arguments,
2267 .Ic alias
2268 lists all aliases.
2269 For any name without a value, the existing alias is listed.
2270 Any name with a value defines an alias (see
2271 .Sx Aliases
2272 above).
2274 When listing aliases, one of two formats is used.
2275 Normally, aliases are listed as
2276 .Ar name Ns = Ns Ar value ,
2277 where
2278 .Ar value
2279 is quoted.
2280 If options were preceded with
2281 .Ql + ,
2282 or a lone
2283 .Ql +
2284 is given on the command line, only
2285 .Ar name
2286 is printed.
2289 .Fl d
2290 option causes directory aliases, which are used in tilde expansion, to be
2291 listed or set (see
2292 .Sx Tilde expansion
2293 above).
2295 If the
2296 .Fl p
2297 option is used, each alias is prefixed with the string
2298 .Dq alias\ \& .
2301 .Fl t
2302 option indicates that tracked aliases are to be listed/set (values specified on
2303 the command line are ignored for tracked aliases).
2305 .Fl r
2306 option indicates that all tracked aliases are to be reset.
2309 .Fl x
2310 option sets
2311 .Pq Ic +x No clears
2312 the export attribute of an alias, or, if no names are given, lists the aliases
2313 with the export attribute (exporting an alias has no effect).
2315 .It Ic bg Op Ar job ...
2316 Resume the specified stopped job(s) in the background.
2317 If no jobs are specified,
2318 .Ic %+
2319 is assumed.
2321 .Sx Job control
2322 below for more information.
2324 .It Ic break Op Ar level
2325 Exit the
2326 .Ar level Ns th
2327 inner-most
2328 .Ic for ,
2329 .Ic until ,
2331 .Ic while
2332 loop.
2333 .Ar level
2334 defaults to 1.
2336 .It Ic builtin Ar command Op Ar arg ...
2337 Execute the built-in command
2338 .Ar command .
2340 .It Xo
2341 .Ic cd
2342 .Op Fl LP
2343 .Op Ar dir
2345 Set the working directory to
2346 .Ar dir .
2347 If the parameter
2348 .Ev CDPATH
2349 is set, it lists the search path for the directory containing
2350 .Ar dir .
2352 .Dv NULL
2353 path means the current directory.
2355 .Ar dir
2356 is found in any component of the
2357 .Ev CDPATH
2358 search path other than the
2359 .Dv NULL
2360 path, the name of the new working directory will be written to standard output.
2362 .Ar dir
2363 is missing, the home directory
2364 .Ev HOME
2365 is used.
2367 .Ar dir
2369 .Ql - ,
2370 the previous working directory is used (see the
2371 .Ev OLDPWD
2372 parameter).
2374 If the
2375 .Fl L
2376 option (logical path) is used or if the
2377 .Ic physical
2378 option isn't set (see the
2379 .Ic set
2380 command below), references to
2381 .Sq ..
2383 .Ar dir
2384 are relative to the path used to get to the directory.
2385 If the
2386 .Fl P
2387 option (physical path) is used or if the
2388 .Ic physical
2389 option is set,
2390 .Sq ..
2391 is relative to the filesystem directory tree.
2393 .Ev PWD
2395 .Ev OLDPWD
2396 parameters are updated to reflect the current and old working directory,
2397 respectively.
2399 .It Xo
2400 .Ic cd
2401 .Op Fl LP
2402 .Ar old new
2404 The string
2405 .Ar new
2406 is substituted for
2407 .Ar old
2408 in the current directory, and the shell attempts to change to the new
2409 directory.
2411 .It Xo
2412 .Ic command
2413 .Op Fl p
2414 .Ar cmd
2415 .Op Ar arg ...
2417 .Ar cmd
2418 is executed exactly as if
2419 .Ic command
2420 had not been specified, with two exceptions:
2421 firstly,
2422 .Ar cmd
2423 cannot be a shell function;
2424 and secondly, special built-in commands lose their specialness
2425 (i.e. redirection and utility errors do not cause the shell to
2426 exit, and command assignments are not permanent).
2428 If the
2429 .Fl p
2430 option is given, a default search path is used instead of the current value of
2431 .Ev PATH
2432 (the actual value of the default path is system dependent: on
2433 POSIX-ish systems, it is the value returned by
2434 .Ic getconf CS_PATH ) .
2436 .It Ic continue Op Ar level
2437 Jumps to the beginning of the
2438 .Ar level Ns th
2439 inner-most
2440 .Ic for ,
2441 .Ic until ,
2443 .Ic while
2444 loop.
2445 .Ar level
2446 defaults to 1.
2448 .It Xo
2449 .Ic echo
2450 .Op Fl Een
2451 .Op Ar arg ...
2453 Prints its arguments (separated by spaces) followed by a newline, to the
2454 standard output.
2455 The newline is suppressed if any of the arguments contain the
2456 backslash sequence
2457 .Ql \ec .
2458 See the
2459 .Ic print
2460 command below for a list of other backslash sequences that are recognized.
2462 The options are provided for compatibility with
2464 shell scripts.
2466 .Fl n
2467 option suppresses the trailing newline,
2468 .Fl e
2469 enables backslash interpretation (a no-op, since this is normally done), and
2470 .Fl E
2471 suppresses backslash interpretation.
2472 If the
2473 .Ic posix
2474 option is set, only the first argument is treated as an option, and only
2475 if it is exactly
2476 .Dq -n .
2478 .It Ic eval Ar command ...
2479 The arguments are concatenated (with spaces between them) to form a single
2480 string which the shell then parses and executes in the current environment.
2482 .It Xo
2483 .Ic exec
2484 .Op Ar command Op Ar arg ...
2486 The command is executed without forking, replacing the shell process.
2488 If no command is given except for I/O redirection, the I/O redirection is
2489 permanent and the shell is
2490 not replaced.
2491 Any file descriptors which are opened or
2492 .Xr dup 2 Ns 'd
2493 in this way are made available to other executed commands (note that the Korn
2494 shell differs here: it does not pass on file descriptors greater than 2).
2496 .It Ic exit Op Ar status
2497 The shell exits with the specified exit status.
2499 .Ar status
2500 is not specified, the exit status is the current value of the
2501 .Ic $?\&
2502 parameter.
2504 .It Xo
2505 .Ic export
2506 .Op Fl p
2507 .Op Ar parameter Ns Op = Ns Ar value
2509 Sets the export attribute of the named parameters.
2510 Exported parameters are passed in the environment to executed commands.
2511 If values are specified, the named parameters are also assigned.
2513 If no parameters are specified, the names of all parameters with the export
2514 attribute are printed one per line, unless the
2515 .Fl p
2516 option is used, in which case
2517 .Ic export
2518 commands defining all exported parameters, including their values, are printed.
2520 .It Ic false
2521 A command that exits with a non-zero status.
2523 .It Xo
2524 .Ic fc
2525 .Cm -e - \*(Ba Fl s
2526 .Op Fl g
2527 .Op Ar old Ns = Ns Ar new
2528 .Op Ar prefix
2530 Re-execute the selected command (the previous command by default) after
2531 performing the optional substitution of
2532 .Ar old
2533 with
2534 .Ar new .
2536 .Fl g
2537 is specified, all occurrences of
2538 .Ar old
2539 are replaced with
2540 .Ar new .
2541 The meaning of
2542 .Cm -e -
2544 .Fl s
2545 is identical: re-execute the selected command without invoking an editor.
2546 This command is usually accessed with the predefined
2547 .Ic alias r='fc -e -' .
2549 .It Ic fg Op Ar job ...
2550 Resume the specified job(s) in the foreground.
2551 If no jobs are specified,
2552 .Ic %+
2553 is assumed.
2555 .Sx Job control
2556 below for more information.
2558 .It Xo
2559 .Ic getopts
2560 .Ar optstring name
2561 .Op Ar arg ...
2563 Used by shell procedures to parse the specified arguments (or positional
2564 parameters, if no arguments are given) and to check for legal options.
2565 .Ar optstring
2566 contains the option letters that
2567 .Ic getopts
2568 is to recognize.
2569 If a letter is followed by a colon, the option is expected to
2570 have an argument.
2571 Options that do not take arguments may be grouped in a single argument.
2572 If an option takes an argument and the option character is not the
2573 last character of the argument it is found in, the remainder of the argument is
2574 taken to be the option's argument; otherwise, the next argument is the option's
2575 argument.
2577 Each time
2578 .Ic getopts
2579 is invoked, it places the next option in the shell parameter
2580 .Ar name
2581 and the index of the argument to be processed by the next call to
2582 .Ic getopts
2583 in the shell parameter
2584 .Ev OPTIND .
2585 If the option was introduced with a
2586 .Ql + ,
2587 the option placed in
2588 .Ar name
2589 is prefixed with a
2590 .Ql + .
2591 When an option requires an argument,
2592 .Ic getopts
2593 places it in the shell parameter
2594 .Ev OPTARG .
2596 When an illegal option or a missing option argument is encountered, a question
2597 mark or a colon is placed in
2598 .Ar name
2599 (indicating an illegal option or missing argument, respectively) and
2600 .Ev OPTARG
2601 is set to the option character that caused the problem.
2602 Furthermore, if
2603 .Ar optstring
2604 does not begin with a colon, a question mark is placed in
2605 .Ar name ,
2606 .Ev OPTARG
2607 is unset, and an error message is printed to standard error.
2609 When the end of the options is encountered,
2610 .Ic getopts
2611 exits with a non-zero exit status.
2612 Options end at the first (non-option
2613 argument) argument that does not start with a
2614 .Ql - ,
2615 or when a
2616 .Ql --
2617 argument is encountered.
2619 Option parsing can be reset by setting
2620 .Ev OPTIND
2621 to 1 (this is done automatically whenever the shell or a shell procedure is
2622 invoked).
2624 Warning: Changing the value of the shell parameter
2625 .Ev OPTIND
2626 to a value other than 1, or parsing different sets of arguments without
2627 resetting
2628 .Ev OPTIND ,
2629 may lead to unexpected results.
2631 .It Xo
2632 .Ic hash
2633 .Op Fl r
2634 .Op Ar name ...
2636 Without arguments, any hashed executable command pathnames are listed.
2638 .Fl r
2639 option causes all hashed commands to be removed from the hash table.
2640 Each
2641 .Ar name
2642 is searched as if it were a command name and added to the hash table if it is
2643 an executable command.
2645 .It Xo
2646 .Ic jobs
2647 .Op Fl lnp
2648 .Op Ar job ...
2650 Display information about the specified job(s); if no jobs are specified, all
2651 jobs are displayed.
2653 .Fl n
2654 option causes information to be displayed only for jobs that have changed
2655 state since the last notification.
2656 If the
2657 .Fl l
2658 option is used, the process ID of each process in a job is also listed.
2660 .Fl p
2661 option causes only the process group of each job to be printed.
2663 .Sx Job control
2664 below for the format of
2665 .Ar job
2666 and the displayed job.
2668 .It Xo
2669 .Ic kill
2670 .Oo Fl s Ar signame \*(Ba
2671 .No - Ns Ar signum \*(Ba
2672 .No - Ns Ar signame Oc
2673 .No { Ar job \*(Ba pid \*(Ba pgrp No }
2674 .Ar ...
2676 Send the specified signal to the specified jobs, process IDs, or process
2677 groups.
2678 If no signal is specified, the
2679 .Dv TERM
2680 signal is sent.
2681 If a job is specified, the signal is sent to the job's process group.
2683 .Sx Job control
2684 below for the format of
2685 .Ar job .
2687 .It Xo
2688 .Ic kill
2689 .Fl l
2690 .Op Ar exit-status ...
2692 Print the signal name corresponding to
2693 .Ar exit-status .
2694 If no arguments are specified, a list of all the signals, their numbers, and
2695 a short description of them are printed.
2697 .It Xo
2698 .Ic print
2700 .Fl nrsu Ns Oo Ar n Oc \*(Ba
2701 .Fl R Op Fl en
2703 .Op Ar argument ...
2705 .Ic print
2706 prints its arguments on the standard output, separated by spaces and
2707 terminated with a newline.
2709 .Fl n
2710 option suppresses the newline.
2711 By default, certain C escapes are translated.
2712 These include
2713 .Ql \eb ,
2714 .Ql \ef ,
2715 .Ql \en ,
2716 .Ql \er ,
2717 .Ql \et ,
2718 .Ql \ev ,
2720 .Ql \e0###
2722 .Ql #
2723 is an octal digit, of which there may be 0 to 3
2724 .Pc .
2725 .Ql \ec
2726 is equivalent to using the
2727 .Fl n
2728 option.
2729 .Ql \e
2730 expansion may be inhibited with the
2731 .Fl r
2732 option.
2734 .Fl s
2735 option prints to the history file instead of standard output; and the
2736 .Fl u
2737 option prints to file descriptor
2738 .Ar n
2740 .Ar n
2741 defaults to 1 if omitted
2742 .Pc .
2745 .Fl R
2746 option is used to emulate, to some degree, the
2748 .Xr echo 1
2749 command, which does not process
2750 .Ql \e
2751 sequences unless the
2752 .Fl e
2753 option is given.
2754 As above, the
2755 .Fl n
2756 option suppresses the trailing newline.
2758 .It Ic pwd Op Fl LP
2759 Print the present working directory.
2760 If the
2761 .Fl L
2762 option is used or if the
2763 .Ic physical
2764 option isn't set (see the
2765 .Ic set
2766 command below), the logical path is printed (i.e. the path used to
2767 .Ic cd
2768 to the current directory).
2769 If the
2770 .Fl P
2771 option (physical path) is used or if the
2772 .Ic physical
2773 option is set, the path determined from the filesystem (by following
2774 .Sq ..
2775 directories to the root directory) is printed.
2777 .It Xo
2778 .Ic read
2779 .Op Fl rsu Ns Op Ar n
2780 .Op Ar parameter ...
2782 Reads a line of input from the standard input, separates the line into fields
2783 using the
2784 .Ev IFS
2785 parameter (see
2786 .Sx Substitution
2787 above), and assigns each field to the specified parameters.
2788 If there are more parameters than fields, the extra parameters are set to
2789 .Dv NULL ,
2790 or alternatively, if there are more fields than parameters, the last parameter
2791 is assigned the remaining fields (inclusive of any separating spaces).
2792 If no parameters are specified, the
2793 .Ev REPLY
2794 parameter is used.
2795 If the input line ends in a backslash and the
2796 .Fl r
2797 option was not used, the backslash and the newline are stripped and more input
2798 is read.
2799 If no input is read,
2800 .Ic read
2801 exits with a non-zero status.
2803 The first parameter may have a question mark and a string appended to it, in
2804 which case the string is used as a prompt (printed to standard error before
2805 any input is read) if the input is a
2806 .Xr tty 4
2807 (e.g.\&
2808 .Ic read nfoo?'number of foos: ' ) .
2811 .Fl u Ns Ar n
2812 option causes input to be read from file descriptor
2813 .Ar n
2814 .Pf ( Ar n
2815 defaults to 0 if omitted).
2816 If the
2817 .Fl s
2818 option is used, input is saved to the history file.
2820 .It Xo
2821 .Ic readonly
2822 .Op Fl p
2823 .Oo Ar parameter
2824 .Op Ns = Ns Ar value
2825 .Ar ... Oc
2827 Sets the read-only attribute of the named parameters.
2828 If values are given,
2829 parameters are set to them before setting the attribute.
2830 Once a parameter is
2831 made read-only, it cannot be unset and its value cannot be changed.
2833 If no parameters are specified, the names of all parameters with the read-only
2834 attribute are printed one per line, unless the
2835 .Fl p
2836 option is used, in which case
2837 .Ic readonly
2838 commands defining all read-only parameters, including their values, are
2839 printed.
2841 .It Ic return Op Ar status
2842 Returns from a function or
2843 .Ic .\&
2844 script, with exit status
2845 .Ar status .
2846 If no
2847 .Ar status
2848 is given, the exit status of the last executed command is used.
2849 If used outside of a function or
2850 .Ic .\&
2851 script, it has the same effect as
2852 .Ic exit .
2853 Note that
2854 .Nm pdksh
2855 treats both profile and
2856 .Ev ENV
2857 files as
2858 .Ic .\&
2859 scripts, while the original Korn shell only treats profiles as
2860 .Ic .\&
2861 scripts.
2863 .It Xo
2864 .Ic set Op Ic +-abCefhkmnpsuvXx
2865 .Op Ic +-o Ar option
2866 .Op Ic +-A Ar name
2867 .Op Fl -
2868 .Op Ar arg ...
2871 .Ic set
2872 command can be used to set
2873 .Pq Ic -
2874 or clear
2875 .Pq Ic +
2876 shell options, set the positional parameters, or set an array parameter.
2877 Options can be changed using the
2878 .Cm +-o Ar option
2879 syntax, where
2880 .Ar option
2881 is the long name of an option, or using the
2882 .Cm +- Ns Ar letter
2883 syntax, where
2884 .Ar letter
2885 is the option's single letter name (not all options have a single letter name).
2886 The following table lists both option letters (if they exist) and long names
2887 along with a description of what the option does:
2888 .Bl -tag -width 15n
2889 .It Fl A Ar name
2890 Sets the elements of the array parameter
2891 .Ar name
2893 .Ar arg ...
2895 .Fl A
2896 is used, the array is reset (i.e. emptied) first; if
2897 .Ic +A
2898 is used, the first N elements are set (where N is the number of arguments);
2899 the rest are left untouched.
2900 .It Fl a \*(Ba Ic allexport
2901 All new parameters are created with the export attribute.
2902 .It Fl b \*(Ba Ic notify
2903 Print job notification messages asynchronously, instead of just before the
2904 prompt.
2905 Only used if job control is enabled
2906 .Pq Fl m .
2907 .It Fl C \*(Ba Ic noclobber
2908 Prevent \*(Gt redirection from overwriting existing files.
2909 Instead, \*(Gt\*(Ba must be used to force an overwrite.
2910 .It Fl e \*(Ba Ic errexit
2911 Exit (after executing the
2912 .Dv ERR
2913 trap) as soon as an error occurs or a command fails (i.e. exits with a
2914 non-zero status).
2915 This does not apply to commands whose exit status is
2916 explicitly tested by a shell construct such as
2917 .Ic if ,
2918 .Ic until ,
2919 .Ic while ,
2921 .Ic !\&
2922 statements.
2924 .Ic &&
2926 .Ic || ,
2927 only the status of the last command is tested.
2928 .It Fl f \*(Ba Ic noglob
2929 Do not expand file name patterns.
2930 .It Fl h \*(Ba Ic trackall
2931 Create tracked aliases for all executed commands (see
2932 .Sx Aliases
2933 above).
2934 Enabled by default for non-interactive shells.
2935 .It Fl k \*(Ba Ic keyword
2936 Parameter assignments are recognized anywhere in a command.
2937 .It Fl m \*(Ba Ic monitor
2938 Enable job control (default for interactive shells).
2939 .It Fl n \*(Ba Ic noexec
2940 Do not execute any commands.
2941 Useful for checking the syntax of scripts
2942 (ignored if interactive).
2943 .It Fl p \*(Ba Ic privileged
2944 The shell is a privileged shell.
2945 It is set automatically if, when the shell starts,
2946 the real UID or GID does not match
2947 the effective UID (EUID) or GID (EGID), respectively.
2948 See above for a description of what this means.
2949 .It Fl s \*(Ba Ic stdin
2950 If used when the shell is invoked, commands are read from standard input.
2951 Set automatically if the shell is invoked with no arguments.
2953 When
2954 .Fl s
2955 is used with the
2956 .Ic set
2957 command it causes the specified arguments to be sorted before assigning them to
2958 the positional parameters (or to array
2959 .Ar name ,
2961 .Fl A
2962 is used).
2963 .It Fl u \*(Ba Ic nounset
2964 Referencing of an unset parameter is treated as an error, unless one of the
2965 .Ql - ,
2966 .Ql + ,
2968 .Ql =
2969 modifiers is used.
2970 .It Fl v \*(Ba Ic verbose
2971 Write shell input to standard error as it is read.
2972 .It Fl X \*(Ba Ic markdirs
2973 Mark directories with a trailing
2974 .Ql /
2975 during file name generation.
2976 .It Fl x \*(Ba Ic xtrace
2977 Print commands and parameter assignments when they are executed, preceded by
2978 the value of
2979 .Ev PS4 .
2980 .It Ic bgnice
2981 Background jobs are run with lower priority.
2982 .It Ic ignoreeof
2983 The shell will not exit when end-of-file is read;
2984 .Ic exit
2985 must be used.
2986 .It Ic interactive
2987 The shell is an interactive shell.
2988 This option can only be used when the shell is invoked.
2989 See above for a description of what this means.
2990 .It Ic login
2991 The shell is a login shell.
2992 This option can only be used when the shell is invoked.
2993 See above for a description of what this means.
2994 .It Ic nohup
2995 Do not kill running jobs with a
2996 .Dv SIGHUP
2997 signal when a login shell exits.
2998 Currently set by default, but this will
2999 change in the future to be compatible with the original Korn shell (which
3000 doesn't have this option, but does send the
3001 .Dv SIGHUP
3002 signal).
3003 .It Ic nolog
3004 No effect.
3005 In the original Korn shell, this prevents function definitions from
3006 being stored in the history file.
3007 .It Ic physical
3008 Causes the
3009 .Ic cd
3011 .Ic pwd
3012 commands to use
3013 .Dq physical
3014 (i.e. the filesystem's)
3015 .Sq ..
3016 directories instead of
3017 .Dq logical
3018 directories (i.e. the shell handles
3019 .Sq .. ,
3020 which allows the user to be oblivious of symbolic links to directories).
3021 Clear by default.
3022 Note that setting this option does not affect the current value of the
3023 .Ev PWD
3024 parameter; only the
3025 .Ic cd
3026 command changes
3027 .Ev PWD .
3028 See the
3029 .Ic cd
3031 .Ic pwd
3032 commands above for more details.
3033 .It Ic posix
3034 Enable POSIX mode.
3036 .Sx POSIX mode
3037 above.
3038 .It Ic restricted
3039 The shell is a restricted shell.
3040 This option can only be used when the shell is invoked.
3041 See above for a description of what this means.
3042 .It Ic vi
3043 Enable
3044 .Xr vi 1 Ns -like
3045 command-line editing (interactive shells only).
3046 .It Ic vi-esccomplete
3047 In vi command-line editing, do command and file name completion when escape
3048 (^[) is entered in command mode.
3049 .It Ic vi-show8
3050 Prefix characters with the eighth bit set with
3051 .Sq M- .
3052 If this option is not set, characters in the range 128\-160 are printed as is,
3053 which may cause problems.
3054 .It Ic vi-tabcomplete
3055 In vi command-line editing, do command and file name completion when tab (^I)
3056 is entered in insert mode.
3057 .It Ic viraw
3058 No effect.
3059 In the original Korn shell, unless
3060 .Ic viraw
3061 was set, the vi command-line mode would let the
3062 .Xr tty 4
3063 driver do the work until ESC (^[) was entered.
3064 .Nm pdksh
3065 is always in viraw mode.
3068 These options can also be used upon invocation of the shell.
3069 The current set of
3070 options (with single letter names) can be found in the parameter
3071 .Sq $- .
3072 .Ic set Fl o
3073 with no option name will list all the options and whether each is on or off;
3074 .Ic set +o
3075 will print the long names of all options that are currently on.
3077 Remaining arguments, if any, are positional parameters and are assigned, in
3078 order, to the positional parameters (i.e. $1, $2, etc.).
3079 If options end with
3080 .Ql --
3081 and there are no remaining arguments, all positional parameters are cleared.
3082 If no options or arguments are given, the values of all names are printed.
3083 For unknown historical reasons, a lone
3084 .Ql -
3085 option is treated specially \- it clears both the
3086 .Fl x
3088 .Fl v
3089 options.
3091 .It Ic shift Op Ar number
3092 The positional parameters
3093 .Ar number Ns +1 ,
3094 .Ar number Ns +2 ,
3095 etc. are renamed to
3096 .Sq 1 ,
3097 .Sq 2 ,
3098 etc.
3099 .Ar number
3100 defaults to 1.
3102 .It Ic test Ar expression
3103 .It Ic \&[ Ar expression Ic \&]
3104 .Ic test
3105 evaluates the
3106 .Ar expression
3107 and returns zero status if true, 1 if false, or greater than 1 if there
3108 was an error.
3109 It is normally used as the condition command of
3110 .Ic if
3112 .Ic while
3113 statements.
3114 Symbolic links are followed for all
3115 .Ar file
3116 expressions except
3117 .Fl h
3119 .Fl L .
3121 The following basic expressions are available:
3122 .Bl -tag -width 17n
3123 .It Fl a Ar file
3124 .Ar file
3125 exists.
3126 .It Fl b Ar file
3127 .Ar file
3128 is a block special device.
3129 .It Fl c Ar file
3130 .Ar file
3131 is a character special device.
3132 .It Fl d Ar file
3133 .Ar file
3134 is a directory.
3135 .It Fl e Ar file
3136 .Ar file
3137 exists.
3138 .It Fl f Ar file
3139 .Ar file
3140 is a regular file.
3141 .It Fl G Ar file
3142 .Ar file Ns 's
3143 group is the shell's effective group ID.
3144 .It Fl g Ar file
3145 .Ar file Ns 's
3146 mode has the setgid bit set.
3147 .It Fl h Ar file
3148 .Ar file
3149 is a symbolic link.
3150 .It Fl k Ar file
3151 .Ar file Ns 's
3152 mode has the
3153 .Xr sticky 8
3154 bit set.
3155 .It Fl L Ar file
3156 .Ar file
3157 is a symbolic link.
3158 .It Fl O Ar file
3159 .Ar file Ns 's
3160 owner is the shell's effective user ID.
3161 .It Fl o Ar option
3162 Shell
3163 .Ar option
3164 is set (see the
3165 .Ic set
3166 command above for a list of options).
3167 As a non-standard extension, if the option starts with a
3168 .Ql \&! ,
3169 the test is negated; the test always fails if
3170 .Ar option
3171 doesn't exist (so [ -o foo -o -o !foo ] returns true if and only if option
3172 .Ar foo
3173 exists).
3174 .It Fl p Ar file
3175 .Ar file
3176 is a named pipe.
3177 .It Fl r Ar file
3178 .Ar file
3179 exists and is readable.
3180 .It Fl S Ar file
3181 .Ar file
3182 is a
3183 .Xr unix 4 Ns -domain
3184 socket.
3185 .It Fl s Ar file
3186 .Ar file
3187 is not empty.
3188 .It Fl t Op Ar fd
3189 File descriptor
3190 .Ar fd
3191 is a
3192 .Xr tty 4
3193 device.
3194 If the
3195 .Ic posix
3196 option is not set,
3197 .Ar fd
3198 may be left out, in which case it is taken to be 1 (the behaviour differs due
3199 to the special POSIX rules described above).
3200 .It Fl u Ar file
3201 .Ar file Ns 's
3202 mode has the setuid bit set.
3203 .It Fl w Ar file
3204 .Ar file
3205 exists and is writable.
3206 .It Fl x Ar file
3207 .Ar file
3208 exists and is executable.
3209 .It Ar file1 Fl nt Ar file2
3210 .Ar file1
3211 is newer than
3212 .Ar file2 .
3213 .It Ar file1 Fl ot Ar file2
3214 .Ar file1
3215 is older than
3216 .Ar file2 .
3217 .It Ar file1 Fl ef Ar file2
3218 .Ar file1
3219 is the same file as
3220 .Ar file2 .
3221 .It Ar string
3222 .Ar string
3223 has non-zero length.
3224 .It Fl n Ar string
3225 .Ar string
3226 is not empty.
3227 .It Fl z Ar string
3228 .Ar string
3229 is empty.
3230 .It Ar string No = Ar string
3231 Strings are equal.
3232 .It Ar string No != Ar string
3233 Strings are not equal.
3234 .It Ar number Fl eq Ar number
3235 Numbers compare equal.
3236 .It Ar number Fl ne Ar number
3237 Numbers compare not equal.
3238 .It Ar number Fl ge Ar number
3239 Numbers compare greater than or equal.
3240 .It Ar number Fl gt Ar number
3241 Numbers compare greater than.
3242 .It Ar number Fl le Ar number
3243 Numbers compare less than or equal.
3244 .It Ar number Fl \&lt Ar number
3245 Numbers compare less than.
3248 The above basic expressions, in which unary operators have precedence over
3249 binary operators, may be combined with the following operators (listed in
3250 increasing order of precedence):
3251 .Bd -literal -offset indent
3252 expr -o expr            Logical OR.
3253 expr -a expr            Logical AND.
3254 ! expr                  Logical NOT.
3255 ( expr )                Grouping.
3258 On operating systems not supporting
3259 .Pa /dev/fd/ Ns Ar n
3260 devices (where
3261 .Ar n
3262 is a file descriptor number), the
3263 .Ic test
3264 command will attempt to fake it for all tests that operate on files (except the
3265 .Fl e
3266 test).
3267 For example,
3268 [ -w /dev/fd/2 ] tests if file descriptor 2 is writable.
3270 Note that some special rules are applied (courtesy of POSIX)
3271 if the number of
3272 arguments to
3273 .Ic test
3275 .Ic \&[ ... \&]
3276 is less than five: if leading
3277 .Ql \&!
3278 arguments can be stripped such that only one argument remains then a string
3279 length test is performed (again, even if the argument is a unary operator); if
3280 leading
3281 .Ql \&!
3282 arguments can be stripped such that three arguments remain and the second
3283 argument is a binary operator, then the binary operation is performed (even
3284 if the first argument is a unary operator, including an unstripped
3285 .Ql \&! ) .
3287 .Sy Note :
3288 A common mistake is to use
3289 .Dq if \&[ $foo = bar \&] ,
3290 which fails if parameter
3291 .Dq foo
3293 .Dv NULL
3294 or unset, if it has embedded spaces (i.e.\&
3295 .Ev IFS
3296 characters), or if it is a unary operator like
3297 .Sq \&!
3299 .Sq Fl n .
3300 Use tests like
3301 .Dq if \&[ \&"X$foo\&" = Xbar \&]
3302 instead.
3304 .It Ic times
3305 Print the accumulated user and system times used both by the shell
3306 and by processes that the shell started which have exited.
3307 The format of the output is:
3308 .Bd -literal -offset indent
3309 0m0.00s 0m0.00s
3310 0m0.00s 0m0.00s
3313 .It Ic trap Op Ar handler signal ...
3314 Sets a trap handler that is to be executed when any of the specified signals are
3315 received.
3316 .Ar handler
3317 is either a
3318 .Dv NULL
3319 string, indicating the signals are to be ignored, a minus sign
3320 .Pq Sq - ,
3321 indicating that the default action is to be taken for the signals (see
3322 .Xr signal 3 ) ,
3323 or a string containing shell commands to be evaluated and executed at the first
3324 opportunity (i.e. when the current command completes, or before printing the
3325 next
3326 .Ev PS1
3327 prompt) after receipt of one of the signals.
3328 .Ar signal
3329 is the name of a signal (e.g.\&
3330 .Dv PIPE
3332 .Dv ALRM )
3333 or the number of the signal (see the
3334 .Ic kill -l
3335 command above).
3337 There are two special signals:
3338 .Dv EXIT
3339 (also known as 0), which is executed when the shell is about to exit, and
3340 .Dv ERR ,
3341 which is executed after an error occurs (an error is something that would cause
3342 the shell to exit if the
3343 .Fl e
3345 .Ic errexit
3346 option were set \- see the
3347 .Ic set
3348 command above).
3349 .Dv EXIT
3350 handlers are executed in the environment of the last executed command.
3351 Note
3352 that for non-interactive shells, the trap handler cannot be changed for signals
3353 that were ignored when the shell started.
3355 With no arguments,
3356 .Ic trap
3357 lists, as a series of
3358 .Ic trap
3359 commands, the current state of the traps that have been set since the shell
3360 started.
3361 Note that the output of
3362 .Ic trap
3363 cannot be usefully piped to another process (an artifact of the fact that
3364 traps are cleared when subprocesses are created).
3366 The original Korn shell's
3367 .Dv DEBUG
3368 trap and the handling of
3369 .Dv ERR
3371 .Dv EXIT
3372 traps in functions are not yet implemented.
3374 .It Ic true
3375 A command that exits with a zero value.
3377 .It Xo
3378 .Ic typeset
3380 .Op Ic +-lprtUux
3381 .Op Fl L Ns Op Ar n
3382 .Op Fl R Ns Op Ar n
3383 .Op Fl Z Ns Op Ar n
3384 .Op Fl i Ns Op Ar n
3385 .No \*(Ba Fl f Op Fl tux
3388 .Ar name
3389 .Op Ns = Ns Ar value
3390 .Ar ...
3393 Display or set parameter attributes.
3394 With no
3395 .Ar name
3396 arguments, parameter attributes are displayed; if no options are used, the
3397 current attributes of all parameters are printed as
3398 .Ic typeset
3399 commands; if an option is given (or
3400 .Ql -
3401 with no option letter), all parameters and their values with the specified
3402 attributes are printed; if options are introduced with
3403 .Ql + ,
3404 parameter values are not printed.
3407 .Ar name
3408 arguments are given, the attributes of the named parameters are set
3409 .Pq Ic -
3410 or cleared
3411 .Pq Ic + .
3412 Values for parameters may optionally be specified.
3414 .Ic typeset
3415 is used inside a function, any newly created parameters are local to the
3416 function.
3418 When
3419 .Fl f
3420 is used,
3421 .Ic typeset
3422 operates on the attributes of functions.
3423 As with parameters, if no
3424 .Ar name
3425 arguments are given,
3426 functions are listed with their values (i.e. definitions) unless
3427 options are introduced with
3428 .Ql + ,
3429 in which case only the function names are reported.
3430 .Bl -tag -width Ds
3431 .It Fl f
3432 Function mode.
3433 Display or set functions and their attributes, instead of parameters.
3434 .It Fl i Ns Op Ar n
3435 Integer attribute.
3436 .Ar n
3437 specifies the base to use when displaying the integer (if not specified, the
3438 base given in the first assignment is used).
3439 Parameters with this attribute may
3440 be assigned values containing arithmetic expressions.
3441 .It Fl L Ns Op Ar n
3442 Left justify attribute.
3443 .Ar n
3444 specifies the field width.
3446 .Ar n
3447 is not specified, the current width of a parameter (or the width of its first
3448 assigned value) is used.
3449 Leading whitespace (and zeros, if used with the
3450 .Fl Z
3451 option) is stripped.
3452 If necessary, values are either truncated or space padded
3453 to fit the field width.
3454 .It Fl l
3455 Lower case attribute.
3456 All upper case characters in values are converted to lower case.
3457 (In the original Korn shell, this parameter meant
3458 .Dq long integer
3459 when used with the
3460 .Fl i
3461 option.)
3462 .It Fl p
3463 Print complete
3464 .Ic typeset
3465 commands that can be used to re-create the attributes (but not the values) of
3466 parameters.
3467 This is the default action (option exists for ksh93 compatibility).
3468 .It Fl R Ns Op Ar n
3469 Right justify attribute.
3470 .Ar n
3471 specifies the field width.
3473 .Ar n
3474 is not specified, the current width of a parameter (or the width of its first
3475 assigned value) is used.
3476 Trailing whitespace is stripped.
3477 If necessary, values are either stripped of leading characters or space
3478 padded to make them fit the field width.
3479 .It Fl r
3480 Read-only attribute.
3481 Parameters with this attribute may not be assigned to or unset.
3482 Once this attribute is set, it cannot be turned off.
3483 .It Fl t
3484 Tag attribute.
3485 Has no meaning to the shell; provided for application use.
3487 For functions,
3488 .Fl t
3489 is the trace attribute.
3490 When functions with the trace attribute are executed, the
3491 .Ic xtrace
3492 .Pq Fl x
3493 shell option is temporarily turned on.
3494 .It Fl U
3495 Unsigned integer attribute.
3496 Integers are printed as unsigned values (only
3497 useful when combined with the
3498 .Fl i
3499 option).
3500 This option is not in the original Korn shell.
3501 .It Fl u
3502 Upper case attribute.
3503 All lower case characters in values are converted to upper case.
3504 (In the original Korn shell, this parameter meant
3505 .Dq unsigned integer
3506 when used with the
3507 .Fl i
3508 option, which meant upper case letters would never be used for bases greater
3509 than 10.
3510 See the
3511 .Fl U
3512 option.)
3514 For functions,
3515 .Fl u
3516 is the undefined attribute.
3518 .Sx Functions
3519 above for the implications of this.
3520 .It Fl x
3521 Export attribute.
3522 Parameters (or functions) are placed in the environment of
3523 any executed commands.
3524 Exported functions are not yet implemented.
3525 .It Fl Z Ns Op Ar n
3526 Zero fill attribute.
3527 If not combined with
3528 .Fl L ,
3529 this is the same as
3530 .Fl R ,
3531 except zero padding is used instead of space padding.
3534 .It Xo
3535 .Ic ulimit
3536 .Op Fl acdfHlmnpSst Op Ar value
3537 .Ar ...
3539 Display or set process limits.
3540 If no options are used, the file size limit
3541 .Pq Fl f
3542 is assumed.
3543 .Ar value ,
3544 if specified, may be either an arithmetic expression starting with a
3545 number or the word
3546 .Dq unlimited .
3547 The limits affect the shell and any processes created by the shell after a
3548 limit is imposed; limits may not be increased once they are set.
3549 .Bl -tag -width 5n
3550 .It Fl a
3551 Display all limits; unless
3552 .Fl H
3553 is used, soft limits are displayed.
3554 .It Fl c Ar n
3555 Impose a size limit of
3556 .Ar n
3557 blocks on the size of core dumps.
3558 .It Fl d Ar n
3559 Impose a size limit of
3560 .Ar n
3561 kilobytes on the size of the data area.
3562 .It Fl f Ar n
3563 Impose a size limit of
3564 .Ar n
3565 blocks on files written by the shell and its child processes (files of any
3566 size may be read).
3567 .It Fl H
3568 Set the hard limit only (the default is to set both hard and soft limits).
3569 .It Fl l Ar n
3570 Impose a limit of
3571 .Ar n
3572 kilobytes on the amount of locked (wired) physical memory.
3573 .It Fl m Ar n
3574 Impose a limit of
3575 .Ar n
3576 kilobytes on the amount of physical memory used.
3577 .It Fl n Ar n
3578 Impose a limit of
3579 .Ar n
3580 file descriptors that can be open at once.
3581 .It Fl p Ar n
3582 Impose a limit of
3583 .Ar n
3584 processes that can be run by the user at any one time.
3585 .It Fl S
3586 Set the soft limit only (the default is to set both hard and soft limits).
3587 .It Fl s Ar n
3588 Impose a size limit of
3589 .Ar n
3590 kilobytes on the size of the stack area.
3591 .It Fl t Ar n
3592 Impose a time limit of
3593 .Ar n
3594 CPU seconds spent in user mode to be used by each process.
3595 .\".It Fl v Ar n
3596 .\"Impose a limit of
3597 .\".Ar n
3598 .\"kilobytes on the amount of virtual memory used.
3601 As far as
3602 .Ic ulimit
3603 is concerned, a block is 512 bytes.
3605 .It Xo
3606 .Ic umask
3607 .Op Fl S
3608 .Op Ar mask
3610 Display or set the file permission creation mask, or umask (see
3611 .Xr umask 2 ) .
3612 If the
3613 .Fl S
3614 option is used, the mask displayed or set is symbolic; otherwise, it is an
3615 octal number.
3617 Symbolic masks are like those used by
3618 .Xr chmod 1 .
3619 When used, they describe what permissions may be made available (as opposed to
3620 octal masks in which a set bit means the corresponding bit is to be cleared).
3621 For example,
3622 .Dq ug=rwx,o=
3623 sets the mask so files will not be readable, writable, or executable by
3624 .Dq others ,
3625 and is equivalent (on most systems) to the octal mask
3626 .Dq 007 .
3628 .It Xo
3629 .Ic unalias
3630 .Op Fl adt
3631 .Op Ar name ...
3633 The aliases for the given names are removed.
3634 If the
3635 .Fl a
3636 option is used, all aliases are removed.
3637 If the
3638 .Fl t
3640 .Fl d
3641 options are used, the indicated operations are carried out on tracked or
3642 directory aliases, respectively.
3644 .It Xo
3645 .Ic unset
3646 .Op Fl fv
3647 .Ar parameter ...
3649 Unset the named parameters
3651 .Fl v ,
3652 the default
3654 or functions
3655 .Pq Fl f .
3656 The exit status is non-zero if any of the parameters have the read-only
3657 attribute set, zero otherwise.
3659 .It Ic wait Op Ar job ...
3660 Wait for the specified job(s) to finish.
3661 The exit status of
3662 .Ic wait
3663 is that of the last specified job; if the last job is killed by a signal, the
3664 exit status is 128 + the number of the signal (see
3665 .Ic kill -l Ar exit-status
3666 above); if the last specified job can't be found (because it never existed, or
3667 had already finished), the exit status of
3668 .Ic wait
3669 is 127.
3671 .Sx Job control
3672 below for the format of
3673 .Ar job .
3674 .Ic wait
3675 will return if a signal for which a trap has been set is received, or if a
3676 .Dv SIGHUP ,
3677 .Dv SIGINT ,
3679 .Dv SIGQUIT
3680 signal is received.
3682 If no jobs are specified,
3683 .Ic wait
3684 waits for all currently running jobs (if any) to finish and exits with a zero
3685 status.
3686 If job monitoring is enabled, the completion status of jobs is printed
3687 (this is not the case when jobs are explicitly specified).
3689 .It Xo
3690 .Ic whence
3691 .Op Fl pv
3692 .Op Ar name ...
3694 For each
3695 .Ar name ,
3696 the type of command is listed (reserved word, built-in, alias,
3697 function, tracked alias, or executable).
3698 If the
3699 .Fl p
3700 option is used, a path search is performed even if
3701 .Ar name
3702 is a reserved word, alias, etc.
3703 Without the
3704 .Fl v
3705 option,
3706 .Ic whence
3707 is similar to
3708 .Ic command Fl v
3709 except that
3710 .Ic whence
3711 will find reserved words and won't print aliases as alias commands.
3712 With the
3713 .Fl v
3714 option,
3715 .Ic whence
3716 is the same as
3717 .Ic command Fl V .
3718 Note that for
3719 .Ic whence ,
3721 .Fl p
3722 option does not affect the search path used, as it does for
3723 .Ic command .
3724 If the type of one or more of the names could not be determined, the exit
3725 status is non-zero.
3727 .Ss Job control
3728 Job control refers to the shell's ability to monitor and control jobs, which
3729 are processes or groups of processes created for commands or pipelines.
3730 At a minimum, the shell keeps track of the status of the background (i.e.\&
3731 asynchronous) jobs that currently exist; this information can be displayed
3732 using the
3733 .Ic jobs
3734 commands.
3735 If job control is fully enabled (using
3736 .Ic set -m
3738 .Ic set -o monitor ) ,
3739 as it is for interactive shells, the processes of a job are placed in their
3740 own process group.
3741 Foreground jobs can be stopped by typing the suspend
3742 character from the terminal (normally ^Z), jobs can be restarted in either the
3743 foreground or background using the
3744 .Ic fg
3746 .Ic bg
3747 commands, and the state of the terminal is saved or restored when a foreground
3748 job is stopped or restarted, respectively.
3750 Note that only commands that create processes (e.g. asynchronous commands,
3751 subshell commands, and non-built-in, non-function commands) can be stopped;
3752 commands like
3753 .Ic read
3754 cannot be.
3756 When a job is created, it is assigned a job number.
3757 For interactive shells, this number is printed inside
3758 .Dq [..] ,
3759 followed by the process IDs of the processes in the job when an asynchronous
3760 command is run.
3761 A job may be referred to in the
3762 .Ic bg ,
3763 .Ic fg ,
3764 .Ic jobs ,
3765 .Ic kill ,
3767 .Ic wait
3768 commands either by the process ID of the last process in the command pipeline
3769 (as stored in the
3770 .Ic $!\&
3771 parameter) or by prefixing the job number with a percent
3772 sign
3773 .Pq Sq % .
3774 Other percent sequences can also be used to refer to jobs:
3775 .Bl -tag -width "%+ | %% | %XX"
3776 .It %+ \*(Ba %% \*(Ba %
3777 The most recently stopped job, or, if there are no stopped jobs, the oldest
3778 running job.
3779 .It %-
3780 The job that would be the
3781 .Ic %+
3782 job if the latter did not exist.
3783 .It % Ns Ar n
3784 The job with job number
3785 .Ar n .
3786 .It %? Ns Ar string
3787 The job with its command containing the string
3788 .Ar string
3789 (an error occurs if multiple jobs are matched).
3790 .It % Ns Ar string
3791 The job with its command starting with the string
3792 .Ar string
3793 (an error occurs if multiple jobs are matched).
3796 When a job changes state (e.g. a background job finishes or foreground job is
3797 stopped), the shell prints the following status information:
3799 .D1 [ Ns Ar number ] Ar flag status command
3801 where...
3802 .Bl -tag -width "command"
3803 .It Ar number
3804 is the job number of the job;
3805 .It Ar flag
3806 is the
3807 .Ql +
3809 .Ql -
3810 character if the job is the
3811 .Ic %+
3813 .Ic %-
3814 job, respectively, or space if it is neither;
3815 .It Ar status
3816 indicates the current state of the job and can be:
3817 .Bl -tag -width "RunningXX"
3818 .It Done Op Ar number
3819 The job exited.
3820 .Ar number
3821 is the exit status of the job, which is omitted if the status is zero.
3822 .It Running
3823 The job has neither stopped nor exited (note that running does not necessarily
3824 mean consuming CPU time \-
3825 the process could be blocked waiting for some event).
3826 .It Stopped Op Ar signal
3827 The job was stopped by the indicated
3828 .Ar signal
3829 (if no signal is given, the job was stopped by
3830 .Dv SIGTSTP ) .
3831 .It Ar signal-description Op Dq core dumped
3832 The job was killed by a signal (e.g. memory fault, hangup); use
3833 .Ic kill -l
3834 for a list of signal descriptions.
3836 .Dq core dumped
3837 message indicates the process created a core file.
3839 .It Ar command
3840 is the command that created the process.
3841 If there are multiple processes in
3842 the job, each process will have a line showing its
3843 .Ar command
3844 and possibly its
3845 .Ar status ,
3846 if it is different from the status of the previous process.
3849 When an attempt is made to exit the shell while there are jobs in the stopped
3850 state, the shell warns the user that there are stopped jobs and does not exit.
3851 If another attempt is immediately made to exit the shell, the stopped jobs are
3852 sent a
3853 .Dv SIGHUP
3854 signal and the shell exits.
3855 Similarly, if the
3856 .Ic nohup
3857 option is not set and there are running jobs when an attempt is made to exit
3858 a login shell, the shell warns the user and does not exit.
3859 If another attempt
3860 is immediately made to exit the shell, the running jobs are sent a
3861 .Dv SIGHUP
3862 signal and the shell exits.
3863 .Sh FILES
3864 .Bl -tag -width "/etc/suid_profileXX" -compact
3865 .It Pa ~/.profile
3866 User's login profile.
3867 .It Pa /etc/profile
3868 System login profile.
3869 .It Pa /etc/suid_profile
3870 Privileged shell profile.
3871 .It Pa /etc/shells
3872 Shell database.
3874 .Sh SEE ALSO
3875 .Xr csh 1 ,
3876 .Xr ed 1 ,
3877 .Xr ksh 1 ,
3878 .Xr mg 1 ,
3879 .Xr stty 1 ,
3880 .Xr vi 1 ,
3881 .Xr shells 5 ,
3882 .Xr environ 7 ,
3883 .Xr script 7
3885 .%A Morris Bolsky
3886 .%A David Korn
3887 .%T "The KornShell Command and Programming Language"
3888 .%D 1983
3889 .%O "ISBN 0-13-516972-0"
3892 .%A Stephen G. Kochan
3893 .%A Patrick H. Wood
3894 .%T "UNIX Shell Programming"
3895 .%O "Hayden"
3898 .%A "IEEE Inc."
3899 .%T "IEEE Standard for Information Technology \- Portable Operating " \
3900     "System Interface (POSIX) \- Part 2: Shell and Utilities"
3901 .%D 1993
3902 .%O "ISBN 1-55937-266-9"
3904 .Sh NOTES
3906 is implemented as a run-time option of
3907 .Nm pdksh ,
3908 with only those
3910 features whose syntax or semantics are incompatible with a traditional Bourne
3911 shell disabled.
3912 Since this leaves some
3914 extensions exposed, caution should be used where backwards compatibility with
3915 traditional Bourne or POSIX compliant shells is an issue.
3916 .Sh AUTHORS
3917 This shell is based on the public domain 7th edition Bourne shell clone by
3918 Charles Forsyth and parts of the BRL shell by Doug A. Gwyn, Doug Kingston,
3919 Ron Natalie, Arnold Robbins, Lou Salkind, and others.
3920 The first release of
3921 .Nm pdksh
3922 was created by Eric Gisin, and it was subsequently maintained by John R.\&
3923 MacMillan (change!john@sq.sq.com), Simon J. Gerraty (sjg@zen.void.oz.au),
3924 and Michael Rendell (michael@cs.mun.ca).
3926 .Pa CONTRIBUTORS
3927 file in the source distribution contains a more complete list of people and
3928 their part in the shell's development.
3929 .\" .Sh BUGS
3930 .\" Any bugs in
3931 .\" .Nm pdksh
3932 .\" should be reported to pdksh@cs.mun.ca.
3933 .\" Please include the version of
3934 .\" .Nm pdksh
3935 .\" .Po
3936 .\" .Ic echo $KSH_VERSION
3937 .\" shows it
3938 .\" .Pc ,
3939 .\" the machine, operating system, and compiler you are using and a description of
3940 .\" how to repeat the bug (a small shell script that demonstrates the bug is best).
3941 .\" The following, if relevant (if you are not sure, include them), can also be
3942 .\" helpful: options you are using (both
3943 .\" .Pa options.h
3944 .\" and
3945 .\" .Ic set Fl o Ic options )
3946 .\" and a copy of your
3947 .\" .Pa config.h
3948 .\" (the file generated by the
3949 .\" .Pa configure
3950 .\" script).
3951 .\" New versions of
3952 .\" .Nm pdksh
3953 .\" can be obtained from ftp://ftp.cs.mun.ca/pub/pdksh.
3954 .\" .Pp
3955 .\" BTW, the most frequently reported bug is:
3956 .\" .Bd -literal -offset indent
3957 .\" $ echo hi | read a; echo $a   # Does not print hi
3958 .\" .Ed
3959 .\" .Pp
3960 .\" I'm aware of this and there is no need to report it.