OSDN Git Service

Merge "Upgrade to mksh R55." am: 693c2ea1e4 am: e0d2df7f07
[android-x86/external-mksh.git] / src / mksh.1
1 .\" $MirOS: src/bin/mksh/mksh.1,v 1.442 2017/04/12 18:30:58 tg Exp $
2 .\" $OpenBSD: ksh.1,v 1.160 2015/07/04 13:27:04 feinerer Exp $
3 .\"-
4 .\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
5 .\"             2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
6 .\"     mirabilos <m@mirbsd.org>
7 .\"
8 .\" Provided that these terms and disclaimer and all copyright notices
9 .\" are retained or reproduced in an accompanying document, permission
10 .\" is granted to deal in this work without restriction, including un‐
11 .\" limited rights to use, publicly perform, distribute, sell, modify,
12 .\" merge, give away, or sublicence.
13 .\"
14 .\" This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
15 .\" the utmost extent permitted by applicable law, neither express nor
16 .\" implied; without malicious intent or gross negligence. In no event
17 .\" may a licensor, author or contributor be held liable for indirect,
18 .\" direct, other damage, loss, or other issues arising in any way out
19 .\" of dealing in the work, even if advised of the possibility of such
20 .\" damage or existence of a defect, except proven that it results out
21 .\" of said person’s immediate fault when using the work as intended.
22 .\"-
23 .\" Try to make GNU groff and AT&T nroff more compatible
24 .\" * ` generates ‘ in gnroff, so use \`
25 .\" * ' generates ’ in gnroff, \' generates ´, so use \*(aq
26 .\" * - generates ‐ in gnroff, \- generates −, so .tr it to -
27 .\"   thus use - for hyphens and \- for minus signs and option dashes
28 .\" * ~ is size-reduced and placed atop in groff, so use \*(TI
29 .\" * ^ is size-reduced and placed atop in groff, so use \*(ha
30 .\" * \(en does not work in nroff, so use \*(en
31 .\" * <>| are problematic, so redefine and use \*(Lt\*(Gt\*(Ba
32 .\" Also make sure to use \& *before* a punctuation char that is to not
33 .\" be interpreted as punctuation, and especially with two-letter words
34 .\" but also (after) a period that does not end a sentence (“e.g.\&”).
35 .\" The section after the "doc" macropackage has been loaded contains
36 .\" additional code to convene between the UCB mdoc macropackage (and
37 .\" its variant as BSD mdoc in groff) and the GNU mdoc macropackage.
38 .\"
39 .ie \n(.g \{\
40 .       if \ 1\*[.T]\ 1ascii\ 1 .tr \-\N'45'
41 .       if \ 1\*[.T]\ 1latin1\ 1 .tr \-\N'45'
42 .       if \ 1\*[.T]\ 1utf8\ 1 .tr \-\N'45'
43 .       ds <= \[<=]
44 .       ds >= \[>=]
45 .       ds Rq \[rq]
46 .       ds Lq \[lq]
47 .       ds sL \(aq
48 .       ds sR \(aq
49 .       if \ 1\*[.T]\ 1utf8\ 1 .ds sL `
50 .       if \ 1\*[.T]\ 1ps\ 1 .ds sL `
51 .       if \ 1\*[.T]\ 1utf8\ 1 .ds sR '
52 .       if \ 1\*[.T]\ 1ps\ 1 .ds sR '
53 .       ds aq \(aq
54 .       ds TI \(ti
55 .       ds ha \(ha
56 .       ds en \(en
57 .\}
58 .el \{\
59 .       ds aq '
60 .       ds TI ~
61 .       ds ha ^
62 .       ds en \(em
63 .\}
64 .\"
65 .\" Implement .Dd with the Mdocdate RCS keyword
66 .\"
67 .rn Dd xD
68 .de Dd
69 .ie \a\\$1\a$Mdocdate:\a \{\
70 .       xD \\$2 \\$3, \\$4
71 .\}
72 .el .xD \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
73 ..
74 .\"
75 .\" .Dd must come before definition of .Mx, because when called
76 .\" with -mandoc, it might implement .Mx itself, but we want to
77 .\" use our own definition. And .Dd must come *first*, always.
78 .\"
79 .Dd $Mdocdate: April 12 2017 $
80 .\"
81 .\" Check which macro package we use, and do other -mdoc setup.
82 .\"
83 .ie \n(.g \{\
84 .       if \ 1\*[.T]\ 1utf8\ 1 .tr \[la]\*(Lt
85 .       if \ 1\*[.T]\ 1utf8\ 1 .tr \[ra]\*(Gt
86 .       ie d volume-ds-1 .ds tT gnu
87 .       el .ds tT bsd
88 .\}
89 .el .ds tT ucb
90 .\"
91 .\" Implement .Mx (MirBSD)
92 .\"
93 .ie "\*(tT"gnu" \{\
94 .       eo
95 .       de Mx
96 .       nr curr-font \n[.f]
97 .       nr curr-size \n[.ps]
98 .       ds str-Mx \f[\n[curr-font]]\s[\n[curr-size]u]
99 .       ds str-Mx1 \*[Tn-font-size]\%MirOS\*[str-Mx]
100 .       if !\n[arg-limit] \
101 .       if \n[.$] \{\
102 .       ds macro-name Mx
103 .       parse-args \$@
104 .       \}
105 .       if (\n[arg-limit] > \n[arg-ptr]) \{\
106 .       nr arg-ptr +1
107 .       ie (\n[type\n[arg-ptr]] == 2) \
108 .       as str-Mx1 \~\*[arg\n[arg-ptr]]
109 .       el \
110 .       nr arg-ptr -1
111 .       \}
112 .       ds arg\n[arg-ptr] "\*[str-Mx1]
113 .       nr type\n[arg-ptr] 2
114 .       ds space\n[arg-ptr] "\*[space]
115 .       nr num-args (\n[arg-limit] - \n[arg-ptr])
116 .       nr arg-limit \n[arg-ptr]
117 .       if \n[num-args] \
118 .       parse-space-vector
119 .       print-recursive
120 ..
121 .       ec
122 .       ds sP \s0
123 .       ds tN \*[Tn-font-size]
124 .\}
125 .el \{\
126 .       de Mx
127 .       nr cF \\n(.f
128 .       nr cZ \\n(.s
129 .       ds aa \&\f\\n(cF\s\\n(cZ
130 .       if \\n(aC==0 \{\
131 .               ie \\n(.$==0 \&MirOS\\*(aa
132 .               el .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
133 .       \}
134 .       if \\n(aC>\\n(aP \{\
135 .               nr aP \\n(aP+1
136 .               ie \\n(C\\n(aP==2 \{\
137 .                       as b1 \&MirOS\ #\&\\*(A\\n(aP\\*(aa
138 .                       ie \\n(aC>\\n(aP \{\
139 .                               nr aP \\n(aP+1
140 .                               nR
141 .                       \}
142 .                       el .aZ
143 .               \}
144 .               el \{\
145 .                       as b1 \&MirOS\\*(aa
146 .                       nR
147 .               \}
148 .       \}
149 ..
150 .\}
151 .\"-
152 .Dt MKSH 1
153 .Os MirBSD
154 .Sh NAME
155 .Nm mksh ,
156 .Nm sh
157 .Nd MirBSD Korn shell
158 .Sh SYNOPSIS
159 .Nm
160 .Bk -words
161 .Op Fl +abCefhiklmnprUuvXx
162 .Oo
163 .Fl T Oo Ar \&! Oc Ns Ar tty
164 \*(Ba
165 .Ar \&\-
166 .Oc
167 .Op Fl +o Ar option
168 .Oo
169 .Fl c Ar string \*(Ba
170 .Fl s \*(Ba
171 .Ar file
172 .Op Ar argument ...
173 .Oc
174 .Ek
175 .Nm builtin-name
176 .Op Ar argument ...
177 .Sh DESCRIPTION
178 .Nm
179 is a command interpreter intended for both interactive and shell
180 script use.
181 Its command language is a superset of the
182 .Xr sh C
183 shell language and largely compatible to the original Korn shell.
184 At times, this manual page may give scripting advice; while it
185 sometimes does take portable shell scripting or various standards
186 into account all information is first and foremost presented with
187 .Nm
188 in mind and should be taken as such.
189 .Ss I use Android, OS/2, etc. so what...?
190 Please see the FAQ at the end of this document.
191 .Ss Invocation
192 Most builtins can be called directly, for example if a link points from its
193 name to the shell; not all make sense, have been tested or work at all though.
194 .Pp
195 The options are as follows:
196 .Bl -tag -width XcXstring
197 .It Fl c Ar string
198 .Nm
199 will execute the command(s) contained in
200 .Ar string .
201 .It Fl i
202 Interactive shell.
203 A shell that reads commands from standard input is
204 .Dq interactive
205 if this
206 option is used or if both standard input and standard error are attached
207 to a
208 .Xr tty 4 .
209 An interactive shell has job control enabled, ignores the
210 .Dv SIGINT ,
211 .Dv SIGQUIT
212 and
213 .Dv SIGTERM
214 signals, and prints prompts before reading input (see the
215 .Ev PS1
216 and
217 .Ev PS2
218 parameters).
219 It also processes the
220 .Ev ENV
221 parameter or the
222 .Pa mkshrc
223 file (see below).
224 For non-interactive shells, the
225 .Ic trackall
226 option is on by default (see the
227 .Ic set
228 command below).
229 .It Fl l
230 Login shell.
231 If the basename the shell is called with (i.e. argv[0])
232 starts with
233 .Ql \-
234 or if this option is used,
235 the shell is assumed to be a login shell; see
236 .Sx Startup files
237 below.
238 .It Fl p
239 Privileged shell.
240 A shell is
241 .Dq privileged
242 if the real user ID or group ID does not match the
243 effective user ID or group ID (see
244 .Xr getuid 2
245 and
246 .Xr getgid 2 ) .
247 Clearing the privileged option causes the shell to set
248 its effective user ID (group ID) to its real user ID (group ID).
249 For further implications, see
250 .Sx Startup files .
251 If the shell is privileged and this flag is not explicitly set, the
252 .Dq privileged
253 option is cleared automatically after processing the startup files.
254 .It Fl r
255 Restricted shell.
256 A shell is
257 .Dq restricted
258 if this
259 option is used.
260 The following restrictions come into effect after the shell processes any
261 profile and
262 .Ev ENV
263 files:
264 .Pp
265 .Bl -bullet -compact
266 .It
267 The
268 .Ic cd
269 .Po and Ic chdir Pc
270 command is disabled.
271 .It
272 The
273 .Ev SHELL ,
274 .Ev ENV
275 and
276 .Ev PATH
277 parameters cannot be changed.
278 .It
279 Command names can't be specified with absolute or relative paths.
280 .It
281 The
282 .Fl p
283 option of the built-in command
284 .Ic command
285 can't be used.
286 .It
287 Redirections that create files can't be used (i.e.\&
288 .Dq Li \*(Gt ,
289 .Dq Li \*(Gt\*(Ba ,
290 .Dq Li \*(Gt\*(Gt ,
291 .Dq Li \*(Lt\*(Gt ) .
292 .El
293 .It Fl s
294 The shell reads commands from standard input; all non-option arguments
295 are positional parameters.
296 .It Fl T Ar name
297 Spawn
298 .Nm
299 on the
300 .Xr tty 4
301 device given.
302 The paths
303 .Ar name ,
304 .Pa /dev/ttyC Ns Ar name
305 and
306 .Pa /dev/tty Ns Ar name
307 are attempted in order.
308 Unless
309 .Ar name
310 begins with an exclamation mark
311 .Pq Ql \&! ,
312 this is done in a subshell and returns immediately.
313 If
314 .Ar name
315 is a dash
316 .Pq Ql \&\- ,
317 detach from controlling terminal (daemonise) instead.
318 .El
319 .Pp
320 In addition to the above, the options described in the
321 .Ic set
322 built-in command can also be used on the command line:
323 both
324 .Op Fl +abCefhkmnuvXx
325 and
326 .Op Fl +o Ar option
327 can be used for single letter or long options, respectively.
328 .Pp
329 If neither the
330 .Fl c
331 nor the
332 .Fl s
333 option is specified, the first non-option argument specifies the name
334 of a file the shell reads commands from.
335 If there are no non-option
336 arguments, the shell reads commands from the standard input.
337 The name of the shell (i.e. the contents of $0)
338 is determined as follows: if the
339 .Fl c
340 option is used and there is a non-option argument, it is used as the name;
341 if commands are being read from a file, the file is used as the name;
342 otherwise, the basename the shell was called with (i.e. argv[0]) is used.
343 .Pp
344 The exit status of the shell is 127 if the command file specified on the
345 command line could not be opened, or non-zero if a fatal syntax error
346 occurred during the execution of a script.
347 In the absence of fatal errors,
348 the exit status is that of the last command executed, or zero if no
349 command is executed.
350 .Ss Startup files
351 For the actual location of these files, see
352 .Sx FILES .
353 A login shell processes the system profile first.
354 A privileged shell then processes the suid profile.
355 A non-privileged login shell processes the user profile next.
356 A non-privileged interactive shell checks the value of the
357 .Ev ENV
358 parameter after subjecting it to parameter, command, arithmetic and tilde
359 .Pq Ql \*(TI
360 substitution; if unset or empty, the user mkshrc profile is processed;
361 otherwise, if a file whose name is the substitution result exists,
362 it is processed; non-existence is silently ignored.
363 A privileged shell then drops privileges if neither was the
364 .Fl p
365 option given on the command line nor set during execution of the startup files.
366 .Ss Command syntax
367 The shell begins parsing its input by removing any backslash-newline
368 combinations, then breaking it into
369 .Em words .
370 Words (which are sequences of characters) are delimited by unquoted whitespace
371 characters (space, tab and newline) or meta-characters
372 .Po
373 .Ql \*(Lt ,
374 .Ql \*(Gt ,
375 .Ql \*(Ba ,
376 .Ql \&; ,
377 .Ql \&( ,
378 .Ql \&)
379 and
380 .Ql &
381 .Pc .
382 Aside from delimiting words, spaces and tabs are ignored, while newlines
383 usually delimit commands.
384 The meta-characters are used in building the following
385 .Em tokens :
386 .Dq Li \*(Lt ,
387 .Dq Li \*(Lt& ,
388 .Dq Li \*(Lt\*(Lt ,
389 .Dq Li \*(Lt\*(Lt\*(Lt ,
390 .Dq Li \*(Gt ,
391 .Dq Li \*(Gt& ,
392 .Dq Li \*(Gt\*(Gt ,
393 .Dq Li &\*(Gt ,
394 etc. are used to specify redirections (see
395 .Sx Input/output redirection
396 below);
397 .Dq Li \*(Ba
398 is used to create pipelines;
399 .Dq Li \*(Ba&
400 is used to create co-processes (see
401 .Sx Co-processes
402 below);
403 .Dq Li \&;
404 is used to separate commands;
405 .Dq Li &
406 is used to create asynchronous pipelines;
407 .Dq Li &&
408 and
409 .Dq Li \*(Ba\*(Ba
410 are used to specify conditional execution;
411 .Dq Li \&;; ,
412 .Dq Li \&;&
413 and
414 .Dq Li \&;\*(Ba
415 are used in
416 .Ic case
417 statements;
418 .Dq Li \&(( ... \&))
419 is used in arithmetic expressions;
420 and lastly,
421 .Dq Li \&( ... \&)
422 is used to create subshells.
423 .Pp
424 Whitespace and meta-characters can be quoted individually using a backslash
425 .Pq Ql \e ,
426 or in groups using double
427 .Pq Ql \&"
428 or single
429 .Pq Dq Li \*(aq
430 quotes.
431 Note that the following characters are also treated specially by the
432 shell and must be quoted if they are to represent themselves:
433 .Ql \e ,
434 .Ql \&" ,
435 .Dq Li \*(aq ,
436 .Ql # ,
437 .Ql $ ,
438 .Ql \` ,
439 .Ql \*(TI ,
440 .Ql { ,
441 .Ql } ,
442 .Ql * ,
443 .Ql \&?
444 and
445 .Ql \&[ .
446 The first three of these are the above mentioned quoting characters (see
447 .Sx Quoting
448 below);
449 .Ql # ,
450 if used at the beginning of a word, introduces a comment \*(en everything after
451 the
452 .Ql #
453 up to the nearest newline is ignored;
454 .Ql $
455 is used to introduce parameter, command and arithmetic substitutions (see
456 .Sx Substitution
457 below);
458 .Ql \`
459 introduces an old-style command substitution (see
460 .Sx Substitution
461 below);
462 .Ql \*(TI
463 begins a directory expansion (see
464 .Sx Tilde expansion
465 below);
466 .Ql {
467 and
468 .Ql }
469 delimit
470 .Xr csh 1 Ns -style
471 alternations (see
472 .Sx Brace expansion
473 below);
474 and finally,
475 .Ql * ,
476 .Ql \&?
477 and
478 .Ql \&[
479 are used in file name generation (see
480 .Sx File name patterns
481 below).
482 .Pp
483 As words and tokens are parsed, the shell builds commands, of which there
484 are two basic types:
485 .Em simple-commands ,
486 typically programmes that are executed, and
487 .Em compound-commands ,
488 such as
489 .Ic for
490 and
491 .Ic if
492 statements, grouping constructs and function definitions.
493 .Pp
494 A simple-command consists of some combination of parameter assignments
495 (see
496 .Sx Parameters
497 below),
498 input/output redirections (see
499 .Sx Input/output redirections
500 below)
501 and command words; the only restriction is that parameter assignments come
502 before any command words.
503 The command words, if any, define the command
504 that is to be executed and its arguments.
505 The command may be a shell built-in command, a function
506 or an external command
507 (i.e. a separate executable file that is located using the
508 .Ev PATH
509 parameter; see
510 .Sx Command execution
511 below).
512 Note that all command constructs have an exit status: for external commands,
513 this is related to the status returned by
514 .Xr wait 2
515 (if the command could not be found, the exit status is 127; if it could not
516 be executed, the exit status is 126); the exit status of other command
517 constructs (built-in commands, functions, compound-commands, pipelines, lists,
518 etc.) are all well-defined and are described where the construct is
519 described.
520 The exit status of a command consisting only of parameter
521 assignments is that of the last command substitution performed during the
522 parameter assignment or 0 if there were no command substitutions.
523 .Pp
524 Commands can be chained together using the
525 .Dq Li \*(Ba
526 token to form pipelines, in which the standard output of each command but the
527 last is piped (see
528 .Xr pipe 2 )
529 to the standard input of the following command.
530 The exit status of a pipeline is that of its last command, unless the
531 .Ic pipefail
532 option is set (see there).
533 All commands of a pipeline are executed in separate subshells;
534 this is allowed by POSIX but differs from both variants of
535 .At
536 .Nm ksh ,
537 where all but the last command were executed in subshells; see the
538 .Ic read
539 builtin's description for implications and workarounds.
540 A pipeline may be prefixed by the
541 .Dq Li \&!
542 reserved word which causes the exit status of the pipeline to be logically
543 complemented: if the original status was 0, the complemented status will be 1;
544 if the original status was not 0, the complemented status will be 0.
545 .Pp
546 .Em Lists
547 of commands can be created by separating pipelines by any of the following
548 tokens:
549 .Dq Li && ,
550 .Dq Li \*(Ba\*(Ba ,
551 .Dq Li & ,
552 .Dq Li \*(Ba&
553 and
554 .Dq Li \&; .
555 The first two are for conditional execution:
556 .Dq Ar cmd1 No && Ar cmd2
557 executes
558 .Ar cmd2
559 only if the exit status of
560 .Ar cmd1
561 is zero;
562 .Dq Li \*(Ba\*(Ba
563 is the opposite \*(en
564 .Ar cmd2
565 is executed only if the exit status of
566 .Ar cmd1
567 is non-zero.
568 .Dq Li &&
569 and
570 .Dq Li \*(Ba\*(Ba
571 have equal precedence which is higher than that of
572 .Dq Li & ,
573 .Dq Li \*(Ba&
574 and
575 .Dq Li \&; ,
576 which also have equal precedence.
577 Note that the
578 .Dq Li &&
579 and
580 .Dq Li \*(Ba\*(Ba
581 operators are
582 .Qq left-associative .
583 For example, both of these commands will print only
584 .Qq bar :
585 .Bd -literal -offset indent
586 $ false && echo foo \*(Ba\*(Ba echo bar
587 $ true \*(Ba\*(Ba echo foo && echo bar
588 .Ed
589 .Pp
590 The
591 .Dq Li &
592 token causes the preceding command to be executed asynchronously; that is,
593 the shell starts the command but does not wait for it to complete (the shell
594 does keep track of the status of asynchronous commands; see
595 .Sx Job control
596 below).
597 When an asynchronous command is started when job control is disabled
598 (i.e. in most scripts), the command is started with signals
599 .Dv SIGINT
600 and
601 .Dv SIGQUIT
602 ignored and with input redirected from
603 .Pa /dev/null
604 (however, redirections specified in the asynchronous command have precedence).
605 The
606 .Dq Li \*(Ba&
607 operator starts a co-process which is a special kind of asynchronous process
608 (see
609 .Sx Co-processes
610 below).
611 Note that a command must follow the
612 .Dq Li &&
613 and
614 .Dq Li \*(Ba\*(Ba
615 operators, while it need not follow
616 .Dq Li & ,
617 .Dq Li \*(Ba&
618 or
619 .Dq Li \&; .
620 The exit status of a list is that of the last command executed, with the
621 exception of asynchronous lists, for which the exit status is 0.
622 .Pp
623 Compound commands are created using the following reserved words.
624 These words
625 are only recognised if they are unquoted and if they are used as the first
626 word of a command (i.e. they can't be preceded by parameter assignments or
627 redirections):
628 .Bd -literal -offset indent
629 case     else     function     then      !       (
630 do       esac     if           time      [[      ((
631 done     fi       in           until     {
632 elif     for      select       while     }
633 .Ed
634 .Pp
635 In the following compound command descriptions, command lists (denoted as
636 .Em list )
637 that are followed by reserved words must end with a semicolon, a newline or
638 a (syntactically correct) reserved word.
639 For example, the following are all valid:
640 .Bd -literal -offset indent
641 $ { echo foo; echo bar; }
642 $ { echo foo; echo bar\*(Ltnewline\*(Gt}
643 $ { { echo foo; echo bar; } }
644 .Ed
645 .Pp
646 This is not valid:
647 .Pp
648 .Dl $ { echo foo; echo bar }
649 .Bl -tag -width 4n
650 .It Pq Ar list
651 Execute
652 .Ar list
653 in a subshell.
654 There is no implicit way to pass environment changes from a
655 subshell back to its parent.
656 .It { Ar list ; No }
657 Compound construct;
658 .Ar list
659 is executed, but not in a subshell.
660 Note that
661 .Dq Li {
662 and
663 .Dq Li }
664 are reserved words, not meta-characters.
665 .It Xo case Ar word No in
666 .Oo Op \&(
667 .Ar pattern
668 .Op \*(Ba Ar pattern
669 .No ... Ns )
670 .Ar list
671 .Ic terminator
672 .Oc No ... esac
673 .Xc
674 The
675 .Ic case
676 statement attempts to match
677 .Ar word
678 against a specified
679 .Ar pattern ;
680 the
681 .Ar list
682 associated with the first successfully matched pattern is executed.
683 Patterns used in
684 .Ic case
685 statements are the same as those used for file name patterns except that the
686 restrictions regarding
687 .Ql \&.
688 and
689 .Ql /
690 are dropped.
691 Note that any unquoted space before and after a pattern is
692 stripped; any space within a pattern must be quoted.
693 Both the word and the
694 patterns are subject to parameter, command and arithmetic substitution, as
695 well as tilde substitution.
696 .Pp
697 For historical reasons, open and close braces may be used instead of
698 .Ic in
699 and
700 .Ic esac
701 e.g.\&
702 .Ic case $foo { *) echo bar ;; } .
703 .Pp
704 The list
705 .Ic terminator Ns s
706 are:
707 .Bl -tag -width 4n
708 .It Dq Li ;;
709 Terminate after the list.
710 .It Dq Li \&;&
711 Fall through into the next list.
712 .It Dq Li \&;\*(Ba
713 Evaluate the remaining pattern-list tuples.
714 .El
715 .Pp
716 The exit status of a
717 .Ic case
718 statement is that of the executed
719 .Ar list ;
720 if no
721 .Ar list
722 is executed, the exit status is zero.
723 .It Xo for Ar name
724 .Oo in Ar word No ... Oc ;
725 .No do Ar list ; No done
726 .Xc
727 For each
728 .Ar word
729 in the specified word list, the parameter
730 .Ar name
731 is set to the word and
732 .Ar list
733 is executed.
734 If
735 .Ic in
736 is not used to specify a word list, the positional parameters ($1, $2,
737 etc.) are used instead.
738 For historical reasons, open and close braces may be used instead of
739 .Ic do
740 and
741 .Ic done
742 e.g.\&
743 .Ic for i; { echo $i; } .
744 The exit status of a
745 .Ic for
746 statement is the last exit status of
747 .Ar list ;
748 if
749 .Ar list
750 is never executed, the exit status is zero.
751 .It Xo if Ar list ;
752 .No then Ar list ;
753 .Oo elif Ar list ;
754 .No then Ar list ; Oc
755 .No ...
756 .Oo else Ar list ; Oc
757 .No fi
758 .Xc
759 If the exit status of the first
760 .Ar list
761 is zero, the second
762 .Ar list
763 is executed; otherwise, the
764 .Ar list
765 following the
766 .Ic elif ,
767 if any, is executed with similar consequences.
768 If all the lists following the
769 .Ic if
770 and
771 .Ic elif Ns s
772 fail (i.e. exit with non-zero status), the
773 .Ar list
774 following the
775 .Ic else
776 is executed.
777 The exit status of an
778 .Ic if
779 statement is that of non-conditional
780 .Ar list
781 that is executed; if no non-conditional
782 .Ar list
783 is executed, the exit status is zero.
784 .It Xo select Ar name
785 .Oo in Ar word No ... Oc ;
786 .No do Ar list ; No done
787 .Xc
788 The
789 .Ic select
790 statement provides an automatic method of presenting the user with a menu and
791 selecting from it.
792 An enumerated list of the specified
793 .Ar word Ns (s)
794 is printed on standard error, followed by a prompt
795 .Po
796 .Ev PS3 :
797 normally
798 .Dq Li #?\ \&
799 .Pc .
800 A number corresponding to one of the enumerated words is then read from
801 standard input,
802 .Ar name
803 is set to the selected word (or unset if the selection is not valid),
804 .Ev REPLY
805 is set to what was read (leading/trailing space is stripped), and
806 .Ar list
807 is executed.
808 If a blank line (i.e. zero or more
809 .Ev IFS
810 octets) is entered, the menu is reprinted without executing
811 .Ar list .
812 .Pp
813 When
814 .Ar list
815 completes, the enumerated list is printed if
816 .Ev REPLY
817 is empty, the prompt is printed, and so on.
818 This process continues until an end-of-file
819 is read, an interrupt is received, or a
820 .Ic break
821 statement is executed inside the loop.
822 If
823 .Dq in Ar word ...
824 is omitted, the positional parameters are used
825 (i.e. $1, $2, etc.).
826 For historical reasons, open and close braces may be used instead of
827 .Ic do
828 and
829 .Ic done
830 e.g.\&
831 .Ic select i; { echo $i; } .
832 The exit status of a
833 .Ic select
834 statement is zero if a
835 .Ic break
836 statement is used to exit the loop, non-zero otherwise.
837 .It Xo until Ar list ;
838 .No do Ar list ;
839 .No done
840 .Xc
841 This works like
842 .Ic while ,
843 except that the body is executed only while the exit status of the first
844 .Ar list
845 is non-zero.
846 .It Xo while Ar list ;
847 .No do Ar list ;
848 .No done
849 .Xc
850 A
851 .Ic while
852 is a pre-checked loop.
853 Its body is executed as often as the exit status of the first
854 .Ar list
855 is zero.
856 The exit status of a
857 .Ic while
858 statement is the last exit status of the
859 .Ar list
860 in the body of the loop; if the body is not executed, the exit status is zero.
861 .It Xo function Ar name
862 .No { Ar list ; No }
863 .Xc
864 Defines the function
865 .Ar name
866 (see
867 .Sx Functions
868 below).
869 Note that redirections specified after a function definition are
870 performed whenever the function is executed, not when the function definition
871 is executed.
872 .It Ar name Ns \&() Ar command
873 Mostly the same as
874 .Ic function
875 (see
876 .Sx Functions
877 below).
878 Whitespace (space or tab) after
879 .Ar name
880 will be ignored most of the time.
881 .It Xo function Ar name Ns \&()
882 .No { Ar list ; No }
883 .Xc
884 The same as
885 .Ar name Ns \&()
886 .Pq Nm bash Ns ism .
887 The
888 .Ic function
889 keyword is ignored.
890 .It Xo Ic time Op Fl p
891 .Op Ar pipeline
892 .Xc
893 The
894 .Sx Command execution
895 section describes the
896 .Ic time
897 reserved word.
898 .It \&(( Ar expression No ))
899 The arithmetic expression
900 .Ar expression
901 is evaluated; equivalent to
902 .Dq Li let \&" Ns Ar expression Ns \&"
903 (see
904 .Sx Arithmetic expressions
905 and the
906 .Ic let
907 command, below) in a compound construct.
908 .It Bq Bq Ar \ \&expression\ \&
909 Similar to the
910 .Ic test
911 and
912 .Ic \&[ ... \&]
913 commands (described later), with the following exceptions:
914 .Bl -bullet
915 .It
916 Field splitting and file name generation are not performed on arguments.
917 .It
918 The
919 .Fl a
920 .Pq AND
921 and
922 .Fl o
923 .Pq OR
924 operators are replaced with
925 .Dq Li &&
926 and
927 .Dq Li \*(Ba\*(Ba ,
928 respectively.
929 .It
930 Operators (e.g.\&
931 .Dq Li \-f ,
932 .Dq Li = ,
933 .Dq Li \&! )
934 must be unquoted.
935 .It
936 Parameter, command and arithmetic substitutions are performed as expressions
937 are evaluated and lazy expression evaluation is used for the
938 .Dq Li &&
939 and
940 .Dq Li \*(Ba\*(Ba
941 operators.
942 This means that in the following statement,
943 .Ic $(\*(Ltfoo)
944 is evaluated if and only if the file
945 .Pa foo
946 exists and is readable:
947 .Bd -literal -offset indent
948 $ [[ \-r foo && $(\*(Ltfoo) = b*r ]]
949 .Ed
950 .It
951 The second operand of the
952 .Dq Li !=
953 and
954 .Dq Li =
955 expressions are a subset of patterns (e.g. the comparison
956 .Ic \&[[ foobar = f*r ]]
957 succeeds).
958 This even works indirectly:
959 .Bd -literal -offset indent
960 $ bar=foobar; baz=\*(aqf*r\*(aq
961 $ [[ $bar = $baz ]]; echo $?
962 $ [[ $bar = \&"$baz" ]]; echo $?
963 .Ed
964 .Pp
965 Perhaps surprisingly, the first comparison succeeds,
966 whereas the second doesn't.
967 This does not apply to all extglob metacharacters, currently.
968 .El
969 .El
970 .Ss Quoting
971 Quoting is used to prevent the shell from treating characters or words
972 specially.
973 There are three methods of quoting.
974 First,
975 .Ql \e
976 quotes the following character, unless it is at the end of a line, in which
977 case both the
978 .Ql \e
979 and the newline are stripped.
980 Second, a single quote
981 .Pq Dq Li \*(aq
982 quotes everything up to the next single quote (this may span lines).
983 Third, a double quote
984 .Pq Ql \&"
985 quotes all characters, except
986 .Ql $ ,
987 .Ql \e
988 and
989 .Ql \` ,
990 up to the next unescaped double quote.
991 .Ql $
992 and
993 .Ql \`
994 inside double quotes have their usual meaning (i.e. parameter, arithmetic
995 or command substitution) except no field splitting is carried out on the
996 results of double-quoted substitutions, and the old-style form of command
997 substitution has backslash-quoting for double quotes enabled.
998 If a
999 .Ql \e
1000 inside a double-quoted string is followed by
1001 .Ql \&" ,
1002 .Ql $ ,
1003 .Ql \e
1004 or
1005 .Ql \` ,
1006 only the
1007 .Ql \e
1008 is removed, i.e. the combination is replaced by the second character;
1009 if it is followed by a newline, both the
1010 .Ql \e
1011 and the newline are stripped; otherwise, both the
1012 .Ql \e
1013 and the character following are unchanged.
1014 .Pp
1015 If a single-quoted string is preceded by an unquoted
1016 .Ql $ ,
1017 C style backslash expansion (see below) is applied (even single quote
1018 characters inside can be escaped and do not terminate the string then);
1019 the expanded result is treated as any other single-quoted string.
1020 If a double-quoted string is preceded by an unquoted
1021 .Ql $ ,
1022 the
1023 .Ql $
1024 is simply ignored.
1025 .Ss Backslash expansion
1026 In places where backslashes are expanded, certain C and
1027 .At
1028 .Nm ksh
1029 or GNU
1030 .Nm bash
1031 style escapes are translated.
1032 These include
1033 .Dq Li \ea ,
1034 .Dq Li \eb ,
1035 .Dq Li \ef ,
1036 .Dq Li \en ,
1037 .Dq Li \er ,
1038 .Dq Li \et ,
1039 .Dq Li \eU######## ,
1040 .Dq Li \eu####
1041 and
1042 .Dq Li \ev .
1043 For
1044 .Dq Li \eU########
1045 and
1046 .Dq Li \eu#### ,
1047 .Dq #
1048 means a hexadecimal digit, of which there may be none up to four or eight;
1049 these escapes translate a Unicode codepoint to UTF-8.
1050 Furthermore,
1051 .Dq Li \eE
1052 and
1053 .Dq Li \ee
1054 expand to the escape character.
1055 .Pp
1056 In the
1057 .Ic print
1058 builtin mode,
1059 .Dq Li \e" ,
1060 .Dq Li \e\*(aq
1061 and
1062 .Dq Li \e?
1063 are explicitly excluded;
1064 octal sequences must have the none up to three octal digits
1065 .Dq #
1066 prefixed with the digit zero
1067 .Pq Dq Li \e0### ;
1068 hexadecimal sequences
1069 .Dq Li \ex##
1070 are limited to none up to two hexadecimal digits
1071 .Dq # ;
1072 both octal and hexadecimal sequences convert to raw octets;
1073 .Dq Li \e# ,
1074 where # is none of the above, translates to \e# (backslashes are retained).
1075 .Pp
1076 Backslash expansion in the C style mode slightly differs: octal sequences
1077 .Dq Li \e###
1078 must have no digit zero prefixing the one up to three octal digits
1079 .Dq #
1080 and yield raw octets; hexadecimal sequences
1081 .Dq Li \ex#*
1082 greedily eat up as many hexadecimal digits
1083 .Dq #
1084 as they can and terminate with the first non-hexadecimal digit;
1085 these translate a Unicode codepoint to UTF-8.
1086 The sequence
1087 .Dq Li \ec# ,
1088 where
1089 .Dq #
1090 is any octet, translates to Ctrl-# (which basically means,
1091 .Dq Li \ec?
1092 becomes DEL, everything else is bitwise ANDed with 0x1F).
1093 Finally,
1094 .Dq Li \e# ,
1095 where # is none of the above, translates to # (has the backslash trimmed),
1096 even if it is a newline.
1097 .Ss Aliases
1098 There are two types of aliases: normal command aliases and tracked aliases.
1099 Command aliases are normally used as a short hand for a long or often used
1100 command.
1101 The shell expands command aliases (i.e. substitutes the alias name
1102 for its value) when it reads the first word of a command.
1103 An expanded alias is re-processed to check for more aliases.
1104 If a command alias ends in a
1105 space or tab, the following word is also checked for alias expansion.
1106 The alias expansion process stops when a word that is not an alias is found,
1107 when a quoted word is found, or when an alias word that is currently being
1108 expanded is found.
1109 Aliases are specifically an interactive feature: while they do happen
1110 to work in scripts and on the command line in some cases, aliases are
1111 expanded during lexing, so their use must be in a separate command tree
1112 from their definition; otherwise, the alias will not be found.
1113 Noticeably, command lists (separated by semicolon, in command substitutions
1114 also by newline) may be one same parse tree.
1115 .Pp
1116 The following command aliases are defined automatically by the shell:
1117 .Bd -literal -offset indent
1118 autoload=\*(aq\e\ebuiltin typeset \-fu\*(aq
1119 functions=\*(aq\e\ebuiltin typeset \-f\*(aq
1120 hash=\*(aq\e\ebuiltin alias \-t\*(aq
1121 history=\*(aq\e\ebuiltin fc \-l\*(aq
1122 integer=\*(aq\e\ebuiltin typeset \-i\*(aq
1123 local=\*(aq\e\ebuiltin typeset\*(aq
1124 login=\*(aq\e\ebuiltin exec login\*(aq
1125 nameref=\*(aq\e\ebuiltin typeset \-n\*(aq
1126 nohup=\*(aqnohup \*(aq
1127 r=\*(aq\e\ebuiltin fc \-e \-\*(aq
1128 type=\*(aq\e\ebuiltin whence \-v\*(aq
1129 .Ed
1130 .Pp
1131 Tracked aliases allow the shell to remember where it found a particular
1132 command.
1133 The first time the shell does a path search for a command that is
1134 marked as a tracked alias, it saves the full path of the command.
1135 The next
1136 time the command is executed, the shell checks the saved path to see that it
1137 is still valid, and if so, avoids repeating the path search.
1138 Tracked aliases can be listed and created using
1139 .Ic alias Fl t .
1140 Note that changing the
1141 .Ev PATH
1142 parameter clears the saved paths for all tracked aliases.
1143 If the
1144 .Ic trackall
1145 option is set (i.e.\&
1146 .Ic set Fl o Ic trackall
1147 or
1148 .Ic set Fl h ) ,
1149 the shell tracks all commands.
1150 This option is set automatically for non-interactive shells.
1151 For interactive shells, only the following commands are
1152 automatically tracked:
1153 .Xr cat 1 ,
1154 .Xr cc 1 ,
1155 .Xr chmod 1 ,
1156 .Xr cp 1 ,
1157 .Xr date 1 ,
1158 .Xr ed 1 ,
1159 .Xr emacs 1 ,
1160 .Xr grep 1 ,
1161 .Xr ls 1 ,
1162 .Xr make 1 ,
1163 .Xr mv 1 ,
1164 .Xr pr 1 ,
1165 .Xr rm 1 ,
1166 .Xr sed 1 ,
1167 .Xr sh 1 ,
1168 .Xr vi 1
1169 and
1170 .Xr who 1 .
1171 .Ss Substitution
1172 The first step the shell takes in executing a simple-command is to perform
1173 substitutions on the words of the command.
1174 There are three kinds of
1175 substitution: parameter, command and arithmetic.
1176 Parameter substitutions,
1177 which are described in detail in the next section, take the form
1178 .Pf $ Ns Ar name
1179 or
1180 .Pf ${ Ns Ar ... Ns } ;
1181 command substitutions take the form
1182 .Pf $( Ns Ar command Ns \&)
1183 or (deprecated)
1184 .Pf \` Ns Ar command Ns \`
1185 or (executed in the current environment)
1186 .Pf ${\ \& Ar command Ns \&;}
1187 and strip trailing newlines;
1188 and arithmetic substitutions take the form
1189 .Pf $(( Ns Ar expression Ns )) .
1190 Parsing the current-environment command substitution requires a space,
1191 tab or newline after the opening brace and that the closing brace be
1192 recognised as a keyword (i.e. is preceded by a newline or semicolon).
1193 They are also called funsubs (function substitutions) and behave like
1194 functions in that
1195 .Ic local
1196 and
1197 .Ic return
1198 work, and in that
1199 .Ic exit
1200 terminates the parent shell; shell options are shared.
1201 .Pp
1202 Another variant of substitution are the valsubs (value substitutions)
1203 .Pf ${\*(Ba\& Ns Ar command Ns \&;}
1204 which are also executed in the current environment, like funsubs, but
1205 share their I/O with the parent; instead, they evaluate to whatever
1206 the, initially empty, expression-local variable
1207 .Ev REPLY
1208 is set to within the
1209 .Ar command Ns s .
1210 .Pp
1211 If a substitution appears outside of double quotes, the results of the
1212 substitution are generally subject to word or field splitting according to
1213 the current value of the
1214 .Ev IFS
1215 parameter.
1216 The
1217 .Ev IFS
1218 parameter specifies a list of octets which are used to break a string up
1219 into several words; any octets from the set space, tab and newline that
1220 appear in the
1221 .Ev IFS
1222 octets are called
1223 .Dq IFS whitespace .
1224 Sequences of one or more
1225 .Ev IFS
1226 whitespace octets, in combination with zero or one
1227 .Pf non- Ev IFS
1228 whitespace octets, delimit a field.
1229 As a special case, leading and trailing
1230 .Ev IFS
1231 whitespace is stripped (i.e. no leading or trailing empty field
1232 is created by it); leading or trailing
1233 .Pf non- Ev IFS
1234 whitespace does create an empty field.
1235 .Pp
1236 Example: If
1237 .Ev IFS
1238 is set to
1239 .Dq Li \*(Ltspace\*(Gt:
1240 and VAR is set to
1241 .Dq Li \*(Ltspace\*(GtA\*(Ltspace\*(Gt:\*(Ltspace\*(Gt\*(Ltspace\*(GtB::D ,
1242 the substitution for $VAR results in four fields:
1243 .Dq Li A ,
1244 .Dq Li B ,
1245 .Dq
1246 (an empty field) and
1247 .Dq Li D .
1248 Note that if the
1249 .Ev IFS
1250 parameter is set to the empty string, no field splitting is done;
1251 if it is unset, the default value of space, tab and newline is used.
1252 .Pp
1253 Also, note that the field splitting applies only to the immediate result of
1254 the substitution.
1255 Using the previous example, the substitution for $VAR:E
1256 results in the fields:
1257 .Dq Li A ,
1258 .Dq Li B ,
1259 .Dq
1260 and
1261 .Dq Li D:E ,
1262 not
1263 .Dq Li A ,
1264 .Dq Li B ,
1265 .Dq ,
1266 .Dq Li D
1267 and
1268 .Dq Li E .
1269 This behavior is POSIX compliant, but incompatible with some other shell
1270 implementations which do field splitting on the word which contained the
1271 substitution or use
1272 .Dv IFS
1273 as a general whitespace delimiter.
1274 .Pp
1275 The results of substitution are, unless otherwise specified, also subject to
1276 brace expansion and file name expansion (see the relevant sections below).
1277 .Pp
1278 A command substitution is replaced by the output generated by the specified
1279 command which is run in a subshell.
1280 For
1281 .Pf $( Ns Ar command Ns \&)
1282 and
1283 .Pf ${\*(Ba\& Ns Ar command Ns \&;}
1284 and
1285 .Pf ${\ \& Ar command Ns \&;}
1286 substitutions, normal quoting rules are used when
1287 .Ar command
1288 is parsed; however, for the deprecated
1289 .Pf \` Ns Ar command Ns \`
1290 form, a
1291 .Ql \e
1292 followed by any of
1293 .Ql $ ,
1294 .Ql \`
1295 or
1296 .Ql \e
1297 is stripped (as is
1298 .Ql \&"
1299 when the substitution is part of a double-quoted string); a backslash
1300 .Ql \e
1301 followed by any other character is unchanged.
1302 As a special case in command substitutions, a command of the form
1303 .Pf \*(Lt Ar file
1304 is interpreted to mean substitute the contents of
1305 .Ar file .
1306 Note that
1307 .Ic $(\*(Ltfoo)
1308 has the same effect as
1309 .Ic $(cat foo) .
1310 .Pp
1311 Note that some shells do not use a recursive parser for command substitutions,
1312 leading to failure for certain constructs; to be portable, use as workaround
1313 .Dq Li x=$(cat) \*(Lt\*(Lt\eEOF
1314 (or the newline-keeping
1315 .Dq Li x=\*(Lt\*(Lt\eEOF
1316 extension) instead to merely slurp the string.
1317 .St -p1003.1
1318 recommends using case statements of the form
1319 .Li "x=$(case $foo in (bar) echo $bar ;; (*) echo $baz ;; esac)"
1320 instead, which would work but not serve as example for this portability issue.
1321 .Bd -literal -offset indent
1322 x=$(case $foo in bar) echo $bar ;; *) echo $baz ;; esac)
1323 # above fails to parse on old shells; below is the workaround
1324 x=$(eval $(cat)) \*(Lt\*(Lt\eEOF
1325 case $foo in bar) echo $bar ;; *) echo $baz ;; esac
1326 EOF
1327 .Ed
1328 .Pp
1329 Arithmetic substitutions are replaced by the value of the specified expression.
1330 For example, the command
1331 .Ic print $((2+3*4))
1332 displays 14.
1333 See
1334 .Sx Arithmetic expressions
1335 for a description of an expression.
1336 .Ss Parameters
1337 Parameters are shell variables; they can be assigned values and their values
1338 can be accessed using a parameter substitution.
1339 A parameter name is either one
1340 of the special single punctuation or digit character parameters described
1341 below, or a letter followed by zero or more letters or digits
1342 .Po
1343 .Ql _
1344 counts as a letter
1345 .Pc .
1346 The latter form can be treated as arrays by appending an array index of the
1347 form
1348 .Op Ar expr
1349 where
1350 .Ar expr
1351 is an arithmetic expression.
1352 Array indices in
1353 .Nm
1354 are limited to the range 0 through 4294967295, inclusive.
1355 That is, they are a 32-bit unsigned integer.
1356 .Pp
1357 Parameter substitutions take the form
1358 .Pf $ Ns Ar name ,
1359 .Pf ${ Ns Ar name Ns }
1360 or
1361 .Sm off
1362 .Pf ${ Ar name Oo Ar expr Oc }
1363 .Sm on
1364 where
1365 .Ar name
1366 is a parameter name.
1367 Substitution of all array elements with
1368 .Pf ${ Ns Ar name Ns \&[*]}
1369 and
1370 .Pf ${ Ns Ar name Ns \&[@]}
1371 works equivalent to $* and $@ for positional parameters.
1372 If substitution is performed on a parameter
1373 (or an array parameter element)
1374 that is not set, an empty string is substituted unless the
1375 .Ic nounset
1376 option
1377 .Pq Ic set Fl u
1378 is set, in which case an error occurs.
1379 .Pp
1380 Parameters can be assigned values in a number of ways.
1381 First, the shell implicitly sets some parameters like
1382 .Dq Li # ,
1383 .Dq Li PWD
1384 and
1385 .Dq Li $ ;
1386 this is the only way the special single character parameters are set.
1387 Second, parameters are imported from the shell's environment at startup.
1388 Third, parameters can be assigned values on the command line: for example,
1389 .Ic FOO=bar
1390 sets the parameter
1391 .Dq Li FOO
1392 to
1393 .Dq Li bar ;
1394 multiple parameter assignments can be given on a single command line and they
1395 can be followed by a simple-command, in which case the assignments are in
1396 effect only for the duration of the command (such assignments are also
1397 exported; see below for the implications of this).
1398 Note that both the parameter name and the
1399 .Ql =
1400 must be unquoted for the shell to recognise a parameter assignment.
1401 The construct
1402 .Ic FOO+=baz
1403 is also recognised; the old and new values are immediately concatenated.
1404 The fourth way of setting a parameter is with the
1405 .Ic export ,
1406 .Ic global ,
1407 .Ic readonly
1408 and
1409 .Ic typeset
1410 commands; see their descriptions in the
1411 .Sx Command execution
1412 section.
1413 Fifth,
1414 .Ic for
1415 and
1416 .Ic select
1417 loops set parameters as well as the
1418 .Ic getopts ,
1419 .Ic read
1420 and
1421 .Ic set Fl A
1422 commands.
1423 Lastly, parameters can be assigned values using assignment operators
1424 inside arithmetic expressions (see
1425 .Sx Arithmetic expressions
1426 below) or using the
1427 .Sm off
1428 .Pf ${ Ar name No = Ar value No }
1429 .Sm on
1430 form of the parameter substitution (see below).
1431 .Pp
1432 Parameters with the export attribute (set using the
1433 .Ic export
1434 or
1435 .Ic typeset Fl x
1436 commands, or by parameter assignments followed by simple commands) are put in
1437 the environment (see
1438 .Xr environ 7 )
1439 of commands run by the shell as
1440 .Ar name Ns = Ns Ar value
1441 pairs.
1442 The order in which parameters appear in the environment of a command is
1443 unspecified.
1444 When the shell starts up, it extracts parameters and their values
1445 from its environment and automatically sets the export attribute for those
1446 parameters.
1447 .Pp
1448 Modifiers can be applied to the
1449 .Pf ${ Ns Ar name Ns }
1450 form of parameter substitution:
1451 .Bl -tag -width Ds
1452 .Sm off
1453 .It ${ Ar name No :\- Ar word No }
1454 .Sm on
1455 If
1456 .Ar name
1457 is set and not empty,
1458 it is substituted; otherwise,
1459 .Ar word
1460 is substituted.
1461 .Sm off
1462 .It ${ Ar name No :+ Ar word No }
1463 .Sm on
1464 If
1465 .Ar name
1466 is set and not empty,
1467 .Ar word
1468 is substituted; otherwise, nothing is substituted.
1469 .Sm off
1470 .It ${ Ar name No := Ar word No }
1471 .Sm on
1472 If
1473 .Ar name
1474 is set and not empty,
1475 it is substituted; otherwise, it is assigned
1476 .Ar word
1477 and the resulting value of
1478 .Ar name
1479 is substituted.
1480 .Sm off
1481 .It ${ Ar name No :? Ar word No }
1482 .Sm on
1483 If
1484 .Ar name
1485 is set and not empty,
1486 it is substituted; otherwise,
1487 .Ar word
1488 is printed on standard error (preceded by
1489 .Ar name : )
1490 and an error occurs (normally causing termination of a shell script, function,
1491 or a script sourced using the
1492 .Dq Li \&.
1493 built-in).
1494 If
1495 .Ar word
1496 is omitted, the string
1497 .Dq Li parameter null or not set
1498 is used instead.
1499 .El
1500 .Pp
1501 Note that, for all of the above,
1502 .Ar word
1503 is actually considered quoted, and special parsing rules apply.
1504 The parsing rules also differ on whether the expression is double-quoted:
1505 .Ar word
1506 then uses double-quoting rules, except for the double quote itself
1507 .Pq Ql \&"
1508 and the closing brace, which, if backslash escaped, gets quote removal applied.
1509 .Pp
1510 In the above modifiers, the
1511 .Ql \&:
1512 can be omitted, in which case the conditions only depend on
1513 .Ar name
1514 being set (as opposed to set and not empty).
1515 If
1516 .Ar word
1517 is needed, parameter, command, arithmetic and tilde substitution are performed
1518 on it; if
1519 .Ar word
1520 is not needed, it is not evaluated.
1521 .Pp
1522 The following forms of parameter substitution can also be used (if
1523 .Ar name
1524 is an array, the element with the key
1525 .Dq 0
1526 will be substituted in scalar context):
1527 .Pp
1528 .Bl -tag -width Ds -compact
1529 .It Pf ${# Ns Ar name Ns \&}
1530 The number of positional parameters if
1531 .Ar name
1532 is
1533 .Dq Li * ,
1534 .Dq Li @
1535 or not specified; otherwise the length
1536 .Pq in characters
1537 of the string value of parameter
1538 .Ar name .
1539 .Pp
1540 .It Pf ${# Ns Ar name Ns \&[*]}
1541 .It Pf ${# Ns Ar name Ns \&[@]}
1542 The number of elements in the array
1543 .Ar name .
1544 .Pp
1545 .It Pf ${% Ns Ar name Ns \&}
1546 The width
1547 .Pq in screen columns
1548 of the string value of parameter
1549 .Ar name ,
1550 or \-1 if
1551 .Pf ${ Ns Ar name Ns }
1552 contains a control character.
1553 .Pp
1554 .It Pf ${! Ns Ar name Ns }
1555 The name of the variable referred to by
1556 .Ar name .
1557 This will be
1558 .Ar name
1559 except when
1560 .Ar name
1561 is a name reference (bound variable), created by the
1562 .Ic nameref
1563 command (which is an alias for
1564 .Ic typeset Fl n ) .
1565 .Ar name
1566 cannot be one of most special parameters (see below).
1567 .Pp
1568 .It Pf ${! Ns Ar name Ns \&[*]}
1569 .It Pf ${! Ns Ar name Ns \&[@]}
1570 The names of indices (keys) in the array
1571 .Ar name .
1572 .Pp
1573 .Sm off
1574 .It Xo
1575 .Pf ${ Ar name
1576 .Pf # Ar pattern No }
1577 .Xc
1578 .It Xo
1579 .Pf ${ Ar name
1580 .Pf ## Ar pattern No }
1581 .Xc
1582 .Sm on
1583 If
1584 .Ar pattern
1585 matches the beginning of the value of parameter
1586 .Ar name ,
1587 the matched text is deleted from the result of substitution.
1588 A single
1589 .Ql #
1590 results in the shortest match, and two
1591 of them result in the longest match.
1592 Cannot be applied to a vector
1593 .Pq ${*} or ${@} or ${array[*]} or ${array[@]} .
1594 .Pp
1595 .Sm off
1596 .It Xo
1597 .Pf ${ Ar name
1598 .Pf % Ar pattern No }
1599 .Xc
1600 .It Xo
1601 .Pf ${ Ar name
1602 .Pf %% Ar pattern No }
1603 .Xc
1604 .Sm on
1605 Like ${...#...} substitution, but it deletes from the end of the value.
1606 Cannot be applied to a vector.
1607 .Pp
1608 .Sm off
1609 .It Xo
1610 .Pf ${ Ar name
1611 .Pf / Ar pattern / Ar string No }
1612 .Xc
1613 .It Xo
1614 .Pf ${ Ar name
1615 .Pf /# Ar pattern / Ar string No }
1616 .Xc
1617 .It Xo
1618 .Pf ${ Ar name
1619 .Pf /% Ar pattern / Ar string No }
1620 .Xc
1621 .It Xo
1622 .Pf ${ Ar name
1623 .Pf // Ar pattern / Ar string No }
1624 .Xc
1625 .Sm on
1626 The longest match of
1627 .Ar pattern
1628 in the value of parameter
1629 .Ar name
1630 is replaced with
1631 .Ar string
1632 (deleted if
1633 .Ar string
1634 is empty; the trailing slash
1635 .Pq Ql /
1636 may be omitted in that case).
1637 A leading slash followed by
1638 .Ql #
1639 or
1640 .Ql %
1641 causes the pattern to be anchored at the beginning or end of
1642 the value, respectively; empty unanchored
1643 .Ar pattern Ns s
1644 cause no replacement; a single leading slash or use of a
1645 .Ar pattern
1646 that matches the empty string causes the replacement to
1647 happen only once; two leading slashes cause all occurrences
1648 of matches in the value to be replaced.
1649 Cannot be applied to a vector.
1650 Inefficiently implemented, may be slow.
1651 .Pp
1652 .Sm off
1653 .It Xo
1654 .Pf ${ Ar name
1655 .Pf @/ Ar pattern / Ar string No }
1656 .Xc
1657 .Sm on
1658 The same as
1659 .Sm off
1660 .Xo
1661 .Pf ${ Ar name
1662 .Pf // Ar pattern / Ar string No } ,
1663 .Xc
1664 .Sm on
1665 except that both
1666 .Ar pattern
1667 and
1668 .Ar string
1669 are expanded anew for each iteration.
1670 .Pp
1671 .Sm off
1672 .It Xo
1673 .Pf ${ Ar name : Ns Ar pos
1674 .Pf : Ns Ar len Ns }
1675 .Xc
1676 .Sm on
1677 The first
1678 .Ar len
1679 characters of
1680 .Ar name ,
1681 starting at position
1682 .Ar pos ,
1683 are substituted.
1684 Both
1685 .Ar pos
1686 and
1687 .Pf : Ns Ar len
1688 are optional.
1689 If
1690 .Ar pos
1691 is negative, counting starts at the end of the string; if it
1692 is omitted, it defaults to 0.
1693 If
1694 .Ar len
1695 is omitted or greater than the length of the remaining string,
1696 all of it is substituted.
1697 Both
1698 .Ar pos
1699 and
1700 .Ar len
1701 are evaluated as arithmetic expressions.
1702 Currently,
1703 .Ar pos
1704 must start with a space, opening parenthesis or digit to be recognised.
1705 Cannot be applied to a vector.
1706 .Pp
1707 .It Pf ${ Ns Ar name Ns @#}
1708 The hash (using the BAFH algorithm) of the expansion of
1709 .Ar name .
1710 This is also used internally for the shell's hashtables.
1711 .Pp
1712 .It Pf ${ Ns Ar name Ns @Q}
1713 A quoted expression safe for re-entry, whose value is the value of the
1714 .Ar name
1715 parameter, is substituted.
1716 .El
1717 .Pp
1718 Note that
1719 .Ar pattern
1720 may need extended globbing pattern
1721 .Pq @(...) ,
1722 single
1723 .Pq \&\*(aq...\&\*(aq
1724 or double
1725 .Pq \&"...\&"
1726 quote escaping unless
1727 .Fl o Ic sh
1728 is set.
1729 .Pp
1730 The following special parameters are implicitly set by the shell and cannot be
1731 set directly using assignments:
1732 .Bl -tag -width "1 .. 9"
1733 .It Ev \&!
1734 Process ID of the last background process started.
1735 If no background processes have been started, the parameter is not set.
1736 .It Ev \&#
1737 The number of positional parameters ($1, $2, etc.).
1738 .It Ev \&$
1739 The PID of the shell or, if it is a subshell, the PID of the original shell.
1740 Do
1741 .Em NOT
1742 use this mechanism for generating temporary file names; see
1743 .Xr mktemp 1
1744 instead.
1745 .It Ev \-
1746 The concatenation of the current single letter options (see the
1747 .Ic set
1748 command below for a list of options).
1749 .It Ev \&?
1750 The exit status of the last non-asynchronous command executed.
1751 If the last command was killed by a signal,
1752 .Ic \&$?
1753 is set to 128 plus the signal number, but at most 255.
1754 .It Ev 0
1755 The name of the shell, determined as follows:
1756 the first argument to
1757 .Nm
1758 if it was invoked with the
1759 .Fl c
1760 option and arguments were given; otherwise the
1761 .Ar file
1762 argument, if it was supplied;
1763 or else the basename the shell was invoked with (i.e.\&
1764 .Li argv[0] ) .
1765 .Ev $0
1766 is also set to the name of the current script or
1767 the name of the current function, if it was defined with the
1768 .Ic function
1769 keyword (i.e. a Korn shell style function).
1770 .It Ev 1 No .. Ev 9
1771 The first nine positional parameters that were supplied to the shell, function,
1772 or script sourced using the
1773 .Dq Li \&.
1774 built-in.
1775 Further positional parameters may be accessed using
1776 .Pf ${ Ar number Ns } .
1777 .It Ev *
1778 All positional parameters (except 0), i.e. $1, $2, $3, ...
1779 .br
1780 If used
1781 outside of double quotes, parameters are separate words (which are subjected
1782 to word splitting); if used within double quotes, parameters are separated
1783 by the first character of the
1784 .Ev IFS
1785 parameter (or the empty string if
1786 .Ev IFS
1787 is unset.
1788 .It Ev @
1789 Same as
1790 .Ic $* ,
1791 unless it is used inside double quotes, in which case a separate word is
1792 generated for each positional parameter.
1793 If there are no positional parameters, no word is generated.
1794 .Ic \&"$@"
1795 can be used to access arguments, verbatim, without losing
1796 empty arguments or splitting arguments with spaces (IFS, actually).
1797 .El
1798 .Pp
1799 The following parameters are set and/or used by the shell:
1800 .Bl -tag -width "KSH_VERSION"
1801 .It Ev _
1802 .Pq underscore
1803 When an external command is executed by the shell, this parameter is set in the
1804 environment of the new process to the path of the executed command.
1805 In interactive use, this parameter is also set in the parent shell to the last
1806 word of the previous command.
1807 .It Ev BASHPID
1808 The PID of the shell or subshell.
1809 .It Ev CDPATH
1810 Like
1811 .Ev PATH ,
1812 but used to resolve the argument to the
1813 .Ic cd
1814 built-in command.
1815 Note that if
1816 .Ev CDPATH
1817 is set and does not contain
1818 .Dq Li \&.
1819 or an empty string element, the current directory is not searched.
1820 Also, the
1821 .Ic cd
1822 built-in command will display the resulting directory when a match is found
1823 in any search path other than the empty path.
1824 .It Ev COLUMNS
1825 Set to the number of columns on the terminal or window.
1826 Always set, defaults to 80, unless the
1827 value as reported by
1828 .Xr stty 1
1829 is non-zero and sane enough (minimum is 12x3); similar for
1830 .Ev LINES .
1831 This parameter is used by the interactive line editing modes and by the
1832 .Ic select ,
1833 .Ic set Fl o
1834 and
1835 .Ic kill Fl l
1836 commands to format information columns.
1837 Importing from the environment or unsetting this parameter removes the
1838 binding to the actual terminal size in favour of the provided value.
1839 .It Ev ENV
1840 If this parameter is found to be set after any profile files are executed, the
1841 expanded value is used as a shell startup file.
1842 It typically contains function and alias definitions.
1843 .It Ev EPOCHREALTIME
1844 Time since the epoch, as returned by
1845 .Xr gettimeofday 2 ,
1846 formatted as decimal
1847 .Va tv_sec
1848 followed by a dot
1849 .Pq Ql \&.
1850 and
1851 .Va tv_usec
1852 padded to exactly six decimal digits.
1853 .It Ev EXECSHELL
1854 If set, this parameter is assumed to contain the shell that is to be used to
1855 execute commands that
1856 .Xr execve 2
1857 fails to execute and which do not start with a
1858 .Dq Li #! Ns Ar shell
1859 sequence.
1860 .It Ev FCEDIT
1861 The editor used by the
1862 .Ic fc
1863 command (see below).
1864 .It Ev FPATH
1865 Like
1866 .Ev PATH ,
1867 but used when an undefined function is executed to locate the file defining the
1868 function.
1869 It is also searched when a command can't be found using
1870 .Ev PATH .
1871 See
1872 .Sx Functions
1873 below for more information.
1874 .It Ev HISTFILE
1875 The name of the file used to store command history.
1876 When assigned to or unset, the file is opened, history is truncated
1877 then loaded from the file; subsequent new commands (possibly consisting
1878 of several lines) are appended once they successfully compiled.
1879 Also, several invocations of the shell will share history if their
1880 .Ev HISTFILE
1881 parameters all point to the same file.
1882 .Pp
1883 .Sy Note :
1884 If
1885 .Ev HISTFILE
1886 is unset or empty, no history file is used.
1887 This is different from
1888 .At
1889 .Nm ksh .
1890 .It Ev HISTSIZE
1891 The number of commands normally stored for history.
1892 The default is 2047.
1893 Do not set this value to insanely high values such as 1000000000 because
1894 .Nm
1895 can then not allocate enough memory for the history and will not start.
1896 .It Ev HOME
1897 The default directory for the
1898 .Ic cd
1899 command and the value substituted for an unqualified
1900 .Ic \*(TI
1901 (see
1902 .Sx Tilde expansion
1903 below).
1904 .It Ev IFS
1905 Internal field separator, used during substitution and by the
1906 .Ic read
1907 command, to split values into distinct arguments; normally set to space, tab
1908 and newline.
1909 See
1910 .Sx Substitution
1911 above for details.
1912 .Pp
1913 .Sy Note :
1914 This parameter is not imported from the environment when the shell is
1915 started.
1916 .It Ev KSHEGID
1917 The effective group id of the shell.
1918 .It Ev KSHGID
1919 The real group id of the shell.
1920 .It Ev KSHUID
1921 The real user id of the shell.
1922 .It Ev KSH_MATCH
1923 The last matched string.
1924 In a future version, this will be an indexed array,
1925 with indexes 1 and up capturing matching groups.
1926 Set by string comparisons (== and !=) in double-bracket test
1927 expressions when a match is found (when != returns false), by
1928 .Ic case
1929 when a match is encountered, and by the substitution operations
1930 .Sm off
1931 .Xo
1932 .Pf ${ Ar x
1933 .Pf # Ar pat No } ,
1934 .Sm on
1935 .Xc
1936 .Sm off
1937 .Xo
1938 .Pf ${ Ar x
1939 .Pf ## Ar pat No } ,
1940 .Sm on
1941 .Xc
1942 .Sm off
1943 .Xo
1944 .Pf ${ Ar x
1945 .Pf % Ar pat No } ,
1946 .Sm on
1947 .Xc
1948 .Sm off
1949 .Xo
1950 .Pf ${ Ar x
1951 .Pf %% Ar pat No } ,
1952 .Sm on
1953 .Xc
1954 .Sm off
1955 .Xo
1956 .Pf ${ Ar x
1957 .Pf / Ar pat / Ar rpl No } ,
1958 .Sm on
1959 .Xc
1960 .Sm off
1961 .Xo
1962 .Pf ${ Ar x
1963 .Pf /# Ar pat / Ar rpl No } ,
1964 .Sm on
1965 .Xc
1966 .Sm off
1967 .Xo
1968 .Pf ${ Ar x
1969 .Pf /% Ar pat / Ar rpl No } ,
1970 .Sm on
1971 .Xc
1972 .Sm off
1973 .Xo
1974 .Pf ${ Ar x
1975 .Pf // Ar pat / Ar rpl No } ,
1976 .Sm on
1977 .Xc
1978 and
1979 .Sm off
1980 .Xo
1981 .Pf ${ Ar x
1982 .Pf @/ Ar pat / Ar rpl No } .
1983 .Sm on
1984 .Xc
1985 See the end of the Emacs editing mode documentation for an example.
1986 .It Ev KSH_VERSION
1987 The name and version of the shell (read-only).
1988 See also the version commands in
1989 .Sx Emacs editing mode
1990 and
1991 .Sx Vi editing mode
1992 sections, below.
1993 .It Ev LINENO
1994 The line number of the function or shell script that is currently being
1995 executed.
1996 .It Ev LINES
1997 Set to the number of lines on the terminal or window.
1998 Always set, defaults to 24.
1999 See
2000 .Ev COLUMNS .
2001 .It Ev OLDPWD
2002 The previous working directory.
2003 Unset if
2004 .Ic cd
2005 has not successfully changed directories since the shell started or if the
2006 shell doesn't know where it is.
2007 .It Ev OPTARG
2008 When using
2009 .Ic getopts ,
2010 it contains the argument for a parsed option, if it requires one.
2011 .It Ev OPTIND
2012 The index of the next argument to be processed when using
2013 .Ic getopts .
2014 Assigning 1 to this parameter causes
2015 .Ic getopts
2016 to process arguments from the beginning the next time it is invoked.
2017 .It Ev PATH
2018 A colon (semicolon on OS/2) separated list of directories that are
2019 searched when looking for commands and files sourced using the
2020 .Dq Li \&.
2021 command (see below).
2022 An empty string resulting from a leading or trailing
2023 (semi)colon, or two adjacent ones, is treated as a
2024 .Dq Li \&.
2025 (the current directory).
2026 .It Ev PATHSEP
2027 A colon (semicolon on OS/2), for the user's convenience.
2028 .It Ev PGRP
2029 The process ID of the shell's process group leader.
2030 .It Ev PIPESTATUS
2031 An array containing the errorlevel (exit status) codes,
2032 one by one, of the last pipeline run in the foreground.
2033 .It Ev PPID
2034 The process ID of the shell's parent.
2035 .It Ev PS1
2036 The primary prompt for interactive shells.
2037 Parameter, command and arithmetic
2038 substitutions are performed, and
2039 .Ql \&!
2040 is replaced with the current command number (see the
2041 .Ic fc
2042 command below).
2043 A literal
2044 .Ql \&!
2045 can be put in the prompt by placing
2046 .Dq Li !!
2047 in
2048 .Ev PS1 .
2049 .Pp
2050 The default prompt is
2051 .Dq Li $\ \&
2052 for non-root users,
2053 .Dq Li #\ \&
2054 for root.
2055 If
2056 .Nm
2057 is invoked by root and
2058 .Ev PS1
2059 does not contain a
2060 .Ql #
2061 character, the default value will be used even if
2062 .Ev PS1
2063 already exists in the environment.
2064 .Pp
2065 The
2066 .Nm
2067 distribution comes with a sample
2068 .Pa dot.mkshrc
2069 containing a sophisticated example, but you might like the following one
2070 (note that ${HOSTNAME:=$(hostname)} and the
2071 root-vs-user distinguishing clause are (in this example) executed at
2072 .Ev PS1
2073 assignment time, while the $USER and $PWD are escaped
2074 and thus will be evaluated each time a prompt is displayed):
2075 .Bd -literal
2076 PS1=\*(aq${USER:=$(id \-un)}\*(aq"@${HOSTNAME:=$(hostname)}:\e$PWD $(
2077         if (( USER_ID )); then print \e$; else print \e#; fi) "
2078 .Ed
2079 .Pp
2080 Note that since the command-line editors try to figure out how long the prompt
2081 is (so they know how far it is to the edge of the screen), escape codes in
2082 the prompt tend to mess things up.
2083 You can tell the shell not to count certain
2084 sequences (such as escape codes) by prefixing your prompt with a
2085 character (such as Ctrl-A) followed by a carriage return and then delimiting
2086 the escape codes with this character.
2087 Any occurrences of that character in the prompt are not printed.
2088 By the way, don't blame me for
2089 this hack; it's derived from the original
2090 .Xr ksh88 1 ,
2091 which did print the delimiter character so you were out of luck
2092 if you did not have any non-printing characters.
2093 .Pp
2094 Since Backslashes and other special characters may be
2095 interpreted by the shell, to set
2096 .Ev PS1
2097 either escape the backslash itself
2098 or use double quotes.
2099 The latter is more practical.
2100 This is a more complex example,
2101 avoiding to directly enter special characters (for example with
2102 .Ic \*(haV
2103 in the emacs editing mode),
2104 which embeds the current working directory,
2105 in reverse video
2106 .Pq colour would work, too ,
2107 in the prompt string:
2108 .Bd -literal -offset indent
2109 x=$(print \e\e001)
2110 PS1="$x$(print \e\er)$x$(tput so)$x\e$PWD$x$(tput se)$x\*(Gt "
2111 .Ed
2112 .Pp
2113 Due to a strong suggestion from David G. Korn,
2114 .Nm
2115 now also supports the following form:
2116 .Bd -literal -offset indent
2117 PS1=$\*(aq\e1\er\e1\ee[7m\e1$PWD\e1\ee[0m\e1\*(Gt \*(aq
2118 .Ed
2119 .It Ev PS2
2120 Secondary prompt string, by default
2121 .Dq Li \*(Gt\ \& ,
2122 used when more input is needed to complete a command.
2123 .It Ev PS3
2124 Prompt used by the
2125 .Ic select
2126 statement when reading a menu selection.
2127 The default is
2128 .Dq Li #?\ \& .
2129 .It Ev PS4
2130 Used to prefix commands that are printed during execution tracing (see the
2131 .Ic set Fl x
2132 command below).
2133 Parameter, command and arithmetic substitutions are performed
2134 before it is printed.
2135 The default is
2136 .Dq Li +\ \& .
2137 You may want to set it to
2138 .Dq Li \&[$EPOCHREALTIME]\ \&
2139 instead, to include timestamps.
2140 .It Ev PWD
2141 The current working directory.
2142 May be unset or empty if the shell doesn't know where it is.
2143 .It Ev RANDOM
2144 Each time
2145 .Ev RANDOM
2146 is referenced, it is assigned a number between 0 and 32767 from
2147 a Linear Congruential PRNG first.
2148 .It Ev REPLY
2149 Default parameter for the
2150 .Ic read
2151 command if no names are given.
2152 Also used in
2153 .Ic select
2154 loops to store the value that is read from standard input.
2155 .It Ev SECONDS
2156 The number of seconds since the shell started or, if the parameter has been
2157 assigned an integer value, the number of seconds since the assignment plus the
2158 value that was assigned.
2159 .It Ev TMOUT
2160 If set to a positive integer in an interactive shell, it specifies the maximum
2161 number of seconds the shell will wait for input after printing the primary
2162 prompt
2163 .Pq Ev PS1 .
2164 If the time is exceeded, the shell exits.
2165 .It Ev TMPDIR
2166 The directory temporary shell files are created in.
2167 If this parameter is not
2168 set or does not contain the absolute path of a writable directory, temporary
2169 files are created in
2170 .Pa /tmp .
2171 .It Ev USER_ID
2172 The effective user id of the shell.
2173 .El
2174 .Ss Tilde expansion
2175 Tilde expansion, which is done in parallel with parameter substitution,
2176 is applied to words starting with an unquoted
2177 .Ql \*(TI .
2178 In parameter assignments (such as those preceding a simple-command or those
2179 occurring in the arguments of a declaration utility), tilde expansion is done
2180 after any assignment (i.e. after the equals sign) or after an unquoted colon
2181 .Pq Ql \&: ;
2182 login names are also delimited by colons.
2183 The Korn shell, except in POSIX mode, always expands tildes after unquoted
2184 equals signs, not just in assignment context (see below), and enables tab
2185 completion for tildes after all unquoted colons during command line editing.
2186 .Pp
2187 The characters following the tilde, up to the first
2188 .Ql / ,
2189 if any, are assumed to be a login name.
2190 If the login name is empty,
2191 .Ql +
2192 or
2193 .Ql \- ,
2194 the simplified value of the
2195 .Ev HOME ,
2196 .Ev PWD
2197 or
2198 .Ev OLDPWD
2199 parameter is substituted, respectively.
2200 Otherwise, the password file is
2201 searched for the login name, and the tilde expression is substituted with the
2202 user's home directory.
2203 If the login name is not found in the password file or
2204 if any quoting or parameter substitution occurs in the login name, no
2205 substitution is performed.
2206 .Pp
2207 The home directory of previously expanded login names are cached and re-used.
2208 The
2209 .Ic alias Fl d
2210 command may be used to list, change and add to this cache (e.g.\&
2211 .Ic alias \-d fac=/usr/local/facilities; cd \*(TIfac/bin ) .
2212 .Ss Brace expansion (alternation)
2213 Brace expressions take the following form:
2214 .Bd -unfilled -offset indent
2215 .Sm off
2216 .Xo
2217 .Ar prefix No { Ar str1 No ,...,
2218 .Ar strN No } Ar suffix
2219 .Xc
2220 .Sm on
2221 .Ed
2222 .Pp
2223 The expressions are expanded to
2224 .Ar N
2225 words, each of which is the concatenation of
2226 .Ar prefix ,
2227 .Ar str Ns i
2228 and
2229 .Ar suffix
2230 (e.g.\&
2231 .Dq Li a{c,b{X,Y},d}e
2232 expands to four words:
2233 .Dq Li ace ,
2234 .Dq Li abXe ,
2235 .Dq Li abYe
2236 and
2237 .Dq Li ade ) .
2238 As noted in the example, brace expressions can be nested and the resulting
2239 words are not sorted.
2240 Brace expressions must contain an unquoted comma
2241 .Pq Ql \&,
2242 for expansion to occur (e.g.\&
2243 .Ic {}
2244 and
2245 .Ic {foo}
2246 are not expanded).
2247 Brace expansion is carried out after parameter substitution
2248 and before file name generation.
2249 .Ss File name patterns
2250 A file name pattern is a word containing one or more unquoted
2251 .Ql \&? ,
2252 .Ql * ,
2253 .Ql + ,
2254 .Ql @
2255 or
2256 .Ql \&!
2257 characters or
2258 .Dq Li \&[...]
2259 sequences.
2260 Once brace expansion has been performed, the shell replaces file
2261 name patterns with the sorted names of all the files that match the pattern
2262 (if no files match, the word is left unchanged).
2263 The pattern elements have the following meaning:
2264 .Bl -tag -width Ds
2265 .It \&?
2266 Matches any single character.
2267 .It \&*
2268 Matches any sequence of octets.
2269 .It \&[...]
2270 Matches any of the octets inside the brackets.
2271 Ranges of octets can be specified by separating two octets by a
2272 .Ql \-
2273 (e.g.\&
2274 .Dq Li \&[a0\-9]
2275 matches the letter
2276 .Ql a
2277 or any digit).
2278 In order to represent itself, a
2279 .Ql \-
2280 must either be quoted or the first or last octet in the octet list.
2281 Similarly, a
2282 .Ql \&]
2283 must be quoted or the first octet in the list if it is to represent itself
2284 instead of the end of the list.
2285 Also, a
2286 .Ql \&!
2287 appearing at the start of the list has special meaning (see below), so to
2288 represent itself it must be quoted or appear later in the list.
2289 .It \&[!...]
2290 Like [...],
2291 except it matches any octet not inside the brackets.
2292 .Sm off
2293 .It *( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
2294 .Sm on
2295 Matches any string of octets that matches zero or more occurrences of the
2296 specified patterns.
2297 Example: The pattern
2298 .Ic *(foo\*(Babar)
2299 matches the strings
2300 .Dq ,
2301 .Dq Li foo ,
2302 .Dq Li bar ,
2303 .Dq Li foobarfoo ,
2304 etc.
2305 .Sm off
2306 .It +( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
2307 .Sm on
2308 Matches any string of octets that matches one or more occurrences of the
2309 specified patterns.
2310 Example: The pattern
2311 .Ic +(foo\*(Babar)
2312 matches the strings
2313 .Dq Li foo ,
2314 .Dq Li bar ,
2315 .Dq Li foobar ,
2316 etc.
2317 .Sm off
2318 .It ?( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
2319 .Sm on
2320 Matches the empty string or a string that matches one of the specified
2321 patterns.
2322 Example: The pattern
2323 .Ic ?(foo\*(Babar)
2324 only matches the strings
2325 .Dq ,
2326 .Dq Li foo
2327 and
2328 .Dq Li bar .
2329 .Sm off
2330 .It @( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
2331 .Sm on
2332 Matches a string that matches one of the specified patterns.
2333 Example: The pattern
2334 .Ic @(foo\*(Babar)
2335 only matches the strings
2336 .Dq Li foo
2337 and
2338 .Dq Li bar .
2339 .Sm off
2340 .It !( Ar pattern\*(Ba No ...\*(Ba Ar pattern )
2341 .Sm on
2342 Matches any string that does not match one of the specified patterns.
2343 Examples: The pattern
2344 .Ic !(foo\*(Babar)
2345 matches all strings except
2346 .Dq Li foo
2347 and
2348 .Dq Li bar ;
2349 the pattern
2350 .Ic \&!(*)
2351 matches no strings; the pattern
2352 .Ic \&!(?)*
2353 matches all strings (think about it).
2354 .El
2355 .Pp
2356 Note that complicated globbing, especially with alternatives,
2357 is slow; using separate comparisons may (or may not) be faster.
2358 .Pp
2359 Note that
2360 .Nm mksh
2361 .Po and Nm pdksh Pc
2362 never matches
2363 .Dq Li \&.
2364 and
2365 .Dq Li .. ,
2366 but
2367 .At
2368 .Nm ksh ,
2369 Bourne
2370 .Nm sh
2371 and GNU
2372 .Nm bash
2373 do.
2374 .Pp
2375 Note that none of the above pattern elements match either a period
2376 .Pq Ql \&.
2377 at the start of a file name or a slash
2378 .Pq Ql / ,
2379 even if they are explicitly used in a [...] sequence; also, the names
2380 .Dq Li \&.
2381 and
2382 .Dq Li ..
2383 are never matched, even by the pattern
2384 .Dq Li .* .
2385 .Pp
2386 If the
2387 .Ic markdirs
2388 option is set, any directories that result from file name generation are marked
2389 with a trailing
2390 .Ql / .
2391 .Ss Input/output redirection
2392 When a command is executed, its standard input, standard output and standard
2393 error (file descriptors 0, 1 and 2, respectively) are normally inherited from
2394 the shell.
2395 Three exceptions to this are commands in pipelines, for which
2396 standard input and/or standard output are those set up by the pipeline,
2397 asynchronous commands created when job control is disabled, for which standard
2398 input is initially set to
2399 .Pa /dev/null ,
2400 and commands for which any of the following redirections have been specified:
2401 .Bl -tag -width XXxxmarker
2402 .It \*(Gt Ns Ar file
2403 Standard output is redirected to
2404 .Ar file .
2405 If
2406 .Ar file
2407 does not exist, it is created; if it does exist, is a regular file, and the
2408 .Ic noclobber
2409 option is set, an error occurs; otherwise, the file is truncated.
2410 Note that this means the command
2411 .Ic cmd \*(Ltfoo \*(Gtfoo
2412 will open
2413 .Ar foo
2414 for reading and then truncate it when it opens it for writing, before
2415 .Ar cmd
2416 gets a chance to actually read
2417 .Ar foo .
2418 .It \*(Gt\*(Ba Ns Ar file
2419 Same as
2420 .Ic \*(Gt ,
2421 except the file is truncated, even if the
2422 .Ic noclobber
2423 option is set.
2424 .It \*(Gt\*(Gt Ns Ar file
2425 Same as
2426 .Ic \*(Gt ,
2427 except if
2428 .Ar file
2429 exists it is appended to instead of being truncated.
2430 Also, the file is opened
2431 in append mode, so writes always go to the end of the file (see
2432 .Xr open 2 ) .
2433 .It \*(Lt Ns Ar file
2434 Standard input is redirected from
2435 .Ar file ,
2436 which is opened for reading.
2437 .It \*(Lt\*(Gt Ns Ar file
2438 Same as
2439 .Ic \*(Lt ,
2440 except the file is opened for reading and writing.
2441 .It \*(Lt\*(Lt Ns Ar marker
2442 After reading the command line containing this kind of redirection (called a
2443 .Dq here document ) ,
2444 the shell copies lines from the command source into a temporary file until a
2445 line matching
2446 .Ar marker
2447 is read.
2448 When the command is executed, standard input is redirected from the
2449 temporary file.
2450 If
2451 .Ar marker
2452 contains no quoted characters, the contents of the temporary file are processed
2453 as if enclosed in double quotes each time the command is executed, so
2454 parameter, command and arithmetic substitutions are performed, along with
2455 backslash
2456 .Pq Ql \e
2457 escapes for
2458 .Ql $ ,
2459 .Ql \` ,
2460 .Ql \e
2461 and
2462 .Dq Li \enewline ,
2463 but not for
2464 .Ql \&" .
2465 If multiple here documents are used on the same command line, they are saved in
2466 order.
2467 .Pp
2468 If no
2469 .Ar marker
2470 is given, the here document ends at the next
2471 .Ic \*(Lt\*(Lt
2472 and substitution will be performed.
2473 If
2474 .Ar marker
2475 is only a set of either single
2476 .Dq Li \*(aq\*(aq
2477 or double
2478 .Ql \&""
2479 quotes with nothing in between, the here document ends at the next empty line
2480 and substitution will not be performed.
2481 .It \*(Lt\*(Lt\- Ns Ar marker
2482 Same as
2483 .Ic \*(Lt\*(Lt ,
2484 except leading tabs are stripped from lines in the here document.
2485 .It \*(Lt\*(Lt\*(Lt Ns Ar word
2486 Same as
2487 .Ic \*(Lt\*(Lt ,
2488 except that
2489 .Ar word
2490 .Em is
2491 the here document.
2492 This is called a here string.
2493 .It \*(Lt& Ns Ar fd
2494 Standard input is duplicated from file descriptor
2495 .Ar fd .
2496 .Ar fd
2497 can be a single digit, indicating the number of an existing file descriptor;
2498 the letter
2499 .Ql p ,
2500 indicating the file descriptor associated with the output of the current
2501 co-process; or the character
2502 .Ql \- ,
2503 indicating standard input is to be closed.
2504 .It \*(Gt& Ns Ar fd
2505 Same as
2506 .Ic \*(Lt& ,
2507 except the operation is done on standard output.
2508 .It &\*(Gt Ns Ar file
2509 Same as
2510 .Ic \*(Gt Ns Ar file 2\*(Gt&1 .
2511 This is a deprecated (legacy) GNU
2512 .Nm bash
2513 extension supported by
2514 .Nm
2515 which also supports the preceding explicit fd digit, for example,
2516 .Ic 3&\*(Gt Ns Ar file
2517 is the same as
2518 .Ic 3\*(Gt Ns Ar file 2\*(Gt&3
2519 in
2520 .Nm
2521 but a syntax error in GNU
2522 .Nm bash .
2523 .It Xo
2524 .No &\*(Gt\*(Ba Ns Ar file ,
2525 .No &\*(Gt\*(Gt Ns Ar file ,
2526 .No &\*(Gt& Ns Ar fd
2527 .Xc
2528 Same as
2529 .Ic \*(Gt\*(Ba Ns Ar file ,
2530 .Ic \*(Gt\*(Gt Ns Ar file
2531 or
2532 .Ic \*(Gt& Ns Ar fd ,
2533 followed by
2534 .Ic 2\*(Gt&1 ,
2535 as above.
2536 These are
2537 .Nm
2538 extensions.
2539 .El
2540 .Pp
2541 In any of the above redirections, the file descriptor that is redirected
2542 (i.e. standard input or standard output)
2543 can be explicitly given by preceding the
2544 redirection with a single digit.
2545 Parameter, command and arithmetic
2546 substitutions, tilde substitutions, and, if the shell is interactive,
2547 file name generation are all performed on the
2548 .Ar file ,
2549 .Ar marker
2550 and
2551 .Ar fd
2552 arguments of redirections.
2553 Note, however, that the results of any file name
2554 generation are only used if a single file is matched; if multiple files match,
2555 the word with the expanded file name generation characters is used.
2556 Note
2557 that in restricted shells, redirections which can create files cannot be used.
2558 .Pp
2559 For simple-commands, redirections may appear anywhere in the command; for
2560 compound-commands
2561 .Po
2562 .Ic if
2563 statements, etc.
2564 .Pc ,
2565 any redirections must appear at the end.
2566 Redirections are processed after
2567 pipelines are created and in the order they are given, so the following
2568 will print an error with a line number prepended to it:
2569 .Pp
2570 .Dl $ cat /foo/bar 2\*(Gt&1 \*(Gt/dev/null \*(Ba pr \-n \-t
2571 .Pp
2572 File descriptors created by I/O redirections are private to the shell.
2573 .Ss Arithmetic expressions
2574 Integer arithmetic expressions can be used with the
2575 .Ic let
2576 command, inside $((...)) expressions, inside array references (e.g.\&
2577 .Ar name Ns Bq Ar expr ) ,
2578 as numeric arguments to the
2579 .Ic test
2580 command, and as the value of an assignment to an integer parameter.
2581 .Em Warning :
2582 This also affects implicit conversion to integer, for example as done by the
2583 .Ic let
2584 command.
2585 .Em Never
2586 use unchecked user input, e.g. from the environment, in an arithmetic context!
2587 .Pp
2588 Expressions are calculated using signed arithmetic and the
2589 .Vt mksh_ari_t
2590 type (a 32-bit signed integer), unless they begin with a sole
2591 .Ql #
2592 character, in which case they use
2593 .Vt mksh_uari_t
2594 .Po a 32-bit unsigned integer Pc .
2595 .Pp
2596 Expressions may contain alpha-numeric parameter identifiers, array references
2597 and integer constants and may be combined with the following C operators
2598 (listed and grouped in increasing order of precedence):
2599 .Pp
2600 Unary operators:
2601 .Bd -literal -offset indent
2602 + \- ! \*(TI ++ \-\-
2603 .Ed
2604 .Pp
2605 Binary operators:
2606 .Bd -literal -offset indent
2607 ,
2608 = += \-= *= /= %= \*(Lt\*(Lt= \*(Gt\*(Gt= \*(ha\*(Lt= \*(ha\*(Gt= &= \*(ha= \*(Ba=
2609 \*(Ba\*(Ba
2610 &&
2611 \*(Ba
2612 \*(ha
2613 &
2614 == !=
2615 \*(Lt \*(Lt= \*(Gt \*(Gt=
2616 \*(Lt\*(Lt \*(Gt\*(Gt \*(ha\*(Lt \*(ha\*(Gt
2617 + \-
2618 * / %
2619 .Ed
2620 .Pp
2621 Ternary operators:
2622 .Bd -literal -offset indent
2623 ?: (precedence is immediately higher than assignment)
2624 .Ed
2625 .Pp
2626 Grouping operators:
2627 .Bd -literal -offset indent
2628 ( )
2629 .Ed
2630 .Pp
2631 Integer constants and expressions are calculated using an exactly 32-bit
2632 wide, signed or unsigned, type with silent wraparound on integer overflow.
2633 Integer constants may be specified with arbitrary bases using the notation
2634 .Ar base Ns # Ns Ar number ,
2635 where
2636 .Ar base
2637 is a decimal integer specifying the base (up to 36), and
2638 .Ar number
2639 is a number in the specified base.
2640 Additionally, base-16 integers may be specified by prefixing them with
2641 .Dq Li 0x
2642 .Pq case-insensitive
2643 in all forms of arithmetic expressions, except as numeric arguments to the
2644 .Ic test
2645 built-in utility.
2646 Prefixing numbers with a sole digit zero
2647 .Pq Dq Li 0
2648 does not cause interpretation as octal (except in POSIX mode,
2649 as required by the standard), as that's unsafe to do.
2650 .Pp
2651 As a special
2652 .Nm mksh
2653 extension, numbers to the base of one are treated as either (8-bit
2654 transparent) ASCII or Unicode codepoints, depending on the shell's
2655 .Ic utf8\-mode
2656 flag (current setting).
2657 The
2658 .At
2659 .Nm ksh93
2660 syntax of
2661 .Dq Li \*(aqx\*(aq
2662 instead of
2663 .Dq Li 1#x
2664 is also supported.
2665 Note that NUL bytes (integral value of zero) cannot be used.
2666 An unset or empty parameter evaluates to 0 in integer context.
2667 In Unicode mode, raw octets are mapped into the range EF80..EFFF as in
2668 OPTU-8, which is in the PUA and has been assigned by CSUR for this use.
2669 If more than one octet in ASCII mode, or a sequence of more than one
2670 octet not forming a valid and minimal CESU-8 sequence is passed, the
2671 behaviour is undefined (usually, the shell aborts with a parse error,
2672 but rarely, it succeeds, e.g. on the sequence C2 20).
2673 That's why you should always use ASCII mode unless you know that the
2674 input is well-formed UTF-8 in the range of 0000..FFFD if you use this
2675 feature, as opposed to
2676 .Ic read Fl a .
2677 .Pp
2678 The operators are evaluated as follows:
2679 .Bl -tag -width Ds -offset indent
2680 .It unary +
2681 Result is the argument (included for completeness).
2682 .It unary \-
2683 Negation.
2684 .It \&!
2685 Logical NOT;
2686 the result is 1 if argument is zero, 0 if not.
2687 .It \*(TI
2688 Arithmetic (bit-wise) NOT.
2689 .It ++
2690 Increment; must be applied to a parameter (not a literal or other expression).
2691 The parameter is incremented by 1.
2692 When used as a prefix operator, the result
2693 is the incremented value of the parameter; when used as a postfix operator, the
2694 result is the original value of the parameter.
2695 .It \-\-
2696 Similar to
2697 .Ic ++ ,
2698 except the parameter is decremented by 1.
2699 .It \&,
2700 Separates two arithmetic expressions; the left-hand side is evaluated first,
2701 then the right.
2702 The result is the value of the expression on the right-hand side.
2703 .It =
2704 Assignment; the variable on the left is set to the value on the right.
2705 .It Xo
2706 .No += \-= *= /= %= \*(Lt\*(Lt= \*(Gt\*(Gt=
2707 .No \*(ha\*(Lt= \*(ha\*(Gt= &= \*(ha= \*(Ba=
2708 .Xc
2709 Assignment operators.
2710 .Sm off
2711 .Ao Ar var Ac Xo
2712 .Aq Ar op
2713 .No = Aq Ar expr
2714 .Xc
2715 .Sm on
2716 is the same as
2717 .Sm off
2718 .Ao Ar var Ac Xo
2719 .No = Aq Ar var
2720 .Aq Ar op
2721 .Aq Ar expr ,
2722 .Xc
2723 .Sm on
2724 with any operator precedence in
2725 .Aq Ar expr
2726 preserved.
2727 For example,
2728 .Dq Li var1 *= 5 + 3
2729 is the same as specifying
2730 .Dq Li var1 = var1 * (5 + 3) .
2731 .It \*(Ba\*(Ba
2732 Logical OR;
2733 the result is 1 if either argument is non-zero, 0 if not.
2734 The right argument is evaluated only if the left argument is zero.
2735 .It &&
2736 Logical AND;
2737 the result is 1 if both arguments are non-zero, 0 if not.
2738 The right argument is evaluated only if the left argument is non-zero.
2739 .It \*(Ba
2740 Arithmetic (bit-wise) OR.
2741 .It \*(ha
2742 Arithmetic (bit-wise) XOR
2743 (exclusive-OR).
2744 .It &
2745 Arithmetic (bit-wise) AND.
2746 .It ==
2747 Equal; the result is 1 if both arguments are equal, 0 if not.
2748 .It !=
2749 Not equal; the result is 0 if both arguments are equal, 1 if not.
2750 .It \*(Lt
2751 Less than; the result is 1 if the left argument is less than the right, 0 if
2752 not.
2753 .It \*(Lt= \*(Gt \*(Gt=
2754 Less than or equal, greater than, greater than or equal.
2755 See
2756 .Ic \*(Lt .
2757 .It \*(Lt\*(Lt \*(Gt\*(Gt
2758 Shift left (right); the result is the left argument with its bits
2759 arithmetically (signed operation) or logically (unsigned expression)
2760 shifted left (right) by the amount given in the right argument.
2761 .It \*(ha\*(Lt \*(ha\*(Gt
2762 Rotate left (right); the result is similar to shift,
2763 except that the bits shifted out at one end are shifted in
2764 at the other end, instead of zero or sign bits.
2765 .It + \- * /
2766 Addition, subtraction, multiplication and division.
2767 .It %
2768 Remainder; the result is the symmetric remainder of the division of the left
2769 argument by the right.
2770 To get the mathematical modulus of
2771 .Dq a Ic mod No b ,
2772 use the formula
2773 .Do
2774 .Pq a % b + b
2775 .No % b
2776 .Dc .
2777 .It Xo
2778 .Sm off
2779 .Aq Ar arg1 ?
2780 .Aq Ar arg2 :
2781 .Aq Ar arg3
2782 .Sm on
2783 .Xc
2784 If
2785 .Aq Ar arg1
2786 is non-zero, the result is
2787 .Aq Ar arg2 ;
2788 otherwise the result is
2789 .Aq Ar arg3 .
2790 The non-result argument is not evaluated.
2791 .El
2792 .Ss Co-processes
2793 A co-process (which is a pipeline created with the
2794 .Dq Li \*(Ba&
2795 operator) is an asynchronous process that the shell can both write to (using
2796 .Ic print Fl p )
2797 and read from (using
2798 .Ic read Fl p ) .
2799 The input and output of the co-process can also be manipulated using
2800 .Ic \*(Gt&p
2801 and
2802 .Ic \*(Lt&p
2803 redirections, respectively.
2804 Once a co-process has been started, another can't
2805 be started until the co-process exits, or until the co-process's input has been
2806 redirected using an
2807 .Ic exec Ar n Ns Ic \*(Gt&p
2808 redirection.
2809 If a co-process's input is redirected in this way, the next
2810 co-process to be started will share the output with the first co-process,
2811 unless the output of the initial co-process has been redirected using an
2812 .Ic exec Ar n Ns Ic \*(Lt&p
2813 redirection.
2814 .Pp
2815 Some notes concerning co-processes:
2816 .Bl -bullet
2817 .It
2818 The only way to close the co-process's input (so the co-process reads an
2819 end-of-file) is to redirect the input to a numbered file descriptor and then
2820 close that file descriptor:
2821 .Ic exec 3\*(Gt&p; exec 3\*(Gt&\-
2822 .It
2823 In order for co-processes to share a common output, the shell must keep the
2824 write portion of the output pipe open.
2825 This means that end-of-file will not be
2826 detected until all co-processes sharing the co-process's output have exited
2827 (when they all exit, the shell closes its copy of the pipe).
2828 This can be
2829 avoided by redirecting the output to a numbered file descriptor (as this also
2830 causes the shell to close its copy).
2831 Note that this behaviour is slightly
2832 different from the original Korn shell which closes its copy of the write
2833 portion of the co-process output when the most recently started co-process
2834 (instead of when all sharing co-processes) exits.
2835 .It
2836 .Ic print Fl p
2837 will ignore
2838 .Dv SIGPIPE
2839 signals during writes if the signal is not being trapped or ignored; the same
2840 is true if the co-process input has been duplicated to another file descriptor
2841 and
2842 .Ic print Fl u Ns Ar n
2843 is used.
2844 .El
2845 .Ss Functions
2846 Functions are defined using either Korn shell
2847 .Ic function Ar function-name
2848 syntax or the Bourne/POSIX shell
2849 .Ar function-name Ns \&()
2850 syntax (see below for the difference between the two forms).
2851 Functions are like
2852 .Li .\(hyscripts
2853 (i.e. scripts sourced using the
2854 .Dq Li \&.
2855 built-in)
2856 in that they are executed in the current environment.
2857 However, unlike
2858 .Li .\(hyscripts ,
2859 shell arguments (i.e. positional parameters $1, $2, etc.)\&
2860 are never visible inside them.
2861 When the shell is determining the location of a command, functions
2862 are searched after special built-in commands, before builtins and the
2863 .Ev PATH
2864 is searched.
2865 .Pp
2866 An existing function may be deleted using
2867 .Ic unset Fl f Ar function-name .
2868 A list of functions can be obtained using
2869 .Ic typeset +f
2870 and the function definitions can be listed using
2871 .Ic typeset Fl f .
2872 The
2873 .Ic autoload
2874 command (which is an alias for
2875 .Ic typeset Fl fu )
2876 may be used to create undefined functions: when an undefined function is
2877 executed, the shell searches the path specified in the
2878 .Ev FPATH
2879 parameter for a file with the same name as the function which, if found, is
2880 read and executed.
2881 If after executing the file the named function is found to
2882 be defined, the function is executed; otherwise, the normal command search is
2883 continued (i.e. the shell searches the regular built-in command table and
2884 .Ev PATH ) .
2885 Note that if a command is not found using
2886 .Ev PATH ,
2887 an attempt is made to autoload a function using
2888 .Ev FPATH
2889 (this is an undocumented feature of the original Korn shell).
2890 .Pp
2891 Functions can have two attributes,
2892 .Dq trace
2893 and
2894 .Dq export ,
2895 which can be set with
2896 .Ic typeset Fl ft
2897 and
2898 .Ic typeset Fl fx ,
2899 respectively.
2900 When a traced function is executed, the shell's
2901 .Ic xtrace
2902 option is turned on for the function's duration.
2903 The
2904 .Dq export
2905 attribute of functions is currently not used.
2906 In the original Korn shell,
2907 exported functions are visible to shell scripts that are executed.
2908 .Pp
2909 Since functions are executed in the current shell environment, parameter
2910 assignments made inside functions are visible after the function completes.
2911 If this is not the desired effect, the
2912 .Ic typeset
2913 command can be used inside a function to create a local parameter.
2914 Note that
2915 .At
2916 .Nm ksh93
2917 uses static scoping (one global scope, one local scope per function)
2918 and allows local variables only on Korn style functions, whereas
2919 .Nm mksh
2920 uses dynamic scoping (nested scopes of varying locality).
2921 Note that special parameters (e.g.\&
2922 .Ic \&$$ , $! )
2923 can't be scoped in this way.
2924 .Pp
2925 The exit status of a function is that of the last command executed in the
2926 function.
2927 A function can be made to finish immediately using the
2928 .Ic return
2929 command; this may also be used to explicitly specify the exit status.
2930 Note that when called in a subshell,
2931 .Ic return
2932 will only exit that subshell and will not cause the original shell to exit
2933 a running function (see the
2934 .Ic while Ns Li \&... Ns Ic read
2935 loop FAQ below).
2936 .Pp
2937 Functions defined with the
2938 .Ic function
2939 reserved word are treated differently in the following ways from functions
2940 defined with the
2941 .Ic \&()
2942 notation:
2943 .Bl -bullet
2944 .It
2945 The $0 parameter is set to the name of the function
2946 (Bourne-style functions leave $0 untouched).
2947 .It
2948 Parameter assignments preceding function calls are not kept in the shell
2949 environment (executing Bourne-style functions will keep assignments).
2950 .It
2951 .Ev OPTIND
2952 is saved/reset and restored on entry and exit from the function so
2953 .Ic getopts
2954 can be used properly both inside and outside the function (Bourne-style
2955 functions leave
2956 .Ev OPTIND
2957 untouched, so using
2958 .Ic getopts
2959 inside a function interferes with using
2960 .Ic getopts
2961 outside the function).
2962 .It
2963 Shell options
2964 .Pq Ic set Fl o
2965 have local scope, i.e. changes inside a function are reset upon its exit.
2966 .El
2967 .Pp
2968 In the future, the following differences may also be added:
2969 .Bl -bullet
2970 .It
2971 A separate trap/signal environment will be used during the execution of
2972 functions.
2973 This will mean that traps set inside a function will not affect the
2974 shell's traps and signals that are not ignored in the shell (but may be
2975 trapped) will have their default effect in a function.
2976 .It
2977 The EXIT trap, if set in a function, will be executed after the function
2978 returns.
2979 .El
2980 .Ss Command execution
2981 After evaluation of command-line arguments, redirections and parameter
2982 assignments, the type of command is determined: a special built-in command,
2983 a function, a normal builtin or the name of a file to execute found using the
2984 .Ev PATH
2985 parameter.
2986 The checks are made in the above order.
2987 Special built-in commands differ from other commands in that the
2988 .Ev PATH
2989 parameter is not used to find them, an error during their execution can
2990 cause a non-interactive shell to exit, and parameter assignments that are
2991 specified before the command are kept after the command completes.
2992 Regular built-in commands are different only in that the
2993 .Ev PATH
2994 parameter is not used to find them.
2995 .Pp
2996 The original
2997 .Nm ksh
2998 and POSIX differ somewhat in which commands are considered
2999 special or regular.
3000 .Pp
3001 POSIX special built-in utilities:
3002 .Pp
3003 .Ic \&. , \&: , break , continue ,
3004 .Ic eval , exec , exit , export ,
3005 .Ic readonly , return , set , shift ,
3006 .Ic times , trap , unset
3007 .Pp
3008 Additional
3009 .Nm
3010 commands keeping assignments:
3011 .Pp
3012 .Ic global , source , typeset
3013 .Pp
3014 Builtins that are not special:
3015 .Pp
3016 .Ic [ , alias , bg , bind ,
3017 .Ic builtin , cat , cd , command ,
3018 .Ic echo , false , fc , fg ,
3019 .Ic getopts , jobs , kill , let ,
3020 .Ic print , pwd , read , realpath ,
3021 .Ic rename , sleep , suspend , test ,
3022 .Ic true , ulimit , umask , unalias ,
3023 .Ic wait , whence
3024 .Pp
3025 Once the type of command has been determined, any command-line parameter
3026 assignments are performed and exported for the duration of the command.
3027 .Pp
3028 The following describes the special and regular built-in commands and
3029 builtin-like reserved words:
3030 .Pp
3031 .Bl -tag -width false -compact
3032 .It Ic \&. Ar file Op Ar arg ...
3033 This is called the
3034 .Dq dot
3035 command.
3036 Execute the commands in
3037 .Ar file
3038 in the current environment.
3039 The file is searched for in the directories of
3040 .Ev PATH .
3041 If arguments are given, the positional parameters may be used to access them
3042 while
3043 .Ar file
3044 is being executed.
3045 If no arguments are given, the positional parameters are
3046 those of the environment the command is used in.
3047 .Pp
3048 .It Ic \&: Op Ar ...
3049 The null command.
3050 Exit status is set to zero.
3051 .Pp
3052 .It Ic \&[ Ar expression Ic \&]
3053 See
3054 .Ic test .
3055 .Pp
3056 .It Xo Ic alias
3057 .Oo Fl d \*(Ba t Oo Fl r Oc \*(Ba
3058 .Cm +\-x Oc
3059 .Op Fl p
3060 .Op Cm +
3061 .Oo Ar name
3062 .Op Ns = Ns Ar value
3063 .Ar ... Oc
3064 .Xc
3065 Without arguments,
3066 .Ic alias
3067 lists all aliases.
3068 For any name without a value, the existing alias is listed.
3069 Any name with a value defines an alias (see
3070 .Sx Aliases
3071 above).
3072 .Li \&[A\-Za\-z0\-9_!%,@\-]
3073 are valid in names except they may not begin with a hyphen-minus.
3074 .Pp
3075 When listing aliases, one of two formats is used.
3076 Normally, aliases are listed as
3077 .Ar name Ns = Ns Ar value ,
3078 where
3079 .Ar value
3080 is quoted.
3081 If options were preceded with
3082 .Ql + ,
3083 or a lone
3084 .Ql +
3085 is given on the command line, only
3086 .Ar name
3087 is printed.
3088 .Pp
3089 The
3090 .Fl d
3091 option causes directory aliases which are used in tilde expansion to be
3092 listed or set (see
3093 .Sx Tilde expansion
3094 above).
3095 .Pp
3096 If the
3097 .Fl p
3098 option is used, each alias is prefixed with the string
3099 .Dq Li alias\ \& .
3100 .Pp
3101 The
3102 .Fl t
3103 option indicates that tracked aliases are to be listed/set (values specified on
3104 the command line are ignored for tracked aliases).
3105 The
3106 .Fl r
3107 option indicates that all tracked aliases are to be reset.
3108 .Pp
3109 The
3110 .Fl x
3111 option sets
3112 .Pq Ic +x No clears
3113 the export attribute of an alias, or, if no names are given, lists the aliases
3114 with the export attribute (exporting an alias has no effect).
3115 .Pp
3116 .It Ic bg Op Ar job ...
3117 Resume the specified stopped job(s) in the background.
3118 If no jobs are specified,
3119 .Ic %+
3120 is assumed.
3121 See
3122 .Sx Job control
3123 below for more information.
3124 .Pp
3125 .It Ic bind Op Fl l
3126 The current bindings are listed.
3127 If the
3128 .Fl l
3129 flag is given,
3130 .Ic bind
3131 instead lists the names of the functions to which keys may be bound.
3132 See
3133 .Sx Emacs editing mode
3134 for more information.
3135 .Pp
3136 .It Xo Ic bind Op Fl m
3137 .Ar string Ns = Ns Op Ar substitute
3138 .Ar ...
3139 .Xc
3140 .It Xo Ic bind
3141 .Ar string Ns = Ns Op Ar editing-command
3142 .Ar ...
3143 .Xc
3144 The specified editing command is bound to the given
3145 .Ar string ,
3146 which should consist of a control character
3147 optionally preceded by one of the two prefix characters
3148 and optionally succeeded by a tilde character.
3149 Future input of the
3150 .Ar string
3151 will cause the editing command to be immediately invoked.
3152 If the
3153 .Fl m
3154 flag is given, the specified input
3155 .Ar string
3156 will afterwards be immediately replaced by the given
3157 .Ar substitute
3158 string which may contain editing commands but not other macros.
3159 If a tilde postfix is given, a tilde trailing the one or
3160 two prefices and the control character is ignored, any
3161 other trailing character will be processed afterwards.
3162 .Pp
3163 Control characters may be written using caret notation
3164 i.e. \*(haX represents Ctrl-X.
3165 Note that although only two prefix characters (usually ESC and \*(haX)
3166 are supported, some multi-character sequences can be supported.
3167 .Pp
3168 The following default bindings show how the arrow keys, the home, end and
3169 delete key on a BSD wsvt25, xterm\-xfree86 or GNU screen terminal are bound
3170 (of course some escape sequences won't work out quite this nicely):
3171 .Bd -literal -offset indent
3172 bind \*(aq\*(haX\*(aq=prefix\-2
3173 bind \*(aq\*(ha[[\*(aq=prefix\-2
3174 bind \*(aq\*(haXA\*(aq=up\-history
3175 bind \*(aq\*(haXB\*(aq=down\-history
3176 bind \*(aq\*(haXC\*(aq=forward\-char
3177 bind \*(aq\*(haXD\*(aq=backward\-char
3178 bind \*(aq\*(haX1\*(TI\*(aq=beginning\-of\-line
3179 bind \*(aq\*(haX7\*(TI\*(aq=beginning\-of\-line
3180 bind \*(aq\*(haXH\*(aq=beginning\-of\-line
3181 bind \*(aq\*(haX4\*(TI\*(aq=end\-of\-line
3182 bind \*(aq\*(haX8\*(TI\*(aq=end\-of\-line
3183 bind \*(aq\*(haXF\*(aq=end\-of\-line
3184 bind \*(aq\*(haX3\*(TI\*(aq=delete\-char\-forward
3185 .Ed
3186 .Pp
3187 .It Ic break Op Ar level
3188 Exit the
3189 .Ar level Ns th
3190 inner-most
3191 .Ic for ,
3192 .Ic select ,
3193 .Ic until
3194 or
3195 .Ic while
3196 loop.
3197 .Ar level
3198 defaults to 1.
3199 .Pp
3200 .It Xo
3201 .Ic builtin
3202 .Op Fl \-
3203 .Ar command Op Ar arg ...
3204 .Xc
3205 Execute the built-in command
3206 .Ar command .
3207 .Pp
3208 .It Xo
3209 .Ic \ebuiltin
3210 .Ar command Op Ar arg ...
3211 .Xc
3212 Same as
3213 .Ic builtin .
3214 Additionally acts as declaration utility forwarder, i.e. this is a
3215 declaration utility (see
3216 .Sx Tilde expansion )
3217 .No iff Ar command
3218 is a declaration utility.
3219 .Pp
3220 .It Xo
3221 .Ic cat
3222 .Op Fl u
3223 .Op Ar
3224 .Xc
3225 Read files sequentially, in command line order, and write them to
3226 standard output.
3227 If a
3228 .Ar file
3229 is a single dash
3230 .Pq Dq Li \-
3231 or absent, read from standard input.
3232 For direct builtin calls, the
3233 .Tn POSIX
3234 .Fl u
3235 option is supported as a no-op.
3236 For calls from shell, if any options are given, an external
3237 .Xr cat 1
3238 utility is preferred over the builtin.
3239 .Pp
3240 .It Xo
3241 .Ic cd
3242 .Op Fl L
3243 .Op Ar dir
3244 .Xc
3245 .It Xo
3246 .Ic cd
3247 .Fl P Op Fl e
3248 .Op Ar dir
3249 .Xc
3250 .It Xo
3251 .Ic chdir
3252 .Op Fl eLP
3253 .Op Ar dir
3254 .Xc
3255 Set the working directory to
3256 .Ar dir .
3257 If the parameter
3258 .Ev CDPATH
3259 is set, it lists the search path for the directory containing
3260 .Ar dir .
3261 An unset or empty path means the current directory.
3262 If
3263 .Ar dir
3264 is found in any component of the
3265 .Ev CDPATH
3266 search path other than an unset or empty path,
3267 the name of the new working directory will be written to standard output.
3268 If
3269 .Ar dir
3270 is missing, the home directory
3271 .Ev HOME
3272 is used.
3273 If
3274 .Ar dir
3275 is
3276 .Dq Li \- ,
3277 the previous working directory is used (see the
3278 .Ev OLDPWD
3279 parameter).
3280 .Pp
3281 If the
3282 .Fl L
3283 option (logical path) is used or if the
3284 .Ic physical
3285 option isn't set (see the
3286 .Ic set
3287 command below), references to
3288 .Dq Li ..
3289 in
3290 .Ar dir
3291 are relative to the path used to get to the directory.
3292 If the
3293 .Fl P
3294 option (physical path) is used or if the
3295 .Ic physical
3296 option is set,
3297 .Dq Li ..
3298 is relative to the filesystem directory tree.
3299 The
3300 .Ev PWD
3301 and
3302 .Ev OLDPWD
3303 parameters are updated to reflect the current and old working directory,
3304 respectively.
3305 If the
3306 .Fl e
3307 option is set for physical filesystem traversal and
3308 .Ev PWD
3309 could not be set, the exit code is 1; greater than 1 if an
3310 error occurred, 0 otherwise.
3311 .Pp
3312 .It Xo
3313 .Ic cd
3314 .Op Fl eLP
3315 .Ar old new
3316 .Xc
3317 .It Xo
3318 .Ic chdir
3319 .Op Fl eLP
3320 .Ar old new
3321 .Xc
3322 The string
3323 .Ar new
3324 is substituted for
3325 .Ar old
3326 in the current directory, and the shell attempts to change to the new
3327 directory.
3328 .Pp
3329 .It Xo
3330 .Ic command
3331 .Op Fl pVv
3332 .Ar cmd
3333 .Op Ar arg ...
3334 .Xc
3335 If neither the
3336 .Fl v
3337 nor
3338 .Fl V
3339 option is given,
3340 .Ar cmd
3341 is executed exactly as if
3342 .Ic command
3343 had not been specified, with two exceptions:
3344 firstly,
3345 .Ar cmd
3346 cannot be a shell function;
3347 and secondly, special built-in commands lose their specialness
3348 (i.e. redirection and utility errors do not cause the shell to
3349 exit, and command assignments are not permanent).
3350 The declaration utility property is not reset.
3351 .Pp
3352 If the
3353 .Fl p
3354 option is given, a default search path is used instead of the current value of
3355 .Ev PATH ,
3356 the actual value of which is system dependent.
3357 .Pp
3358 If the
3359 .Fl v
3360 option is given, instead of executing
3361 .Ar cmd ,
3362 information about what would be executed is given (and the same is done for
3363 .Ar arg ... ) .
3364 For builtins, functions and keywords, their names are simply printed;
3365 for aliases, a command that defines them is printed;
3366 for utilities found by searching the
3367 .Ev PATH
3368 parameter, the full path of the command is printed.
3369 If no command is found
3370 (i.e. the path search fails), nothing is printed and
3371 .Ic command
3372 exits with a non-zero status.
3373 The
3374 .Fl V
3375 option is like the
3376 .Fl v
3377 option, except it is more verbose.
3378 .Pp
3379 .It Ic continue Op Ar level
3380 Jumps to the beginning of the
3381 .Ar level Ns th
3382 inner-most
3383 .Ic for ,
3384 .Ic select ,
3385 .Ic until
3386 or
3387 .Ic while
3388 loop.
3389 .Ar level
3390 defaults to 1.
3391 .Pp
3392 .It Xo
3393 .Ic echo
3394 .Op Fl Een
3395 .Op Ar arg ...
3396 .Xc
3397 .Em Warning:
3398 this utility is not portable; use the Korn shell builtin
3399 .Ic print
3400 instead.
3401 .Pp
3402 Prints its arguments (separated by spaces) followed by a newline, to the
3403 standard output.
3404 The newline is suppressed if any of the arguments contain the
3405 backslash sequence
3406 .Dq Li \ec .
3407 See the
3408 .Ic print
3409 command below for a list of other backslash sequences that are recognised.
3410 .Pp
3411 The options are provided for compatibility with
3412 .Bx
3413 shell scripts.
3414 The
3415 .Fl n
3416 option suppresses the trailing newline,
3417 .Fl e
3418 enables backslash interpretation (a no-op, since this is normally done), and
3419 .Fl E
3420 suppresses backslash interpretation.
3421 .Pp
3422 If the
3423 .Ic posix
3424 or
3425 .Ic sh
3426 option is set or this is a direct builtin call or
3427 .Ic print
3428 .Fl R ,
3429 only the first argument is treated as an option, and only if it is exactly
3430 .Dq Li \-n .
3431 Backslash interpretation is disabled.
3432 .Pp
3433 .It Ic eval Ar command ...
3434 The arguments are concatenated (with spaces between them) to form a single
3435 string which the shell then parses and executes in the current environment.
3436 .Pp
3437 .It Xo
3438 .Ic exec
3439 .Op Fl a Ar argv0
3440 .Op Fl c
3441 .Op Ar command Op Ar arg ...
3442 .Xc
3443 The command is executed without forking, replacing the shell process.
3444 This is currently absolute, i.e.\&
3445 .Ic exec
3446 never returns, even if the
3447 .Ar command
3448 is not found.
3449 The
3450 .Fl a
3451 option permits setting a different
3452 .Li argv[0]
3453 value, and
3454 .Fl c
3455 clears the environment before executing the child process, except for the
3456 .Ev _
3457 variable and direct assignments.
3458 .Pp
3459 If no command is given except for I/O redirection, the I/O redirection is
3460 permanent and the shell is
3461 not replaced.
3462 Any file descriptors greater than 2 which are opened or
3463 .Xr dup 2 Ns 'd
3464 in this way are not made available to other executed commands (i.e. commands
3465 that are not built-in to the shell).
3466 Note that the Bourne shell differs here;
3467 it does pass these file descriptors on.
3468 .Pp
3469 .It Ic exit Op Ar status
3470 The shell or subshell exits with the specified exit status.
3471 If
3472 .Ar status
3473 is not specified, the exit status is the current value of the
3474 .Ic \&$?
3475 parameter.
3476 .Pp
3477 .It Xo
3478 .Ic export
3479 .Op Fl p
3480 .Op Ar parameter Ns Op = Ns Ar value
3481 .Xc
3482 Sets the export attribute of the named parameters.
3483 Exported parameters are passed in the environment to executed commands.
3484 If values are specified, the named parameters are also assigned.
3485 This is a declaration utility.
3486 .Pp
3487 If no parameters are specified, all parameters with the export attribute
3488 set are printed one per line; either their names, or, if a
3489 .Dq Li \-
3490 with no option letter is specified, name=value pairs, or, with
3491 .Fl p ,
3492 .Ic export
3493 commands suitable for re-entry.
3494 .Pp
3495 .It Ic false
3496 A command that exits with a non-zero status.
3497 .Pp
3498 .It Xo
3499 .Ic fc
3500 .Oo Fl e Ar editor \*(Ba
3501 .Fl l Op Fl n Oc
3502 .Op Fl r
3503 .Op Ar first Op Ar last
3504 .Xc
3505 .Ar first
3506 and
3507 .Ar last
3508 select commands from the history.
3509 Commands can be selected by history number
3510 (negative numbers go backwards from the current, most recent, line)
3511 or a string specifying the most recent command starting with that string.
3512 The
3513 .Fl l
3514 option lists the command on standard output, and
3515 .Fl n
3516 inhibits the default command numbers.
3517 The
3518 .Fl r
3519 option reverses the order of the list.
3520 Without
3521 .Fl l ,
3522 the selected commands are edited by the editor specified with the
3523 .Fl e
3524 option or, if no
3525 .Fl e
3526 is specified, the editor specified by the
3527 .Ev FCEDIT
3528 parameter (if this parameter is not set,
3529 .Pa /bin/ed
3530 is used), and then executed by the shell.
3531 .Pp
3532 .It Xo
3533 .Ic fc
3534 .Cm \-e \- \*(Ba Fl s
3535 .Op Fl g
3536 .Op Ar old Ns = Ns Ar new
3537 .Op Ar prefix
3538 .Xc
3539 Re-execute the selected command (the previous command by default) after
3540 performing the optional substitution of
3541 .Ar old
3542 with
3543 .Ar new .
3544 If
3545 .Fl g
3546 is specified, all occurrences of
3547 .Ar old
3548 are replaced with
3549 .Ar new .
3550 The meaning of
3551 .Cm \-e \-
3552 and
3553 .Fl s
3554 is identical: re-execute the selected command without invoking an editor.
3555 This command is usually accessed with the predefined:
3556 .Ic alias r=\*(aqfc \-e \-\*(aq
3557 .Pp
3558 .It Ic fg Op Ar job ...
3559 Resume the specified job(s) in the foreground.
3560 If no jobs are specified,
3561 .Ic %+
3562 is assumed.
3563 See
3564 .Sx Job control
3565 below for more information.
3566 .Pp
3567 .It Xo
3568 .Ic getopts
3569 .Ar optstring name
3570 .Op Ar arg ...
3571 .Xc
3572 Used by shell procedures to parse the specified arguments (or positional
3573 parameters, if no arguments are given) and to check for legal options.
3574 .Ar optstring
3575 contains the option letters that
3576 .Ic getopts
3577 is to recognise.
3578 If a letter is followed by a colon, the option is expected to
3579 have an argument.
3580 Options that do not take arguments may be grouped in a single argument.
3581 If an option takes an argument and the option character is not the
3582 last character of the argument it is found in, the remainder of the argument is
3583 taken to be the option's argument; otherwise, the next argument is the option's
3584 argument.
3585 .Pp
3586 Each time
3587 .Ic getopts
3588 is invoked, it places the next option in the shell parameter
3589 .Ar name
3590 and the index of the argument to be processed by the next call to
3591 .Ic getopts
3592 in the shell parameter
3593 .Ev OPTIND .
3594 If the option was introduced with a
3595 .Ql + ,
3596 the option placed in
3597 .Ar name
3598 is prefixed with a
3599 .Ql + .
3600 When an option requires an argument,
3601 .Ic getopts
3602 places it in the shell parameter
3603 .Ev OPTARG .
3604 .Pp
3605 When an illegal option or a missing option argument is encountered, a question
3606 mark or a colon is placed in
3607 .Ar name
3608 (indicating an illegal option or missing argument, respectively) and
3609 .Ev OPTARG
3610 is set to the option character that caused the problem.
3611 Furthermore, if
3612 .Ar optstring
3613 does not begin with a colon, a question mark is placed in
3614 .Ar name ,
3615 .Ev OPTARG
3616 is unset, and an error message is printed to standard error.
3617 .Pp
3618 When the end of the options is encountered,
3619 .Ic getopts
3620 exits with a non-zero exit status.
3621 Options end at the first (non-option
3622 argument) argument that does not start with a
3623 .Ql \- ,
3624 or when a
3625 .Dq Li \-\-
3626 argument is encountered.
3627 .Pp
3628 Option parsing can be reset by setting
3629 .Ev OPTIND
3630 to 1 (this is done automatically whenever the shell or a shell procedure is
3631 invoked).
3632 .Pp
3633 Warning: Changing the value of the shell parameter
3634 .Ev OPTIND
3635 to a value other than 1 or parsing different sets of arguments without
3636 resetting
3637 .Ev OPTIND
3638 may lead to unexpected results.
3639 .Pp
3640 .It Xo
3641 .Ic global
3642 .Op Ic +\-aglpnrtUux
3643 .Oo Fl L Ns Op Ar n
3644 .No \*(Ba Fl R Ns Op Ar n
3645 .No \*(Ba Fl Z Ns Op Ar n Oc
3646 .Op Fl i Ns Op Ar n
3647 .Oo Ar name
3648 .Op Ns = Ns Ar value
3649 .Ar ... Oc
3650 .Xc
3651 See
3652 .Ic typeset Fl g .
3653 .No Deprecated , Em will
3654 be removed from a future version of
3655 .Nm .
3656 .Pp
3657 .It Xo
3658 .Ic hash
3659 .Op Fl r
3660 .Op Ar name ...
3661 .Xc
3662 Without arguments, any hashed executable command pathnames are listed.
3663 The
3664 .Fl r
3665 option causes all hashed commands to be removed from the hash table.
3666 Each
3667 .Ar name
3668 is searched as if it were a command name and added to the hash table if it is
3669 an executable command.
3670 .Pp
3671 .It Xo
3672 .Ic jobs
3673 .Op Fl lnp
3674 .Op Ar job ...
3675 .Xc
3676 Display information about the specified job(s); if no jobs are specified, all
3677 jobs are displayed.
3678 The
3679 .Fl n
3680 option causes information to be displayed only for jobs that have changed
3681 state since the last notification.
3682 If the
3683 .Fl l
3684 option is used, the process ID of each process in a job is also listed.
3685 The
3686 .Fl p
3687 option causes only the process group of each job to be printed.
3688 See
3689 .Sx Job control
3690 below for the format of
3691 .Ar job
3692 and the displayed job.
3693 .Pp
3694 .It Xo
3695 .Ic kill
3696 .Oo Fl s Ar signame \*(Ba
3697 .No \- Ns Ar signum \*(Ba
3698 .No \- Ns Ar signame Oc
3699 .No { Ar job \*(Ba pid \*(Ba pgrp No }
3700 .Ar ...
3701 .Xc
3702 Send the specified signal to the specified jobs, process IDs or process
3703 groups.
3704 If no signal is specified, the
3705 .Dv TERM
3706 signal is sent.
3707 If a job is specified, the signal is sent to the job's process group.
3708 See
3709 .Sx Job control
3710 below for the format of
3711 .Ar job .
3712 .Pp
3713 .It Xo
3714 .Ic kill
3715 .Fl l
3716 .Op Ar exit-status ...
3717 .Xc
3718 Print the signal name corresponding to
3719 .Ar exit-status .
3720 If no arguments are specified, a list of all the signals with their numbers
3721 and a short description of each are printed.
3722 .Pp
3723 .It Ic let Op Ar expression ...
3724 Each expression is evaluated (see
3725 .Sx Arithmetic expressions
3726 above).
3727 If all expressions are successfully evaluated, the exit status is 0 (1)
3728 if the last expression evaluated to non-zero (zero).
3729 If an error occurs during
3730 the parsing or evaluation of an expression, the exit status is greater than 1.
3731 Since expressions may need to be quoted,
3732 .No \&(( Ar expr No ))
3733 is syntactic sugar for:
3734 .Dl "{ \e\ebuiltin let \*(aq" Ns Ar expr Ns "\*(aq; }"
3735 .Pp
3736 .It Xo
3737 .Ic mknod
3738 .Op Fl m Ar mode
3739 .Ar name
3740 .Cm b\*(Bac
3741 .Ar major minor
3742 .Xc
3743 .It Xo
3744 .Ic mknod
3745 .Op Fl m Ar mode
3746 .Ar name
3747 .Cm p
3748 .Xc
3749 Create a device special file.
3750 The file type may be
3751 .Cm b
3752 (block type device),
3753 .Cm c
3754 (character type device)
3755 or
3756 .Cm p
3757 .Pq named pipe , Tn FIFO .
3758 The file created may be modified according to its
3759 .Ar mode
3760 (via the
3761 .Fl m
3762 option),
3763 .Ar major
3764 (major device number),
3765 and
3766 .Ar minor
3767 (minor device number).
3768 This is not normally part of
3769 .Nm mksh ;
3770 however, distributors may have added this as builtin as a speed hack.
3771 .Pp
3772 .It Xo
3773 .Ic print
3774 .Oo Fl AcelNnprsu Ns Oo Ar n Oc \*(Ba
3775 .Fl R Op Fl n Oc
3776 .Op Ar argument ...
3777 .Xc
3778 Print the specified argument(s) on the standard output,
3779 separated by spaces, terminated with a newline.
3780 The escapes mentioned in
3781 .Sx Backslash expansion
3782 above, as well as
3783 .Dq Li \ec ,
3784 which is equivalent to using the
3785 .Fl n
3786 option, are interpreted.
3787 .Pp
3788 The options are as follows:
3789 .Bl -tag -width Ds
3790 .It Fl A
3791 Each
3792 .Ar argument
3793 is arithmetically evaluated; the character corresponding to the
3794 resulting value is printed.
3795 Empty
3796 .Ar argument Ns s
3797 separate input words.
3798 .It Fl c
3799 The output is printed columnised, line by line, similar to how the
3800 .Xr rs 1
3801 utility, tab completion, the
3802 .Ic kill Fl l
3803 built-in utility and the
3804 .Ic select
3805 statement do.
3806 .It Fl e
3807 Restore backslash expansion after a previous
3808 .Fl r .
3809 .It Fl l
3810 Change the output word separator to newline.
3811 .It Fl N
3812 Change the output word and line separator to ASCII NUL.
3813 .It Fl n
3814 Do not print the trailing line separator.
3815 .It Fl p
3816 Print to the co-process (see
3817 .Sx Co-processes
3818 above).
3819 .It Fl r
3820 Inhibit backslash expansion.
3821 .It Fl s
3822 Print to the history file instead of standard output.
3823 .It Fl u Ns Op Ar n
3824 Print to the file descriptor
3825 .Ar n Pq defaults to 1 if omitted
3826 instead of standard output.
3827 .El
3828 .Pp
3829 The
3830 .Fl R
3831 option mostly emulates the
3832 .Bx
3833 .Xr echo 1
3834 command which does not expand backslashes and interprets
3835 its first argument as option only if it is exactly
3836 .Dq Li \-n
3837 .Pq to suppress the trailing newline .
3838 .Pp
3839 .It Ic pwd Op Fl LP
3840 Print the present working directory.
3841 If the
3842 .Fl L
3843 option is used or if the
3844 .Ic physical
3845 option isn't set (see the
3846 .Ic set
3847 command below), the logical path is printed (i.e. the path used to
3848 .Ic cd
3849 to the current directory).
3850 If the
3851 .Fl P
3852 option (physical path) is used or if the
3853 .Ic physical
3854 option is set, the path determined from the filesystem (by following
3855 .Dq Li ..
3856 directories to the root directory) is printed.
3857 .Pp
3858 .It Xo
3859 .Ic read
3860 .Op Fl A \*(Ba Fl a
3861 .Op Fl d Ar x
3862 .Oo Fl N Ar z \*(Ba
3863 .Fl n Ar z Oc
3864 .Oo Fl p \*(Ba
3865 .Fl u Ns Op Ar n
3866 .Oc Op Fl t Ar n
3867 .Op Fl rs
3868 .Op Ar p ...
3869 .Xc
3870 Reads a line of input, separates the input into fields using the
3871 .Ev IFS
3872 parameter (see
3873 .Sx Substitution
3874 above), and assigns each field to the specified parameters
3875 .Ar p .
3876 If no parameters are specified, the
3877 .Ev REPLY
3878 parameter is used to store the result.
3879 With the
3880 .Fl A
3881 and
3882 .Fl a
3883 options, only no or one parameter is accepted.
3884 If there are more parameters than fields, the extra parameters are set to
3885 the empty string or 0; if there are more fields than parameters, the last
3886 parameter is assigned the remaining fields (including the word separators).
3887 .Pp
3888 The options are as follows:
3889 .Bl -tag -width XuXnX
3890 .It Fl A
3891 Store the result into the parameter
3892 .Ar p
3893 (or
3894 .Ev REPLY )
3895 as array of words.
3896 .It Fl a
3897 Store the result without word splitting into the parameter
3898 .Ar p
3899 (or
3900 .Ev REPLY )
3901 as array of characters (wide characters if the
3902 .Ic utf8\-mode
3903 option is enacted, octets otherwise); the codepoints are
3904 encoded as decimal numbers by default.
3905 .It Fl d Ar x
3906 Use the first byte of
3907 .Ar x ,
3908 .Dv NUL
3909 if empty, instead of the ASCII newline character as input line delimiter.
3910 .It Fl N Ar z
3911 Instead of reading till end-of-line, read exactly
3912 .Ar z
3913 bytes.
3914 Upon EOF, a partial read is returned with exit status 1.
3915 After timeout, a partial read is returned with an exit status as if
3916 .Dv SIGALRM
3917 were caught.
3918 .It Fl n Ar z
3919 Instead of reading till end-of-line, read up to
3920 .Ar z
3921 bytes but return as soon as any bytes are read, e.g.\& from a
3922 slow terminal device, or if EOF or a timeout occurs.
3923 .It Fl p
3924 Read from the currently active co-process, see
3925 .Sx Co-processes
3926 above for details on this.
3927 .It Fl u Ns Op Ar n
3928 Read from the file descriptor
3929 .Ar n
3930 (defaults to 0, i.e.\& standard input).
3931 The argument must immediately follow the option character.
3932 .It Fl t Ar n
3933 Interrupt reading after
3934 .Ar n
3935 seconds (specified as positive decimal value with an optional fractional part).
3936 The exit status of
3937 .Nm read
3938 is the same as if
3939 .Dv SIGALRM
3940 were caught if the timeout occurred, but partial reads may still be returned.
3941 .It Fl r
3942 Normally, the ASCII backslash character escapes the special
3943 meaning of the following character and is stripped from the input;
3944 .Ic read
3945 does not stop when encountering a backslash-newline sequence and
3946 does not store that newline in the result.
3947 This option enables raw mode, in which backslashes are not processed.
3948 .It Fl s
3949 The input line is saved to the history.
3950 .El
3951 .Pp
3952 If the input is a terminal, both the
3953 .Fl N
3954 and
3955 .Fl n
3956 options set it into raw mode;
3957 they read an entire file if \-1 is passed as
3958 .Ar z
3959 argument.
3960 .Pp
3961 The first parameter may have a question mark and a string appended to it, in
3962 which case the string is used as a prompt (printed to standard error before
3963 any input is read) if the input is a
3964 .Xr tty 4
3965 (e.g.\&
3966 .Ic read nfoo?\*(aqnumber of foos: \*(aq ) .
3967 .Pp
3968 If no input is read or a timeout occurred,
3969 .Ic read
3970 exits with a non-zero status.
3971 .Pp
3972 .It Xo
3973 .Ic readonly
3974 .Op Fl p
3975 .Oo Ar parameter
3976 .Op Ns = Ns Ar value
3977 .Ar ... Oc
3978 .Xc
3979 Sets the read-only attribute of the named parameters.
3980 This is a declaration utility.
3981 If values are given,
3982 parameters are set to them before setting the attribute.
3983 Once a parameter is
3984 made read-only, it cannot be unset and its value cannot be changed.
3985 .Pp
3986 If no parameters are specified, the names of all parameters with the read-only
3987 attribute are printed one per line, unless the
3988 .Fl p
3989 option is used, in which case
3990 .Ic readonly
3991 commands defining all read-only parameters, including their values, are
3992 printed.
3993 .Pp
3994 .It Xo
3995 .Ic realpath
3996 .Op Fl \-
3997 .Ar name
3998 .Xc
3999 Prints the resolved absolute pathname corresponding to
4000 .Ar name .
4001 If
4002 .Ar name
4003 ends with a slash
4004 .Pq Ql / ,
4005 it's also checked for existence and whether it is a directory; otherwise,
4006 .Ic realpath
4007 returns 0 if the pathname either exists or can be created immediately,
4008 i.e. all but the last component exist and are directories.
4009 For calls from the shell, if any options are given, an external
4010 .Xr realpath 1
4011 utility is preferred over the builtin.
4012 .Pp
4013 .It Xo
4014 .Ic rename
4015 .Op Fl \-
4016 .Ar from to
4017 .Xc
4018 Renames the file
4019 .Ar from
4020 to
4021 .Ar to .
4022 Both must be complete pathnames and on the same device.
4023 An external utility is preferred over this builtin,
4024 which is intended for emergency situations
4025 .Pq where Pa /bin/mv No becomes unusable
4026 and directly calls
4027 .Xr rename 2 .
4028 .Pp
4029 .It Ic return Op Ar status
4030 Returns from a function or
4031 .Ic \&.
4032 script, with exit status
4033 .Ar status .
4034 If no
4035 .Ar status
4036 is given, the exit status of the last executed command is used.
4037 If used outside of a function or
4038 .Ic \&.
4039 script, it has the same effect as
4040 .Ic exit .
4041 Note that
4042 .Nm
4043 treats both profile and
4044 .Ev ENV
4045 files as
4046 .Ic \&.
4047 scripts, while the original Korn shell only treats profiles as
4048 .Ic \&.
4049 scripts.
4050 .Pp
4051 .It Xo
4052 .Ic set Op Ic +\-abCefhiklmnprsUuvXx
4053 .Op Ic +\-o Ar option
4054 .Op Ic +\-A Ar name
4055 .Op Fl \-
4056 .Op Ar arg ...
4057 .Xc
4058 The
4059 .Ic set
4060 command can be used to set
4061 .Pq Ic \-
4062 or clear
4063 .Pq Ic +
4064 shell options, set the positional parameters, or set an array parameter.
4065 Options can be changed using the
4066 .Cm +\-o Ar option
4067 syntax, where
4068 .Ar option
4069 is the long name of an option, or using the
4070 .Cm +\- Ns Ar letter
4071 syntax, where
4072 .Ar letter
4073 is the option's single letter name (not all options have a single letter name).
4074 The following table lists both option letters (if they exist) and long names
4075 along with a description of what the option does:
4076 .Bl -tag -width 3n
4077 .It Fl A Ar name
4078 Sets the elements of the array parameter
4079 .Ar name
4080 to
4081 .Ar arg ...
4082 If
4083 .Fl A
4084 is used, the array is reset (i.e. emptied) first; if
4085 .Ic +A
4086 is used, the first N elements are set (where N is the number of arguments);
4087 the rest are left untouched.
4088 .Pp
4089 An alternative syntax for the command
4090 .Ic set \-A foo \-\- a b c
4091 which is compatible to
4092 .Tn GNU
4093 .Nm bash
4094 and also supported by
4095 .At
4096 .Nm ksh93
4097 is:
4098 .Ic foo=(a b c); foo+=(d e)
4099 .It Fl a \*(Ba Fl o Ic allexport
4100 All new parameters are created with the export attribute.
4101 .It Fl b \*(Ba Fl o Ic notify
4102 Print job notification messages asynchronously, instead of just before the
4103 prompt.
4104 Only used if job control is enabled
4105 .Pq Fl m .
4106 .It Fl C \*(Ba Fl o Ic noclobber
4107 Prevent \*(Gt redirection from overwriting existing files.
4108 Instead, \*(Gt\*(Ba must be used to force an overwrite.
4109 Note that this is not safe to use for creation of temporary files or
4110 lockfiles due to a TOCTOU in a check allowing one to redirect output to
4111 .Pa /dev/null
4112 or other device files even in
4113 .Ic noclobber
4114 mode.
4115 .It Fl e \*(Ba Fl o Ic errexit
4116 Exit (after executing the
4117 .Dv ERR
4118 trap) as soon as an error occurs or a command fails (i.e. exits with a
4119 non-zero status).
4120 This does not apply to commands whose exit status is
4121 explicitly tested by a shell construct such as
4122 .Ic if ,
4123 .Ic until ,
4124 .Ic while
4125 or
4126 .Ic \&!
4127 statements.
4128 For
4129 .Ic &&
4130 or
4131 .Ic \*(Ba\*(Ba ,
4132 only the status of the last command is tested.
4133 .It Fl f \*(Ba Fl o Ic noglob
4134 Do not expand file name patterns.
4135 .It Fl h \*(Ba Fl o Ic trackall
4136 Create tracked aliases for all executed commands (see
4137 .Sx Aliases
4138 above).
4139 Enabled by default for non-interactive shells.
4140 .It Fl i \*(Ba Fl o Ic interactive
4141 The shell is an interactive shell.
4142 This option can only be used when the shell is invoked.
4143 See above for a description of what this means.
4144 .It Fl k \*(Ba Fl o Ic keyword
4145 Parameter assignments are recognised anywhere in a command.
4146 .It Fl l \*(Ba Fl o Ic login
4147 The shell is a login shell.
4148 This option can only be used when the shell is invoked.
4149 See above for a description of what this means.
4150 .It Fl m \*(Ba Fl o Ic monitor
4151 Enable job control (default for interactive shells).
4152 .It Fl n \*(Ba Fl o Ic noexec
4153 Do not execute any commands.
4154 Useful for checking the syntax of scripts
4155 (ignored if interactive).
4156 .It Fl p \*(Ba Fl o Ic privileged
4157 The shell is a privileged shell.
4158 It is set automatically if, when the shell starts,
4159 the real UID or GID does not match
4160 the effective UID (EUID) or GID (EGID), respectively.
4161 See above for a description of what this means.
4162 .It Fl r \*(Ba Fl o Ic restricted
4163 The shell is a restricted shell.
4164 This option can only be used when the shell is invoked.
4165 See above for a description of what this means.
4166 .It Fl s \*(Ba Fl o Ic stdin
4167 If used when the shell is invoked, commands are read from standard input.
4168 Set automatically if the shell is invoked with no arguments.
4169 .Pp
4170 When
4171 .Fl s
4172 is used with the
4173 .Ic set
4174 command it causes the specified arguments to be sorted before assigning them to
4175 the positional parameters (or to array
4176 .Ar name ,
4177 if
4178 .Fl A
4179 is used).
4180 .It Fl U \*(Ba Fl o Ic utf8\-mode
4181 Enable UTF-8 support in the
4182 .Sx Emacs editing mode
4183 and internal string handling functions.
4184 This flag is disabled by default, but can be enabled by setting it on the
4185 shell command line; is enabled automatically for interactive shells if
4186 requested at compile time, your system supports
4187 .Fn setlocale LC_CTYPE \&""
4188 and optionally
4189 .Fn nl_langinfo CODESET ,
4190 or the
4191 .Ev LC_ALL ,
4192 .Ev LC_CTYPE
4193 or
4194 .Ev LANG
4195 environment variables,
4196 and at least one of these returns something that matches
4197 .Dq UTF\-8
4198 or
4199 .Dq utf8
4200 case-insensitively; for direct builtin calls depending on the
4201 aforementioned environment variables; or for stdin or scripts,
4202 if the input begins with a UTF-8 Byte Order Mark.
4203 .Pp
4204 In near future, locale tracking will be implemented, which means that
4205 .Ic set Fl +U
4206 is changed whenever one of the
4207 .Tn POSIX
4208 locale-related environment variables changes.
4209 .It Fl u \*(Ba Fl o Ic nounset
4210 Referencing of an unset parameter, other than
4211 .Dq Li $@
4212 or
4213 .Dq Li $* ,
4214 is treated as an error, unless one of the
4215 .Ql \- ,
4216 .Ql +
4217 or
4218 .Ql =
4219 modifiers is used.
4220 .It Fl v \*(Ba Fl o Ic verbose
4221 Write shell input to standard error as it is read.
4222 .It Fl X \*(Ba Fl o Ic markdirs
4223 Mark directories with a trailing
4224 .Ql /
4225 during file name generation.
4226 .It Fl x \*(Ba Fl o Ic xtrace
4227 Print command trees when they are executed, preceded by
4228 the value of
4229 .Ev PS4 .
4230 .It Fl o Ic bgnice
4231 Background jobs are run with lower priority.
4232 .It Fl o Ic braceexpand
4233 Enable brace expansion (a.k.a. alternation).
4234 This is enabled by default.
4235 .It Fl o Ic emacs
4236 Enable BRL emacs-like command-line editing (interactive shells only); see
4237 .Sx Emacs editing mode .
4238 .It Fl o Ic gmacs
4239 Enable gmacs-like command-line editing (interactive shells only).
4240 Currently identical to emacs editing except that transpose\-chars (\*(haT) acts
4241 slightly differently.
4242 .It Fl o Ic ignoreeof
4243 The shell will not (easily) exit when end-of-file is read;
4244 .Ic exit
4245 must be used.
4246 To avoid infinite loops, the shell will exit if
4247 .Dv EOF
4248 is read 13 times in a row.
4249 .It Fl o Ic inherit\-xtrace
4250 Do not reset
4251 .Fl o Ic xtrace
4252 upon entering functions.
4253 This is enabled by default.
4254 .It Fl o Ic nohup
4255 Do not kill running jobs with a
4256 .Dv SIGHUP
4257 signal when a login shell exits.
4258 Currently set by default, but this may
4259 change in the future to be compatible with
4260 .At
4261 .Nm ksh ,
4262 which
4263 doesn't have this option, but does send the
4264 .Dv SIGHUP
4265 signal.
4266 .It Fl o Ic nolog
4267 No effect.
4268 In the original Korn shell, this prevents function definitions from
4269 being stored in the history file.
4270 .It Fl o Ic physical
4271 Causes the
4272 .Ic cd
4273 and
4274 .Ic pwd
4275 commands to use
4276 .Dq physical
4277 (i.e. the filesystem's)
4278 .Dq Li ..
4279 directories instead of
4280 .Dq logical
4281 directories (i.e. the shell handles
4282 .Dq Li .. ,
4283 which allows the user to be oblivious of symbolic links to directories).
4284 Clear by default.
4285 Note that setting this option does not affect the current value of the
4286 .Ev PWD
4287 parameter; only the
4288 .Ic cd
4289 command changes
4290 .Ev PWD .
4291 See the
4292 .Ic cd
4293 and
4294 .Ic pwd
4295 commands above for more details.
4296 .It Fl o Ic pipefail
4297 Make the exit status of a pipeline (before logically complementing) the
4298 rightmost non-zero errorlevel, or zero if all commands exited with zero.
4299 .It Fl o Ic posix
4300 Behave closer to the standards
4301 (see
4302 .Sx POSIX mode
4303 for details).
4304 Automatically enabled if the basename of the shell invocation begins with
4305 .Dq sh
4306 and this autodetection feature is compiled in
4307 .Pq not in MirBSD .
4308 As a side effect, setting this flag turns off
4309 .Ic braceexpand
4310 mode, which can be turned back on manually, and
4311 .Ic sh
4312 mode (unless both are enabled at the same time).
4313 .It Fl o Ic sh
4314 Enable
4315 .Pa /bin/sh
4316 .Pq kludge
4317 mode (see
4318 .Sx SH mode ) .
4319 Automatically enabled if the basename of the shell invocation begins with
4320 .Dq sh
4321 and this autodetection feature is compiled in
4322 .Pq not in MirBSD .
4323 As a side effect, setting this flag turns off
4324 .Ic braceexpand
4325 mode, which can be turned back on manually, and
4326 .Ic posix
4327 mode (unless both are enabled at the same time).
4328 .It Fl o Ic vi
4329 Enable
4330 .Xr vi 1 Ns -like
4331 command-line editing (interactive shells only).
4332 See
4333 .Sx Vi editing mode
4334 for documentation and limitations.
4335 .It Fl o Ic vi\-esccomplete
4336 In vi command-line editing, do command and file name completion when escape
4337 (\*(ha[) is entered in command mode.
4338 .It Fl o Ic vi\-tabcomplete
4339 In vi command-line editing, do command and file name completion when tab (\*(haI)
4340 is entered in insert mode.
4341 This is the default.
4342 .It Fl o Ic viraw
4343 No effect.
4344 In the original Korn shell, unless
4345 .Ic viraw
4346 was set, the vi command-line mode would let the
4347 .Xr tty 4
4348 driver do the work until ESC (\*(ha[) was entered.
4349 .Nm
4350 is always in viraw mode.
4351 .El
4352 .Pp
4353 These options can also be used upon invocation of the shell.
4354 The current set of
4355 options (with single letter names) can be found in the parameter
4356 .Dq Li $\- .
4357 .Ic set Fl o
4358 with no option name will list all the options and whether each is on or off;
4359 .Ic set +o
4360 will print the long names of all options that are currently on.
4361 In a future version,
4362 .Ic set +o
4363 will behave
4364 .Tn POSIX
4365 compliant and print commands to restore the current options instead.
4366 .Pp
4367 Remaining arguments, if any, are positional parameters and are assigned, in
4368 order, to the positional parameters (i.e. $1, $2, etc.).
4369 If options end with
4370 .Dq Li \-\-
4371 and there are no remaining arguments, all positional parameters are cleared.
4372 If no options or arguments are given, the values of all names are printed.
4373 For unknown historical reasons, a lone
4374 .Dq Li \-
4375 option is treated specially \*(en it clears both the
4376 .Fl v
4377 and
4378 .Fl x
4379 options.
4380 .Pp
4381 .It Ic shift Op Ar number
4382 The positional parameters
4383 .Ar number Ns +1 ,
4384 .Ar number Ns +2 ,
4385 etc. are renamed to 1, 2, etc.
4386 .Ar number
4387 defaults to 1.
4388 .Pp
4389 .It Ic sleep Ar seconds
4390 Suspends execution for a minimum of the
4391 .Ar seconds
4392 specified as positive decimal value with an optional fractional part.
4393 Signal delivery may continue execution earlier.
4394 .Pp
4395 .It Ic source Ar file Op Ar arg ...
4396 Like
4397 .Ic \&. Po Do dot Dc Pc ,
4398 except that the current working directory is appended to the
4399 search path (GNU
4400 .Nm bash
4401 extension).
4402 .Pp
4403 .It Ic suspend
4404 Stops the shell as if it had received the suspend character from
4405 the terminal.
4406 It is not possible to suspend a login shell unless the parent process
4407 is a member of the same terminal session but is a member of a different
4408 process group.
4409 As a general rule, if the shell was started by another shell or via
4410 .Xr su 1 ,
4411 it can be suspended.
4412 .Pp
4413 .It Ic test Ar expression
4414 .It Ic \&[ Ar expression Ic \&]
4415 .Ic test
4416 evaluates the
4417 .Ar expression
4418 and returns zero status if true, 1 if false, or greater than 1 if there
4419 was an error.
4420 It is normally used as the condition command of
4421 .Ic if
4422 and
4423 .Ic while
4424 statements.
4425 Symbolic links are followed for all
4426 .Ar file
4427 expressions except
4428 .Fl h
4429 and
4430 .Fl L .
4431 .Pp
4432 The following basic expressions are available:
4433 .Bl -tag -width 17n
4434 .It Fl a Ar file
4435 .Ar file
4436 exists.
4437 .It Fl b Ar file
4438 .Ar file
4439 is a block special device.
4440 .It Fl c Ar file
4441 .Ar file
4442 is a character special device.
4443 .It Fl d Ar file
4444 .Ar file
4445 is a directory.
4446 .It Fl e Ar file
4447 .Ar file
4448 exists.
4449 .It Fl f Ar file
4450 .Ar file
4451 is a regular file.
4452 .It Fl G Ar file
4453 .Ar file Ns 's
4454 group is the shell's effective group ID.
4455 .It Fl g Ar file
4456 .Ar file Ns 's
4457 mode has the setgid bit set.
4458 .It Fl H Ar file
4459 .Ar file
4460 is a context dependent directory (only useful on HP-UX).
4461 .It Fl h Ar file
4462 .Ar file
4463 is a symbolic link.
4464 .It Fl k Ar file
4465 .Ar file Ns 's
4466 mode has the
4467 .Xr sticky 8
4468 bit set.
4469 .It Fl L Ar file
4470 .Ar file
4471 is a symbolic link.
4472 .It Fl O Ar file
4473 .Ar file Ns 's
4474 owner is the shell's effective user ID.
4475 .It Fl p Ar file
4476 .Ar file
4477 is a named pipe
4478 .Pq Tn FIFO .
4479 .It Fl r Ar file
4480 .Ar file
4481 exists and is readable.
4482 .It Fl S Ar file
4483 .Ar file
4484 is a
4485 .Xr unix 4 Ns -domain
4486 socket.
4487 .It Fl s Ar file
4488 .Ar file
4489 is not empty.
4490 .It Fl t Ar fd
4491 File descriptor
4492 .Ar fd
4493 is a
4494 .Xr tty 4
4495 device.
4496 .It Fl u Ar file
4497 .Ar file Ns 's
4498 mode has the setuid bit set.
4499 .It Fl w Ar file
4500 .Ar file
4501 exists and is writable.
4502 .It Fl x Ar file
4503 .Ar file
4504 exists and is executable.
4505 .It Ar file1 Fl nt Ar file2
4506 .Ar file1
4507 is newer than
4508 .Ar file2
4509 or
4510 .Ar file1
4511 exists and
4512 .Ar file2
4513 does not.
4514 .It Ar file1 Fl ot Ar file2
4515 .Ar file1
4516 is older than
4517 .Ar file2
4518 or
4519 .Ar file2
4520 exists and
4521 .Ar file1
4522 does not.
4523 .It Ar file1 Fl ef Ar file2
4524 .Ar file1
4525 is the same file as
4526 .Ar file2 .
4527 .It Ar string
4528 .Ar string
4529 has non-zero length.
4530 .It Fl n Ar string
4531 .Ar string
4532 is not empty.
4533 .It Fl z Ar string
4534 .Ar string
4535 is empty.
4536 .It Fl v Ar name
4537 The shell parameter
4538 .Ar name
4539 is set.
4540 .It Fl o Ar option
4541 Shell
4542 .Ar option
4543 is set (see the
4544 .Ic set
4545 command above for a list of options).
4546 As a non-standard extension, if the option starts with a
4547 .Ql \&! ,
4548 the test is negated; the test always fails if
4549 .Ar option
4550 doesn't exist (so [ \-o foo \-o \-o !foo ] returns true if and only if option
4551 .Ar foo
4552 exists).
4553 The same can be achieved with [ \-o ?foo ] like in
4554 .At
4555 .Nm ksh93 .
4556 .Ar option
4557 can also be the short flag led by either
4558 .Ql \-
4559 or
4560 .Ql +
4561 .Pq no logical negation ,
4562 for example
4563 .Dq Li \-x
4564 or
4565 .Dq Li +x
4566 instead of
4567 .Dq Li xtrace .
4568 .It Ar string No = Ar string
4569 Strings are equal.
4570 .It Ar string No == Ar string
4571 Strings are equal.
4572 .It Ar string No \*(Gt Ar string
4573 First string operand is greater than second string operand.
4574 .It Ar string No \*(Lt Ar string
4575 First string operand is less than second string operand.
4576 .It Ar string No != Ar string
4577 Strings are not equal.
4578 .It Ar number Fl eq Ar number
4579 Numbers compare equal.
4580 .It Ar number Fl ne Ar number
4581 Numbers compare not equal.
4582 .It Ar number Fl ge Ar number
4583 Numbers compare greater than or equal.
4584 .It Ar number Fl gt Ar number
4585 Numbers compare greater than.
4586 .It Ar number Fl le Ar number
4587 Numbers compare less than or equal.
4588 .It Ar number Fl \&lt Ar number
4589 Numbers compare less than.
4590 .El
4591 .Pp
4592 The above basic expressions, in which unary operators have precedence over
4593 binary operators, may be combined with the following operators (listed in
4594 increasing order of precedence):
4595 .Bd -literal -offset indent
4596 expr \-o expr           Logical OR.
4597 expr \-a expr           Logical AND.
4598 ! expr                  Logical NOT.
4599 ( expr )                Grouping.
4600 .Ed
4601 .Pp
4602 Note that a number actually may be an arithmetic expression, such as
4603 a mathematical term or the name of an integer variable:
4604 .Bd -literal -offset indent
4605 x=1; [ "x" \-eq 1 ]     evaluates to true
4606 .Ed
4607 .Pp
4608 Note that some special rules are applied (courtesy of
4609 .Px
4610 ) if the number of arguments to
4611 .Ic test
4612 or inside the brackets
4613 .Ic \&[ ... \&]
4614 is less than five: if leading
4615 .Dq Li \&!
4616 arguments can be stripped such that only one to three arguments remain,
4617 then the lowered comparison is executed; (thanks to XSI) parentheses
4618 .Ic \e( ... \e)
4619 lower four- and three-argument forms to two- and one-argument forms,
4620 respectively; three-argument forms ultimately prefer binary operations,
4621 followed by negation and parenthesis lowering; two- and four-argument forms
4622 prefer negation followed by parenthesis; the one-argument form always implies
4623 .Fl n .
4624 .Pp
4625 .Sy Note :
4626 A common mistake is to use
4627 .Dq Li if \&[ $foo = bar \&]
4628 which fails if parameter
4629 .Dq foo
4630 is empty or unset, if it has embedded spaces (i.e.\&
4631 .Ev IFS
4632 octets) or if it is a unary operator like
4633 .Dq Li \&!
4634 or
4635 .Dq Li \-n .
4636 Use tests like
4637 .Dq Li if \&[ x\&"$foo\&" = x"bar" \&]
4638 instead, or the double-bracket operator
4639 .Dq Li if \&[[ $foo = bar \&]]
4640 or, to avoid pattern matching (see
4641 .Ic \&[[
4642 above):
4643 .Dq Li if \&[[ $foo = \&"$bar" \&]]
4644 .Pp
4645 The
4646 .Ic \&[[ ... \&]]
4647 construct is not only more secure to use but also often faster.
4648 .Pp
4649 .It Xo
4650 .Ic time
4651 .Op Fl p
4652 .Op Ar pipeline
4653 .Xc
4654 If a
4655 .Ar pipeline
4656 is given, the times used to execute the pipeline are reported.
4657 If no pipeline
4658 is given, then the user and system time used by the shell itself, and all the
4659 commands it has run since it was started, are reported.
4660 The times reported are the real time (elapsed time from start to finish),
4661 the user CPU time (time spent running in user mode), and the system CPU time
4662 (time spent running in kernel mode).
4663 Times are reported to standard error; the format of the output is:
4664 .Pp
4665 .Dl "0m0.00s real     0m0.00s user     0m0.00s system"
4666 .Pp
4667 If the
4668 .Fl p
4669 option is given the output is slightly longer:
4670 .Bd -literal -offset indent
4671 real     0.00
4672 user     0.00
4673 sys      0.00
4674 .Ed
4675 .Pp
4676 It is an error to specify the
4677 .Fl p
4678 option unless
4679 .Ar pipeline
4680 is a simple command.
4681 .Pp
4682 Simple redirections of standard error do not affect the output of the
4683 .Ic time
4684 command:
4685 .Pp
4686 .Dl $ time sleep 1 2\*(Gtafile
4687 .Dl $ { time sleep 1; } 2\*(Gtafile
4688 .Pp
4689 Times for the first command do not go to
4690 .Dq afile ,
4691 but those of the second command do.
4692 .Pp
4693 .It Ic times
4694 Print the accumulated user and system times used both by the shell
4695 and by processes that the shell started which have exited.
4696 The format of the output is:
4697 .Bd -literal -offset indent
4698 0m0.00s 0m0.00s
4699 0m0.00s 0m0.00s
4700 .Ed
4701 .Pp
4702 .It Ic trap Ar n Op Ar signal ...
4703 If the first operand is a decimal unsigned integer, this resets all
4704 specified signals to the default action, i.e. is the same as calling
4705 .Ic trap
4706 with a dash
4707 .Pq Dq Li \-
4708 as
4709 .Ar handler ,
4710 followed by the arguments
4711 .Pq Ar n Op Ar signal ... ,
4712 all of which are treated as signals.
4713 .Pp
4714 .It Ic trap Op Ar handler signal ...
4715 Sets a trap handler that is to be executed when any of the specified
4716 .Ar signal Ns s
4717 are received.
4718 .Ar handler
4719 is either an empty string, indicating the signals are to be ignored, a dash
4720 .Pq Dq Li \- ,
4721 indicating that the default action is to be taken for the signals
4722 .Pq see Xr signal 3 ,
4723 or a string containing shell commands to be executed at the first opportunity
4724 (i.e. when the current command completes or before printing the next
4725 .Ev PS1
4726 prompt) after receipt of one of the signals.
4727 .Ar signal
4728 is the name of a signal
4729 .Pq e.g.\& Dv PIPE or Dv ALRM
4730 or the number of the signal (see the
4731 .Ic kill Fl l
4732 command above).
4733 .Pp
4734 There are two special signals:
4735 .Dv EXIT
4736 .Pq also known as 0 ,
4737 which is executed when the shell is about to exit, and
4738 .Dv ERR ,
4739 which is executed after an error occurs; an error is something
4740 that would cause the shell to exit if the
4741 .Ic set Fl e
4742 or
4743 .Ic set Fl o Ic errexit
4744 option were set.
4745 .Dv EXIT
4746 handlers are executed in the environment of the last executed command.
4747 .Pp
4748 Note that, for non-interactive shells, the trap handler cannot be changed
4749 for signals that were ignored when the shell started.
4750 .Pp
4751 With no arguments, the current state of the traps that have been set since
4752 the shell started is shown as a series of
4753 .Ic trap
4754 commands.
4755 Note that the output of
4756 .Ic trap
4757 cannot be usefully piped to another process (an artifact of the fact that
4758 traps are cleared when subprocesses are created).
4759 .Pp
4760 The original Korn shell's
4761 .Dv DEBUG
4762 trap and the handling of
4763 .Dv ERR
4764 and
4765 .Dv EXIT
4766 traps in functions are not yet implemented.
4767 .Pp
4768 .It Ic true
4769 A command that exits with a zero value.
4770 .Pp
4771 .It Xo
4772 .Ic typeset
4773 .Op Ic +\-aglpnrtUux
4774 .Oo Fl L Ns Op Ar n
4775 .No \*(Ba Fl R Ns Op Ar n
4776 .No \*(Ba Fl Z Ns Op Ar n Oc
4777 .Op Fl i Ns Op Ar n
4778 .Oo Ar name
4779 .Op Ns = Ns Ar value
4780 .Ar ... Oc
4781 .Xc
4782 .It Xo
4783 .Ic typeset
4784 .Fl f Op Fl tux
4785 .Op Ar name ...
4786 .Xc
4787 Display or set parameter attributes.
4788 This is a declaration utility.
4789 With no
4790 .Ar name
4791 arguments, parameter attributes are displayed; if no options are used, the
4792 current attributes of all parameters are printed as
4793 .Ic typeset
4794 commands; if an option is given (or
4795 .Dq Li \-
4796 with no option letter), all parameters and their values with the specified
4797 attributes are printed; if options are introduced with
4798 .Ql + ,
4799 parameter values are not printed.
4800 .Pp
4801 If
4802 .Ar name
4803 arguments are given, the attributes of the named parameters are set
4804 .Pq Ic \&\-
4805 or cleared
4806 .Pq Ic \&+ ;
4807 inside a function, this will cause the parameters to be created
4808 (with no value) in the local scope (but see
4809 .Fl g ) .
4810 Values for parameters may optionally be specified.
4811 For
4812 .Ar name Ns \&[*] ,
4813 the change affects all elements of the array, and no value may be specified.
4814 .Pp
4815 When
4816 .Fl f
4817 is used,
4818 .Ic typeset
4819 operates on the attributes of functions.
4820 As with parameters, if no
4821 .Ar name
4822 arguments are given,
4823 functions are listed with their values (i.e. definitions) unless
4824 options are introduced with
4825 .Ql + ,
4826 in which case only the function names are reported.
4827 .Bl -tag -width Ds
4828 .It Fl a
4829 Indexed array attribute.
4830 .It Fl f
4831 Function mode.
4832 Display or set functions and their attributes, instead of parameters.
4833 .It Fl g
4834 Do not cause named parameters to be created in
4835 the local scope when called inside a function.
4836 .It Fl i Ns Op Ar n
4837 Integer attribute.
4838 .Ar n
4839 specifies the base to use when displaying the integer (if not specified, the
4840 base given in the first assignment is used).
4841 Parameters with this attribute may
4842 be assigned values containing arithmetic expressions.
4843 .It Fl L Ns Op Ar n
4844 Left justify attribute.
4845 .Ar n
4846 specifies the field width.
4847 If
4848 .Ar n
4849 is not specified, the current width of a parameter (or the width of its first
4850 assigned value) is used.
4851 Leading whitespace (and zeros, if used with the
4852 .Fl Z
4853 option) is stripped.
4854 If necessary, values are either truncated or space padded
4855 to fit the field width.
4856 .It Fl l
4857 Lower case attribute.
4858 All upper case ASCII characters in values are converted to lower case.
4859 (In the original Korn shell, this parameter meant
4860 .Dq long integer
4861 when used with the
4862 .Fl i
4863 option.)
4864 .It Fl n
4865 Create a bound variable (name reference): any access to the variable
4866 .Ar name
4867 will access the variable
4868 .Ar value
4869 in the current scope (this is different from
4870 .At
4871 .Nm ksh93 ! )
4872 instead.
4873 Also different from
4874 .At
4875 .Nm ksh93
4876 is that
4877 .Ar value
4878 is lazily evaluated at the time
4879 .Ar name
4880 is accessed.
4881 This can be used by functions to access variables whose names are
4882 passed as parameters, instead of using
4883 .Ic eval .
4884 .It Fl p
4885 Print complete
4886 .Ic typeset
4887 commands that can be used to re-create the attributes and values of
4888 parameters.
4889 .It Fl R Ns Op Ar n
4890 Right justify attribute.
4891 .Ar n
4892 specifies the field width.
4893 If
4894 .Ar n
4895 is not specified, the current width of a parameter (or the width of its first
4896 assigned value) is used.
4897 Trailing whitespace is stripped.
4898 If necessary, values are either stripped of leading characters or space
4899 padded to make them fit the field width.
4900 .It Fl r
4901 Read-only attribute.
4902 Parameters with this attribute may not be assigned to or unset.
4903 Once this attribute is set, it cannot be turned off.
4904 .It Fl t
4905 Tag attribute.
4906 Has no meaning to the shell; provided for application use.
4907 .Pp
4908 For functions,
4909 .Fl t
4910 is the trace attribute.
4911 When functions with the trace attribute are executed, the
4912 .Ic xtrace
4913 .Pq Fl x
4914 shell option is temporarily turned on.
4915 .It Fl U
4916 Unsigned integer attribute.
4917 Integers are printed as unsigned values (combine with the
4918 .Fl i
4919 option).
4920 This option is not in the original Korn shell.
4921 .It Fl u
4922 Upper case attribute.
4923 All lower case ASCII characters in values are converted to upper case.
4924 (In the original Korn shell, this parameter meant
4925 .Dq unsigned integer
4926 when used with the
4927 .Fl i
4928 option which meant upper case letters would never be used for bases greater
4929 than 10.
4930 See the
4931 .Fl U
4932 option.)
4933 .Pp
4934 For functions,
4935 .Fl u
4936 is the undefined attribute.
4937 See
4938 .Sx Functions
4939 above for the implications of this.
4940 .It Fl x
4941 Export attribute.
4942 Parameters (or functions) are placed in the environment of
4943 any executed commands.
4944 Exported functions are not yet implemented.
4945 .It Fl Z Ns Op Ar n
4946 Zero fill attribute.
4947 If not combined with
4948 .Fl L ,
4949 this is the same as
4950 .Fl R ,
4951 except zero padding is used instead of space padding.
4952 For integers, the number instead of the base is padded.
4953 .El
4954 .Pp
4955 If any of the
4956 .\" long integer ,
4957 .Fl i ,
4958 .Fl L ,
4959 .Fl l ,
4960 .Fl R ,
4961 .Fl U ,
4962 .Fl u
4963 or
4964 .Fl Z
4965 options are changed, all others from this set are cleared,
4966 unless they are also given on the same command line.
4967 .Pp
4968 .It Xo
4969 .Ic ulimit
4970 .Op Fl aBCcdefHilMmnOPpqrSsTtVvw
4971 .Op Ar value
4972 .Xc
4973 Display or set process limits.
4974 If no options are used, the file size limit
4975 .Pq Fl f
4976 is assumed.
4977 .Ar value ,
4978 if specified, may be either an arithmetic expression or the word
4979 .Dq unlimited .
4980 The limits affect the shell and any processes created by the shell after a
4981 limit is imposed.
4982 Note that some systems may not allow limits to be increased
4983 once they are set.
4984 Also note that the types of limits available are system
4985 dependent \*(en some systems have only the
4986 .Fl f
4987 limit, or not even that, or can set only the soft limits
4988 .Bl -tag -width 5n
4989 .It Fl a
4990 Display all limits; unless
4991 .Fl H
4992 is used, soft limits are displayed.
4993 .It Fl B Ar n
4994 Set the socket buffer size to
4995 .Ar n
4996 kibibytes.
4997 .It Fl C Ar n
4998 Set the number of cached threads to
4999 .Ar n .
5000 .It Fl c Ar n
5001 Impose a size limit of
5002 .Ar n
5003 blocks on the size of core dumps.
5004 .It Fl d Ar n
5005 Impose a size limit of
5006 .Ar n
5007 kibibytes on the size of the data area.
5008 .It Fl e Ar n
5009 Set the maximum niceness to
5010 .Ar n .
5011 .It Fl f Ar n
5012 Impose a size limit of
5013 .Ar n
5014 blocks on files written by the shell and its child processes (files of any
5015 size may be read).
5016 .It Fl H
5017 Set the hard limit only (the default is to set both hard and soft limits).
5018 .It Fl i Ar n
5019 Set the number of pending signals to
5020 .Ar n .
5021 .It Fl l Ar n
5022 Impose a limit of
5023 .Ar n
5024 kibibytes on the amount of locked (wired) physical memory.
5025 .It Fl M Ar n
5026 Set the AIO locked memory to
5027 .Ar n
5028 kibibytes.
5029 .It Fl m Ar n
5030 Impose a limit of
5031 .Ar n
5032 kibibytes on the amount of physical memory used.
5033 .It Fl n Ar n
5034 Impose a limit of
5035 .Ar n
5036 file descriptors that can be open at once.
5037 .It Fl O Ar n
5038 Set the number of AIO operations to
5039 .Ar n .
5040 .It Fl P Ar n
5041 Limit the number of threads per process to
5042 .Ar n .
5043 .It Fl p Ar n
5044 Impose a limit of
5045 .Ar n
5046 processes that can be run by the user at any one time.
5047 .It Fl q Ar n
5048 Limit the size of
5049 .Tn POSIX
5050 message queues to
5051 .Ar n
5052 bytes.
5053 .It Fl r Ar n
5054 Set the maximum real-time priority to
5055 .Ar n .
5056 .It Fl S
5057 Set the soft limit only (the default is to set both hard and soft limits).
5058 .It Fl s Ar n
5059 Impose a size limit of
5060 .Ar n
5061 kibibytes on the size of the stack area.
5062 .It Fl T Ar n
5063 Impose a time limit of
5064 .Ar n
5065 real seconds to be used by each process.
5066 .It Fl t Ar n
5067 Impose a time limit of
5068 .Ar n
5069 CPU seconds spent in user mode to be used by each process.
5070 .It Fl V Ar n
5071 Set the number of vnode monitors on Haiku to
5072 .Ar n .
5073 .It Fl v Ar n
5074 Impose a limit of
5075 .Ar n
5076 kibibytes on the amount of virtual memory (address space) used.
5077 .It Fl w Ar n
5078 Impose a limit of
5079 .Ar n
5080 kibibytes on the amount of swap space used.
5081 .El
5082 .Pp
5083 As far as
5084 .Ic ulimit
5085 is concerned, a block is 512 bytes.
5086 .Pp
5087 .It Xo
5088 .Ic umask
5089 .Op Fl S
5090 .Op Ar mask
5091 .Xc
5092 Display or set the file permission creation mask or umask (see
5093 .Xr umask 2 ) .
5094 If the
5095 .Fl S
5096 option is used, the mask displayed or set is symbolic; otherwise, it is an
5097 octal number.
5098 .Pp
5099 Symbolic masks are like those used by
5100 .Xr chmod 1 .
5101 When used, they describe what permissions may be made available (as opposed to
5102 octal masks in which a set bit means the corresponding bit is to be cleared).
5103 For example,
5104 .Dq Li ug=rwx,o=
5105 sets the mask so files will not be readable, writable or executable by
5106 .Dq others ,
5107 and is equivalent (on most systems) to the octal mask
5108 .Dq Li 007 .
5109 .Pp
5110 .It Xo
5111 .Ic unalias
5112 .Op Fl adt
5113 .Op Ar name ...
5114 .Xc
5115 The aliases for the given names are removed.
5116 If the
5117 .Fl a
5118 option is used, all aliases are removed.
5119 If the
5120 .Fl t
5121 or
5122 .Fl d
5123 options are used, the indicated operations are carried out on tracked or
5124 directory aliases, respectively.
5125 .Pp
5126 .It Xo
5127 .Ic unset
5128 .Op Fl fv
5129 .Ar parameter ...
5130 .Xc
5131 Unset the named parameters
5132 .Po
5133 .Fl v ,
5134 the default
5135 .Pc
5136 or functions
5137 .Pq Fl f .
5138 With
5139 .Ar parameter Ns \&[*] ,
5140 attributes are kept, only values are unset.
5141 .Pp
5142 The exit status is non-zero if any of the parameters have the read-only
5143 attribute set, zero otherwise.
5144 .Pp
5145 .It Ic wait Op Ar job ...
5146 Wait for the specified job(s) to finish.
5147 The exit status of
5148 .Ic wait
5149 is that of the last specified job; if the last job is killed by a signal, the
5150 exit status is 128 + the number of the signal (see
5151 .Ic kill Fl l Ar exit-status
5152 above); if the last specified job can't be found (because it never existed or
5153 had already finished), the exit status of
5154 .Ic wait
5155 is 127.
5156 See
5157 .Sx Job control
5158 below for the format of
5159 .Ar job .
5160 .Ic wait
5161 will return if a signal for which a trap has been set is received or if a
5162 .Dv SIGHUP ,
5163 .Dv SIGINT
5164 or
5165 .Dv SIGQUIT
5166 signal is received.
5167 .Pp
5168 If no jobs are specified,
5169 .Ic wait
5170 waits for all currently running jobs (if any) to finish and exits with a zero
5171 status.
5172 If job monitoring is enabled, the completion status of jobs is printed
5173 (this is not the case when jobs are explicitly specified).
5174 .Pp
5175 .It Xo
5176 .Ic whence
5177 .Op Fl pv
5178 .Op Ar name ...
5179 .Xc
5180 Without the
5181 .Fl v
5182 option, it is the same as
5183 .Ic command Fl v ,
5184 except aliases are not printed as alias command.
5185 With the
5186 .Fl v
5187 option, it is exactly the same as
5188 .Ic command Fl V .
5189 In either case, the
5190 .Fl p
5191 option differs: the search path is not affected in
5192 .Ic whence ,
5193 but the search is restricted to the path.
5194 .El
5195 .Ss Job control
5196 Job control refers to the shell's ability to monitor and control jobs which
5197 are processes or groups of processes created for commands or pipelines.
5198 At a minimum, the shell keeps track of the status of the background (i.e.\&
5199 asynchronous) jobs that currently exist; this information can be displayed
5200 using the
5201 .Ic jobs
5202 commands.
5203 If job control is fully enabled (using
5204 .Ic set Fl m
5205 or
5206 .Ic set Fl o Ic monitor ) ,
5207 as it is for interactive shells, the processes of a job are placed in their
5208 own process group.
5209 Foreground jobs can be stopped by typing the suspend
5210 character from the terminal (normally \*(haZ), jobs can be restarted in either the
5211 foreground or background using the
5212 .Ic fg
5213 and
5214 .Ic bg
5215 commands, and the state of the terminal is saved or restored when a foreground
5216 job is stopped or restarted, respectively.
5217 .Pp
5218 Note that only commands that create processes (e.g. asynchronous commands,
5219 subshell commands and non-built-in, non-function commands) can be stopped;
5220 commands like
5221 .Ic read
5222 cannot be.
5223 .Pp
5224 When a job is created, it is assigned a job number.
5225 For interactive shells, this number is printed inside
5226 .Dq Li \&[...] ,
5227 followed by the process IDs of the processes in the job when an asynchronous
5228 command is run.
5229 A job may be referred to in the
5230 .Ic bg ,
5231 .Ic fg ,
5232 .Ic jobs ,
5233 .Ic kill
5234 and
5235 .Ic wait
5236 commands either by the process ID of the last process in the command pipeline
5237 (as stored in the
5238 .Ic \&$!
5239 parameter) or by prefixing the job number with a percent sign
5240 .Pq Ql % .
5241 Other percent sequences can also be used to refer to jobs:
5242 .Bl -tag -width "%+ x %% x %XX"
5243 .It %+ \*(Ba %% \*(Ba %
5244 The most recently stopped job or, if there are no stopped jobs, the oldest
5245 running job.
5246 .It %\-
5247 The job that would be the
5248 .Ic %+
5249 job if the latter did not exist.
5250 .It % Ns Ar n
5251 The job with job number
5252 .Ar n .
5253 .It %? Ns Ar string
5254 The job with its command containing the string
5255 .Ar string
5256 (an error occurs if multiple jobs are matched).
5257 .It % Ns Ar string
5258 The job with its command starting with the string
5259 .Ar string
5260 (an error occurs if multiple jobs are matched).
5261 .El
5262 .Pp
5263 When a job changes state (e.g. a background job finishes or foreground job is
5264 stopped), the shell prints the following status information:
5265 .Pp
5266 .D1 [ Ns Ar number ] Ar flag status command
5267 .Pp
5268 where...
5269 .Bl -tag -width "command"
5270 .It Ar number
5271 is the job number of the job;
5272 .It Ar flag
5273 is the
5274 .Ql +
5275 or
5276 .Ql \-
5277 character if the job is the
5278 .Ic %+
5279 or
5280 .Ic %\-
5281 job, respectively, or space if it is neither;
5282 .It Ar status
5283 indicates the current state of the job and can be:
5284 .Bl -tag -width "RunningXX"
5285 .It Done Op Ar number
5286 The job exited.
5287 .Ar number
5288 is the exit status of the job which is omitted if the status is zero.
5289 .It Running
5290 The job has neither stopped nor exited (note that running does not necessarily
5291 mean consuming CPU time \*(en
5292 the process could be blocked waiting for some event).
5293 .It Stopped Op Ar signal
5294 The job was stopped by the indicated
5295 .Ar signal
5296 (if no signal is given, the job was stopped by
5297 .Dv SIGTSTP ) .
5298 .It Ar signal-description Op Dq core dumped
5299 The job was killed by a signal (e.g. memory fault, hangup); use
5300 .Ic kill Fl l
5301 for a list of signal descriptions.
5302 The
5303 .Dq Li core dumped
5304 message indicates the process created a core file.
5305 .El
5306 .It Ar command
5307 is the command that created the process.
5308 If there are multiple processes in
5309 the job, each process will have a line showing its
5310 .Ar command
5311 and possibly its
5312 .Ar status ,
5313 if it is different from the status of the previous process.
5314 .El
5315 .Pp
5316 When an attempt is made to exit the shell while there are jobs in the stopped
5317 state, the shell warns the user that there are stopped jobs and does not exit.
5318 If another attempt is immediately made to exit the shell, the stopped jobs are
5319 sent a
5320 .Dv SIGHUP
5321 signal and the shell exits.
5322 Similarly, if the
5323 .Ic nohup
5324 option is not set and there are running jobs when an attempt is made to exit
5325 a login shell, the shell warns the user and does not exit.
5326 If another attempt
5327 is immediately made to exit the shell, the running jobs are sent a
5328 .Dv SIGHUP
5329 signal and the shell exits.
5330 .Ss POSIX mode
5331 Entering
5332 .Ic set Fl o Ic posix
5333 mode will cause
5334 .Nm
5335 to behave even more
5336 .Tn POSIX
5337 compliant in places where the defaults or opinions differ.
5338 Note that
5339 .Nm mksh
5340 will still operate with unsigned 32-bit arithmetic; use
5341 .Nm lksh
5342 if arithmetic on the host
5343 .Vt long
5344 data type, complete with ISO C Undefined Behaviour, is required;
5345 refer to the
5346 .Xr lksh 1
5347 manual page for details.
5348 Most other historic,
5349 .At
5350 .Nm ksh Ns -compatible
5351 or opinionated differences can be disabled by using this mode; these are:
5352 .Bl -bullet
5353 .It
5354 The incompatible GNU
5355 .Nm bash
5356 I/O redirection
5357 .Ic &\*(Gt Ns Ar file
5358 is not supported.
5359 .It
5360 File descriptors created by I/O redirections are inherited by
5361 child processes.
5362 .It
5363 Numbers with a leading digit zero are interpreted as octal.
5364 .It
5365 The
5366 .Nm echo
5367 builtin does not interpret backslashes and only supports the exact option
5368 .Fl n .
5369 .It
5370 Alias expansion with a trailing space only reruns on command words.
5371 .It
5372 Tilde expansion follows POSIX instead of Korn shell rules.
5373 .It
5374 The exit status of
5375 .Ic fg
5376 is always 0.
5377 .It
5378 .Ic kill
5379 .Fl l
5380 only lists signal names, all in one line.
5381 .It
5382 .Ic getopts
5383 does not accept options with a leading
5384 .Ql + .
5385 .El
5386 .Ss SH mode
5387 Compatibility mode; intended for use with legacy scripts that
5388 cannot easily be fixed; the changes are as follows:
5389 .Bl -bullet
5390 .It
5391 The incompatible GNU
5392 .Nm bash
5393 I/O redirection
5394 .Ic &\*(Gt Ns Ar file
5395 is not supported.
5396 .It
5397 File descriptors created by I/O redirections are inherited by
5398 child processes.
5399 .It
5400 The
5401 .Nm echo
5402 builtin does not interpret backslashes and only supports the exact option
5403 .Fl n ,
5404 unless built with
5405 .Ev \-DMKSH_MIDNIGHTBSD01ASH_COMPAT .
5406 .It
5407 The substitution operations
5408 .Sm off
5409 .Xo
5410 .Pf ${ Ar x
5411 .Pf # Ar pat No } ,
5412 .Sm on
5413 .Xc
5414 .Sm off
5415 .Xo
5416 .Pf ${ Ar x
5417 .Pf ## Ar pat No } ,
5418 .Sm on
5419 .Xc
5420 .Sm off
5421 .Xo
5422 .Pf ${ Ar x
5423 .Pf % Ar pat No } ,
5424 .Sm on
5425 .Xc
5426 and
5427 .Sm off
5428 .Xo
5429 .Pf ${ Ar x
5430 .Pf %% Ar pat No }
5431 .Sm on
5432 .Xc
5433 wrongly do not require a parenthesis to be escaped and do not parse extglobs.
5434 .It
5435 The getopt construct from
5436 .Xr lksh 1
5437 passes through the errorlevel.
5438 .It
5439 .Nm sh
5440 .Fl c
5441 eats a leading
5442 .Fl \-
5443 if built with
5444 .Ev \-DMKSH_MIDNIGHTBSD01ASH_COMPAT .
5445 .El
5446 .Ss Interactive input line editing
5447 The shell supports three modes of reading command lines from a
5448 .Xr tty 4
5449 in an interactive session, controlled by the
5450 .Ic emacs ,
5451 .Ic gmacs
5452 and
5453 .Ic vi
5454 options (at most one of these can be set at once).
5455 The default is
5456 .Ic emacs .
5457 Editing modes can be set explicitly using the
5458 .Ic set
5459 built-in.
5460 If none of these options are enabled,
5461 the shell simply reads lines using the normal
5462 .Xr tty 4
5463 driver.
5464 If the
5465 .Ic emacs
5466 or
5467 .Ic gmacs
5468 option is set, the shell allows emacs-like editing of the command; similarly,
5469 if the
5470 .Ic vi
5471 option is set, the shell allows vi-like editing of the command.
5472 These modes are described in detail in the following sections.
5473 .Pp
5474 In these editing modes, if a line is longer than the screen width (see the
5475 .Ev COLUMNS
5476 parameter),
5477 a
5478 .Ql \*(Gt ,
5479 .Ql +
5480 or
5481 .Ql \*(Lt
5482 character is displayed in the last column indicating that there are more
5483 characters after, before and after, or before the current position,
5484 respectively.
5485 The line is scrolled horizontally as necessary.
5486 .Pp
5487 Completed lines are pushed into the history, unless they begin with an
5488 IFS octet or IFS white space or are the same as the previous line.
5489 .Ss Emacs editing mode
5490 When the
5491 .Ic emacs
5492 option is set, interactive input line editing is enabled.
5493 Warning: This mode is
5494 slightly different from the emacs mode in the original Korn shell.
5495 In this mode, various editing commands
5496 (typically bound to one or more control characters) cause immediate actions
5497 without waiting for a newline.
5498 Several editing commands are bound to particular
5499 control characters when the shell is invoked; these bindings can be changed
5500 using the
5501 .Ic bind
5502 command.
5503 .Pp
5504 The following is a list of available editing commands.
5505 Each description starts with the name of the command,
5506 suffixed with a colon;
5507 an
5508 .Op Ar n
5509 (if the command can be prefixed with a count); and any keys the command is
5510 bound to by default, written using caret notation
5511 e.g. the ASCII ESC character is written as \*(ha[.
5512 These control sequences are not case sensitive.
5513 A count prefix for a command is entered using the sequence
5514 .Pf \*(ha[ Ns Ar n ,
5515 where
5516 .Ar n
5517 is a sequence of 1 or more digits.
5518 Unless otherwise specified, if a count is
5519 omitted, it defaults to 1.
5520 .Pp
5521 Note that editing command names are used only with the
5522 .Ic bind
5523 command.
5524 Furthermore, many editing commands are useful only on terminals with
5525 a visible cursor.
5526 The user's
5527 .Xr tty 4
5528 characters (e.g.\&
5529 .Dv ERASE )
5530 are bound to
5531 reasonable substitutes and override the default bindings;
5532 their customary values are shown in parentheses below.
5533 The default bindings were chosen to resemble corresponding
5534 Emacs key bindings:
5535 .Bl -tag -width Ds
5536 .It Xo abort:
5537 .No INTR Pq \*(haC ,
5538 .No \*(haG
5539 .Xc
5540 Abort the current command, empty the line buffer and
5541 set the exit state to interrupted.
5542 .It auto\-insert: Op Ar n
5543 Simply causes the character to appear as literal input.
5544 Most ordinary characters are bound to this.
5545 .It Xo backward\-char:
5546 .Op Ar n
5547 .No \*(haB , \*(haXD , ANSI-CurLeft , PC-CurLeft
5548 .Xc
5549 Moves the cursor backward
5550 .Ar n
5551 characters.
5552 .It Xo backward\-word:
5553 .Op Ar n
5554 .No \*(ha[b , ANSI-Ctrl-CurLeft , ANSI-Alt-CurLeft
5555 .Xc
5556 Moves the cursor backward to the beginning of the word; words consist of
5557 alphanumerics, underscore
5558 .Pq Ql _
5559 and dollar sign
5560 .Pq Ql $
5561 characters.
5562 .It beginning\-of\-history: \*(ha[\*(Lt
5563 Moves to the beginning of the history.
5564 .It beginning\-of\-line: \*(haA, ANSI-Home, PC-Home
5565 Moves the cursor to the beginning of the edited input line.
5566 .It Xo capitalise\-word:
5567 .Op Ar n
5568 .No \*(ha[C , \*(ha[c
5569 .Xc
5570 Uppercase the first ASCII character in the next
5571 .Ar n
5572 words, leaving the cursor past the end of the last word.
5573 .It clear\-screen: \*(ha[\*(haL
5574 Prints a compile-time configurable sequence to clear the screen and home
5575 the cursor, redraws the entire prompt and the currently edited input line.
5576 The default sequence works for almost all standard terminals.
5577 .It comment: \*(ha[#
5578 If the current line does not begin with a comment character, one is added at
5579 the beginning of the line and the line is entered (as if return had been
5580 pressed); otherwise, the existing comment characters are removed and the cursor
5581 is placed at the beginning of the line.
5582 .It complete: \*(ha[\*(ha[
5583 Automatically completes as much as is unique of the command name or the file
5584 name containing the cursor.
5585 If the entire remaining command or file name is
5586 unique, a space is printed after its completion, unless it is a directory name
5587 in which case
5588 .Ql /
5589 is appended.
5590 If there is no command or file name with the current partial word
5591 as its prefix, a bell character is output (usually causing a beep to be
5592 sounded).
5593 .It complete\-command: \*(haX\*(ha[
5594 Automatically completes as much as is unique of the command name having the
5595 partial word up to the cursor as its prefix, as in the
5596 .Ic complete
5597 command above.
5598 .It complete\-file: \*(ha[\*(haX
5599 Automatically completes as much as is unique of the file name having the
5600 partial word up to the cursor as its prefix, as in the
5601 .Ic complete
5602 command described above.
5603 .It complete\-list: \*(haI, \*(ha[=
5604 Complete as much as is possible of the current word
5605 and list the possible completions for it.
5606 If only one completion is possible,
5607 match as in the
5608 .Ic complete
5609 command above.
5610 Note that \*(haI is usually generated by the TAB (tabulator) key.
5611 .It Xo delete\-char\-backward:
5612 .Op Ar n
5613 .No ERASE Pq \*(haH ,
5614 .No \*(ha? , \*(haH
5615 .Xc
5616 Deletes
5617 .Ar n
5618 characters before the cursor.
5619 .It Xo delete\-char\-forward:
5620 .Op Ar n
5621 .No ANSI-Del , PC-Del
5622 .Xc
5623 Deletes
5624 .Ar n
5625 characters after the cursor.
5626 .It Xo delete\-word\-backward:
5627 .Op Ar n
5628 .No Pfx1+ERASE Pq \*(ha[\*(haH ,
5629 .No WERASE Pq \*(haW ,
5630 .No \*(ha[\*(ha? , \*(ha[\*(haH , \*(ha[h
5631 .Xc
5632 Deletes
5633 .Ar n
5634 words before the cursor.
5635 .It Xo delete\-word\-forward:
5636 .Op Ar n
5637 .No \*(ha[d
5638 .Xc
5639 Deletes characters after the cursor up to the end of
5640 .Ar n
5641 words.
5642 .It Xo down\-history:
5643 .Op Ar n
5644 .No \*(haN , \*(haXB , ANSI-CurDown , PC-CurDown
5645 .Xc
5646 Scrolls the history buffer forward
5647 .Ar n
5648 lines (later).
5649 Each input line originally starts just after the last entry
5650 in the history buffer, so
5651 .Ic down\-history
5652 is not useful until either
5653 .Ic search\-history ,
5654 .Ic search\-history\-up
5655 or
5656 .Ic up\-history
5657 has been performed.
5658 .It Xo downcase\-word:
5659 .Op Ar n
5660 .No \*(ha[L , \*(ha[l
5661 .Xc
5662 Lowercases the next
5663 .Ar n
5664 words.
5665 .It Xo edit\-line:
5666 .Op Ar n
5667 .No \*(haXe
5668 .Xc
5669 Edit line
5670 .Ar n
5671 or the current line, if not specified, interactively.
5672 The actual command executed is
5673 .Ic fc \-e ${VISUAL:\-${EDITOR:\-vi}} Ar n .
5674 .It end\-of\-history: \*(ha[\*(Gt
5675 Moves to the end of the history.
5676 .It end\-of\-line: \*(haE, ANSI-End, PC-End
5677 Moves the cursor to the end of the input line.
5678 .It eot: \*(ha_
5679 Acts as an end-of-file; this is useful because edit-mode input disables
5680 normal terminal input canonicalisation.
5681 .It Xo eot\-or\-delete:
5682 .Op Ar n
5683 .No EOF Pq \*(haD
5684 .Xc
5685 If alone on a line, same as
5686 .Ic eot ,
5687 otherwise,
5688 .Ic delete\-char\-forward .
5689 .It error: (not bound)
5690 Error (ring the bell).
5691 .It evaluate\-region: \*(ha[\*(haE
5692 Evaluates the text between the mark and the cursor position
5693 .Pq the entire line if no mark is set
5694 as function substitution (if it cannot be parsed, the editing state is
5695 unchanged and the bell is rung to signal an error); $? is updated accordingly.
5696 .It exchange\-point\-and\-mark: \*(haX\*(haX
5697 Places the cursor where the mark is and sets the mark to where the cursor was.
5698 .It expand\-file: \*(ha[*
5699 Appends a
5700 .Ql *
5701 to the current word and replaces the word with the result of performing file
5702 globbing on the word.
5703 If no files match the pattern, the bell is rung.
5704 .It Xo forward\-char:
5705 .Op Ar n
5706 .No \*(haF , \*(haXC , ANSI-CurRight , PC-CurRight
5707 .Xc
5708 Moves the cursor forward
5709 .Ar n
5710 characters.
5711 .It Xo forward\-word:
5712 .Op Ar n
5713 .No \*(ha[f , ANSI-Ctrl-CurRight , ANSI-Alt-CurRight
5714 .Xc
5715 Moves the cursor forward to the end of the
5716 .Ar n Ns th
5717 word.
5718 .It Xo goto\-history:
5719 .Op Ar n
5720 .No \*(ha[g
5721 .Xc
5722 Goes to history number
5723 .Ar n .
5724 .It Xo kill\-line:
5725 .No KILL Pq \*(haU
5726 .Xc
5727 Deletes the entire input line.
5728 .It kill\-region: \*(haW
5729 Deletes the input between the cursor and the mark.
5730 .It Xo kill\-to\-eol:
5731 .Op Ar n
5732 .No \*(haK
5733 .Xc
5734 Deletes the input from the cursor to the end of the line if
5735 .Ar n
5736 is not specified; otherwise deletes characters between the cursor and column
5737 .Ar n .
5738 .It list: \*(ha[?
5739 Prints a sorted, columnated list of command names or file names (if any) that
5740 can complete the partial word containing the cursor.
5741 Directory names have
5742 .Ql /
5743 appended to them.
5744 .It list\-command: \*(haX?
5745 Prints a sorted, columnated list of command names (if any) that can complete
5746 the partial word containing the cursor.
5747 .It list\-file: \*(haX\*(haY
5748 Prints a sorted, columnated list of file names (if any) that can complete the
5749 partial word containing the cursor.
5750 File type indicators are appended as described under
5751 .Ic list
5752 above.
5753 .It newline: \*(haJ , \*(haM
5754 Causes the current input line to be processed by the shell.
5755 The current cursor position may be anywhere on the line.
5756 .It newline\-and\-next: \*(haO
5757 Causes the current input line to be processed by the shell, and the next line
5758 from history becomes the current line.
5759 This is only useful after an
5760 .Ic up\-history ,
5761 .Ic search\-history
5762 or
5763 .Ic search\-history\-up .
5764 .It Xo no\-op:
5765 .No QUIT Pq \*(ha\e
5766 .Xc
5767 This does nothing.
5768 .It prefix\-1: \*(ha[
5769 Introduces a 2-character command sequence.
5770 .It prefix\-2: \*(haX , \*(ha[[ , \*(ha[O
5771 Introduces a multi-character command sequence.
5772 .It Xo prev\-hist\-word:
5773 .Op Ar n
5774 .No \*(ha[. , \*(ha[_
5775 .Xc
5776 The last word or, if given, the
5777 .Ar n Ns th
5778 word (zero-based) of the previous (on repeated execution, second-last,
5779 third-last, etc.) command is inserted at the cursor.
5780 Use of this editing command trashes the mark.
5781 .It quote: \*(ha\*(ha , \*(haV
5782 The following character is taken literally rather than as an editing command.
5783 .It redraw: \*(haL
5784 Reprints the last line of the prompt string and the current input line
5785 on a new line.
5786 .It Xo search\-character\-backward:
5787 .Op Ar n
5788 .No \*(ha[\*(ha]
5789 .Xc
5790 Search backward in the current line for the
5791 .Ar n Ns th
5792 occurrence of the next character typed.
5793 .It Xo search\-character\-forward:
5794 .Op Ar n
5795 .No \*(ha]
5796 .Xc
5797 Search forward in the current line for the
5798 .Ar n Ns th
5799 occurrence of the next character typed.
5800 .It search\-history: \*(haR
5801 Enter incremental search mode.
5802 The internal history list is searched
5803 backwards for commands matching the input.
5804 An initial
5805 .Ql \*(ha
5806 in the search string anchors the search.
5807 The escape key will leave search mode.
5808 Other commands, including sequences of escape as
5809 .Ic prefix\-1
5810 followed by a
5811 .Ic prefix\-1
5812 or
5813 .Ic prefix\-2
5814 key will be executed after leaving search mode.
5815 The
5816 .Ic abort Pq \*(haG
5817 command will restore the input line before search started.
5818 Successive
5819 .Ic search\-history
5820 commands continue searching backward to the next previous occurrence of the
5821 pattern.
5822 The history buffer retains only a finite number of lines; the oldest
5823 are discarded as necessary.
5824 .It search\-history\-up: ANSI-PgUp, PC-PgUp
5825 Search backwards through the history buffer for commands whose beginning match
5826 the portion of the input line before the cursor.
5827 When used on an empty line, this has the same effect as
5828 .Ic up\-history .
5829 .It search\-history\-down: ANSI-PgDn, PC-PgDn
5830 Search forwards through the history buffer for commands whose beginning match
5831 the portion of the input line before the cursor.
5832 When used on an empty line, this has the same effect as
5833 .Ic down\-history .
5834 This is only useful after an
5835 .Ic up\-history ,
5836 .Ic search\-history
5837 or
5838 .Ic search\-history\-up .
5839 .It set\-mark\-command: \*(ha[ Ns Aq space
5840 Set the mark at the cursor position.
5841 .It transpose\-chars: \*(haT
5842 If at the end of line or, if the
5843 .Ic gmacs
5844 option is set, this exchanges the two previous characters; otherwise, it
5845 exchanges the previous and current characters and moves the cursor one
5846 character to the right.
5847 .It Xo up\-history:
5848 .Op Ar n
5849 .No \*(haP , \*(haXA , ANSI-CurUp , PC-CurUp
5850 .Xc
5851 Scrolls the history buffer backward
5852 .Ar n
5853 lines (earlier).
5854 .It Xo upcase\-word:
5855 .Op Ar n
5856 .No \*(ha[U , \*(ha[u
5857 .Xc
5858 Uppercase the next
5859 .Ar n
5860 words.
5861 .It version: \*(ha[\*(haV
5862 Display the version of
5863 .Nm mksh .
5864 The current edit buffer is restored as soon as a key is pressed.
5865 The restoring keypress is processed, unless it is a space.
5866 .It yank: \*(haY
5867 Inserts the most recently killed text string at the current cursor position.
5868 .It yank\-pop: \*(ha[y
5869 Immediately after a
5870 .Ic yank ,
5871 replaces the inserted text string with the next previously killed text string.
5872 .El
5873 .Pp
5874 The tab completion escapes characters the same way as the following code:
5875 .Bd -literal
5876 print \-nr \-\- "${x@/[\e"\-\e$\e&\-*:\-?[\e\e\e\`{\-\e}${IFS\-$\*(aq \et\en\*(aq}]/\e\e$KSH_MATCH}"
5877 .Ed
5878 .Ss Vi editing mode
5879 .Em Note:
5880 The vi command-line editing mode is orphaned, yet still functional.
5881 It is 8-bit clean but specifically does not support UTF-8 or MBCS.
5882 .Pp
5883 The vi command-line editor in
5884 .Nm
5885 has basically the same commands as the
5886 .Xr vi 1
5887 editor with the following exceptions:
5888 .Bl -bullet
5889 .It
5890 You start out in insert mode.
5891 .It
5892 There are file name and command completion commands:
5893 =, \e, *, \*(haX, \*(haE, \*(haF and, optionally,
5894 .Aq tab
5895 and
5896 .Aq esc .
5897 .It
5898 The
5899 .Ic _
5900 command is different (in
5901 .Nm mksh ,
5902 it is the last argument command; in
5903 .Xr vi 1
5904 it goes to the start of the current line).
5905 .It
5906 The
5907 .Ic /
5908 and
5909 .Ic G
5910 commands move in the opposite direction to the
5911 .Ic j
5912 command.
5913 .It
5914 Commands which don't make sense in a single line editor are not available
5915 (e.g. screen movement commands and
5916 .Xr ex 1 Ns -style
5917 colon
5918 .Pq Ic \&:
5919 commands).
5920 .El
5921 .Pp
5922 Like
5923 .Xr vi 1 ,
5924 there are two modes:
5925 .Dq insert
5926 mode and
5927 .Dq command
5928 mode.
5929 In insert mode, most characters are simply put in the buffer at the
5930 current cursor position as they are typed; however, some characters are
5931 treated specially.
5932 In particular, the following characters are taken from current
5933 .Xr tty 4
5934 settings
5935 (see
5936 .Xr stty 1 )
5937 and have their usual meaning (normal values are in parentheses): kill (\*(haU),
5938 erase (\*(ha?), werase (\*(haW), eof (\*(haD), intr (\*(haC) and quit (\*(ha\e).
5939 In addition to
5940 the above, the following characters are also treated specially in insert mode:
5941 .Bl -tag -width XJXXXXM
5942 .It \*(haE
5943 Command and file name enumeration (see below).
5944 .It \*(haF
5945 Command and file name completion (see below).
5946 If used twice in a row, the
5947 list of possible completions is displayed; if used a third time, the completion
5948 is undone.
5949 .It \*(haH
5950 Erases previous character.
5951 .It \*(haJ \*(Ba \*(haM
5952 End of line.
5953 The current line is read, parsed and executed by the shell.
5954 .It \*(haV
5955 Literal next.
5956 The next character typed is not treated specially (can be used
5957 to insert the characters being described here).
5958 .It \*(haX
5959 Command and file name expansion (see below).
5960 .It Aq esc
5961 Puts the editor in command mode (see below).
5962 .It Aq tab
5963 Optional file name and command completion (see
5964 .Ic \*(haF
5965 above), enabled with
5966 .Ic set Fl o Ic vi\-tabcomplete .
5967 .El
5968 .Pp
5969 In command mode, each character is interpreted as a command.
5970 Characters that
5971 don't correspond to commands, are illegal combinations of commands, or are
5972 commands that can't be carried out, all cause beeps.
5973 In the following command descriptions, an
5974 .Op Ar n
5975 indicates the command may be prefixed by a number (e.g.\&
5976 .Ic 10l
5977 moves right 10 characters); if no number prefix is used,
5978 .Ar n
5979 is assumed to be 1 unless otherwise specified.
5980 The term
5981 .Dq current position
5982 refers to the position between the cursor and the character preceding the
5983 cursor.
5984 A
5985 .Dq word
5986 is a sequence of letters, digits and underscore characters or a sequence of
5987 non-letter, non-digit, non-underscore and non-whitespace characters (e.g.\&
5988 .Dq Li ab2*&\*(ha
5989 contains two words) and a
5990 .Dq big-word
5991 is a sequence of non-whitespace characters.
5992 .Pp
5993 Special
5994 .Nm
5995 vi commands:
5996 .Pp
5997 The following commands are not in, or are different from, the normal vi file
5998 editor:
5999 .Bl -tag -width 10n
6000 .It Xo
6001 .Oo Ar n Oc Ns _
6002 .Xc
6003 Insert a space followed by the
6004 .Ar n Ns th
6005 big-word from the last command in the history at the current position and enter
6006 insert mode; if
6007 .Ar n
6008 is not specified, the last word is inserted.
6009 .It #
6010 Insert the comment character
6011 .Pq Ql #
6012 at the start of the current line and return the line to the shell (equivalent
6013 to
6014 .Ic I#\*(haJ ) .
6015 .It Xo
6016 .Oo Ar n Oc Ns g
6017 .Xc
6018 Like
6019 .Ic G ,
6020 except if
6021 .Ar n
6022 is not specified, it goes to the most recent remembered line.
6023 .It Xo
6024 .Oo Ar n Oc Ns v
6025 .Xc
6026 Edit line
6027 .Ar n
6028 using the
6029 .Xr vi 1
6030 editor; if
6031 .Ar n
6032 is not specified, the current line is edited.
6033 The actual command executed is
6034 .Ic fc \-e ${VISUAL:\-${EDITOR:\-vi}} Ar n .
6035 .It * and \*(haX
6036 Command or file name expansion is applied to the current big-word (with an
6037 appended
6038 .Ql *
6039 if the word contains no file globbing characters) \*(en the big-word is replaced
6040 with the resulting words.
6041 If the current big-word is the first on the line
6042 or follows one of the characters
6043 .Ql \&; ,
6044 .Ql \*(Ba ,
6045 .Ql & ,
6046 .Ql \&(
6047 or
6048 .Ql \&)
6049 and does not contain a slash
6050 .Pq Ql / ,
6051 then command expansion is done; otherwise file name expansion is done.
6052 Command expansion will match the big-word against all aliases, functions and
6053 built-in commands as well as any executable files found by searching the
6054 directories in the
6055 .Ev PATH
6056 parameter.
6057 File name expansion matches the big-word against the files in the
6058 current directory.
6059 After expansion, the cursor is placed just past the last
6060 word and the editor is in insert mode.
6061 .It Xo
6062 .Oo Ar n Oc Ns \e ,
6063 .Oo Ar n Oc Ns \*(haF ,
6064 .Oo Ar n Oc Ns Aq tab ,
6065 .No and
6066 .Oo Ar n Oc Ns Aq esc
6067 .Xc
6068 Command/file name completion.
6069 Replace the current big-word with the
6070 longest unique match obtained after performing command and file name expansion.
6071 .Aq tab
6072 is only recognised if the
6073 .Ic vi\-tabcomplete
6074 option is set, while
6075 .Aq esc
6076 is only recognised if the
6077 .Ic vi\-esccomplete
6078 option is set (see
6079 .Ic set Fl o ) .
6080 If
6081 .Ar n
6082 is specified, the
6083 .Ar n Ns th
6084 possible completion is selected (as reported by the command/file name
6085 enumeration command).
6086 .It = and \*(haE
6087 Command/file name enumeration.
6088 List all the commands or files that match the current big-word.
6089 .It \*(haV
6090 Display the version of
6091 .Nm mksh .
6092 The current edit buffer is restored as soon as a key is pressed.
6093 The restoring keypress is ignored.
6094 .It @ Ns Ar c
6095 Macro expansion.
6096 Execute the commands found in the alias
6097 .Ar c .
6098 .El
6099 .Pp
6100 Intra-line movement commands:
6101 .Bl -tag -width Ds
6102 .It Xo
6103 .Oo Ar n Oc Ns h and
6104 .Oo Ar n Oc Ns \*(haH
6105 .Xc
6106 Move left
6107 .Ar n
6108 characters.
6109 .It Xo
6110 .Oo Ar n Oc Ns l and
6111 .Oo Ar n Oc Ns Aq space
6112 .Xc
6113 Move right
6114 .Ar n
6115 characters.
6116 .It 0
6117 Move to column 0.
6118 .It \*(ha
6119 Move to the first non-whitespace character.
6120 .It Xo
6121 .Oo Ar n Oc Ns \*(Ba
6122 .Xc
6123 Move to column
6124 .Ar n .
6125 .It $
6126 Move to the last character.
6127 .It Xo
6128 .Oo Ar n Oc Ns b
6129 .Xc
6130 Move back
6131 .Ar n
6132 words.
6133 .It Xo
6134 .Oo Ar n Oc Ns B
6135 .Xc
6136 Move back
6137 .Ar n
6138 big-words.
6139 .It Xo
6140 .Oo Ar n Oc Ns e
6141 .Xc
6142 Move forward to the end of the word,
6143 .Ar n
6144 times.
6145 .It Xo
6146 .Oo Ar n Oc Ns E
6147 .Xc
6148 Move forward to the end of the big-word,
6149 .Ar n
6150 times.
6151 .It Xo
6152 .Oo Ar n Oc Ns w
6153 .Xc
6154 Move forward
6155 .Ar n
6156 words.
6157 .It Xo
6158 .Oo Ar n Oc Ns W
6159 .Xc
6160 Move forward
6161 .Ar n
6162 big-words.
6163 .It %
6164 Find match.
6165 The editor looks forward for the nearest parenthesis, bracket or
6166 brace and then moves the cursor to the matching parenthesis, bracket or brace.
6167 .It Xo
6168 .Oo Ar n Oc Ns f Ns Ar c
6169 .Xc
6170 Move forward to the
6171 .Ar n Ns th
6172 occurrence of the character
6173 .Ar c .
6174 .It Xo
6175 .Oo Ar n Oc Ns F Ns Ar c
6176 .Xc
6177 Move backward to the
6178 .Ar n Ns th
6179 occurrence of the character
6180 .Ar c .
6181 .It Xo
6182 .Oo Ar n Oc Ns t Ns Ar c
6183 .Xc
6184 Move forward to just before the
6185 .Ar n Ns th
6186 occurrence of the character
6187 .Ar c .
6188 .It Xo
6189 .Oo Ar n Oc Ns T Ns Ar c
6190 .Xc
6191 Move backward to just before the
6192 .Ar n Ns th
6193 occurrence of the character
6194 .Ar c .
6195 .It Xo
6196 .Oo Ar n Oc Ns \&;
6197 .Xc
6198 Repeats the last
6199 .Ic f , F , t
6200 or
6201 .Ic T
6202 command.
6203 .It Xo
6204 .Oo Ar n Oc Ns \&,
6205 .Xc
6206 Repeats the last
6207 .Ic f , F , t
6208 or
6209 .Ic T
6210 command, but moves in the opposite direction.
6211 .El
6212 .Pp
6213 Inter-line movement commands:
6214 .Bl -tag -width Ds
6215 .It Xo
6216 .Oo Ar n Oc Ns j ,
6217 .Oo Ar n Oc Ns + ,
6218 .No and
6219 .Oo Ar n Oc Ns \*(haN
6220 .Xc
6221 Move to the
6222 .Ar n Ns th
6223 next line in the history.
6224 .It Xo
6225 .Oo Ar n Oc Ns k ,
6226 .Oo Ar n Oc Ns \- ,
6227 .No and
6228 .Oo Ar n Oc Ns \*(haP
6229 .Xc
6230 Move to the
6231 .Ar n Ns th
6232 previous line in the history.
6233 .It Xo
6234 .Oo Ar n Oc Ns G
6235 .Xc
6236 Move to line
6237 .Ar n
6238 in the history; if
6239 .Ar n
6240 is not specified, the number of the first remembered line is used.
6241 .It Xo
6242 .Oo Ar n Oc Ns g
6243 .Xc
6244 Like
6245 .Ic G ,
6246 except if
6247 .Ar n
6248 is not specified, it goes to the most recent remembered line.
6249 .It Xo
6250 .Oo Ar n Oc Ns / Ns Ar string
6251 .Xc
6252 Search backward through the history for the
6253 .Ar n Ns th
6254 line containing
6255 .Ar string ;
6256 if
6257 .Ar string
6258 starts with
6259 .Ql \*(ha ,
6260 the remainder of the string must appear at the start of the history line for
6261 it to match.
6262 .It Xo
6263 .Oo Ar n Oc Ns \&? Ns Ar string
6264 .Xc
6265 Same as
6266 .Ic / ,
6267 except it searches forward through the history.
6268 .It Xo
6269 .Oo Ar n Oc Ns n
6270 .Xc
6271 Search for the
6272 .Ar n Ns th
6273 occurrence of the last search string;
6274 the direction of the search is the same as the last search.
6275 .It Xo
6276 .Oo Ar n Oc Ns N
6277 .Xc
6278 Search for the
6279 .Ar n Ns th
6280 occurrence of the last search string;
6281 the direction of the search is the opposite of the last search.
6282 .It Ar ANSI-CurUp , PC-PgUp
6283 Take the characters from the beginning of the line to the current
6284 cursor position as search string and do a backwards history search
6285 for lines beginning with this string; keep the cursor position.
6286 This works only in insert mode and keeps it enabled.
6287 .El
6288 .Pp
6289 Edit commands
6290 .Bl -tag -width Ds
6291 .It Xo
6292 .Oo Ar n Oc Ns a
6293 .Xc
6294 Append text
6295 .Ar n
6296 times; goes into insert mode just after the current position.
6297 The append is
6298 only replicated if command mode is re-entered i.e.\&
6299 .Aq esc
6300 is used.
6301 .It Xo
6302 .Oo Ar n Oc Ns A
6303 .Xc
6304 Same as
6305 .Ic a ,
6306 except it appends at the end of the line.
6307 .It Xo
6308 .Oo Ar n Oc Ns i
6309 .Xc
6310 Insert text
6311 .Ar n
6312 times; goes into insert mode at the current position.
6313 The insertion is only
6314 replicated if command mode is re-entered i.e.\&
6315 .Aq esc
6316 is used.
6317 .It Xo
6318 .Oo Ar n Oc Ns I
6319 .Xc
6320 Same as
6321 .Ic i ,
6322 except the insertion is done just before the first non-blank character.
6323 .It Xo
6324 .Oo Ar n Oc Ns s
6325 .Xc
6326 Substitute the next
6327 .Ar n
6328 characters (i.e. delete the characters and go into insert mode).
6329 .It S
6330 Substitute whole line.
6331 All characters from the first non-blank character to the
6332 end of the line are deleted and insert mode is entered.
6333 .It Xo
6334 .Oo Ar n Oc Ns c Ns Ar move-cmd
6335 .Xc
6336 Change from the current position to the position resulting from
6337 .Ar n move-cmd Ns s
6338 (i.e. delete the indicated region and go into insert mode); if
6339 .Ar move-cmd
6340 is
6341 .Ic c ,
6342 the line starting from the first non-blank character is changed.
6343 .It C
6344 Change from the current position to the end of the line (i.e. delete to the
6345 end of the line and go into insert mode).
6346 .It Xo
6347 .Oo Ar n Oc Ns x
6348 .Xc
6349 Delete the next
6350 .Ar n
6351 characters.
6352 .It Xo
6353 .Oo Ar n Oc Ns X
6354 .Xc
6355 Delete the previous
6356 .Ar n
6357 characters.
6358 .It D
6359 Delete to the end of the line.
6360 .It Xo
6361 .Oo Ar n Oc Ns d Ns Ar move-cmd
6362 .Xc
6363 Delete from the current position to the position resulting from
6364 .Ar n move-cmd Ns s ;
6365 .Ar move-cmd
6366 is a movement command (see above) or
6367 .Ic d ,
6368 in which case the current line is deleted.
6369 .It Xo
6370 .Oo Ar n Oc Ns r Ns Ar c
6371 .Xc
6372 Replace the next
6373 .Ar n
6374 characters with the character
6375 .Ar c .
6376 .It Xo
6377 .Oo Ar n Oc Ns R
6378 .Xc
6379 Replace.
6380 Enter insert mode but overwrite existing characters instead of
6381 inserting before existing characters.
6382 The replacement is repeated
6383 .Ar n
6384 times.
6385 .It Xo
6386 .Oo Ar n Oc Ns \*(TI
6387 .Xc
6388 Change the case of the next
6389 .Ar n
6390 characters.
6391 .It Xo
6392 .Oo Ar n Oc Ns y Ns Ar move-cmd
6393 .Xc
6394 Yank from the current position to the position resulting from
6395 .Ar n move-cmd Ns s
6396 into the yank buffer; if
6397 .Ar move-cmd
6398 is
6399 .Ic y ,
6400 the whole line is yanked.
6401 .It Y
6402 Yank from the current position to the end of the line.
6403 .It Xo
6404 .Oo Ar n Oc Ns p
6405 .Xc
6406 Paste the contents of the yank buffer just after the current position,
6407 .Ar n
6408 times.
6409 .It Xo
6410 .Oo Ar n Oc Ns P
6411 .Xc
6412 Same as
6413 .Ic p ,
6414 except the buffer is pasted at the current position.
6415 .El
6416 .Pp
6417 Miscellaneous vi commands
6418 .Bl -tag -width Ds
6419 .It \*(haJ and \*(haM
6420 The current line is read, parsed and executed by the shell.
6421 .It \*(haL and \*(haR
6422 Redraw the current line.
6423 .It Xo
6424 .Oo Ar n Oc Ns \&.
6425 .Xc
6426 Redo the last edit command
6427 .Ar n
6428 times.
6429 .It u
6430 Undo the last edit command.
6431 .It U
6432 Undo all changes that have been made to the current line.
6433 .It PC Home, End, Del and cursor keys
6434 They move as expected, both in insert and command mode.
6435 .It Ar intr No and Ar quit
6436 The interrupt and quit terminal characters cause the current line to be
6437 deleted and a new prompt to be printed.
6438 .El
6439 .Sh FILES
6440 .Bl -tag -width XetcXsuid_profile -compact
6441 .It Pa \*(TI/.mkshrc
6442 User mkshrc profile (non-privileged interactive shells); see
6443 .Sx Startup files.
6444 The location can be changed at compile time (for embedded systems);
6445 AOSP Android builds use
6446 .Pa /system/etc/mkshrc .
6447 .It Pa \*(TI/.profile
6448 User profile (non-privileged login shells); see
6449 .Sx Startup files
6450 near the top of this manual.
6451 .It Pa /etc/profile
6452 System profile (login shells); see
6453 .Sx Startup files.
6454 .It Pa /etc/shells
6455 Shell database.
6456 .It Pa /etc/suid_profile
6457 Suid profile (privileged shells); see
6458 .Sx Startup files.
6459 .El
6460 .Pp
6461 Note: On Android,
6462 .Pa /system/etc/
6463 contains the system and suid profile.
6464 .Sh SEE ALSO
6465 .Xr awk 1 ,
6466 .Xr cat 1 ,
6467 .Xr ed 1 ,
6468 .Xr getopt 1 ,
6469 .Xr lksh 1 ,
6470 .Xr sed 1 ,
6471 .Xr sh 1 ,
6472 .Xr stty 1 ,
6473 .Xr dup 2 ,
6474 .Xr execve 2 ,
6475 .Xr getgid 2 ,
6476 .Xr getuid 2 ,
6477 .Xr mknod 2 ,
6478 .Xr mkfifo 2 ,
6479 .Xr open 2 ,
6480 .Xr pipe 2 ,
6481 .Xr rename 2 ,
6482 .Xr wait 2 ,
6483 .Xr getopt 3 ,
6484 .Xr nl_langinfo 3 ,
6485 .Xr setlocale 3 ,
6486 .Xr signal 3 ,
6487 .Xr system 3 ,
6488 .Xr tty 4 ,
6489 .Xr shells 5 ,
6490 .Xr environ 7 ,
6491 .Xr script 7 ,
6492 .Xr utf\-8 7 ,
6493 .Xr mknod 8
6494 .Pp
6495 .Pa http://www.mirbsd.org/ksh\-chan.htm
6496 .Rs
6497 .%A Morris Bolsky
6498 .%B "The KornShell Command and Programming Language"
6499 .%D 1989
6500 .%I "Prentice Hall PTR"
6501 .%P "xvi\ +\ 356 pages"
6502 .%O "ISBN 978\-0\-13\-516972\-8 (0\-13\-516972\-0)"
6503 .Re
6504 .Rs
6505 .%A Morris I. Bolsky
6506 .%A David G. Korn
6507 .%B "The New KornShell Command and Programming Language (2nd Edition)"
6508 .%D 1995
6509 .%I "Prentice Hall PTR"
6510 .%P "xvi\ +\ 400 pages"
6511 .%O "ISBN 978\-0\-13\-182700\-4 (0\-13\-182700\-6)"
6512 .Re
6513 .Rs
6514 .%A Stephen G. Kochan
6515 .%A Patrick H. Wood
6516 .%B "\\*(tNUNIX\\*(sP Shell Programming"
6517 .%V "3rd Edition"
6518 .%D 2003
6519 .%I "Sams"
6520 .%P "xiii\ +\ 437 pages"
6521 .%O "ISBN 978\-0\-672\-32490\-1 (0\-672\-32490\-3)"
6522 .Re
6523 .Rs
6524 .%A "IEEE Inc."
6525 .%T "\\*(tNIEEE\\*(sP Standard for Information Technology \*(en Portable Operating System Interface (POSIX)"
6526 .%V "Part 2: Shell and Utilities"
6527 .%D 1993
6528 .%I "IEEE Press"
6529 .%P "xvii\ +\ 1195 pages"
6530 .%O "ISBN 978\-1\-55937\-255\-8 (1\-55937\-255\-9)"
6531 .Re
6532 .Rs
6533 .%A Bill Rosenblatt
6534 .%B "Learning the Korn Shell"
6535 .%D 1993
6536 .%I "O'Reilly"
6537 .%P "360 pages"
6538 .%O "ISBN 978\-1\-56592\-054\-5 (1\-56592\-054\-6)"
6539 .Re
6540 .Rs
6541 .%A Bill Rosenblatt
6542 .%A Arnold Robbins
6543 .%B "Learning the Korn Shell, Second Edition"
6544 .%D 2002
6545 .%I "O'Reilly"
6546 .%P "432 pages"
6547 .%O "ISBN 978\-0\-596\-00195\-7 (0\-596\-00195\-9)"
6548 .Re
6549 .Rs
6550 .%A Barry Rosenberg
6551 .%B "KornShell Programming Tutorial"
6552 .%D 1991
6553 .%I "Addison-Wesley Professional"
6554 .%P "xxi\ +\ 324 pages"
6555 .%O "ISBN 978\-0\-201\-56324\-5 (0\-201\-56324\-X)"
6556 .Re
6557 .Sh AUTHORS
6558 .An -nosplit
6559 .Nm "The MirBSD Korn Shell"
6560 is developed by
6561 .An mirabilos Aq Mt m@mirbsd.org
6562 as part of The MirOS Project.
6563 This shell is based on the public domain 7th edition Bourne shell clone by
6564 .An Charles Forsyth ,
6565 who kindly agreed to, in countries where the Public Domain status of the work
6566 may not be valid, grant a copyright licence to the general public to deal in
6567 the work without restriction and permission to sublicence derivatives under
6568 the terms of any (OSI approved) Open Source licence,
6569 and parts of the BRL shell by
6570 .An Doug A. Gwyn ,
6571 .An Doug Kingston ,
6572 .An Ron Natalie ,
6573 .An Arnold Robbins ,
6574 .An Lou Salkind
6575 and others.
6576 The first release of
6577 .Nm pdksh
6578 was created by
6579 .An Eric Gisin ,
6580 and it was subsequently maintained by
6581 .An John R. MacMillan ,
6582 .An Simon J. Gerraty
6583 and
6584 .An Michael Rendell .
6585 The effort of several projects, such as Debian and OpenBSD, and other
6586 contributors including our users, to improve the shell is appreciated.
6587 See the documentation, web site and CVS for details.
6588 .Pp
6589 .Nm mksh\-os2
6590 is developed by
6591 .An KO Myung-Hun Aq Mt komh@chollian.net .
6592 .Pp
6593 .Nm mksh\-w32
6594 is developed by
6595 .An Michael Langguth Aq Mt lan@scalaris.com .
6596 .Pp
6597 The BSD daemon is Copyright \(co Marshall Kirk McKusick.
6598 The complete legalese is at:
6599 .Pa http://www.mirbsd.org/TaC\-mksh.txt
6600 .\"
6601 .\" This boils down to: feel free to use mksh.ico as application icon
6602 .\" or shortcut for mksh or mksh/Win32 or OS/2; distro patches are ok
6603 .\" (but we request they amend $KSH_VERSION when modifying mksh).
6604 .\" Authors are Marshall Kirk McKusick (UCB), Rick Collette (ekkoBSD),
6605 .\" mirabilos, Benny Siegert (MirBSD), Michael Langguth (mksh/Win32),
6606 .\" KO Myung-Hun (mksh for OS/2).
6607 .\"
6608 .\" As far as MirBSD is concerned, the files themselves are free
6609 .\" to modification and distribution under BSD/MirOS Licence, the
6610 .\" restriction on use stems only from trademark law's requirement
6611 .\" to protect it or lose it, which McKusick almost did.
6612 .\"
6613 .Sh CAVEATS
6614 .Nm mksh
6615 provides a consistent 32-bit integer arithmetic implementation, both
6616 signed and unsigned, with sign of the result of a remainder operation
6617 and wraparound defined, even (defying POSIX) on 36-bit and 64-bit systems.
6618 .Pp
6619 .Nm mksh
6620 provides a consistent, clear interface normally.
6621 This may deviate from POSIX in historic or opinionated places.
6622 .Ic set Fl o Ic posix
6623 (see
6624 .Sx POSIX mode
6625 for details)
6626 will cause the shell to behave more conformant.
6627 .Pp
6628 For the purpose of
6629 .Tn POSIX ,
6630 .Nm mksh
6631 supports only the
6632 .Dq C
6633 locale.
6634 .Nm mksh Ns 's
6635 .Ic utf8\-mode
6636 only supports the Unicode BMP (Basic Multilingual Plane) and maps
6637 raw octets into the U+EF80..U+EFFF wide character range; compare
6638 .Sx Arithmetic expressions .
6639 The following
6640 .Tn POSIX
6641 .Nm sh
6642 code toggles the
6643 .Ic utf8\-mode
6644 option dependent on the current
6645 .Tn POSIX
6646 locale for mksh to allow using the UTF-8 mode, within the constraints
6647 outlined above, in code portable across various shell implementations:
6648 .Bd -literal -offset indent
6649 case ${KSH_VERSION:\-} in
6650 *MIRBSD\ KSH*\*(Ba*LEGACY\ KSH*)
6651         case ${LC_ALL:\-${LC_CTYPE:\-${LANG:\-}}} in
6652         *[Uu][Tt][Ff]8*\*(Ba*[Uu][Tt][Ff]\-8*) set \-U ;;
6653         *) set +U ;;
6654         esac ;;
6655 esac
6656 .Ed
6657 In near future, (Unicode) locale tracking will be implemented though.
6658 .Pp
6659 See also the FAQ below.
6660 .Sh BUGS
6661 Suspending (using \*(haZ) pipelines like the one below will only suspend
6662 the currently running part of the pipeline; in this example,
6663 .Dq Li fubar
6664 is immediately printed on suspension (but not later after an
6665 .Ic fg ) .
6666 .Bd -literal -offset indent
6667 $ /bin/sleep 666 && echo fubar
6668 .Ed
6669 .Pp
6670 The truncation process involved when changing
6671 .Ev HISTFILE
6672 does not free old history entries (leaks memory) and leaks
6673 old entries into the new history if their line numbers are
6674 not overwritten by same-number entries from the persistent
6675 history file; truncating the on-disc file to
6676 .Ev HISTSIZE
6677 lines has always been broken and prone to history file corruption
6678 when multiple shells are accessing the file; the rollover process
6679 for the in-memory portion of the history is slow, should use
6680 .Xr memmove 3 .
6681 .Pp
6682 This document attempts to describe
6683 .Nm mksh\ R55
6684 and up,
6685 .\" with vendor patches from insert-your-name-here,
6686 compiled without any options impacting functionality, such as
6687 .Dv MKSH_SMALL ,
6688 when not called as
6689 .Pa /bin/sh
6690 which, on some systems only, enables
6691 .Ic set Fl o Ic posix
6692 or
6693 .Ic set Fl o Ic sh
6694 automatically (whose behaviour differs across targets),
6695 for an operating environment supporting all of its advanced needs.
6696 .Pp
6697 Please report bugs in
6698 .Nm
6699 to the
6700 .Aq Mt miros\-mksh@mirbsd.org
6701 mailing list
6702 or in the
6703 .Li \&#\&!/bin/mksh
6704 .Pq or Li \&#ksh
6705 IRC channel at
6706 .Pa irc.freenode.net
6707 .Pq Port 6697 SSL, 6667 unencrypted ,
6708 or at:
6709 .Pa https://launchpad.net/mksh
6710 .Sh FREQUENTLY ASKED QUESTIONS
6711 This FAQ attempts to document some of the questions users of
6712 .Nm
6713 or readers of this manual page may encounter.
6714 .Ss I'm an Android user, so what's mksh?
6715 .Nm mksh
6716 is a
6717 .Ux
6718 shell / command interpreter, similar to
6719 .Nm COMMAND.COM
6720 or
6721 .Nm CMD.EXE ,
6722 which has been included with
6723 .Tn Android Open Source Project
6724 for a while now.
6725 Basically, it's a program that runs in a terminal (console window),
6726 takes user input and runs commands or scripts, which it can also
6727 be asked to do by other programs, even in the background.
6728 Any privilege pop-ups you might be encountering are thus not
6729 .Nm mksh
6730 issues but questions by some other program utilising it.
6731 .Ss "I'm an OS/2 user, what do I need to know?"
6732 Unlike the native command prompt, the current working directory is,
6733 for security reasons common on Unix systems which the shell is designed for,
6734 not in the search path at all; if you really need this, run the command
6735 .Li PATH=.$PATHSEP$PATH
6736 or add that to a suitable initialisation file.
6737 .Pp
6738 There are two different newline modes for mksh-os2: standard (Unix) mode,
6739 in which only LF (0A hex) is supported as line separator, and "textmode",
6740 which also accepts ASCII newlines (CR+LF), like most other tools on OS/2,
6741 but creating an incompatibility with standard
6742 .Nm .
6743 If you compiled mksh from source, you will get the standard Unix mode unless
6744 .Fl T
6745 is added during compilation; you will most likely have gotten this shell
6746 through komh's port on Hobbes, or from his OS/2 Factory on eComStation
6747 Korea, which uses "textmode", though.
6748 Most OS/2 users will want to use "textmode" unless they need absolute
6749 compatibility with Unix
6750 .Nm .
6751 .Ss "How do I start mksh on a specific terminal?"
6752 Normally:
6753 .Dl mksh \-T/dev/tty2
6754 .Pp
6755 However, if you want for it to return (e.g. for an embedded
6756 system rescue shell), use this on your real console device instead:
6757 .Dl mksh \-T!/dev/ttyACM0
6758 .Pp
6759 .Nm
6760 can also daemonise (send to the background):
6761 .Dl mksh \-T\- \-c \*(aqexec cdio lock\*(aq
6762 .Ss "POSIX says..."
6763 Run the shell in POSIX mode (and possibly
6764 .Nm lksh
6765 instead of
6766 .Nm mksh ) :
6767 .Dl set \-o posix
6768 .Ss "My prompt from <some other shell> does not work!"
6769 Contact us on the mailing list or on IRC, we'll convert it for you.
6770 .Ss "Something is going wrong with my while...read loop"
6771 Most likely, you've encountered the problem in which the shell runs
6772 all parts of a pipeline as subshell.
6773 The inner loop will be executed in a subshell and variable changes
6774 cannot be propagated if run in a pipeline:
6775 .Bd -literal -offset indent
6776 bar \*(Ba baz \*(Ba while read foo; do ...; done
6777 .Ed
6778 .Pp
6779 Note that
6780 .Ic exit
6781 in the inner loop will only exit the subshell and not the original shell.
6782 Likewise, if the code is inside a function,
6783 .Ic return
6784 in the inner loop will only exit the subshell and won't terminate the function.
6785 .Pp
6786 Use co-processes instead:
6787 .Bd -literal -offset indent
6788 bar \*(Ba baz \*(Ba&
6789 while read \-p foo; do ...; done
6790 exec 3\*(Gt&p; exec 3\*(Gt&\-
6791 .Ed
6792 .Pp
6793 If
6794 .Ic read
6795 is run in a loop such as
6796 .Ic while read foo; do ...; done
6797 then leading whitespace will be removed (IFS) and backslashes processed.
6798 You might want to use
6799 .Ic while IFS= read \-r foo; do ...; done
6800 for pristine I/O.
6801 Similarly, when using the
6802 .Fl a
6803 option, use of the
6804 .Fl r
6805 option might be prudent
6806 .Pq Dq Li read \-raN\-1 arr \*(Ltfile ;
6807 the same applies for NUL-terminated lines:
6808 .Bd -literal -offset indent
6809 find . \-type f \-print0 \*(Ba& \e
6810     while IFS= read \-d \*(aq\*(aq \-pr filename; do
6811         print \-r \-\- "found \*(Lt${filename#./}\*(Gt"
6812 done
6813 .Ed
6814 .Pp
6815 .Ss "What differences in function-local scopes are there?"
6816 .Nm
6817 has a different scope model from
6818 .At
6819 .Nm ksh ,
6820 which leads to subtle differences in semantics for identical builtins.
6821 This can cause issues with a
6822 .Ic nameref
6823 to suddenly point to a local variable by accident.
6824 .Pp
6825 .Tn GNU
6826 .Nm bash
6827 allows unsetting local variables; in
6828 .Nm ,
6829 doing so in a function allows back access to the global variable
6830 (actually the one in the next scope up) with the same name.
6831 The following code, when run before the function definitions, changes
6832 the behaviour of
6833 .Ic unset
6834 to behave like other shells (the alias can be removed after the definitions):
6835 .Bd -literal -offset indent
6836 case ${KSH_VERSION:\-} in
6837 *MIRBSD\ KSH*\*(Ba*LEGACY\ KSH*)
6838         function unset_compat {
6839                 \e\ebuiltin typeset unset_compat_x
6840
6841                 for unset_compat_x in "$@"; do
6842                         eval "\e\e\e\ebuiltin unset $unset_compat_x[*]"
6843                 done
6844         }
6845         \e\ebuiltin alias unset=unset_compat
6846         ;;
6847 esac
6848 .Ed
6849 .Pp
6850 When a local variable is created (e.g. using
6851 .Ic local ,
6852 .Ic typeset ,
6853 .Ic integer ,
6854 .Ic \e\ebuiltin typeset )
6855 it does not, like in other shells, inherit the value from the global
6856 (next scope up) variable with the same name; it is rather created
6857 without any value (unset but defined).
6858 .Ss "I get an error in this regex comparison"
6859 Use extglobs instead of regexes:
6860 .Dl "[[ foo =~ (foo\*(Babar).*baz ]]    # becomes"
6861 .Dl "[[ foo = *@(foo\*(Babar)*baz* ]]   # instead"
6862 .Ss "Are there any extensions to avoid?"
6863 .Tn GNU
6864 .Nm bash
6865 supports
6866 .Dq Li &\*(Gt
6867 .Pq and Dq Li \*(Ba&
6868 to redirect both stdout and stderr in one go, but this breaks POSIX
6869 and Korn Shell syntax; use POSIX redirections instead:
6870 .Dl "foo \*(Ba& bar \*(Ba& baz &\*(Gtlog                             # GNU bash"
6871 .Dl "foo 2\*(Gt&1 \*(Ba bar 2\*(Gt&1 \*(Ba baz \*(Gtlog 2\*(Gt&1        # POSIX"
6872 .Ss "\*(haL (Ctrl-L) does not clear the screen"
6873 Use \*(ha[\*(haL (Escape+Ctrl-L) or rebind it:
6874 .Dl bind \*(aq\*(haL=clear-screen\*(aq
6875 .Ss "\*(haU (Ctrl-U) clears the entire line"
6876 If it should only delete the line up to the cursor, use:
6877 .Dl bind \-m \*(haU=\*(aq\*(ha[0\*(haK\*(aq
6878 .Ss "Cursor Up behaves differently from zsh"
6879 Some shells make Cursor Up search in the history only for
6880 commands starting with what was already entered.
6881 .Nm
6882 separates the shortcuts: Cursor Up goes up one command
6883 and PgUp searches the history as described above.