OSDN Git Service

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