]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - bin/sh/sh.1
Upgrade to 1.4.20.
[FreeBSD/FreeBSD.git] / bin / sh / sh.1
1 .\"-
2 .\" Copyright (c) 1991, 1993
3 .\"     The Regents of the University of California.  All rights reserved.
4 .\"
5 .\" This code is derived from software contributed to Berkeley by
6 .\" Kenneth Almquist.
7 .\"
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
10 .\" are met:
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\"    notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\"    notice, this list of conditions and the following disclaimer in the
15 .\"    documentation and/or other materials provided with the distribution.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\"     from: @(#)sh.1  8.6 (Berkeley) 5/4/95
33 .\" $FreeBSD$
34 .\"
35 .Dd March 24, 2013
36 .Dt SH 1
37 .Os
38 .Sh NAME
39 .Nm sh
40 .Nd command interpreter (shell)
41 .Sh SYNOPSIS
42 .Nm
43 .Op Fl /+abCEefIimnPpTuVvx
44 .Op Fl /+o Ar longname
45 .Oo
46 .Ar script
47 .Op Ar arg ...
48 .Oc
49 .Nm
50 .Op Fl /+abCEefIimnPpTuVvx
51 .Op Fl /+o Ar longname
52 .Fl c Ar string
53 .Oo
54 .Ar name
55 .Op Ar arg ...
56 .Oc
57 .Nm
58 .Op Fl /+abCEefIimnPpTuVvx
59 .Op Fl /+o Ar longname
60 .Fl s
61 .Op Ar arg ...
62 .Sh DESCRIPTION
63 The
64 .Nm
65 utility is the standard command interpreter for the system.
66 The current version of
67 .Nm
68 is close to the
69 .St -p1003.1
70 specification for the shell.
71 It only supports features
72 designated by
73 .Tn POSIX ,
74 plus a few Berkeley extensions.
75 This man page is not intended to be a tutorial nor a complete
76 specification of the shell.
77 .Ss Overview
78 The shell is a command that reads lines from
79 either a file or the terminal, interprets them, and
80 generally executes other commands.
81 It is the program that is started when a user logs into the system,
82 although a user can select a different shell with the
83 .Xr chsh 1
84 command.
85 The shell
86 implements a language that has flow control constructs,
87 a macro facility that provides a variety of features in
88 addition to data storage, along with built-in history and line
89 editing capabilities.
90 It incorporates many features to
91 aid interactive use and has the advantage that the interpretative
92 language is common to both interactive and non-interactive
93 use (shell scripts).
94 That is, commands can be typed directly
95 to the running shell or can be put into a file,
96 which can be executed directly by the shell.
97 .Ss Invocation
98 .\"
99 .\" XXX This next sentence is incredibly confusing.
100 .\"
101 If no arguments are present and if the standard input of the shell
102 is connected to a terminal
103 (or if the
104 .Fl i
105 option is set),
106 the shell is considered an interactive shell.
107 An interactive shell
108 generally prompts before each command and handles programming
109 and command errors differently (as described below).
110 When first starting, the shell inspects argument 0, and
111 if it begins with a dash
112 .Pq Ql - ,
113 the shell is also considered a login shell.
114 This is normally done automatically by the system
115 when the user first logs in.
116 A login shell first reads commands
117 from the files
118 .Pa /etc/profile
119 and then
120 .Pa .profile
121 in a user's home directory,
122 if they exist.
123 If the environment variable
124 .Ev ENV
125 is set on entry to a shell, or is set in the
126 .Pa .profile
127 of a login shell, the shell then subjects its value to parameter expansion
128 and arithmetic expansion and reads commands from the named file.
129 Therefore, a user should place commands that are to be executed only
130 at login time in the
131 .Pa .profile
132 file, and commands that are executed for every shell inside the
133 .Ev ENV
134 file.
135 The user can set the
136 .Ev ENV
137 variable to some file by placing the following line in the file
138 .Pa .profile
139 in the home directory,
140 substituting for
141 .Pa .shrc
142 the filename desired:
143 .Pp
144 .Dl "ENV=$HOME/.shrc; export ENV"
145 .Pp
146 The first non-option argument specified on the command line
147 will be treated as the
148 name of a file from which to read commands (a shell script), and
149 the remaining arguments are set as the positional parameters
150 of the shell
151 .Li ( $1 , $2 ,
152 etc.).
153 Otherwise, the shell reads commands
154 from its standard input.
155 .Pp
156 Unlike older versions of
157 .Nm
158 the
159 .Ev ENV
160 script is only sourced on invocation of interactive shells.
161 This
162 closes a well-known, and sometimes easily exploitable security
163 hole related to poorly thought out
164 .Ev ENV
165 scripts.
166 .Ss Argument List Processing
167 All of the single letter options to
168 .Nm
169 have a corresponding long name,
170 with the exception of
171 .Fl c
172 and
173 .Fl /+o .
174 These long names are provided next to the single letter options
175 in the descriptions below.
176 The long name for an option may be specified as an argument to the
177 .Fl /+o
178 option of
179 .Nm .
180 Once the shell is running,
181 the long name for an option may be specified as an argument to the
182 .Fl /+o
183 option of the
184 .Ic set
185 built-in command
186 (described later in the section called
187 .Sx Built-in Commands ) .
188 Introducing an option with a dash
189 .Pq Ql -
190 enables the option,
191 while using a plus
192 .Pq Ql +
193 disables the option.
194 A
195 .Dq Li --
196 or plain
197 .Ql -
198 will stop option processing and will force the remaining
199 words on the command line to be treated as arguments.
200 The
201 .Fl /+o
202 and
203 .Fl c
204 options do not have long names.
205 They take arguments and are described after the single letter options.
206 .Bl -tag -width indent
207 .It Fl a Li allexport
208 Flag variables for export when assignments are made to them.
209 .It Fl b Li notify
210 Enable asynchronous notification of background job
211 completion.
212 (UNIMPLEMENTED)
213 .It Fl C Li noclobber
214 Do not overwrite existing files with
215 .Ql > .
216 .It Fl E Li emacs
217 Enable the built-in
218 .Xr emacs 1
219 command line editor (disables the
220 .Fl V
221 option if it has been set;
222 set automatically when interactive on terminals).
223 .It Fl e Li errexit
224 Exit immediately if any untested command fails in non-interactive mode.
225 The exit status of a command is considered to be
226 explicitly tested if the command is part of the list used to control
227 an
228 .Ic if , elif , while ,
229 or
230 .Ic until ;
231 if the command is the left
232 hand operand of an
233 .Dq Li &&
234 or
235 .Dq Li ||
236 operator; or if the command is a pipeline preceded by the
237 .Ic !\&
238 operator.
239 If a shell function is executed and its exit status is explicitly
240 tested, all commands of the function are considered to be tested as
241 well.
242 .It Fl f Li noglob
243 Disable pathname expansion.
244 .It Fl h Li trackall
245 A do-nothing option for
246 .Tn POSIX
247 compliance.
248 .It Fl I Li ignoreeof
249 Ignore
250 .Dv EOF Ap s
251 from input when in interactive mode.
252 .It Fl i Li interactive
253 Force the shell to behave interactively.
254 .It Fl m Li monitor
255 Turn on job control (set automatically when interactive).
256 .It Fl n Li noexec
257 If not interactive, read commands but do not
258 execute them.
259 This is useful for checking the
260 syntax of shell scripts.
261 .It Fl P Li physical
262 Change the default for the
263 .Ic cd
264 and
265 .Ic pwd
266 commands from
267 .Fl L
268 (logical directory layout)
269 to
270 .Fl P
271 (physical directory layout).
272 .It Fl p Li privileged
273 Turn on privileged mode.
274 This mode is enabled on startup
275 if either the effective user or group ID is not equal to the
276 real user or group ID.
277 Turning this mode off sets the
278 effective user and group IDs to the real user and group IDs.
279 When this mode is enabled for interactive shells, the file
280 .Pa /etc/suid_profile
281 is sourced instead of
282 .Pa ~/.profile
283 after
284 .Pa /etc/profile
285 is sourced, and the contents of the
286 .Ev ENV
287 variable are ignored.
288 .It Fl s Li stdin
289 Read commands from standard input (set automatically
290 if no file arguments are present).
291 This option has
292 no effect when set after the shell has already started
293 running (i.e., when set with the
294 .Ic set
295 command).
296 .It Fl T Li trapsasync
297 When waiting for a child, execute traps immediately.
298 If this option is not set,
299 traps are executed after the child exits,
300 as specified in
301 .St -p1003.2 .
302 This nonstandard option is useful for putting guarding shells around
303 children that block signals.
304 The surrounding shell may kill the child
305 or it may just return control to the tty and leave the child alone,
306 like this:
307 .Bd -literal -offset indent
308 sh -T -c "trap 'exit 1' 2 ; some-blocking-program"
309 .Ed
310 .It Fl u Li nounset
311 Write a message to standard error when attempting
312 to expand a variable, a positional parameter or
313 the special parameter
314 .Va \&!
315 that is not set, and if the
316 shell is not interactive, exit immediately.
317 .It Fl V Li vi
318 Enable the built-in
319 .Xr vi 1
320 command line editor (disables
321 .Fl E
322 if it has been set).
323 .It Fl v Li verbose
324 The shell writes its input to standard error
325 as it is read.
326 Useful for debugging.
327 .It Fl x Li xtrace
328 Write each command
329 (preceded by the value of the
330 .Va PS4
331 variable subjected to parameter expansion and arithmetic expansion)
332 to standard error before it is executed.
333 Useful for debugging.
334 .El
335 .Pp
336 The
337 .Fl c
338 option causes the commands to be read from the
339 .Ar string
340 operand instead of from the standard input.
341 Keep in mind that this option only accepts a single string as its
342 argument, hence multi-word strings must be quoted.
343 .Pp
344 The
345 .Fl /+o
346 option takes as its only argument the long name of an option
347 to be enabled or disabled.
348 For example, the following two invocations of
349 .Nm
350 both enable the built-in
351 .Xr emacs 1
352 command line editor:
353 .Bd -literal -offset indent
354 set -E
355 set -o emacs
356 .Ed
357 .Pp
358 If used without an argument, the
359 .Fl o
360 option displays the current option settings in a human-readable format.
361 If
362 .Cm +o
363 is used without an argument, the current option settings are output
364 in a format suitable for re-input into the shell.
365 .Ss Lexical Structure
366 The shell reads input in terms of lines from a file and breaks
367 it up into words at whitespace (blanks and tabs), and at
368 certain sequences of
369 characters called
370 .Dq operators ,
371 which are special to the shell.
372 There are two types of operators: control operators and
373 redirection operators (their meaning is discussed later).
374 The following is a list of valid operators:
375 .Bl -tag -width indent
376 .It Control operators:
377 .Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
378 .It Li & Ta Li && Ta Li \&( Ta Li \&) Ta Li \en
379 .It Li ;; Ta Li ;& Ta Li \&; Ta Li \&| Ta Li ||
380 .El
381 .It Redirection operators:
382 .Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
383 .It Li < Ta Li > Ta Li << Ta Li >> Ta Li <>
384 .It Li <& Ta Li >& Ta Li <<- Ta Li >| Ta \&
385 .El
386 .El
387 .Pp
388 The character
389 .Ql #
390 introduces a comment if used at the beginning of a word.
391 The word starting with
392 .Ql #
393 and the rest of the line are ignored.
394 .Pp
395 .Tn ASCII
396 .Dv NUL
397 characters (character code 0) are not allowed in shell input.
398 .Ss Quoting
399 Quoting is used to remove the special meaning of certain characters
400 or words to the shell, such as operators, whitespace, keywords,
401 or alias names.
402 .Pp
403 There are four types of quoting: matched single quotes,
404 dollar-single quotes,
405 matched double quotes, and backslash.
406 .Bl -tag -width indent
407 .It Single Quotes
408 Enclosing characters in single quotes preserves the literal
409 meaning of all the characters (except single quotes, making
410 it impossible to put single-quotes in a single-quoted string).
411 .It Dollar-Single Quotes
412 Enclosing characters between
413 .Li $'
414 and
415 .Li '
416 preserves the literal meaning of all characters
417 except backslashes and single quotes.
418 A backslash introduces a C-style escape sequence:
419 .Bl -tag -width xUnnnnnnnn
420 .It \ea
421 Alert (ring the terminal bell)
422 .It \eb
423 Backspace
424 .It \ec Ns Ar c
425 The control character denoted by
426 .Li ^ Ns Ar c
427 in
428 .Xr stty 1 .
429 If
430 .Ar c
431 is a backslash, it must be doubled.
432 .It \ee
433 The ESC character
434 .Tn ( ASCII
435 0x1b)
436 .It \ef
437 Formfeed
438 .It \en
439 Newline
440 .It \er
441 Carriage return
442 .It \et
443 Horizontal tab
444 .It \ev
445 Vertical tab
446 .It \e\e
447 Literal backslash
448 .It \e\&'
449 Literal single-quote
450 .It \e\&"
451 Literal double-quote
452 .It \e Ns Ar nnn
453 The byte whose octal value is
454 .Ar nnn
455 (one to three digits)
456 .It \ex Ns Ar nn
457 The byte whose hexadecimal value is
458 .Ar nn
459 (one or more digits only the last two of which are used)
460 .It \eu Ns Ar nnnn
461 The Unicode code point
462 .Ar nnnn
463 (four hexadecimal digits)
464 .It \eU Ns Ar nnnnnnnn
465 The Unicode code point
466 .Ar nnnnnnnn
467 (eight hexadecimal digits)
468 .El
469 .Pp
470 The sequences for Unicode code points are currently only useful with
471 UTF-8 locales.
472 They reject code point 0 and UTF-16 surrogates.
473 .Pp
474 If an escape sequence would produce a byte with value 0,
475 that byte and the rest of the string until the matching single-quote
476 are ignored.
477 .Pp
478 Any other string starting with a backslash is an error.
479 .It Double Quotes
480 Enclosing characters within double quotes preserves the literal
481 meaning of all characters except dollar sign
482 .Pq Ql $ ,
483 backquote
484 .Pq Ql ` ,
485 and backslash
486 .Pq Ql \e .
487 The backslash inside double quotes is historically weird.
488 It remains literal unless it precedes the following characters,
489 which it serves to quote:
490 .Pp
491 .Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
492 .It Li $ Ta Li ` Ta Li \&" Ta Li \e Ta Li \en
493 .El
494 .It Backslash
495 A backslash preserves the literal meaning of the following
496 character, with the exception of the newline character
497 .Pq Ql \en .
498 A backslash preceding a newline is treated as a line continuation.
499 .El
500 .Ss Keywords
501 Keywords or reserved words are words that have special meaning to the
502 shell and are recognized at the beginning of a line and
503 after a control operator.
504 The following are keywords:
505 .Bl -column "doneXX" "elifXX" "elseXX" "untilXX" "whileX" -offset center
506 .It Li \&! Ta { Ta } Ta Ic case Ta Ic do
507 .It Ic done Ta Ic elif Ta Ic else Ta Ic esac Ta Ic fi
508 .It Ic for Ta Ic if Ta Ic then Ta Ic until Ta Ic while
509 .El
510 .Ss Aliases
511 An alias is a name and corresponding value set using the
512 .Ic alias
513 built-in command.
514 Wherever the command word of a simple command may occur,
515 and after checking for keywords if a keyword may occur, the shell
516 checks the word to see if it matches an alias.
517 If it does, it replaces it in the input stream with its value.
518 For example, if there is an alias called
519 .Dq Li lf
520 with the value
521 .Dq Li "ls -F" ,
522 then the input
523 .Pp
524 .Dl "lf foobar"
525 .Pp
526 would become
527 .Pp
528 .Dl "ls -F foobar"
529 .Pp
530 Aliases provide a convenient way for naive users to
531 create shorthands for commands without having to learn how
532 to create functions with arguments.
533 Using aliases in scripts is discouraged
534 because the command that defines them must be executed
535 before the code that uses them is parsed.
536 This is fragile and not portable.
537 .Pp
538 An alias name may be escaped in a command line, so that it is not
539 replaced by its alias value, by using quoting characters within or
540 adjacent to the alias name.
541 This is most often done by prefixing
542 an alias name with a backslash to execute a function, built-in, or
543 normal program with the same name.
544 See the
545 .Sx Quoting
546 subsection.
547 .Ss Commands
548 The shell interprets the words it reads according to a
549 language, the specification of which is outside the scope
550 of this man page (refer to the BNF in the
551 .St -p1003.2
552 document).
553 Essentially though, a line is read and if
554 the first word of the line (or after a control operator)
555 is not a keyword, then the shell has recognized a
556 simple command.
557 Otherwise, a complex command or some
558 other special construct may have been recognized.
559 .Ss Simple Commands
560 If a simple command has been recognized, the shell performs
561 the following actions:
562 .Bl -enum
563 .It
564 Leading words of the form
565 .Dq Li name=value
566 are stripped off and assigned to the environment of
567 the simple command.
568 Redirection operators and
569 their arguments (as described below) are stripped
570 off and saved for processing.
571 .It
572 The remaining words are expanded as described in
573 the section called
574 .Sx Word Expansions ,
575 and the first remaining word is considered the command
576 name and the command is located.
577 The remaining
578 words are considered the arguments of the command.
579 If no command name resulted, then the
580 .Dq Li name=value
581 variable assignments recognized in 1) affect the
582 current shell.
583 .It
584 Redirections are performed as described in
585 the next section.
586 .El
587 .Ss Redirections
588 Redirections are used to change where a command reads its input
589 or sends its output.
590 In general, redirections open, close, or
591 duplicate an existing reference to a file.
592 The overall format
593 used for redirection is:
594 .Pp
595 .D1 Oo Ar n Oc Ar redir-op file
596 .Pp
597 The
598 .Ar redir-op
599 is one of the redirection operators mentioned
600 previously.
601 The following gives some examples of how these
602 operators can be used.
603 Note that stdin and stdout are commonly used abbreviations
604 for standard input and standard output respectively.
605 .Bl -tag -width "1234567890XX" -offset indent
606 .It Oo Ar n Oc Ns Li > Ar file
607 redirect stdout (or file descriptor
608 .Ar n )
609 to
610 .Ar file
611 .It Oo Ar n Oc Ns Li >| Ar file
612 same as above, but override the
613 .Fl C
614 option
615 .It Oo Ar n Oc Ns Li >> Ar file
616 append stdout (or file descriptor
617 .Ar n )
618 to
619 .Ar file
620 .It Oo Ar n Oc Ns Li < Ar file
621 redirect stdin (or file descriptor
622 .Ar n )
623 from
624 .Ar file
625 .It Oo Ar n Oc Ns Li <> Ar file
626 redirect stdin (or file descriptor
627 .Ar n )
628 to and from
629 .Ar file
630 .It Oo Ar n1 Oc Ns Li <& Ns Ar n2
631 duplicate stdin (or file descriptor
632 .Ar n1 )
633 from file descriptor
634 .Ar n2
635 .It Oo Ar n Oc Ns Li <&-
636 close stdin (or file descriptor
637 .Ar n )
638 .It Oo Ar n1 Oc Ns Li >& Ns Ar n2
639 duplicate stdout (or file descriptor
640 .Ar n1 )
641 to file descriptor
642 .Ar n2
643 .It Oo Ar n Oc Ns Li >&-
644 close stdout (or file descriptor
645 .Ar n )
646 .El
647 .Pp
648 The following redirection is often called a
649 .Dq here-document .
650 .Bd -unfilled -offset indent
651 .Oo Ar n Oc Ns Li << Ar delimiter
652 .Ar here-doc-text
653 .Ar ...
654 .Ar delimiter
655 .Ed
656 .Pp
657 All the text on successive lines up to the delimiter is
658 saved away and made available to the command on standard
659 input, or file descriptor
660 .Ar n
661 if it is specified.
662 If the
663 .Ar delimiter
664 as specified on the initial line is quoted, then the
665 .Ar here-doc-text
666 is treated literally, otherwise the text is subjected to
667 parameter expansion, command substitution, and arithmetic
668 expansion (as described in the section on
669 .Sx Word Expansions ) .
670 If the operator is
671 .Dq Li <<-
672 instead of
673 .Dq Li << ,
674 then leading tabs
675 in the
676 .Ar here-doc-text
677 are stripped.
678 .Ss Search and Execution
679 There are three types of commands: shell functions,
680 built-in commands, and normal programs.
681 The command is searched for (by name) in that order.
682 The three types of commands are all executed in a different way.
683 .Pp
684 When a shell function is executed, all of the shell positional
685 parameters (except
686 .Li $0 ,
687 which remains unchanged) are
688 set to the arguments of the shell function.
689 The variables which are explicitly placed in the environment of
690 the command (by placing assignments to them before the
691 function name) are made local to the function and are set
692 to the values given.
693 Then the command given in the function definition is executed.
694 The positional parameters are restored to their original values
695 when the command completes.
696 This all occurs within the current shell.
697 .Pp
698 Shell built-in commands are executed internally to the shell, without
699 spawning a new process.
700 There are two kinds of built-in commands: regular and special.
701 Assignments before special builtins persist after they finish
702 executing and assignment errors, redirection errors and certain
703 operand errors cause a script to be aborted.
704 Special builtins cannot be overridden with a function.
705 Both regular and special builtins can affect the shell in ways
706 normal programs cannot.
707 .Pp
708 Otherwise, if the command name does not match a function
709 or built-in command, the command is searched for as a normal
710 program in the file system (as described in the next section).
711 When a normal program is executed, the shell runs the program,
712 passing the arguments and the environment to the program.
713 If the program is not a normal executable file
714 (i.e., if it does not begin with the
715 .Dq "magic number"
716 whose
717 .Tn ASCII
718 representation is
719 .Dq Li #! ,
720 resulting in an
721 .Er ENOEXEC
722 return value from
723 .Xr execve 2 )
724 but appears to be a text file,
725 the shell will run a new instance of
726 .Nm
727 to interpret it.
728 .Pp
729 Note that previous versions of this document
730 and the source code itself misleadingly and sporadically
731 refer to a shell script without a magic number
732 as a
733 .Dq "shell procedure" .
734 .Ss Path Search
735 When locating a command, the shell first looks to see if
736 it has a shell function by that name.
737 Then it looks for a
738 built-in command by that name.
739 If a built-in command is not found,
740 one of two things happen:
741 .Bl -enum
742 .It
743 Command names containing a slash are simply executed without
744 performing any searches.
745 .It
746 The shell searches each entry in the
747 .Va PATH
748 variable
749 in turn for the command.
750 The value of the
751 .Va PATH
752 variable should be a series of
753 entries separated by colons.
754 Each entry consists of a
755 directory name.
756 The current directory
757 may be indicated implicitly by an empty directory name,
758 or explicitly by a single period.
759 .El
760 .Ss Command Exit Status
761 Each command has an exit status that can influence the behavior
762 of other shell commands.
763 The paradigm is that a command exits
764 with zero for normal or success, and non-zero for failure,
765 error, or a false indication.
766 The man page for each command
767 should indicate the various exit codes and what they mean.
768 Additionally, the built-in commands return exit codes, as does
769 an executed shell function.
770 .Pp
771 If a command is terminated by a signal, its exit status is 128 plus
772 the signal number.
773 Signal numbers are defined in the header file
774 .In sys/signal.h .
775 .Ss Complex Commands
776 Complex commands are combinations of simple commands
777 with control operators or keywords, together creating a larger complex
778 command.
779 More generally, a command is one of the following:
780 .Bl -item -offset indent
781 .It
782 simple command
783 .It
784 pipeline
785 .It
786 list or compound-list
787 .It
788 compound command
789 .It
790 function definition
791 .El
792 .Pp
793 Unless otherwise stated, the exit status of a command is
794 that of the last simple command executed by the command.
795 .Ss Pipelines
796 A pipeline is a sequence of one or more commands separated
797 by the control operator
798 .Ql \&| .
799 The standard output of all but
800 the last command is connected to the standard input
801 of the next command.
802 The standard output of the last
803 command is inherited from the shell, as usual.
804 .Pp
805 The format for a pipeline is:
806 .Pp
807 .D1 Oo Li \&! Oc Ar command1 Op Li \&| Ar command2 ...
808 .Pp
809 The standard output of
810 .Ar command1
811 is connected to the standard input of
812 .Ar command2 .
813 The standard input, standard output, or
814 both of a command is considered to be assigned by the
815 pipeline before any redirection specified by redirection
816 operators that are part of the command.
817 .Pp
818 Note that unlike some other shells,
819 .Nm
820 executes each process in a pipeline with more than one command
821 in a subshell environment and as a child of the
822 .Nm
823 process.
824 .Pp
825 If the pipeline is not in the background (discussed later),
826 the shell waits for all commands to complete.
827 .Pp
828 If the keyword
829 .Ic !\&
830 does not precede the pipeline, the
831 exit status is the exit status of the last command specified
832 in the pipeline.
833 Otherwise, the exit status is the logical
834 NOT of the exit status of the last command.
835 That is, if
836 the last command returns zero, the exit status is 1; if
837 the last command returns greater than zero, the exit status
838 is zero.
839 .Pp
840 Because pipeline assignment of standard input or standard
841 output or both takes place before redirection, it can be
842 modified by redirection.
843 For example:
844 .Pp
845 .Dl "command1 2>&1 | command2"
846 .Pp
847 sends both the standard output and standard error of
848 .Ar command1
849 to the standard input of
850 .Ar command2 .
851 .Pp
852 A
853 .Ql \&;
854 or newline terminator causes the preceding
855 AND-OR-list
856 (described below in the section called
857 .Sx Short-Circuit List Operators )
858 to be executed sequentially;
859 an
860 .Ql &
861 causes asynchronous execution of the preceding AND-OR-list.
862 .Ss Background Commands (&)
863 If a command is terminated by the control operator ampersand
864 .Pq Ql & ,
865 the shell executes the command in a subshell environment (see
866 .Sx Grouping Commands Together
867 below) and asynchronously;
868 the shell does not wait for the command to finish
869 before executing the next command.
870 .Pp
871 The format for running a command in background is:
872 .Pp
873 .D1 Ar command1 Li & Op Ar command2 Li & Ar ...
874 .Pp
875 If the shell is not interactive, the standard input of an
876 asynchronous command is set to
877 .Pa /dev/null .
878 .Ss Lists (Generally Speaking)
879 A list is a sequence of zero or more commands separated by
880 newlines, semicolons, or ampersands,
881 and optionally terminated by one of these three characters.
882 The commands in a
883 list are executed in the order they are written.
884 If command is followed by an ampersand, the shell starts the
885 command and immediately proceeds onto the next command;
886 otherwise it waits for the command to terminate before
887 proceeding to the next one.
888 .Ss Short-Circuit List Operators
889 .Dq Li &&
890 and
891 .Dq Li ||
892 are AND-OR list operators.
893 .Dq Li &&
894 executes the first command, and then executes the second command
895 if the exit status of the first command is zero.
896 .Dq Li ||
897 is similar, but executes the second command if the exit
898 status of the first command is nonzero.
899 .Dq Li &&
900 and
901 .Dq Li ||
902 both have the same priority.
903 .Ss Flow-Control Constructs (if, while, for, case)
904 The syntax of the
905 .Ic if
906 command is:
907 .Bd -unfilled -offset indent -compact
908 .Ic if Ar list
909 .Ic then Ar list
910 .Oo Ic elif Ar list
911 .Ic then Ar list Oc Ar ...
912 .Op Ic else Ar list
913 .Ic fi
914 .Ed
915 .Pp
916 The syntax of the
917 .Ic while
918 command is:
919 .Bd -unfilled -offset indent -compact
920 .Ic while Ar list
921 .Ic do Ar list
922 .Ic done
923 .Ed
924 .Pp
925 The two lists are executed repeatedly while the exit status of the
926 first list is zero.
927 The
928 .Ic until
929 command is similar, but has the word
930 .Ic until
931 in place of
932 .Ic while ,
933 which causes it to
934 repeat until the exit status of the first list is zero.
935 .Pp
936 The syntax of the
937 .Ic for
938 command is:
939 .Bd -unfilled -offset indent -compact
940 .Ic for Ar variable Op Ic in Ar word ...
941 .Ic do Ar list
942 .Ic done
943 .Ed
944 .Pp
945 If
946 .Ic in
947 and the following words are omitted,
948 .Ic in Li \&"$@\&"
949 is used instead.
950 The words are expanded, and then the list is executed
951 repeatedly with the variable set to each word in turn.
952 The
953 .Ic do
954 and
955 .Ic done
956 commands may be replaced with
957 .Ql {
958 and
959 .Ql } .
960 .Pp
961 The syntax of the
962 .Ic break
963 and
964 .Ic continue
965 commands is:
966 .D1 Ic break Op Ar num
967 .D1 Ic continue Op Ar num
968 .Pp
969 The
970 .Ic break
971 command terminates the
972 .Ar num
973 innermost
974 .Ic for
975 or
976 .Ic while
977 loops.
978 The
979 .Ic continue
980 command continues with the next iteration of the innermost loop.
981 These are implemented as special built-in commands.
982 .Pp
983 The syntax of the
984 .Ic case
985 command is:
986 .Bd -unfilled -offset indent -compact
987 .Ic case Ar word Ic in
988 .Ar pattern Ns Li ) Ar list Li ;;
989 .Ar ...
990 .Ic esac
991 .Ed
992 .Pp
993 The pattern can actually be one or more patterns
994 (see
995 .Sx Shell Patterns
996 described later),
997 separated by
998 .Ql \&|
999 characters.
1000 Tilde expansion, parameter expansion, command substitution,
1001 arithmetic expansion and quote removal are applied to the word.
1002 Then, each pattern is expanded in turn using tilde expansion,
1003 parameter expansion, command substitution and arithmetic expansion and
1004 the expanded form of the word is checked against it.
1005 If a match is found, the corresponding list is executed.
1006 If the selected list is terminated by the control operator
1007 .Ql ;&
1008 instead of
1009 .Ql ;; ,
1010 execution continues with the next list,
1011 continuing until a list terminated with
1012 .Ql ;;
1013 or the end of the
1014 .Ic case
1015 command.
1016 The exit code of the
1017 .Ic case
1018 command is the exit code of the last command executed in the list or
1019 zero if no patterns were matched.
1020 .Ss Grouping Commands Together
1021 Commands may be grouped by writing either
1022 .Pp
1023 .D1 Li \&( Ns Ar list Ns Li \%)
1024 .Pp
1025 or
1026 .Pp
1027 .D1 Li { Ar list Ns Li \&; }
1028 .Pp
1029 The first form executes the commands in a subshell environment.
1030 A subshell environment has its own copy of:
1031 .Bl -enum
1032 .It
1033 The current working directory as set by
1034 .Ic cd .
1035 .It
1036 The file creation mask as set by
1037 .Ic umask .
1038 .It
1039 References to open files.
1040 .It
1041 Traps as set by
1042 .Ic trap .
1043 .It
1044 Known jobs.
1045 .It
1046 Positional parameters and variables.
1047 .It
1048 Shell options.
1049 .It
1050 Shell functions.
1051 .It
1052 Shell aliases.
1053 .El
1054 .Pp
1055 These are copied from the parent shell environment,
1056 except that trapped (but not ignored) signals are reset to the default action
1057 and known jobs are cleared.
1058 Any changes do not affect the parent shell environment.
1059 .Pp
1060 A subshell environment may be implemented as a child process or differently.
1061 If job control is enabled in an interactive shell,
1062 commands grouped in parentheses can be suspended and continued as a unit.
1063 .Pp
1064 For compatibility with other shells,
1065 two open parentheses in sequence should be separated by whitespace.
1066 .Pp
1067 The second form never forks another shell,
1068 so it is slightly more efficient.
1069 Grouping commands together this way allows the user to
1070 redirect their output as though they were one program:
1071 .Bd -literal -offset indent
1072 { echo -n "hello"; echo " world"; } > greeting
1073 .Ed
1074 .Ss Functions
1075 The syntax of a function definition is
1076 .Pp
1077 .D1 Ar name Li \&( \&) Ar command
1078 .Pp
1079 A function definition is an executable statement; when
1080 executed it installs a function named
1081 .Ar name
1082 and returns an
1083 exit status of zero.
1084 The
1085 .Ar command
1086 is normally a list
1087 enclosed between
1088 .Ql {
1089 and
1090 .Ql } .
1091 .Pp
1092 Variables may be declared to be local to a function by
1093 using the
1094 .Ic local
1095 command.
1096 This should appear as the first statement of a function,
1097 and the syntax is:
1098 .Pp
1099 .D1 Ic local Oo Ar variable ... Oc Op Fl
1100 .Pp
1101 The
1102 .Ic local
1103 command is implemented as a built-in command.
1104 .Pp
1105 When a variable is made local, it inherits the initial
1106 value and exported and readonly flags from the variable
1107 with the same name in the surrounding scope, if there is
1108 one.
1109 Otherwise, the variable is initially unset.
1110 The shell
1111 uses dynamic scoping, so that if the variable
1112 .Va x
1113 is made local to function
1114 .Em f ,
1115 which then calls function
1116 .Em g ,
1117 references to the variable
1118 .Va x
1119 made inside
1120 .Em g
1121 will refer to the variable
1122 .Va x
1123 declared inside
1124 .Em f ,
1125 not to the global variable named
1126 .Va x .
1127 .Pp
1128 The only special parameter that can be made local is
1129 .Ql - .
1130 Making
1131 .Ql -
1132 local causes any shell options that are
1133 changed via the
1134 .Ic set
1135 command inside the function to be
1136 restored to their original values when the function
1137 returns.
1138 .Pp
1139 The syntax of the
1140 .Ic return
1141 command is
1142 .Pp
1143 .D1 Ic return Op Ar exitstatus
1144 .Pp
1145 It terminates the current executional scope, returning from the previous
1146 nested function, sourced script, or shell instance, in that order.
1147 The
1148 .Ic return
1149 command is implemented as a special built-in command.
1150 .Ss Variables and Parameters
1151 The shell maintains a set of parameters.
1152 A parameter
1153 denoted by a name is called a variable.
1154 When starting up,
1155 the shell turns all the environment variables into shell
1156 variables.
1157 New variables can be set using the form
1158 .Pp
1159 .D1 Ar name Ns = Ns Ar value
1160 .Pp
1161 Variables set by the user must have a name consisting solely
1162 of alphabetics, numerics, and underscores.
1163 The first letter of a variable name must not be numeric.
1164 A parameter can also be denoted by a number
1165 or a special character as explained below.
1166 .Pp
1167 Assignments are expanded differently from other words:
1168 tilde expansion is also performed after the equals sign and after any colon
1169 and usernames are also terminated by colons,
1170 and field splitting and pathname expansion are not performed.
1171 .Pp
1172 This special expansion applies not only to assignments that form a simple
1173 command by themselves or precede a command word,
1174 but also to words passed to the
1175 .Ic export ,
1176 .Ic local
1177 or
1178 .Ic readonly
1179 built-in commands that have this form.
1180 For this, the builtin's name must be literal
1181 (not the result of an expansion)
1182 and may optionally be preceded by one or more literal instances of
1183 .Ic command
1184 without options.
1185 .Ss Positional Parameters
1186 A positional parameter is a parameter denoted by a number greater than zero.
1187 The shell sets these initially to the values of its command line
1188 arguments that follow the name of the shell script.
1189 The
1190 .Ic set
1191 built-in command can also be used to set or reset them.
1192 .Ss Special Parameters
1193 Special parameters are parameters denoted by a single special character
1194 or the digit zero.
1195 They are shown in the following list, exactly as they would appear in input
1196 typed by the user or in the source of a shell script.
1197 .Bl -hang
1198 .It Li $*
1199 Expands to the positional parameters, starting from one.
1200 When
1201 the expansion occurs within a double-quoted string
1202 it expands to a single field with the value of each parameter
1203 separated by the first character of the
1204 .Va IFS
1205 variable,
1206 or by a space if
1207 .Va IFS
1208 is unset.
1209 .It Li $@
1210 Expands to the positional parameters, starting from one.
1211 When
1212 the expansion occurs within double-quotes, each positional
1213 parameter expands as a separate argument.
1214 If there are no positional parameters, the
1215 expansion of
1216 .Li @
1217 generates zero arguments, even when
1218 .Li @
1219 is double-quoted.
1220 What this basically means, for example, is
1221 if
1222 .Li $1
1223 is
1224 .Dq Li abc
1225 and
1226 .Li $2
1227 is
1228 .Dq Li "def ghi" ,
1229 then
1230 .Li \&"$@\&"
1231 expands to
1232 the two arguments:
1233 .Bd -literal -offset indent
1234 "abc"   "def ghi"
1235 .Ed
1236 .It Li $#
1237 Expands to the number of positional parameters.
1238 .It Li $?
1239 Expands to the exit status of the most recent pipeline.
1240 .It Li $-
1241 (hyphen) Expands to the current option flags (the single-letter
1242 option names concatenated into a string) as specified on
1243 invocation, by the
1244 .Ic set
1245 built-in command, or implicitly
1246 by the shell.
1247 .It Li $$
1248 Expands to the process ID of the invoked shell.
1249 A subshell
1250 retains the same value of
1251 .Va $
1252 as its parent.
1253 .It Li $!
1254 Expands to the process ID of the most recent background
1255 command executed from the current shell.
1256 For a
1257 pipeline, the process ID is that of the last command in the
1258 pipeline.
1259 If this parameter is referenced, the shell will remember
1260 the process ID and its exit status until the
1261 .Ic wait
1262 built-in command reports completion of the process.
1263 .It Li $0
1264 (zero) Expands to the name of the shell script if passed on the command line,
1265 the
1266 .Ar name
1267 operand if given (with
1268 .Fl c )
1269 or otherwise argument 0 passed to the shell.
1270 .El
1271 .Ss Special Variables
1272 The following variables are set by the shell or
1273 have special meaning to it:
1274 .Bl -tag -width ".Va HISTSIZE"
1275 .It Va CDPATH
1276 The search path used with the
1277 .Ic cd
1278 built-in.
1279 .It Va EDITOR
1280 The fallback editor used with the
1281 .Ic fc
1282 built-in.
1283 If not set, the default editor is
1284 .Xr ed 1 .
1285 .It Va FCEDIT
1286 The default editor used with the
1287 .Ic fc
1288 built-in.
1289 .It Va HISTSIZE
1290 The number of previous commands that are accessible.
1291 .It Va HOME
1292 The user's home directory,
1293 used in tilde expansion and as a default directory for the
1294 .Ic cd
1295 built-in.
1296 .It Va IFS
1297 Input Field Separators.
1298 The default value is
1299 .Aq space ,
1300 .Aq tab ,
1301 and
1302 .Aq newline
1303 in that order.
1304 This default also applies if
1305 .Va IFS
1306 is unset, but not if it is set to the empty string.
1307 See the
1308 .Sx White Space Splitting
1309 section for more details.
1310 .It Va LINENO
1311 The current line number in the script or function.
1312 .It Va MAIL
1313 The name of a mail file, that will be checked for the arrival of new
1314 mail.
1315 Overridden by
1316 .Va MAILPATH .
1317 .It Va MAILPATH
1318 A colon
1319 .Pq Ql \&:
1320 separated list of file names, for the shell to check for incoming
1321 mail.
1322 This variable overrides the
1323 .Va MAIL
1324 setting.
1325 There is a maximum of 10 mailboxes that can be monitored at once.
1326 .It Va PATH
1327 The default search path for executables.
1328 See the
1329 .Sx Path Search
1330 section for details.
1331 .It Va PPID
1332 The parent process ID of the invoked shell.
1333 This is set at startup
1334 unless this variable is in the environment.
1335 A later change of parent process ID is not reflected.
1336 A subshell retains the same value of
1337 .Va PPID .
1338 .It Va PS1
1339 The primary prompt string, which defaults to
1340 .Dq Li "$ " ,
1341 unless you are the superuser, in which case it defaults to
1342 .Dq Li "# " .
1343 .It Va PS2
1344 The secondary prompt string, which defaults to
1345 .Dq Li "> " .
1346 .It Va PS4
1347 The prefix for the trace output (if
1348 .Fl x
1349 is active).
1350 The default is
1351 .Dq Li "+ " .
1352 .El
1353 .Ss Word Expansions
1354 This clause describes the various expansions that are
1355 performed on words.
1356 Not all expansions are performed on
1357 every word, as explained later.
1358 .Pp
1359 Tilde expansions, parameter expansions, command substitutions,
1360 arithmetic expansions, and quote removals that occur within
1361 a single word expand to a single field.
1362 It is only field
1363 splitting or pathname expansion that can create multiple
1364 fields from a single word.
1365 The single exception to this rule is
1366 the expansion of the special parameter
1367 .Va @
1368 within double-quotes,
1369 as was described above.
1370 .Pp
1371 The order of word expansion is:
1372 .Bl -enum
1373 .It
1374 Tilde Expansion, Parameter Expansion, Command Substitution,
1375 Arithmetic Expansion (these all occur at the same time).
1376 .It
1377 Field Splitting is performed on fields generated by step (1)
1378 unless the
1379 .Va IFS
1380 variable is null.
1381 .It
1382 Pathname Expansion (unless the
1383 .Fl f
1384 option is in effect).
1385 .It
1386 Quote Removal.
1387 .El
1388 .Pp
1389 The
1390 .Ql $
1391 character is used to introduce parameter expansion, command
1392 substitution, or arithmetic expansion.
1393 .Ss Tilde Expansion (substituting a user's home directory)
1394 A word beginning with an unquoted tilde character
1395 .Pq Ql ~
1396 is
1397 subjected to tilde expansion.
1398 All the characters up to a slash
1399 .Pq Ql /
1400 or the end of the word are treated as a username
1401 and are replaced with the user's home directory.
1402 If the
1403 username is missing (as in
1404 .Pa ~/foobar ) ,
1405 the tilde is replaced with the value of the
1406 .Va HOME
1407 variable (the current user's home directory).
1408 .Ss Parameter Expansion
1409 The format for parameter expansion is as follows:
1410 .Pp
1411 .D1 Li ${ Ns Ar expression Ns Li }
1412 .Pp
1413 where
1414 .Ar expression
1415 consists of all characters until the matching
1416 .Ql } .
1417 Any
1418 .Ql }
1419 escaped by a backslash or within a single-quoted or double-quoted
1420 string, and characters in
1421 embedded arithmetic expansions, command substitutions, and variable
1422 expansions, are not examined in determining the matching
1423 .Ql } .
1424 If the variants with
1425 .Ql + ,
1426 .Ql - ,
1427 .Ql =
1428 or
1429 .Ql ?\&
1430 occur within a double-quoted string,
1431 as an extension there may be unquoted parts
1432 (via double-quotes inside the expansion);
1433 .Ql }
1434 within such parts are also not examined in determining the matching
1435 .Ql } .
1436 .Pp
1437 The simplest form for parameter expansion is:
1438 .Pp
1439 .D1 Li ${ Ns Ar parameter Ns Li }
1440 .Pp
1441 The value, if any, of
1442 .Ar parameter
1443 is substituted.
1444 .Pp
1445 The parameter name or symbol can be enclosed in braces, which are
1446 optional except for positional parameters with more than one digit or
1447 when parameter is followed by a character that could be interpreted as
1448 part of the name.
1449 If a parameter expansion occurs inside double-quotes:
1450 .Bl -enum
1451 .It
1452 Field splitting is not performed on the results of the
1453 expansion, with the exception of the special parameter
1454 .Va @ .
1455 .It
1456 Pathname expansion is not performed on the results of the
1457 expansion.
1458 .El
1459 .Pp
1460 In addition, a parameter expansion can be modified by using one of the
1461 following formats.
1462 .Bl -tag -width indent
1463 .It Li ${ Ns Ar parameter Ns Li :- Ns Ar word Ns Li }
1464 Use Default Values.
1465 If
1466 .Ar parameter
1467 is unset or null, the expansion of
1468 .Ar word
1469 is substituted; otherwise, the value of
1470 .Ar parameter
1471 is substituted.
1472 .It Li ${ Ns Ar parameter Ns Li := Ns Ar word Ns Li }
1473 Assign Default Values.
1474 If
1475 .Ar parameter
1476 is unset or null, the expansion of
1477 .Ar word
1478 is assigned to
1479 .Ar parameter .
1480 In all cases, the
1481 final value of
1482 .Ar parameter
1483 is substituted.
1484 Quoting inside
1485 .Ar word
1486 does not prevent field splitting or pathname expansion.
1487 Only variables, not positional
1488 parameters or special parameters, can be
1489 assigned in this way.
1490 .It Li ${ Ns Ar parameter Ns Li :? Ns Oo Ar word Oc Ns Li }
1491 Indicate Error if Null or Unset.
1492 If
1493 .Ar parameter
1494 is unset or null, the expansion of
1495 .Ar word
1496 (or a message indicating it is unset if
1497 .Ar word
1498 is omitted) is written to standard
1499 error and the shell exits with a nonzero
1500 exit status.
1501 Otherwise, the value of
1502 .Ar parameter
1503 is substituted.
1504 An
1505 interactive shell need not exit.
1506 .It Li ${ Ns Ar parameter Ns Li :+ Ns Ar word Ns Li }
1507 Use Alternate Value.
1508 If
1509 .Ar parameter
1510 is unset or null, null is substituted;
1511 otherwise, the expansion of
1512 .Ar word
1513 is substituted.
1514 .El
1515 .Pp
1516 In the parameter expansions shown previously, use of the colon in the
1517 format results in a test for a parameter that is unset or null; omission
1518 of the colon results in a test for a parameter that is only unset.
1519 .Pp
1520 The
1521 .Ar word
1522 inherits the type of quoting
1523 (unquoted, double-quoted or here-document)
1524 from the surroundings,
1525 with the exception that a backslash that quotes a closing brace is removed
1526 during quote removal.
1527 .Bl -tag -width indent
1528 .It Li ${# Ns Ar parameter Ns Li }
1529 String Length.
1530 The length in characters of
1531 the value of
1532 .Ar parameter .
1533 .El
1534 .Pp
1535 The following four varieties of parameter expansion provide for substring
1536 processing.
1537 In each case, pattern matching notation
1538 (see
1539 .Sx Shell Patterns ) ,
1540 rather than regular expression notation,
1541 is used to evaluate the patterns.
1542 If parameter is one of the special parameters
1543 .Va *
1544 or
1545 .Va @ ,
1546 the result of the expansion is unspecified.
1547 Enclosing the full parameter expansion string in double-quotes does not
1548 cause the following four varieties of pattern characters to be quoted,
1549 whereas quoting characters within the braces has this effect.
1550 .Bl -tag -width indent
1551 .It Li ${ Ns Ar parameter Ns Li % Ns Ar word Ns Li }
1552 Remove Smallest Suffix Pattern.
1553 The
1554 .Ar word
1555 is expanded to produce a pattern.
1556 The
1557 parameter expansion then results in
1558 .Ar parameter ,
1559 with the smallest portion of the
1560 suffix matched by the pattern deleted.
1561 .It Li ${ Ns Ar parameter Ns Li %% Ns Ar word Ns Li }
1562 Remove Largest Suffix Pattern.
1563 The
1564 .Ar word
1565 is expanded to produce a pattern.
1566 The
1567 parameter expansion then results in
1568 .Ar parameter ,
1569 with the largest portion of the
1570 suffix matched by the pattern deleted.
1571 .It Li ${ Ns Ar parameter Ns Li # Ns Ar word Ns Li }
1572 Remove Smallest Prefix Pattern.
1573 The
1574 .Ar word
1575 is expanded to produce a pattern.
1576 The
1577 parameter expansion then results in
1578 .Ar parameter ,
1579 with the smallest portion of the
1580 prefix matched by the pattern deleted.
1581 .It Li ${ Ns Ar parameter Ns Li ## Ns Ar word Ns Li }
1582 Remove Largest Prefix Pattern.
1583 The
1584 .Ar word
1585 is expanded to produce a pattern.
1586 The
1587 parameter expansion then results in
1588 .Ar parameter ,
1589 with the largest portion of the
1590 prefix matched by the pattern deleted.
1591 .El
1592 .Ss Command Substitution
1593 Command substitution allows the output of a command to be substituted in
1594 place of the command name itself.
1595 Command substitution occurs when
1596 the command is enclosed as follows:
1597 .Pp
1598 .D1 Li $( Ns Ar command Ns Li )\&
1599 .Pp
1600 or the backquoted version:
1601 .Pp
1602 .D1 Li ` Ns Ar command Ns Li `
1603 .Pp
1604 The shell expands the command substitution by executing command
1605 and replacing the command substitution
1606 with the standard output of the command,
1607 removing sequences of one or more newlines at the end of the substitution.
1608 Embedded newlines before the end of the output are not removed;
1609 however, during field splitting, they may be translated into spaces
1610 depending on the value of
1611 .Va IFS
1612 and the quoting that is in effect.
1613 The command is executed in a subshell environment,
1614 except that the built-in commands
1615 .Ic jobid ,
1616 .Ic jobs ,
1617 and
1618 .Ic trap
1619 return information about the parent shell environment
1620 and
1621 .Ic times
1622 returns information about the same process
1623 if they are the only command in a command substitution.
1624 .Pp
1625 If a command substitution of the
1626 .Li $(
1627 form begins with a subshell,
1628 the
1629 .Li $(
1630 and
1631 .Li (\&
1632 must be separated by whitespace
1633 to avoid ambiguity with arithmetic expansion.
1634 .Ss Arithmetic Expansion
1635 Arithmetic expansion provides a mechanism for evaluating an arithmetic
1636 expression and substituting its value.
1637 The format for arithmetic expansion is as follows:
1638 .Pp
1639 .D1 Li $(( Ns Ar expression Ns Li ))
1640 .Pp
1641 The
1642 .Ar expression
1643 is treated as if it were in double-quotes, except
1644 that a double-quote inside the expression is not treated specially.
1645 The
1646 shell expands all tokens in the
1647 .Ar expression
1648 for parameter expansion,
1649 command substitution,
1650 arithmetic expansion
1651 and quote removal.
1652 .Pp
1653 The allowed expressions are a subset of C expressions,
1654 summarized below.
1655 .Bl -tag -width "Variables" -offset indent
1656 .It Values
1657 All values are of type
1658 .Ft intmax_t .
1659 .It Constants
1660 Decimal, octal (starting with
1661 .Li 0 )
1662 and hexadecimal (starting with
1663 .Li 0x )
1664 integer constants.
1665 .It Variables
1666 Shell variables can be read and written
1667 and contain integer constants.
1668 .It Unary operators
1669 .Li "! ~ + -"
1670 .It Binary operators
1671 .Li "* / % + - << >> < <= > >= == != & ^ | && ||"
1672 .It Assignment operators
1673 .Li "= += -= *= /= %= <<= >>= &= ^= |="
1674 .It Conditional operator
1675 .Li "? :"
1676 .El
1677 .Pp
1678 The result of the expression is substituted in decimal.
1679 .Ss White Space Splitting (Field Splitting)
1680 In certain contexts,
1681 after parameter expansion, command substitution, and
1682 arithmetic expansion the shell scans the results of
1683 expansions and substitutions that did not occur in double-quotes for
1684 field splitting and multiple fields can result.
1685 .Pp
1686 Characters in
1687 .Va IFS
1688 that are whitespace
1689 .Po
1690 .Aq space ,
1691 .Aq tab ,
1692 and
1693 .Aq newline
1694 .Pc
1695 are treated differently from other characters in
1696 .Va IFS .
1697 .Pp
1698 Whitespace in
1699 .Va IFS
1700 at the beginning or end of a word is discarded.
1701 .Pp
1702 Subsequently, a field is delimited by either
1703 .Bl -enum
1704 .It
1705 a non-whitespace character in
1706 .Va IFS
1707 with any whitespace in
1708 .Va IFS
1709 surrounding it, or
1710 .It
1711 one or more whitespace characters in
1712 .Va IFS .
1713 .El
1714 .Pp
1715 If a word ends with a non-whitespace character in
1716 .Va IFS ,
1717 there is no empty field after this character.
1718 .Pp
1719 If no field is delimited, the word is discarded.
1720 In particular, if a word consists solely of an unquoted substitution
1721 and the result of the substitution is null,
1722 it is removed by field splitting even if
1723 .Va IFS
1724 is null.
1725 .Ss Pathname Expansion (File Name Generation)
1726 Unless the
1727 .Fl f
1728 option is set,
1729 file name generation is performed
1730 after word splitting is complete.
1731 Each word is
1732 viewed as a series of patterns, separated by slashes.
1733 The
1734 process of expansion replaces the word with the names of
1735 all existing files whose names can be formed by replacing
1736 each pattern with a string that matches the specified pattern.
1737 There are two restrictions on this: first, a pattern cannot match
1738 a string containing a slash, and second,
1739 a pattern cannot match a string starting with a period
1740 unless the first character of the pattern is a period.
1741 The next section describes the patterns used for
1742 Pathname Expansion,
1743 the four varieties of parameter expansion for substring processing and the
1744 .Ic case
1745 command.
1746 .Ss Shell Patterns
1747 A pattern consists of normal characters, which match themselves,
1748 and meta-characters.
1749 The meta-characters are
1750 .Ql * ,
1751 .Ql \&? ,
1752 and
1753 .Ql \&[ .
1754 These characters lose their special meanings if they are quoted.
1755 When command or variable substitution is performed and the dollar sign
1756 or back quotes are not double-quoted, the value of the
1757 variable or the output of the command is scanned for these
1758 characters and they are turned into meta-characters.
1759 .Pp
1760 An asterisk
1761 .Pq Ql *
1762 matches any string of characters.
1763 A question mark
1764 .Pq Ql \&?
1765 matches any single character.
1766 A left bracket
1767 .Pq Ql \&[
1768 introduces a character class.
1769 The end of the character class is indicated by a
1770 .Ql \&] ;
1771 if the
1772 .Ql \&]
1773 is missing then the
1774 .Ql \&[
1775 matches a
1776 .Ql \&[
1777 rather than introducing a character class.
1778 A character class matches any of the characters between the square brackets.
1779 A locale-dependent range of characters may be specified using a minus sign.
1780 A named class of characters (see
1781 .Xr wctype 3 )
1782 may be specified by surrounding the name with
1783 .Ql \&[:
1784 and
1785 .Ql :\&] .
1786 For example,
1787 .Ql \&[\&[:alpha:\&]\&]
1788 is a shell pattern that matches a single letter.
1789 The character class may be complemented by making an exclamation point
1790 .Pq Ql !\&
1791 the first character of the character class.
1792 A caret
1793 .Pq Ql ^
1794 has the same effect but is non-standard.
1795 .Pp
1796 To include a
1797 .Ql \&]
1798 in a character class, make it the first character listed
1799 (after the
1800 .Ql \&!
1801 or
1802 .Ql ^ ,
1803 if any).
1804 To include a
1805 .Ql - ,
1806 make it the first or last character listed.
1807 .Ss Built-in Commands
1808 This section lists the built-in commands.
1809 .Bl -tag -width indent
1810 .It Ic \&:
1811 A null command that returns a 0 (true) exit value.
1812 .It Ic \&. Ar file
1813 The commands in the specified file are read and executed by the shell.
1814 The
1815 .Ic return
1816 command may be used to return to the
1817 .Ic \&.
1818 command's caller.
1819 If
1820 .Ar file
1821 contains any
1822 .Ql /
1823 characters, it is used as is.
1824 Otherwise, the shell searches the
1825 .Va PATH
1826 for the file.
1827 If it is not found in the
1828 .Va PATH ,
1829 it is sought in the current working directory.
1830 .It Ic \&[
1831 A built-in equivalent of
1832 .Xr test 1 .
1833 .It Ic alias Oo Ar name Ns Oo = Ns Ar string Oc ... Oc
1834 If
1835 .Ar name Ns = Ns Ar string
1836 is specified, the shell defines the alias
1837 .Ar name
1838 with value
1839 .Ar string .
1840 If just
1841 .Ar name
1842 is specified, the value of the alias
1843 .Ar name
1844 is printed.
1845 With no arguments, the
1846 .Ic alias
1847 built-in command prints the names and values of all defined aliases
1848 (see
1849 .Ic unalias ) .
1850 Alias values are written with appropriate quoting so that they are
1851 suitable for re-input to the shell.
1852 Also see the
1853 .Sx Aliases
1854 subsection.
1855 .It Ic bg Op Ar job ...
1856 Continue the specified jobs
1857 (or the current job if no jobs are given)
1858 in the background.
1859 .It Ic bind Oo Fl aeklrsv Oc Oo Ar key Oo Ar command Oc Oc
1860 List or alter key bindings for the line editor.
1861 This command is documented in
1862 .Xr editrc 5 .
1863 .It Ic break Op Ar num
1864 See the
1865 .Sx Flow-Control Constructs
1866 subsection.
1867 .It Ic builtin Ar cmd Op Ar arg ...
1868 Execute the specified built-in command,
1869 .Ar cmd .
1870 This is useful when the user wishes to override a shell function
1871 with the same name as a built-in command.
1872 .It Ic cd Oo Fl L | P Oc Oo Fl e Oc Op Ar directory
1873 Switch to the specified
1874 .Ar directory ,
1875 or to the directory specified in the
1876 .Va HOME
1877 environment variable if no
1878 .Ar directory
1879 is specified.
1880 If
1881 .Ar directory
1882 does not begin with
1883 .Pa / , \&. ,
1884 or
1885 .Pa .. ,
1886 then the directories listed in the
1887 .Va CDPATH
1888 variable will be
1889 searched for the specified
1890 .Ar directory .
1891 If
1892 .Va CDPATH
1893 is unset, the current directory is searched.
1894 The format of
1895 .Va CDPATH
1896 is the same as that of
1897 .Va PATH .
1898 In an interactive shell,
1899 the
1900 .Ic cd
1901 command will print out the name of the directory
1902 that it actually switched to
1903 if this is different from the name that the user gave.
1904 These may be different either because the
1905 .Va CDPATH
1906 mechanism was used or because a symbolic link was crossed.
1907 .Pp
1908 If the
1909 .Fl P
1910 option is specified,
1911 .Pa ..
1912 is handled physically and symbolic links are resolved before
1913 .Pa ..
1914 components are processed.
1915 If the
1916 .Fl L
1917 option is specified,
1918 .Pa ..
1919 is handled logically.
1920 This is the default.
1921 .Pp
1922 The
1923 .Fl e
1924 option causes
1925 .Ic cd
1926 to return exit status 1 if the full pathname of the new directory
1927 cannot be determined reliably or at all.
1928 Normally this is not considered an error,
1929 although a warning is printed.
1930 .It Ic chdir
1931 A synonym for the
1932 .Ic cd
1933 built-in command.
1934 .It Ic command Oo Fl p Oc Op Ar utility Op Ar argument ...
1935 .It Ic command Oo Fl p Oc Fl v Ar utility
1936 .It Ic command Oo Fl p Oc Fl V Ar utility
1937 The first form of invocation executes the specified
1938 .Ar utility ,
1939 ignoring shell functions in the search.
1940 If
1941 .Ar utility
1942 is a special builtin,
1943 it is executed as if it were a regular builtin.
1944 .Pp
1945 If the
1946 .Fl p
1947 option is specified, the command search is performed using a
1948 default value of
1949 .Va PATH
1950 that is guaranteed to find all of the standard utilities.
1951 .Pp
1952 If the
1953 .Fl v
1954 option is specified,
1955 .Ar utility
1956 is not executed but a description of its interpretation by the shell is
1957 printed.
1958 For ordinary commands the output is the path name; for shell built-in
1959 commands, shell functions and keywords only the name is written.
1960 Aliases are printed as
1961 .Dq Ic alias Ar name Ns = Ns Ar value .
1962 .Pp
1963 The
1964 .Fl V
1965 option is identical to
1966 .Fl v
1967 except for the output.
1968 It prints
1969 .Dq Ar utility Ic is Ar description
1970 where
1971 .Ar description
1972 is either
1973 the path name to
1974 .Ar utility ,
1975 a special shell builtin,
1976 a shell builtin,
1977 a shell function,
1978 a shell keyword
1979 or
1980 an alias for
1981 .Ar value .
1982 .It Ic continue Op Ar num
1983 See the
1984 .Sx Flow-Control Constructs
1985 subsection.
1986 .It Ic echo Oo Fl e | n Oc Op Ar string ...
1987 Print a space-separated list of the arguments to the standard output
1988 and append a newline character.
1989 .Bl -tag -width indent
1990 .It Fl n
1991 Suppress the output of the trailing newline.
1992 .It Fl e
1993 Process C-style backslash escape sequences.
1994 The
1995 .Ic echo
1996 command understands the following character escapes:
1997 .Bl -tag -width indent
1998 .It \ea
1999 Alert (ring the terminal bell)
2000 .It \eb
2001 Backspace
2002 .It \ec
2003 Suppress the trailing newline (this has the side-effect of truncating the
2004 line if it is not the last character)
2005 .It \ee
2006 The ESC character
2007 .Tn ( ASCII
2008 0x1b)
2009 .It \ef
2010 Formfeed
2011 .It \en
2012 Newline
2013 .It \er
2014 Carriage return
2015 .It \et
2016 Horizontal tab
2017 .It \ev
2018 Vertical tab
2019 .It \e\e
2020 Literal backslash
2021 .It \e0nnn
2022 (Zero) The character whose octal value is
2023 .Ar nnn
2024 .El
2025 .Pp
2026 If
2027 .Ar string
2028 is not enclosed in quotes then the backslash itself must be escaped
2029 with a backslash to protect it from the shell.
2030 For example
2031 .Bd -literal -offset indent
2032 $ echo -e "a\evb"
2033 a
2034  b
2035 $ echo -e a\e\evb
2036 a
2037  b
2038 $ echo -e "a\e\eb"
2039 a\eb
2040 $ echo -e a\e\e\e\eb
2041 a\eb
2042 .Ed
2043 .El
2044 .Pp
2045 Only one of the
2046 .Fl e
2047 and
2048 .Fl n
2049 options may be specified.
2050 .It Ic eval Ar string ...
2051 Concatenate all the arguments with spaces.
2052 Then re-parse and execute the command.
2053 .It Ic exec Op Ar command Op arg ...
2054 Unless
2055 .Ar command
2056 is omitted,
2057 the shell process is replaced with the specified program
2058 (which must be a real program, not a shell built-in command or function).
2059 Any redirections on the
2060 .Ic exec
2061 command are marked as permanent,
2062 so that they are not undone when the
2063 .Ic exec
2064 command finishes.
2065 .It Ic exit Op Ar exitstatus
2066 Terminate the shell process.
2067 If
2068 .Ar exitstatus
2069 is given
2070 it is used as the exit status of the shell.
2071 Otherwise, if the shell is executing an
2072 .Cm EXIT
2073 trap, the exit status of the last command before the trap is used;
2074 if the shell is executing a trap for a signal,
2075 the shell exits by resending the signal to itself.
2076 Otherwise, the exit status of the preceding command is used.
2077 The exit status should be an integer between 0 and 255.
2078 .It Ic export Ar name ...
2079 .It Ic export Op Fl p
2080 The specified names are exported so that they will
2081 appear in the environment of subsequent commands.
2082 The only way to un-export a variable is to
2083 .Ic unset
2084 it.
2085 The shell allows the value of a variable to be set
2086 at the same time as it is exported by writing
2087 .Pp
2088 .D1 Ic export Ar name Ns = Ns Ar value
2089 .Pp
2090 With no arguments the
2091 .Ic export
2092 command lists the names
2093 of all exported variables.
2094 If the
2095 .Fl p
2096 option is specified, the exported variables are printed as
2097 .Dq Ic export Ar name Ns = Ns Ar value
2098 lines, suitable for re-input to the shell.
2099 .It Ic false
2100 A null command that returns a non-zero (false) exit value.
2101 .It Ic fc Oo Fl e Ar editor Oc Op Ar first Op Ar last
2102 .It Ic fc Fl l Oo Fl nr Oc Op Ar first Op Ar last
2103 .It Ic fc Fl s Oo Ar old Ns = Ns Ar new Oc Op Ar first
2104 The
2105 .Ic fc
2106 built-in command lists, or edits and re-executes,
2107 commands previously entered to an interactive shell.
2108 .Bl -tag -width indent
2109 .It Fl e Ar editor
2110 Use the editor named by
2111 .Ar editor
2112 to edit the commands.
2113 The
2114 .Ar editor
2115 string is a command name,
2116 subject to search via the
2117 .Va PATH
2118 variable.
2119 The value in the
2120 .Va FCEDIT
2121 variable is used as a default when
2122 .Fl e
2123 is not specified.
2124 If
2125 .Va FCEDIT
2126 is null or unset, the value of the
2127 .Va EDITOR
2128 variable is used.
2129 If
2130 .Va EDITOR
2131 is null or unset,
2132 .Xr ed 1
2133 is used as the editor.
2134 .It Fl l No (ell)
2135 List the commands rather than invoking
2136 an editor on them.
2137 The commands are written in the
2138 sequence indicated by the
2139 .Ar first
2140 and
2141 .Ar last
2142 operands, as affected by
2143 .Fl r ,
2144 with each command preceded by the command number.
2145 .It Fl n
2146 Suppress command numbers when listing with
2147 .Fl l .
2148 .It Fl r
2149 Reverse the order of the commands listed
2150 (with
2151 .Fl l )
2152 or edited
2153 (with neither
2154 .Fl l
2155 nor
2156 .Fl s ) .
2157 .It Fl s
2158 Re-execute the command without invoking an editor.
2159 .It Ar first
2160 .It Ar last
2161 Select the commands to list or edit.
2162 The number of previous commands that can be accessed
2163 are determined by the value of the
2164 .Va HISTSIZE
2165 variable.
2166 The value of
2167 .Ar first
2168 or
2169 .Ar last
2170 or both are one of the following:
2171 .Bl -tag -width indent
2172 .It Oo Cm + Oc Ns Ar num
2173 A positive number representing a command number;
2174 command numbers can be displayed with the
2175 .Fl l
2176 option.
2177 .It Fl Ar num
2178 A negative decimal number representing the
2179 command that was executed
2180 .Ar num
2181 of
2182 commands previously.
2183 For example, \-1 is the immediately previous command.
2184 .It Ar string
2185 A string indicating the most recently entered command
2186 that begins with that string.
2187 If the
2188 .Ar old Ns = Ns Ar new
2189 operand is not also specified with
2190 .Fl s ,
2191 the string form of the first operand cannot contain an embedded equal sign.
2192 .El
2193 .El
2194 .Pp
2195 The following variables affect the execution of
2196 .Ic fc :
2197 .Bl -tag -width ".Va HISTSIZE"
2198 .It Va FCEDIT
2199 Name of the editor to use for history editing.
2200 .It Va HISTSIZE
2201 The number of previous commands that are accessible.
2202 .El
2203 .It Ic fg Op Ar job
2204 Move the specified
2205 .Ar job
2206 or the current job to the foreground.
2207 .It Ic getopts Ar optstring var
2208 The
2209 .Tn POSIX
2210 .Ic getopts
2211 command.
2212 The
2213 .Ic getopts
2214 command deprecates the older
2215 .Xr getopt 1
2216 command.
2217 The first argument should be a series of letters, each possibly
2218 followed by a colon which indicates that the option takes an argument.
2219 The specified variable is set to the parsed option.
2220 The index of
2221 the next argument is placed into the shell variable
2222 .Va OPTIND .
2223 If an option takes an argument, it is placed into the shell variable
2224 .Va OPTARG .
2225 If an invalid option is encountered,
2226 .Ar var
2227 is set to
2228 .Ql \&? .
2229 It returns a false value (1) when it encounters the end of the options.
2230 .It Ic hash Oo Fl rv Oc Op Ar command ...
2231 The shell maintains a hash table which remembers the locations of commands.
2232 With no arguments whatsoever, the
2233 .Ic hash
2234 command prints out the contents of this table.
2235 .Pp
2236 With arguments, the
2237 .Ic hash
2238 command removes each specified
2239 .Ar command
2240 from the hash table (unless they are functions) and then locates it.
2241 With the
2242 .Fl v
2243 option,
2244 .Ic hash
2245 prints the locations of the commands as it finds them.
2246 The
2247 .Fl r
2248 option causes the
2249 .Ic hash
2250 command to delete all the entries in the hash table except for functions.
2251 .It Ic jobid Op Ar job
2252 Print the process IDs of the processes in the specified
2253 .Ar job .
2254 If the
2255 .Ar job
2256 argument is omitted, use the current job.
2257 .It Ic jobs Oo Fl lps Oc Op Ar job ...
2258 Print information about the specified jobs, or all jobs if no
2259 .Ar job
2260 argument is given.
2261 The information printed includes job ID, status and command name.
2262 .Pp
2263 If the
2264 .Fl l
2265 option is specified, the PID of each job is also printed.
2266 If the
2267 .Fl p
2268 option is specified, only the process IDs for the process group leaders
2269 are printed, one per line.
2270 If the
2271 .Fl s
2272 option is specified, only the PIDs of the job commands are printed, one per
2273 line.
2274 .It Ic kill
2275 A built-in equivalent of
2276 .Xr kill 1
2277 that additionally supports sending signals to jobs.
2278 .It Ic local Oo Ar variable ... Oc Op Fl
2279 See the
2280 .Sx Functions
2281 subsection.
2282 .It Ic printf
2283 A built-in equivalent of
2284 .Xr printf 1 .
2285 .It Ic pwd Op Fl L | P
2286 Print the path of the current directory.
2287 The built-in command may
2288 differ from the program of the same name because the
2289 built-in command remembers what the current directory
2290 is rather than recomputing it each time.
2291 This makes
2292 it faster.
2293 However, if the current directory is
2294 renamed,
2295 the built-in version of
2296 .Xr pwd 1
2297 will continue to print the old name for the directory.
2298 .Pp
2299 If the
2300 .Fl P
2301 option is specified, symbolic links are resolved.
2302 If the
2303 .Fl L
2304 option is specified, the shell's notion of the current directory
2305 is printed (symbolic links are not resolved).
2306 This is the default.
2307 .It Ic read Oo Fl p Ar prompt Oc Oo
2308 .Fl t Ar timeout Oc Oo Fl er Oc Ar variable ...
2309 The
2310 .Ar prompt
2311 is printed if the
2312 .Fl p
2313 option is specified
2314 and the standard input is a terminal.
2315 Then a line is
2316 read from the standard input.
2317 The trailing newline
2318 is deleted from the line and the line is split as
2319 described in the section on
2320 .Sx White Space Splitting (Field Splitting)
2321 above, and
2322 the pieces are assigned to the variables in order.
2323 If there are more pieces than variables, the remaining
2324 pieces (along with the characters in
2325 .Va IFS
2326 that separated them)
2327 are assigned to the last variable.
2328 If there are more variables than pieces, the remaining
2329 variables are assigned the null string.
2330 .Pp
2331 Backslashes are treated specially, unless the
2332 .Fl r
2333 option is
2334 specified.
2335 If a backslash is followed by
2336 a newline, the backslash and the newline will be
2337 deleted.
2338 If a backslash is followed by any other
2339 character, the backslash will be deleted and the following
2340 character will be treated as though it were not in
2341 .Va IFS ,
2342 even if it is.
2343 .Pp
2344 If the
2345 .Fl t
2346 option is specified and the
2347 .Ar timeout
2348 elapses before a complete line of input is supplied,
2349 the
2350 .Ic read
2351 command will return an exit status of 1 without assigning any values.
2352 The
2353 .Ar timeout
2354 value may optionally be followed by one of
2355 .Ql s ,
2356 .Ql m
2357 or
2358 .Ql h
2359 to explicitly specify seconds, minutes or hours.
2360 If none is supplied,
2361 .Ql s
2362 is assumed.
2363 .Pp
2364 The
2365 .Fl e
2366 option exists only for backward compatibility with older scripts.
2367 .It Ic readonly Oo Fl p Oc Op Ar name ...
2368 Each specified
2369 .Ar name
2370 is marked as read only,
2371 so that it cannot be subsequently modified or unset.
2372 The shell allows the value of a variable to be set
2373 at the same time as it is marked read only
2374 by using the following form:
2375 .Pp
2376 .D1 Ic readonly Ar name Ns = Ns Ar value
2377 .Pp
2378 With no arguments the
2379 .Ic readonly
2380 command lists the names of all read only variables.
2381 If the
2382 .Fl p
2383 option is specified, the read-only variables are printed as
2384 .Dq Ic readonly Ar name Ns = Ns Ar value
2385 lines, suitable for re-input to the shell.
2386 .It Ic return Op Ar exitstatus
2387 See the
2388 .Sx Functions
2389 subsection.
2390 .It Ic set Oo Fl /+abCEefIimnpTuVvx Oc Oo Fl /+o Ar longname Oc Oo
2391 .Fl c Ar string Oc Op Fl - Ar arg ...
2392 The
2393 .Ic set
2394 command performs three different functions:
2395 .Bl -item
2396 .It
2397 With no arguments, it lists the values of all shell variables.
2398 .It
2399 If options are given,
2400 either in short form or using the long
2401 .Dq Fl /+o Ar longname
2402 form,
2403 it sets or clears the specified options as described in the section called
2404 .Sx Argument List Processing .
2405 .It
2406 If the
2407 .Dq Fl -
2408 option is specified,
2409 .Ic set
2410 will replace the shell's positional parameters with the subsequent
2411 arguments.
2412 If no arguments follow the
2413 .Dq Fl -
2414 option,
2415 all the positional parameters will be cleared,
2416 which is equivalent to executing the command
2417 .Dq Li "shift $#" .
2418 The
2419 .Dq Fl -
2420 flag may be omitted when specifying arguments to be used
2421 as positional replacement parameters.
2422 This is not recommended,
2423 because the first argument may begin with a dash
2424 .Pq Ql -
2425 or a plus
2426 .Pq Ql + ,
2427 which the
2428 .Ic set
2429 command will interpret as a request to enable or disable options.
2430 .El
2431 .It Ic setvar Ar variable value
2432 Assigns the specified
2433 .Ar value
2434 to the specified
2435 .Ar variable .
2436 The
2437 .Ic setvar
2438 command is intended to be used in functions that
2439 assign values to variables whose names are passed as parameters.
2440 In general it is better to write
2441 .Dq Ar variable Ns = Ns Ar value
2442 rather than using
2443 .Ic setvar .
2444 .It Ic shift Op Ar n
2445 Shift the positional parameters
2446 .Ar n
2447 times, or once if
2448 .Ar n
2449 is not specified.
2450 A shift sets the value of
2451 .Li $1
2452 to the value of
2453 .Li $2 ,
2454 the value of
2455 .Li $2
2456 to the value of
2457 .Li $3 ,
2458 and so on,
2459 decreasing the value of
2460 .Li $#
2461 by one.
2462 If there are zero positional parameters, shifting does not do anything.
2463 .It Ic test
2464 A built-in equivalent of
2465 .Xr test 1 .
2466 .It Ic times
2467 Print the amount of time spent executing the shell process and its children.
2468 The first output line shows the user and system times for the shell process
2469 itself, the second one contains the user and system times for the
2470 children.
2471 .It Ic trap Oo Ar action Oc Ar signal ...
2472 .It Ic trap Fl l
2473 Cause the shell to parse and execute
2474 .Ar action
2475 when any specified
2476 .Ar signal
2477 is received.
2478 The signals are specified by name or number.
2479 In addition, the pseudo-signal
2480 .Cm EXIT
2481 may be used to specify an
2482 .Ar action
2483 that is performed when the shell terminates.
2484 The
2485 .Ar action
2486 may be an empty string or a dash
2487 .Pq Ql - ;
2488 the former causes the specified signal to be ignored
2489 and the latter causes the default action to be taken.
2490 Omitting the
2491 .Ar action
2492 is another way to request the default action, for compatibility reasons this
2493 usage is not recommended though.
2494 In a subshell or utility environment,
2495 the shell resets trapped (but not ignored) signals to the default action.
2496 The
2497 .Ic trap
2498 command has no effect on signals that were ignored on entry to the shell.
2499 .Pp
2500 Option
2501 .Fl l
2502 causes the
2503 .Ic trap
2504 command to display a list of valid signal names.
2505 .It Ic true
2506 A null command that returns a 0 (true) exit value.
2507 .It Ic type Op Ar name ...
2508 Interpret each
2509 .Ar name
2510 as a command and print the resolution of the command search.
2511 Possible resolutions are:
2512 shell keyword, alias, special shell builtin, shell builtin, command,
2513 tracked alias
2514 and not found.
2515 For aliases the alias expansion is printed;
2516 for commands and tracked aliases
2517 the complete pathname of the command is printed.
2518 .It Ic ulimit Oo Fl HSabcdflmnpstuvw Oc Op Ar limit
2519 Set or display resource limits (see
2520 .Xr getrlimit 2 ) .
2521 If
2522 .Ar limit
2523 is specified, the named resource will be set;
2524 otherwise the current resource value will be displayed.
2525 .Pp
2526 If
2527 .Fl H
2528 is specified, the hard limits will be set or displayed.
2529 While everybody is allowed to reduce a hard limit,
2530 only the superuser can increase it.
2531 The
2532 .Fl S
2533 option
2534 specifies the soft limits instead.
2535 When displaying limits,
2536 only one of
2537 .Fl S
2538 or
2539 .Fl H
2540 can be given.
2541 The default is to display the soft limits,
2542 and to set both the hard and the soft limits.
2543 .Pp
2544 Option
2545 .Fl a
2546 causes the
2547 .Ic ulimit
2548 command to display all resources.
2549 The parameter
2550 .Ar limit
2551 is not acceptable in this mode.
2552 .Pp
2553 The remaining options specify which resource value is to be
2554 displayed or modified.
2555 They are mutually exclusive.
2556 .Bl -tag -width indent
2557 .It Fl b Ar sbsize
2558 The maximum size of socket buffer usage, in bytes.
2559 .It Fl c Ar coredumpsize
2560 The maximal size of core dump files, in 512-byte blocks.
2561 .It Fl d Ar datasize
2562 The maximal size of the data segment of a process, in kilobytes.
2563 .It Fl f Ar filesize
2564 The maximal size of a file, in 512-byte blocks.
2565 .It Fl l Ar lockedmem
2566 The maximal size of memory that can be locked by a process, in
2567 kilobytes.
2568 .It Fl m Ar memoryuse
2569 The maximal resident set size of a process, in kilobytes.
2570 .It Fl n Ar nofiles
2571 The maximal number of descriptors that could be opened by a process.
2572 .It Fl p Ar pseudoterminals
2573 The maximal number of pseudo-terminals for this user ID.
2574 .It Fl s Ar stacksize
2575 The maximal size of the stack segment, in kilobytes.
2576 .It Fl t Ar time
2577 The maximal amount of CPU time to be used by each process, in seconds.
2578 .It Fl u Ar userproc
2579 The maximal number of simultaneous processes for this user ID.
2580 .It Fl v Ar virtualmem
2581 The maximal virtual size of a process, in kilobytes.
2582 .It Fl w Ar swapuse
2583 The maximum amount of swap space reserved or used for this user ID,
2584 in kilobytes.
2585 .El
2586 .It Ic umask Oo Fl S Oc Op Ar mask
2587 Set the file creation mask (see
2588 .Xr umask 2 )
2589 to the octal or symbolic (see
2590 .Xr chmod 1 )
2591 value specified by
2592 .Ar mask .
2593 If the argument is omitted, the current mask value is printed.
2594 If the
2595 .Fl S
2596 option is specified, the output is symbolic, otherwise the output is octal.
2597 .It Ic unalias Oo Fl a Oc Op Ar name ...
2598 The specified alias names are removed.
2599 If
2600 .Fl a
2601 is specified, all aliases are removed.
2602 .It Ic unset Oo Fl fv Oc Ar name ...
2603 The specified variables or functions are unset and unexported.
2604 If the
2605 .Fl v
2606 option is specified or no options are given, the
2607 .Ar name
2608 arguments are treated as variable names.
2609 If the
2610 .Fl f
2611 option is specified, the
2612 .Ar name
2613 arguments are treated as function names.
2614 .It Ic wait Op Ar job
2615 Wait for the specified
2616 .Ar job
2617 to complete and return the exit status of the last process in the
2618 .Ar job .
2619 If the argument is omitted, wait for all jobs to complete
2620 and return an exit status of zero.
2621 .El
2622 .Ss Commandline Editing
2623 When
2624 .Nm
2625 is being used interactively from a terminal, the current command
2626 and the command history
2627 (see
2628 .Ic fc
2629 in
2630 .Sx Built-in Commands )
2631 can be edited using
2632 .Nm vi Ns -mode
2633 command line editing.
2634 This mode uses commands similar
2635 to a subset of those described in the
2636 .Xr vi 1
2637 man page.
2638 The command
2639 .Dq Li "set -o vi"
2640 (or
2641 .Dq Li "set -V" )
2642 enables
2643 .Nm vi Ns -mode
2644 editing and places
2645 .Nm
2646 into
2647 .Nm vi
2648 insert mode.
2649 With
2650 .Nm vi Ns -mode
2651 enabled,
2652 .Nm
2653 can be switched between insert mode and command mode by typing
2654 .Aq ESC .
2655 Hitting
2656 .Aq return
2657 while in command mode will pass the line to the shell.
2658 .Pp
2659 Similarly, the
2660 .Dq Li "set -o emacs"
2661 (or
2662 .Dq Li "set -E" )
2663 command can be used to enable a subset of
2664 .Nm emacs Ns -style
2665 command line editing features.
2666 .Sh ENVIRONMENT
2667 The following environment variables affect the execution of
2668 .Nm :
2669 .Bl -tag -width ".Ev LANGXXXXXX"
2670 .It Ev ENV
2671 Initialization file for interactive shells.
2672 .It Ev LANG , Ev LC_*
2673 Locale settings.
2674 These are inherited by children of the shell,
2675 and is used in a limited manner by the shell itself.
2676 .It Ev PWD
2677 An absolute pathname for the current directory,
2678 possibly containing symbolic links.
2679 This is used and updated by the shell.
2680 .It Ev TERM
2681 The default terminal setting for the shell.
2682 This is inherited by children of the shell, and is used in the history
2683 editing modes.
2684 .El
2685 .Pp
2686 Additionally, all environment variables are turned into shell variables
2687 at startup,
2688 which may affect the shell as described under
2689 .Sx Special Variables .
2690 .Sh FILES
2691 .Bl -tag -width "/etc/suid_profileXX" -compact
2692 .It Pa ~/.profile
2693 User's login profile.
2694 .It Pa /etc/profile
2695 System login profile.
2696 .It Pa /etc/shells
2697 Shell database.
2698 .It Pa /etc/suid_profile
2699 Privileged shell profile.
2700 .El
2701 .Sh EXIT STATUS
2702 Errors that are detected by the shell, such as a syntax error, will
2703 cause the shell to exit with a non-zero exit status.
2704 If the shell is not an interactive shell, the execution of the shell
2705 file will be aborted.
2706 Otherwise the shell will return the exit status of the last command
2707 executed, or if the
2708 .Ic exit
2709 builtin is used with a numeric argument, it
2710 will return the argument.
2711 .Sh SEE ALSO
2712 .Xr builtin 1 ,
2713 .Xr chsh 1 ,
2714 .Xr echo 1 ,
2715 .Xr ed 1 ,
2716 .Xr emacs 1 ,
2717 .Xr kill 1 ,
2718 .Xr printf 1 ,
2719 .Xr pwd 1 ,
2720 .Xr test 1 ,
2721 .Xr vi 1 ,
2722 .Xr execve 2 ,
2723 .Xr getrlimit 2 ,
2724 .Xr umask 2 ,
2725 .Xr wctype 3 ,
2726 .Xr editrc 5 ,
2727 .Xr shells 5
2728 .Sh HISTORY
2729 A
2730 .Nm
2731 command, the Thompson shell, appeared in
2732 .At v1 .
2733 It was superseded in
2734 .At v7
2735 by the Bourne shell, which inherited the name
2736 .Nm .
2737 .Pp
2738 This version of
2739 .Nm
2740 was rewritten in 1989 under the
2741 .Bx
2742 license after the Bourne shell from
2743 .At V.4 .
2744 .Sh AUTHORS
2745 This version of
2746 .Nm
2747 was originally written by
2748 .An Kenneth Almquist .
2749 .Sh BUGS
2750 The
2751 .Nm
2752 utility does not recognize multibyte characters other than UTF-8.
2753 Splitting using
2754 .Va IFS
2755 and the line editing library
2756 .Xr editline 3
2757 do not recognize multibyte characters.