]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - bin/sh/sh.1
Merge mandoc from vendor into contrib and provide the necessary Makefile glue.
[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 July 15, 2012
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 .shinit
142 the filename desired:
143 .Pp
144 .Dl "ENV=$HOME/.shinit; 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 The second form never forks another shell,
1065 so it is slightly more efficient.
1066 Grouping commands together this way allows the user to
1067 redirect their output as though they were one program:
1068 .Bd -literal -offset indent
1069 { echo -n "hello"; echo " world"; } > greeting
1070 .Ed
1071 .Ss Functions
1072 The syntax of a function definition is
1073 .Pp
1074 .D1 Ar name Li \&( \&) Ar command
1075 .Pp
1076 A function definition is an executable statement; when
1077 executed it installs a function named
1078 .Ar name
1079 and returns an
1080 exit status of zero.
1081 The
1082 .Ar command
1083 is normally a list
1084 enclosed between
1085 .Ql {
1086 and
1087 .Ql } .
1088 .Pp
1089 Variables may be declared to be local to a function by
1090 using the
1091 .Ic local
1092 command.
1093 This should appear as the first statement of a function,
1094 and the syntax is:
1095 .Pp
1096 .D1 Ic local Oo Ar variable ... Oc Op Fl
1097 .Pp
1098 The
1099 .Ic local
1100 command is implemented as a built-in command.
1101 .Pp
1102 When a variable is made local, it inherits the initial
1103 value and exported and readonly flags from the variable
1104 with the same name in the surrounding scope, if there is
1105 one.
1106 Otherwise, the variable is initially unset.
1107 The shell
1108 uses dynamic scoping, so that if the variable
1109 .Va x
1110 is made local to function
1111 .Em f ,
1112 which then calls function
1113 .Em g ,
1114 references to the variable
1115 .Va x
1116 made inside
1117 .Em g
1118 will refer to the variable
1119 .Va x
1120 declared inside
1121 .Em f ,
1122 not to the global variable named
1123 .Va x .
1124 .Pp
1125 The only special parameter that can be made local is
1126 .Ql - .
1127 Making
1128 .Ql -
1129 local causes any shell options that are
1130 changed via the
1131 .Ic set
1132 command inside the function to be
1133 restored to their original values when the function
1134 returns.
1135 .Pp
1136 The syntax of the
1137 .Ic return
1138 command is
1139 .Pp
1140 .D1 Ic return Op Ar exitstatus
1141 .Pp
1142 It terminates the current executional scope, returning from the previous
1143 nested function, sourced script, or shell instance, in that order.
1144 The
1145 .Ic return
1146 command is implemented as a special built-in command.
1147 .Ss Variables and Parameters
1148 The shell maintains a set of parameters.
1149 A parameter
1150 denoted by a name is called a variable.
1151 When starting up,
1152 the shell turns all the environment variables into shell
1153 variables.
1154 New variables can be set using the form
1155 .Pp
1156 .D1 Ar name Ns = Ns Ar value
1157 .Pp
1158 Variables set by the user must have a name consisting solely
1159 of alphabetics, numerics, and underscores.
1160 The first letter of a variable name must not be numeric.
1161 A parameter can also be denoted by a number
1162 or a special character as explained below.
1163 .Pp
1164 Assignments are expanded differently from other words:
1165 tilde expansion is also performed after the equals sign and after any colon
1166 and usernames are also terminated by colons,
1167 and field splitting and pathname expansion are not performed.
1168 .Pp
1169 This special expansion applies not only to assignments that form a simple
1170 command by themselves or precede a command word,
1171 but also to words passed to the
1172 .Ic export ,
1173 .Ic local
1174 or
1175 .Ic readonly
1176 built-in commands that have this form.
1177 For this, the builtin's name must be literal
1178 (not the result of an expansion)
1179 and may optionally be preceded by one or more literal instances of
1180 .Ic command
1181 without options.
1182 .Ss Positional Parameters
1183 A positional parameter is a parameter denoted by a number greater than zero.
1184 The shell sets these initially to the values of its command line
1185 arguments that follow the name of the shell script.
1186 The
1187 .Ic set
1188 built-in command can also be used to set or reset them.
1189 .Ss Special Parameters
1190 Special parameters are parameters denoted by a single special character
1191 or the digit zero.
1192 They are shown in the following list, exactly as they would appear in input
1193 typed by the user or in the source of a shell script.
1194 .Bl -hang
1195 .It Li $*
1196 Expands to the positional parameters, starting from one.
1197 When
1198 the expansion occurs within a double-quoted string
1199 it expands to a single field with the value of each parameter
1200 separated by the first character of the
1201 .Va IFS
1202 variable,
1203 or by a space if
1204 .Va IFS
1205 is unset.
1206 .It Li $@
1207 Expands to the positional parameters, starting from one.
1208 When
1209 the expansion occurs within double-quotes, each positional
1210 parameter expands as a separate argument.
1211 If there are no positional parameters, the
1212 expansion of
1213 .Li @
1214 generates zero arguments, even when
1215 .Li @
1216 is double-quoted.
1217 What this basically means, for example, is
1218 if
1219 .Li $1
1220 is
1221 .Dq Li abc
1222 and
1223 .Li $2
1224 is
1225 .Dq Li "def ghi" ,
1226 then
1227 .Li \&"$@\&"
1228 expands to
1229 the two arguments:
1230 .Bd -literal -offset indent
1231 "abc"   "def ghi"
1232 .Ed
1233 .It Li $#
1234 Expands to the number of positional parameters.
1235 .It Li $?
1236 Expands to the exit status of the most recent pipeline.
1237 .It Li $-
1238 (hyphen) Expands to the current option flags (the single-letter
1239 option names concatenated into a string) as specified on
1240 invocation, by the
1241 .Ic set
1242 built-in command, or implicitly
1243 by the shell.
1244 .It Li $$
1245 Expands to the process ID of the invoked shell.
1246 A subshell
1247 retains the same value of
1248 .Va $
1249 as its parent.
1250 .It Li $!
1251 Expands to the process ID of the most recent background
1252 command executed from the current shell.
1253 For a
1254 pipeline, the process ID is that of the last command in the
1255 pipeline.
1256 If this parameter is referenced, the shell will remember
1257 the process ID and its exit status until the
1258 .Ic wait
1259 built-in command reports completion of the process.
1260 .It Li $0
1261 (zero) Expands to the name of the shell script if passed on the command line,
1262 the
1263 .Ar name
1264 operand if given (with
1265 .Fl c )
1266 or otherwise argument 0 passed to the shell.
1267 .El
1268 .Ss Special Variables
1269 The following variables are set by the shell or
1270 have special meaning to it:
1271 .Bl -tag -width ".Va HISTSIZE"
1272 .It Va CDPATH
1273 The search path used with the
1274 .Ic cd
1275 built-in.
1276 .It Va EDITOR
1277 The fallback editor used with the
1278 .Ic fc
1279 built-in.
1280 If not set, the default editor is
1281 .Xr ed 1 .
1282 .It Va FCEDIT
1283 The default editor used with the
1284 .Ic fc
1285 built-in.
1286 .It Va HISTSIZE
1287 The number of previous commands that are accessible.
1288 .It Va HOME
1289 The user's home directory,
1290 used in tilde expansion and as a default directory for the
1291 .Ic cd
1292 built-in.
1293 .It Va IFS
1294 Input Field Separators.
1295 The default value is
1296 .Aq space ,
1297 .Aq tab ,
1298 and
1299 .Aq newline
1300 in that order.
1301 This default also applies if
1302 .Va IFS
1303 is unset, but not if it is set to the empty string.
1304 See the
1305 .Sx White Space Splitting
1306 section for more details.
1307 .It Va LINENO
1308 The current line number in the script or function.
1309 .It Va MAIL
1310 The name of a mail file, that will be checked for the arrival of new
1311 mail.
1312 Overridden by
1313 .Va MAILPATH .
1314 .It Va MAILPATH
1315 A colon
1316 .Pq Ql \&:
1317 separated list of file names, for the shell to check for incoming
1318 mail.
1319 This variable overrides the
1320 .Va MAIL
1321 setting.
1322 There is a maximum of 10 mailboxes that can be monitored at once.
1323 .It Va PATH
1324 The default search path for executables.
1325 See the
1326 .Sx Path Search
1327 section for details.
1328 .It Va PPID
1329 The parent process ID of the invoked shell.
1330 This is set at startup
1331 unless this variable is in the environment.
1332 A later change of parent process ID is not reflected.
1333 A subshell retains the same value of
1334 .Va PPID .
1335 .It Va PS1
1336 The primary prompt string, which defaults to
1337 .Dq Li "$ " ,
1338 unless you are the superuser, in which case it defaults to
1339 .Dq Li "# " .
1340 .It Va PS2
1341 The secondary prompt string, which defaults to
1342 .Dq Li "> " .
1343 .It Va PS4
1344 The prefix for the trace output (if
1345 .Fl x
1346 is active).
1347 The default is
1348 .Dq Li "+ " .
1349 .El
1350 .Ss Word Expansions
1351 This clause describes the various expansions that are
1352 performed on words.
1353 Not all expansions are performed on
1354 every word, as explained later.
1355 .Pp
1356 Tilde expansions, parameter expansions, command substitutions,
1357 arithmetic expansions, and quote removals that occur within
1358 a single word expand to a single field.
1359 It is only field
1360 splitting or pathname expansion that can create multiple
1361 fields from a single word.
1362 The single exception to this rule is
1363 the expansion of the special parameter
1364 .Va @
1365 within double-quotes,
1366 as was described above.
1367 .Pp
1368 The order of word expansion is:
1369 .Bl -enum
1370 .It
1371 Tilde Expansion, Parameter Expansion, Command Substitution,
1372 Arithmetic Expansion (these all occur at the same time).
1373 .It
1374 Field Splitting is performed on fields generated by step (1)
1375 unless the
1376 .Va IFS
1377 variable is null.
1378 .It
1379 Pathname Expansion (unless the
1380 .Fl f
1381 option is in effect).
1382 .It
1383 Quote Removal.
1384 .El
1385 .Pp
1386 The
1387 .Ql $
1388 character is used to introduce parameter expansion, command
1389 substitution, or arithmetic expansion.
1390 .Ss Tilde Expansion (substituting a user's home directory)
1391 A word beginning with an unquoted tilde character
1392 .Pq Ql ~
1393 is
1394 subjected to tilde expansion.
1395 All the characters up to a slash
1396 .Pq Ql /
1397 or the end of the word are treated as a username
1398 and are replaced with the user's home directory.
1399 If the
1400 username is missing (as in
1401 .Pa ~/foobar ) ,
1402 the tilde is replaced with the value of the
1403 .Va HOME
1404 variable (the current user's home directory).
1405 .Ss Parameter Expansion
1406 The format for parameter expansion is as follows:
1407 .Pp
1408 .D1 Li ${ Ns Ar expression Ns Li }
1409 .Pp
1410 where
1411 .Ar expression
1412 consists of all characters until the matching
1413 .Ql } .
1414 Any
1415 .Ql }
1416 escaped by a backslash or within a single-quoted or double-quoted
1417 string, and characters in
1418 embedded arithmetic expansions, command substitutions, and variable
1419 expansions, are not examined in determining the matching
1420 .Ql } .
1421 If the variants with
1422 .Ql + ,
1423 .Ql - ,
1424 .Ql =
1425 or
1426 .Ql ?\&
1427 occur within a double-quoted string,
1428 as an extension there may be unquoted parts
1429 (via double-quotes inside the expansion);
1430 .Ql }
1431 within such parts are also not examined in determining the matching
1432 .Ql } .
1433 .Pp
1434 The simplest form for parameter expansion is:
1435 .Pp
1436 .D1 Li ${ Ns Ar parameter Ns Li }
1437 .Pp
1438 The value, if any, of
1439 .Ar parameter
1440 is substituted.
1441 .Pp
1442 The parameter name or symbol can be enclosed in braces, which are
1443 optional except for positional parameters with more than one digit or
1444 when parameter is followed by a character that could be interpreted as
1445 part of the name.
1446 If a parameter expansion occurs inside double-quotes:
1447 .Bl -enum
1448 .It
1449 Field splitting is not performed on the results of the
1450 expansion, with the exception of the special parameter
1451 .Va @ .
1452 .It
1453 Pathname expansion is not performed on the results of the
1454 expansion.
1455 .El
1456 .Pp
1457 In addition, a parameter expansion can be modified by using one of the
1458 following formats.
1459 .Bl -tag -width indent
1460 .It Li ${ Ns Ar parameter Ns Li :- Ns Ar word Ns Li }
1461 Use Default Values.
1462 If
1463 .Ar parameter
1464 is unset or null, the expansion of
1465 .Ar word
1466 is substituted; otherwise, the value of
1467 .Ar parameter
1468 is substituted.
1469 .It Li ${ Ns Ar parameter Ns Li := Ns Ar word Ns Li }
1470 Assign Default Values.
1471 If
1472 .Ar parameter
1473 is unset or null, the expansion of
1474 .Ar word
1475 is assigned to
1476 .Ar parameter .
1477 In all cases, the
1478 final value of
1479 .Ar parameter
1480 is substituted.
1481 Quoting inside
1482 .Ar word
1483 does not prevent field splitting or pathname expansion.
1484 Only variables, not positional
1485 parameters or special parameters, can be
1486 assigned in this way.
1487 .It Li ${ Ns Ar parameter Ns Li :? Ns Oo Ar word Oc Ns Li }
1488 Indicate Error if Null or Unset.
1489 If
1490 .Ar parameter
1491 is unset or null, the expansion of
1492 .Ar word
1493 (or a message indicating it is unset if
1494 .Ar word
1495 is omitted) is written to standard
1496 error and the shell exits with a nonzero
1497 exit status.
1498 Otherwise, the value of
1499 .Ar parameter
1500 is substituted.
1501 An
1502 interactive shell need not exit.
1503 .It Li ${ Ns Ar parameter Ns Li :+ Ns Ar word Ns Li }
1504 Use Alternate Value.
1505 If
1506 .Ar parameter
1507 is unset or null, null is substituted;
1508 otherwise, the expansion of
1509 .Ar word
1510 is substituted.
1511 .El
1512 .Pp
1513 In the parameter expansions shown previously, use of the colon in the
1514 format results in a test for a parameter that is unset or null; omission
1515 of the colon results in a test for a parameter that is only unset.
1516 .Pp
1517 The
1518 .Ar word
1519 inherits the type of quoting
1520 (unquoted, double-quoted or here-document)
1521 from the surroundings,
1522 with the exception that a backslash that quotes a closing brace is removed
1523 during quote removal.
1524 .Bl -tag -width indent
1525 .It Li ${# Ns Ar parameter Ns Li }
1526 String Length.
1527 The length in characters of
1528 the value of
1529 .Ar parameter .
1530 .El
1531 .Pp
1532 The following four varieties of parameter expansion provide for substring
1533 processing.
1534 In each case, pattern matching notation
1535 (see
1536 .Sx Shell Patterns ) ,
1537 rather than regular expression notation,
1538 is used to evaluate the patterns.
1539 If parameter is one of the special parameters
1540 .Va *
1541 or
1542 .Va @ ,
1543 the result of the expansion is unspecified.
1544 Enclosing the full parameter expansion string in double-quotes does not
1545 cause the following four varieties of pattern characters to be quoted,
1546 whereas quoting characters within the braces has this effect.
1547 .Bl -tag -width indent
1548 .It Li ${ Ns Ar parameter Ns Li % Ns Ar word Ns Li }
1549 Remove Smallest Suffix Pattern.
1550 The
1551 .Ar word
1552 is expanded to produce a pattern.
1553 The
1554 parameter expansion then results in
1555 .Ar parameter ,
1556 with the smallest portion of the
1557 suffix matched by the pattern deleted.
1558 .It Li ${ Ns Ar parameter Ns Li %% Ns Ar word Ns Li }
1559 Remove Largest Suffix Pattern.
1560 The
1561 .Ar word
1562 is expanded to produce a pattern.
1563 The
1564 parameter expansion then results in
1565 .Ar parameter ,
1566 with the largest portion of the
1567 suffix matched by the pattern deleted.
1568 .It Li ${ Ns Ar parameter Ns Li # Ns Ar word Ns Li }
1569 Remove Smallest Prefix Pattern.
1570 The
1571 .Ar word
1572 is expanded to produce a pattern.
1573 The
1574 parameter expansion then results in
1575 .Ar parameter ,
1576 with the smallest portion of the
1577 prefix matched by the pattern deleted.
1578 .It Li ${ Ns Ar parameter Ns Li ## Ns Ar word Ns Li }
1579 Remove Largest Prefix Pattern.
1580 The
1581 .Ar word
1582 is expanded to produce a pattern.
1583 The
1584 parameter expansion then results in
1585 .Ar parameter ,
1586 with the largest portion of the
1587 prefix matched by the pattern deleted.
1588 .El
1589 .Ss Command Substitution
1590 Command substitution allows the output of a command to be substituted in
1591 place of the command name itself.
1592 Command substitution occurs when
1593 the command is enclosed as follows:
1594 .Pp
1595 .D1 Li $( Ns Ar command Ns Li )\&
1596 .Pp
1597 or the backquoted version:
1598 .Pp
1599 .D1 Li ` Ns Ar command Ns Li `
1600 .Pp
1601 The shell expands the command substitution by executing command
1602 and replacing the command substitution
1603 with the standard output of the command,
1604 removing sequences of one or more newlines at the end of the substitution.
1605 Embedded newlines before the end of the output are not removed;
1606 however, during field splitting, they may be translated into spaces
1607 depending on the value of
1608 .Va IFS
1609 and the quoting that is in effect.
1610 The command is executed in a subshell environment,
1611 except that the built-in commands
1612 .Ic jobid ,
1613 .Ic jobs ,
1614 and
1615 .Ic trap
1616 return information about the parent shell environment
1617 and
1618 .Ic times
1619 returns information about the same process
1620 if they are the only command in a command substitution.
1621 .Ss Arithmetic Expansion
1622 Arithmetic expansion provides a mechanism for evaluating an arithmetic
1623 expression and substituting its value.
1624 The format for arithmetic expansion is as follows:
1625 .Pp
1626 .D1 Li $(( Ns Ar expression Ns Li ))
1627 .Pp
1628 The
1629 .Ar expression
1630 is treated as if it were in double-quotes, except
1631 that a double-quote inside the expression is not treated specially.
1632 The
1633 shell expands all tokens in the
1634 .Ar expression
1635 for parameter expansion,
1636 command substitution,
1637 arithmetic expansion
1638 and quote removal.
1639 .Pp
1640 The allowed expressions are a subset of C expressions,
1641 summarized below.
1642 .Bl -tag -width "Variables" -offset indent
1643 .It Values
1644 All values are of type
1645 .Ft intmax_t .
1646 .It Constants
1647 Decimal, octal (starting with
1648 .Li 0 )
1649 and hexadecimal (starting with
1650 .Li 0x )
1651 integer constants.
1652 .It Variables
1653 Shell variables can be read and written
1654 and contain integer constants.
1655 .It Unary operators
1656 .Li "! ~ + -"
1657 .It Binary operators
1658 .Li "* / % + - << >> < <= > >= == != & ^ | && ||"
1659 .It Assignment operators
1660 .Li "= += -= *= /= %= <<= >>= &= ^= |="
1661 .It Conditional operator
1662 .Li "? :"
1663 .El
1664 .Pp
1665 The result of the expression is substituted in decimal.
1666 .Ss White Space Splitting (Field Splitting)
1667 In certain contexts,
1668 after parameter expansion, command substitution, and
1669 arithmetic expansion the shell scans the results of
1670 expansions and substitutions that did not occur in double-quotes for
1671 field splitting and multiple fields can result.
1672 .Pp
1673 Characters in
1674 .Va IFS
1675 that are whitespace
1676 .Po
1677 .Aq space ,
1678 .Aq tab ,
1679 and
1680 .Aq newline
1681 .Pc
1682 are treated differently from other characters in
1683 .Va IFS .
1684 .Pp
1685 Whitespace in
1686 .Va IFS
1687 at the beginning or end of a word is discarded.
1688 .Pp
1689 Subsequently, a field is delimited by either
1690 .Bl -enum
1691 .It
1692 a non-whitespace character in
1693 .Va IFS
1694 with any whitespace in
1695 .Va IFS
1696 surrounding it, or
1697 .It
1698 one or more whitespace characters in
1699 .Va IFS .
1700 .El
1701 .Pp
1702 If a word ends with a non-whitespace character in
1703 .Va IFS ,
1704 there is no empty field after this character.
1705 .Pp
1706 If no field is delimited, the word is discarded.
1707 In particular, if a word consists solely of an unquoted substitution
1708 and the result of the substitution is null,
1709 it is removed by field splitting even if
1710 .Va IFS
1711 is null.
1712 .Ss Pathname Expansion (File Name Generation)
1713 Unless the
1714 .Fl f
1715 option is set,
1716 file name generation is performed
1717 after word splitting is complete.
1718 Each word is
1719 viewed as a series of patterns, separated by slashes.
1720 The
1721 process of expansion replaces the word with the names of
1722 all existing files whose names can be formed by replacing
1723 each pattern with a string that matches the specified pattern.
1724 There are two restrictions on this: first, a pattern cannot match
1725 a string containing a slash, and second,
1726 a pattern cannot match a string starting with a period
1727 unless the first character of the pattern is a period.
1728 The next section describes the patterns used for
1729 Pathname Expansion,
1730 the four varieties of parameter expansion for substring processing and the
1731 .Ic case
1732 command.
1733 .Ss Shell Patterns
1734 A pattern consists of normal characters, which match themselves,
1735 and meta-characters.
1736 The meta-characters are
1737 .Ql * ,
1738 .Ql \&? ,
1739 and
1740 .Ql \&[ .
1741 These characters lose their special meanings if they are quoted.
1742 When command or variable substitution is performed and the dollar sign
1743 or back quotes are not double-quoted, the value of the
1744 variable or the output of the command is scanned for these
1745 characters and they are turned into meta-characters.
1746 .Pp
1747 An asterisk
1748 .Pq Ql *
1749 matches any string of characters.
1750 A question mark
1751 .Pq Ql \&?
1752 matches any single character.
1753 A left bracket
1754 .Pq Ql \&[
1755 introduces a character class.
1756 The end of the character class is indicated by a
1757 .Ql \&] ;
1758 if the
1759 .Ql \&]
1760 is missing then the
1761 .Ql \&[
1762 matches a
1763 .Ql \&[
1764 rather than introducing a character class.
1765 A character class matches any of the characters between the square brackets.
1766 A locale-dependent range of characters may be specified using a minus sign.
1767 A named class of characters (see
1768 .Xr wctype 3 )
1769 may be specified by surrounding the name with
1770 .Ql \&[:
1771 and
1772 .Ql :\&] .
1773 For example,
1774 .Ql \&[\&[:alpha:\&]\&]
1775 is a shell pattern that matches a single letter.
1776 The character class may be complemented by making an exclamation point
1777 .Pq Ql !\&
1778 the first character of the character class.
1779 A caret
1780 .Pq Ql ^
1781 has the same effect but is non-standard.
1782 .Pp
1783 To include a
1784 .Ql \&]
1785 in a character class, make it the first character listed
1786 (after the
1787 .Ql \&!
1788 or
1789 .Ql ^ ,
1790 if any).
1791 To include a
1792 .Ql - ,
1793 make it the first or last character listed.
1794 .Ss Built-in Commands
1795 This section lists the built-in commands.
1796 .Bl -tag -width indent
1797 .It Ic \&:
1798 A null command that returns a 0 (true) exit value.
1799 .It Ic \&. Ar file
1800 The commands in the specified file are read and executed by the shell.
1801 The
1802 .Ic return
1803 command may be used to return to the
1804 .Ic \&.
1805 command's caller.
1806 If
1807 .Ar file
1808 contains any
1809 .Ql /
1810 characters, it is used as is.
1811 Otherwise, the shell searches the
1812 .Va PATH
1813 for the file.
1814 If it is not found in the
1815 .Va PATH ,
1816 it is sought in the current working directory.
1817 .It Ic \&[
1818 A built-in equivalent of
1819 .Xr test 1 .
1820 .It Ic alias Oo Ar name Ns Oo = Ns Ar string Oc ... Oc
1821 If
1822 .Ar name Ns = Ns Ar string
1823 is specified, the shell defines the alias
1824 .Ar name
1825 with value
1826 .Ar string .
1827 If just
1828 .Ar name
1829 is specified, the value of the alias
1830 .Ar name
1831 is printed.
1832 With no arguments, the
1833 .Ic alias
1834 built-in command prints the names and values of all defined aliases
1835 (see
1836 .Ic unalias ) .
1837 Alias values are written with appropriate quoting so that they are
1838 suitable for re-input to the shell.
1839 Also see the
1840 .Sx Aliases
1841 subsection.
1842 .It Ic bg Op Ar job ...
1843 Continue the specified jobs
1844 (or the current job if no jobs are given)
1845 in the background.
1846 .It Ic bind Oo Fl aeklrsv Oc Oo Ar key Oo Ar command Oc Oc
1847 List or alter key bindings for the line editor.
1848 This command is documented in
1849 .Xr editrc 5 .
1850 .It Ic break Op Ar num
1851 See the
1852 .Sx Flow-Control Constructs
1853 subsection.
1854 .It Ic builtin Ar cmd Op Ar arg ...
1855 Execute the specified built-in command,
1856 .Ar cmd .
1857 This is useful when the user wishes to override a shell function
1858 with the same name as a built-in command.
1859 .It Ic cd Oo Fl L | P Oc Oo Fl e Oc Op Ar directory
1860 Switch to the specified
1861 .Ar directory ,
1862 or to the directory specified in the
1863 .Va HOME
1864 environment variable if no
1865 .Ar directory
1866 is specified.
1867 If
1868 .Ar directory
1869 does not begin with
1870 .Pa / , \&. ,
1871 or
1872 .Pa .. ,
1873 then the directories listed in the
1874 .Va CDPATH
1875 variable will be
1876 searched for the specified
1877 .Ar directory .
1878 If
1879 .Va CDPATH
1880 is unset, the current directory is searched.
1881 The format of
1882 .Va CDPATH
1883 is the same as that of
1884 .Va PATH .
1885 In an interactive shell,
1886 the
1887 .Ic cd
1888 command will print out the name of the directory
1889 that it actually switched to
1890 if this is different from the name that the user gave.
1891 These may be different either because the
1892 .Va CDPATH
1893 mechanism was used or because a symbolic link was crossed.
1894 .Pp
1895 If the
1896 .Fl P
1897 option is specified,
1898 .Pa ..
1899 is handled physically and symbolic links are resolved before
1900 .Pa ..
1901 components are processed.
1902 If the
1903 .Fl L
1904 option is specified,
1905 .Pa ..
1906 is handled logically.
1907 This is the default.
1908 .Pp
1909 The
1910 .Fl e
1911 option causes
1912 .Ic cd
1913 to return exit status 1 if the full pathname of the new directory
1914 cannot be determined reliably or at all.
1915 Normally this is not considered an error,
1916 although a warning is printed.
1917 .It Ic chdir
1918 A synonym for the
1919 .Ic cd
1920 built-in command.
1921 .It Ic command Oo Fl p Oc Op Ar utility Op Ar argument ...
1922 .It Ic command Oo Fl p Oc Fl v Ar utility
1923 .It Ic command Oo Fl p Oc Fl V Ar utility
1924 The first form of invocation executes the specified
1925 .Ar utility ,
1926 ignoring shell functions in the search.
1927 If
1928 .Ar utility
1929 is a special builtin,
1930 it is executed as if it were a regular builtin.
1931 .Pp
1932 If the
1933 .Fl p
1934 option is specified, the command search is performed using a
1935 default value of
1936 .Va PATH
1937 that is guaranteed to find all of the standard utilities.
1938 .Pp
1939 If the
1940 .Fl v
1941 option is specified,
1942 .Ar utility
1943 is not executed but a description of its interpretation by the shell is
1944 printed.
1945 For ordinary commands the output is the path name; for shell built-in
1946 commands, shell functions and keywords only the name is written.
1947 Aliases are printed as
1948 .Dq Ic alias Ar name Ns = Ns Ar value .
1949 .Pp
1950 The
1951 .Fl V
1952 option is identical to
1953 .Fl v
1954 except for the output.
1955 It prints
1956 .Dq Ar utility Ic is Ar description
1957 where
1958 .Ar description
1959 is either
1960 the path name to
1961 .Ar utility ,
1962 a special shell builtin,
1963 a shell builtin,
1964 a shell function,
1965 a shell keyword
1966 or
1967 an alias for
1968 .Ar value .
1969 .It Ic continue Op Ar num
1970 See the
1971 .Sx Flow-Control Constructs
1972 subsection.
1973 .It Ic echo Oo Fl e | n Oc Op Ar string ...
1974 Print a space-separated list of the arguments to the standard output
1975 and append a newline character.
1976 .Bl -tag -width indent
1977 .It Fl n
1978 Suppress the output of the trailing newline.
1979 .It Fl e
1980 Process C-style backslash escape sequences.
1981 The
1982 .Ic echo
1983 command understands the following character escapes:
1984 .Bl -tag -width indent
1985 .It \ea
1986 Alert (ring the terminal bell)
1987 .It \eb
1988 Backspace
1989 .It \ec
1990 Suppress the trailing newline (this has the side-effect of truncating the
1991 line if it is not the last character)
1992 .It \ee
1993 The ESC character
1994 .Tn ( ASCII
1995 0x1b)
1996 .It \ef
1997 Formfeed
1998 .It \en
1999 Newline
2000 .It \er
2001 Carriage return
2002 .It \et
2003 Horizontal tab
2004 .It \ev
2005 Vertical tab
2006 .It \e\e
2007 Literal backslash
2008 .It \e0nnn
2009 (Zero) The character whose octal value is
2010 .Ar nnn
2011 .El
2012 .Pp
2013 If
2014 .Ar string
2015 is not enclosed in quotes then the backslash itself must be escaped
2016 with a backslash to protect it from the shell.
2017 For example
2018 .Bd -literal -offset indent
2019 $ echo -e "a\evb"
2020 a
2021  b
2022 $ echo -e a\e\evb
2023 a
2024  b
2025 $ echo -e "a\e\eb"
2026 a\eb
2027 $ echo -e a\e\e\e\eb
2028 a\eb
2029 .Ed
2030 .El
2031 .Pp
2032 Only one of the
2033 .Fl e
2034 and
2035 .Fl n
2036 options may be specified.
2037 .It Ic eval Ar string ...
2038 Concatenate all the arguments with spaces.
2039 Then re-parse and execute the command.
2040 .It Ic exec Op Ar command Op arg ...
2041 Unless
2042 .Ar command
2043 is omitted,
2044 the shell process is replaced with the specified program
2045 (which must be a real program, not a shell built-in command or function).
2046 Any redirections on the
2047 .Ic exec
2048 command are marked as permanent,
2049 so that they are not undone when the
2050 .Ic exec
2051 command finishes.
2052 .It Ic exit Op Ar exitstatus
2053 Terminate the shell process.
2054 If
2055 .Ar exitstatus
2056 is given
2057 it is used as the exit status of the shell.
2058 Otherwise, if the shell is executing an
2059 .Cm EXIT
2060 trap, the exit status of the last command before the trap is used;
2061 if the shell is executing a trap for a signal,
2062 the shell exits by resending the signal to itself.
2063 Otherwise, the exit status of the preceding command is used.
2064 The exit status should be an integer between 0 and 255.
2065 .It Ic export Ar name ...
2066 .It Ic export Op Fl p
2067 The specified names are exported so that they will
2068 appear in the environment of subsequent commands.
2069 The only way to un-export a variable is to
2070 .Ic unset
2071 it.
2072 The shell allows the value of a variable to be set
2073 at the same time as it is exported by writing
2074 .Pp
2075 .D1 Ic export Ar name Ns = Ns Ar value
2076 .Pp
2077 With no arguments the
2078 .Ic export
2079 command lists the names
2080 of all exported variables.
2081 If the
2082 .Fl p
2083 option is specified, the exported variables are printed as
2084 .Dq Ic export Ar name Ns = Ns Ar value
2085 lines, suitable for re-input to the shell.
2086 .It Ic false
2087 A null command that returns a non-zero (false) exit value.
2088 .It Ic fc Oo Fl e Ar editor Oc Op Ar first Op Ar last
2089 .It Ic fc Fl l Oo Fl nr Oc Op Ar first Op Ar last
2090 .It Ic fc Fl s Oo Ar old Ns = Ns Ar new Oc Op Ar first
2091 The
2092 .Ic fc
2093 built-in command lists, or edits and re-executes,
2094 commands previously entered to an interactive shell.
2095 .Bl -tag -width indent
2096 .It Fl e Ar editor
2097 Use the editor named by
2098 .Ar editor
2099 to edit the commands.
2100 The
2101 .Ar editor
2102 string is a command name,
2103 subject to search via the
2104 .Va PATH
2105 variable.
2106 The value in the
2107 .Va FCEDIT
2108 variable is used as a default when
2109 .Fl e
2110 is not specified.
2111 If
2112 .Va FCEDIT
2113 is null or unset, the value of the
2114 .Va EDITOR
2115 variable is used.
2116 If
2117 .Va EDITOR
2118 is null or unset,
2119 .Xr ed 1
2120 is used as the editor.
2121 .It Fl l No (ell)
2122 List the commands rather than invoking
2123 an editor on them.
2124 The commands are written in the
2125 sequence indicated by the
2126 .Ar first
2127 and
2128 .Ar last
2129 operands, as affected by
2130 .Fl r ,
2131 with each command preceded by the command number.
2132 .It Fl n
2133 Suppress command numbers when listing with
2134 .Fl l .
2135 .It Fl r
2136 Reverse the order of the commands listed
2137 (with
2138 .Fl l )
2139 or edited
2140 (with neither
2141 .Fl l
2142 nor
2143 .Fl s ) .
2144 .It Fl s
2145 Re-execute the command without invoking an editor.
2146 .It Ar first
2147 .It Ar last
2148 Select the commands to list or edit.
2149 The number of previous commands that can be accessed
2150 are determined by the value of the
2151 .Va HISTSIZE
2152 variable.
2153 The value of
2154 .Ar first
2155 or
2156 .Ar last
2157 or both are one of the following:
2158 .Bl -tag -width indent
2159 .It Oo Cm + Oc Ns Ar num
2160 A positive number representing a command number;
2161 command numbers can be displayed with the
2162 .Fl l
2163 option.
2164 .It Fl Ar num
2165 A negative decimal number representing the
2166 command that was executed
2167 .Ar num
2168 of
2169 commands previously.
2170 For example, \-1 is the immediately previous command.
2171 .It Ar string
2172 A string indicating the most recently entered command
2173 that begins with that string.
2174 If the
2175 .Ar old Ns = Ns Ar new
2176 operand is not also specified with
2177 .Fl s ,
2178 the string form of the first operand cannot contain an embedded equal sign.
2179 .El
2180 .El
2181 .Pp
2182 The following variables affect the execution of
2183 .Ic fc :
2184 .Bl -tag -width ".Va HISTSIZE"
2185 .It Va FCEDIT
2186 Name of the editor to use for history editing.
2187 .It Va HISTSIZE
2188 The number of previous commands that are accessible.
2189 .El
2190 .It Ic fg Op Ar job
2191 Move the specified
2192 .Ar job
2193 or the current job to the foreground.
2194 .It Ic getopts Ar optstring var
2195 The
2196 .Tn POSIX
2197 .Ic getopts
2198 command.
2199 The
2200 .Ic getopts
2201 command deprecates the older
2202 .Xr getopt 1
2203 command.
2204 The first argument should be a series of letters, each possibly
2205 followed by a colon which indicates that the option takes an argument.
2206 The specified variable is set to the parsed option.
2207 The index of
2208 the next argument is placed into the shell variable
2209 .Va OPTIND .
2210 If an option takes an argument, it is placed into the shell variable
2211 .Va OPTARG .
2212 If an invalid option is encountered,
2213 .Ar var
2214 is set to
2215 .Ql \&? .
2216 It returns a false value (1) when it encounters the end of the options.
2217 .It Ic hash Oo Fl rv Oc Op Ar command ...
2218 The shell maintains a hash table which remembers the locations of commands.
2219 With no arguments whatsoever, the
2220 .Ic hash
2221 command prints out the contents of this table.
2222 Entries which have not been looked at since the last
2223 .Ic cd
2224 command are marked with an asterisk;
2225 it is possible for these entries to be invalid.
2226 .Pp
2227 With arguments, the
2228 .Ic hash
2229 command removes each specified
2230 .Ar command
2231 from the hash table (unless they are functions) and then locates it.
2232 With the
2233 .Fl v
2234 option,
2235 .Ic hash
2236 prints the locations of the commands as it finds them.
2237 The
2238 .Fl r
2239 option causes the
2240 .Ic hash
2241 command to delete all the entries in the hash table except for functions.
2242 .It Ic jobid Op Ar job
2243 Print the process IDs of the processes in the specified
2244 .Ar job .
2245 If the
2246 .Ar job
2247 argument is omitted, use the current job.
2248 .It Ic jobs Oo Fl lps Oc Op Ar job ...
2249 Print information about the specified jobs, or all jobs if no
2250 .Ar job
2251 argument is given.
2252 The information printed includes job ID, status and command name.
2253 .Pp
2254 If the
2255 .Fl l
2256 option is specified, the PID of each job is also printed.
2257 If the
2258 .Fl p
2259 option is specified, only the process IDs for the process group leaders
2260 are printed, one per line.
2261 If the
2262 .Fl s
2263 option is specified, only the PIDs of the job commands are printed, one per
2264 line.
2265 .It Ic kill
2266 A built-in equivalent of
2267 .Xr kill 1
2268 that additionally supports sending signals to jobs.
2269 .It Ic local Oo Ar variable ... Oc Op Fl
2270 See the
2271 .Sx Functions
2272 subsection.
2273 .It Ic printf
2274 A built-in equivalent of
2275 .Xr printf 1 .
2276 .It Ic pwd Op Fl L | P
2277 Print the path of the current directory.
2278 The built-in command may
2279 differ from the program of the same name because the
2280 built-in command remembers what the current directory
2281 is rather than recomputing it each time.
2282 This makes
2283 it faster.
2284 However, if the current directory is
2285 renamed,
2286 the built-in version of
2287 .Xr pwd 1
2288 will continue to print the old name for the directory.
2289 .Pp
2290 If the
2291 .Fl P
2292 option is specified, symbolic links are resolved.
2293 If the
2294 .Fl L
2295 option is specified, the shell's notion of the current directory
2296 is printed (symbolic links are not resolved).
2297 This is the default.
2298 .It Ic read Oo Fl p Ar prompt Oc Oo
2299 .Fl t Ar timeout Oc Oo Fl er Oc Ar variable ...
2300 The
2301 .Ar prompt
2302 is printed if the
2303 .Fl p
2304 option is specified
2305 and the standard input is a terminal.
2306 Then a line is
2307 read from the standard input.
2308 The trailing newline
2309 is deleted from the line and the line is split as
2310 described in the section on
2311 .Sx White Space Splitting (Field Splitting)
2312 above, and
2313 the pieces are assigned to the variables in order.
2314 If there are more pieces than variables, the remaining
2315 pieces (along with the characters in
2316 .Va IFS
2317 that separated them)
2318 are assigned to the last variable.
2319 If there are more variables than pieces, the remaining
2320 variables are assigned the null string.
2321 .Pp
2322 Backslashes are treated specially, unless the
2323 .Fl r
2324 option is
2325 specified.
2326 If a backslash is followed by
2327 a newline, the backslash and the newline will be
2328 deleted.
2329 If a backslash is followed by any other
2330 character, the backslash will be deleted and the following
2331 character will be treated as though it were not in
2332 .Va IFS ,
2333 even if it is.
2334 .Pp
2335 If the
2336 .Fl t
2337 option is specified and the
2338 .Ar timeout
2339 elapses before a complete line of input is supplied,
2340 the
2341 .Ic read
2342 command will return an exit status of 1 without assigning any values.
2343 The
2344 .Ar timeout
2345 value may optionally be followed by one of
2346 .Ql s ,
2347 .Ql m
2348 or
2349 .Ql h
2350 to explicitly specify seconds, minutes or hours.
2351 If none is supplied,
2352 .Ql s
2353 is assumed.
2354 .Pp
2355 The
2356 .Fl e
2357 option exists only for backward compatibility with older scripts.
2358 .It Ic readonly Oo Fl p Oc Op Ar name ...
2359 Each specified
2360 .Ar name
2361 is marked as read only,
2362 so that it cannot be subsequently modified or unset.
2363 The shell allows the value of a variable to be set
2364 at the same time as it is marked read only
2365 by using the following form:
2366 .Pp
2367 .D1 Ic readonly Ar name Ns = Ns Ar value
2368 .Pp
2369 With no arguments the
2370 .Ic readonly
2371 command lists the names of all read only variables.
2372 If the
2373 .Fl p
2374 option is specified, the read-only variables are printed as
2375 .Dq Ic readonly Ar name Ns = Ns Ar value
2376 lines, suitable for re-input to the shell.
2377 .It Ic return Op Ar exitstatus
2378 See the
2379 .Sx Functions
2380 subsection.
2381 .It Ic set Oo Fl /+abCEefIimnpTuVvx Oc Oo Fl /+o Ar longname Oc Oo
2382 .Fl c Ar string Oc Op Fl - Ar arg ...
2383 The
2384 .Ic set
2385 command performs three different functions:
2386 .Bl -item
2387 .It
2388 With no arguments, it lists the values of all shell variables.
2389 .It
2390 If options are given,
2391 either in short form or using the long
2392 .Dq Fl /+o Ar longname
2393 form,
2394 it sets or clears the specified options as described in the section called
2395 .Sx Argument List Processing .
2396 .It
2397 If the
2398 .Dq Fl -
2399 option is specified,
2400 .Ic set
2401 will replace the shell's positional parameters with the subsequent
2402 arguments.
2403 If no arguments follow the
2404 .Dq Fl -
2405 option,
2406 all the positional parameters will be cleared,
2407 which is equivalent to executing the command
2408 .Dq Li "shift $#" .
2409 The
2410 .Dq Fl -
2411 flag may be omitted when specifying arguments to be used
2412 as positional replacement parameters.
2413 This is not recommended,
2414 because the first argument may begin with a dash
2415 .Pq Ql -
2416 or a plus
2417 .Pq Ql + ,
2418 which the
2419 .Ic set
2420 command will interpret as a request to enable or disable options.
2421 .El
2422 .It Ic setvar Ar variable value
2423 Assigns the specified
2424 .Ar value
2425 to the specified
2426 .Ar variable .
2427 The
2428 .Ic setvar
2429 command is intended to be used in functions that
2430 assign values to variables whose names are passed as parameters.
2431 In general it is better to write
2432 .Dq Ar variable Ns = Ns Ar value
2433 rather than using
2434 .Ic setvar .
2435 .It Ic shift Op Ar n
2436 Shift the positional parameters
2437 .Ar n
2438 times, or once if
2439 .Ar n
2440 is not specified.
2441 A shift sets the value of
2442 .Li $1
2443 to the value of
2444 .Li $2 ,
2445 the value of
2446 .Li $2
2447 to the value of
2448 .Li $3 ,
2449 and so on,
2450 decreasing the value of
2451 .Li $#
2452 by one.
2453 If there are zero positional parameters, shifting does not do anything.
2454 .It Ic test
2455 A built-in equivalent of
2456 .Xr test 1 .
2457 .It Ic times
2458 Print the amount of time spent executing the shell process and its children.
2459 The first output line shows the user and system times for the shell process
2460 itself, the second one contains the user and system times for the
2461 children.
2462 .It Ic trap Oo Ar action Oc Ar signal ...
2463 .It Ic trap Fl l
2464 Cause the shell to parse and execute
2465 .Ar action
2466 when any specified
2467 .Ar signal
2468 is received.
2469 The signals are specified by name or number.
2470 In addition, the pseudo-signal
2471 .Cm EXIT
2472 may be used to specify an
2473 .Ar action
2474 that is performed when the shell terminates.
2475 The
2476 .Ar action
2477 may be an empty string or a dash
2478 .Pq Ql - ;
2479 the former causes the specified signal to be ignored
2480 and the latter causes the default action to be taken.
2481 Omitting the
2482 .Ar action
2483 is another way to request the default action, for compatibility reasons this
2484 usage is not recommended though.
2485 In a subshell or utility environment,
2486 the shell resets trapped (but not ignored) signals to the default action.
2487 The
2488 .Ic trap
2489 command has no effect on signals that were ignored on entry to the shell.
2490 .Pp
2491 Option
2492 .Fl l
2493 causes the
2494 .Ic trap
2495 command to display a list of valid signal names.
2496 .It Ic true
2497 A null command that returns a 0 (true) exit value.
2498 .It Ic type Op Ar name ...
2499 Interpret each
2500 .Ar name
2501 as a command and print the resolution of the command search.
2502 Possible resolutions are:
2503 shell keyword, alias, special shell builtin, shell builtin, command,
2504 tracked alias
2505 and not found.
2506 For aliases the alias expansion is printed;
2507 for commands and tracked aliases
2508 the complete pathname of the command is printed.
2509 .It Ic ulimit Oo Fl HSabcdflmnpstuvw Oc Op Ar limit
2510 Set or display resource limits (see
2511 .Xr getrlimit 2 ) .
2512 If
2513 .Ar limit
2514 is specified, the named resource will be set;
2515 otherwise the current resource value will be displayed.
2516 .Pp
2517 If
2518 .Fl H
2519 is specified, the hard limits will be set or displayed.
2520 While everybody is allowed to reduce a hard limit,
2521 only the superuser can increase it.
2522 The
2523 .Fl S
2524 option
2525 specifies the soft limits instead.
2526 When displaying limits,
2527 only one of
2528 .Fl S
2529 or
2530 .Fl H
2531 can be given.
2532 The default is to display the soft limits,
2533 and to set both the hard and the soft limits.
2534 .Pp
2535 Option
2536 .Fl a
2537 causes the
2538 .Ic ulimit
2539 command to display all resources.
2540 The parameter
2541 .Ar limit
2542 is not acceptable in this mode.
2543 .Pp
2544 The remaining options specify which resource value is to be
2545 displayed or modified.
2546 They are mutually exclusive.
2547 .Bl -tag -width indent
2548 .It Fl b Ar sbsize
2549 The maximum size of socket buffer usage, in bytes.
2550 .It Fl c Ar coredumpsize
2551 The maximal size of core dump files, in 512-byte blocks.
2552 .It Fl d Ar datasize
2553 The maximal size of the data segment of a process, in kilobytes.
2554 .It Fl f Ar filesize
2555 The maximal size of a file, in 512-byte blocks.
2556 .It Fl l Ar lockedmem
2557 The maximal size of memory that can be locked by a process, in
2558 kilobytes.
2559 .It Fl m Ar memoryuse
2560 The maximal resident set size of a process, in kilobytes.
2561 .It Fl n Ar nofiles
2562 The maximal number of descriptors that could be opened by a process.
2563 .It Fl p Ar pseudoterminals
2564 The maximal number of pseudo-terminals for this user ID.
2565 .It Fl s Ar stacksize
2566 The maximal size of the stack segment, in kilobytes.
2567 .It Fl t Ar time
2568 The maximal amount of CPU time to be used by each process, in seconds.
2569 .It Fl u Ar userproc
2570 The maximal number of simultaneous processes for this user ID.
2571 .It Fl v Ar virtualmem
2572 The maximal virtual size of a process, in kilobytes.
2573 .It Fl w Ar swapuse
2574 The maximum amount of swap space reserved or used for this user ID,
2575 in kilobytes.
2576 .El
2577 .It Ic umask Oo Fl S Oc Op Ar mask
2578 Set the file creation mask (see
2579 .Xr umask 2 )
2580 to the octal or symbolic (see
2581 .Xr chmod 1 )
2582 value specified by
2583 .Ar mask .
2584 If the argument is omitted, the current mask value is printed.
2585 If the
2586 .Fl S
2587 option is specified, the output is symbolic, otherwise the output is octal.
2588 .It Ic unalias Oo Fl a Oc Op Ar name ...
2589 The specified alias names are removed.
2590 If
2591 .Fl a
2592 is specified, all aliases are removed.
2593 .It Ic unset Oo Fl fv Oc Ar name ...
2594 The specified variables or functions are unset and unexported.
2595 If the
2596 .Fl v
2597 option is specified or no options are given, the
2598 .Ar name
2599 arguments are treated as variable names.
2600 If the
2601 .Fl f
2602 option is specified, the
2603 .Ar name
2604 arguments are treated as function names.
2605 .It Ic wait Op Ar job
2606 Wait for the specified
2607 .Ar job
2608 to complete and return the exit status of the last process in the
2609 .Ar job .
2610 If the argument is omitted, wait for all jobs to complete
2611 and return an exit status of zero.
2612 .El
2613 .Ss Commandline Editing
2614 When
2615 .Nm
2616 is being used interactively from a terminal, the current command
2617 and the command history
2618 (see
2619 .Ic fc
2620 in
2621 .Sx Built-in Commands )
2622 can be edited using
2623 .Nm vi Ns -mode
2624 command line editing.
2625 This mode uses commands similar
2626 to a subset of those described in the
2627 .Xr vi 1
2628 man page.
2629 The command
2630 .Dq Li "set -o vi"
2631 (or
2632 .Dq Li "set -V" )
2633 enables
2634 .Nm vi Ns -mode
2635 editing and places
2636 .Nm
2637 into
2638 .Nm vi
2639 insert mode.
2640 With
2641 .Nm vi Ns -mode
2642 enabled,
2643 .Nm
2644 can be switched between insert mode and command mode by typing
2645 .Aq ESC .
2646 Hitting
2647 .Aq return
2648 while in command mode will pass the line to the shell.
2649 .Pp
2650 Similarly, the
2651 .Dq Li "set -o emacs"
2652 (or
2653 .Dq Li "set -E" )
2654 command can be used to enable a subset of
2655 .Nm emacs Ns -style
2656 command line editing features.
2657 .Sh ENVIRONMENT
2658 The following environment variables affect the execution of
2659 .Nm :
2660 .Bl -tag -width ".Ev LANGXXXXXX"
2661 .It Ev ENV
2662 Initialization file for interactive shells.
2663 .It Ev LANG , Ev LC_*
2664 Locale settings.
2665 These are inherited by children of the shell,
2666 and is used in a limited manner by the shell itself.
2667 .It Ev PWD
2668 An absolute pathname for the current directory,
2669 possibly containing symbolic links.
2670 This is used and updated by the shell.
2671 .It Ev TERM
2672 The default terminal setting for the shell.
2673 This is inherited by children of the shell, and is used in the history
2674 editing modes.
2675 .El
2676 .Pp
2677 Additionally, all environment variables are turned into shell variables
2678 at startup,
2679 which may affect the shell as described under
2680 .Sx Special Variables .
2681 .Sh EXIT STATUS
2682 Errors that are detected by the shell, such as a syntax error, will
2683 cause the shell to exit with a non-zero exit status.
2684 If the shell is not an interactive shell, the execution of the shell
2685 file will be aborted.
2686 Otherwise the shell will return the exit status of the last command
2687 executed, or if the
2688 .Ic exit
2689 builtin is used with a numeric argument, it
2690 will return the argument.
2691 .Sh SEE ALSO
2692 .Xr builtin 1 ,
2693 .Xr chsh 1 ,
2694 .Xr echo 1 ,
2695 .Xr ed 1 ,
2696 .Xr emacs 1 ,
2697 .Xr kill 1 ,
2698 .Xr printf 1 ,
2699 .Xr pwd 1 ,
2700 .Xr test 1 ,
2701 .Xr vi 1 ,
2702 .Xr execve 2 ,
2703 .Xr getrlimit 2 ,
2704 .Xr umask 2 ,
2705 .Xr wctype 3 ,
2706 .Xr editrc 5
2707 .Sh HISTORY
2708 A
2709 .Nm
2710 command, the Thompson shell, appeared in
2711 .At v1 .
2712 It was superseded in
2713 .At v7
2714 by the Bourne shell, which inherited the name
2715 .Nm .
2716 .Pp
2717 This version of
2718 .Nm
2719 was rewritten in 1989 under the
2720 .Bx
2721 license after the Bourne shell from
2722 .At V.4 .
2723 .Sh AUTHORS
2724 This version of
2725 .Nm
2726 was originally written by
2727 .An Kenneth Almquist .
2728 .Sh BUGS
2729 The
2730 .Nm
2731 utility does not recognize multibyte characters other than UTF-8.
2732 Splitting using
2733 .Va IFS
2734 and the line editing library
2735 .Xr editline 3
2736 do not recognize multibyte characters.