BSD 4_4_Lite2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Tue, 16 May 1995 10:16:07 +0000 (02:16 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Tue, 16 May 1995 10:16:07 +0000 (02:16 -0800)
Work on file usr/share/man/cat1/sh.0

Synthesized-from: CSRG/cd3/4.4BSD-Lite2

usr/share/man/cat1/sh.0 [new file with mode: 0644]

diff --git a/usr/share/man/cat1/sh.0 b/usr/share/man/cat1/sh.0
new file mode 100644 (file)
index 0000000..1302032
--- /dev/null
@@ -0,0 +1,1650 @@
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+N\bNA\bAM\bME\bE
+       sh - command interpreter (shell)
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+       sh [-/+aCefnuvxIimsVEb] [-/+o longname] [arg ...]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+       Sh is the standard command interpreter for the system.
+       The current version of sh is in the process of being
+       changed to conform with the POSIX 1003.2 and 1003.2a spec-
+       ifications for the shell.  This version has many features
+       which make it appear similar in some respects to the Korn
+       shell, but it is not a Korn shell clone (run GNU's bash if
+       you want that).  Only features designated by POSIX, plus a
+       few Berkeley extensions, are being incorporated into this
+       shell.  We expect POSIX conformance by the time 4.4 BSD is
+       released.  This man page is not intended to be a tutorial
+       or a complete specification of the shell.
+
+
+       O\bOv\bve\ber\brv\bvi\bie\bew\bw
+
+
+       The shell is a command that reads lines from either a file
+       or the terminal, interprets them, and generally executes
+       other commands. It is the program that is running when a
+       user logs into the system (although a user can select a
+       different shell with the chsh(1) command).  The shell
+       implements a language that has flow control constructs, a
+       macro facility that provides a variety of features in
+       addition to data storage, along with built in history and
+       line editing capabilities.  It incorporates many features
+       to aid interactive use and has the advantage that the
+       interpretative language is common to both interactive and
+       non-interactive use (shell scripts).  That is, commands
+       can be typed directly to the running shell or can be put
+       into a file and the file can be executed directly by the
+       shell.
+
+
+       I\bIn\bnv\bvo\boc\bca\bat\bti\bio\bon\bn
+
+
+       If no args are present and if the standard input of the
+       shell is connected to a terminal (or if the -i flag is
+       set), the shell is considered an interactive shell.  An
+       interactive shell generally prompts before each command
+       and handles programming and command errors differently (as
+       described below).  When first starting, the shell inspects
+       argument 0, and if it begins with a dash '-', the shell is
+       also considered a login shell.  This is normally done
+
+
+
+4.4BSD                                                          1
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       automatically by the system when the user first logs in. A
+       login shell first reads commands from the files
+       /etc/profile and .profile if they exist.  If the environ-
+       ment variable ENV is set on entry to a shell, or is set in
+       the .profile of a login shell, the shell next reads com-
+       mands from the file named in ENV.  Therefore, a user
+       should place commands that are to be executed only at
+       login time in the .profile file, and commands that are
+       executed for every shell inside the ENV file.  To set the
+       ENV variable to some file, place the following line in
+       your .profile of your home directory
+
+                 ENV=$HOME/.shinit; export ENV
+
+       substituting for ``.shinit'' any filename you wish.  Since
+       the ENV file is read for every invocation of the shell,
+       including shell scripts and non-interactive shells, the
+       following paradigm is useful for restricting commands in
+       the ENV file to interactive invocations.  Place commands
+       within the ``case'' and ``esac'' below (these commands are
+       described later):
+
+            case $- in *i*)
+                 # commands for interactive use only
+                 ...
+            esac
+
+       If command line arguments besides the options have been
+       specified, then the shell treats the first argument as the
+       name of a file from which to read commands (a shell
+       script), and the remaining arguments are set as the posi-
+       tional parameters of the shell ($1, $2, etc).  Otherwise,
+       the shell reads commands from its standard input.
+
+
+       A\bAr\brg\bgu\bum\bme\ben\bnt\bt L\bLi\bis\bst\bt P\bPr\bro\boc\bce\bes\bss\bsi\bin\bng\bg
+
+
+       All of the single letter options have a corresponding name
+       that can be used as an argument to the '-o' option. The
+       set -o name is provided next to the single letter option
+       in the description below.  Specifying a dash ``-'' turns
+       the option on, while using a plus ``+'' disables the
+       option.  The following options can be set from the command
+       line or with the set(1) builtin (described later).
+
+       -a    allexport
+              Export all variables assigned to.  (UNIMPLEMENTED
+              for 4.4alpha)
+
+
+
+
+
+4.4BSD                                                          2
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       -C    noclobber
+              Don't overwrite existing files with ``>''.  (UNIM-
+              PLEMENTED for 4.4alpha)
+
+       -e    errexit
+              If not interactive, exit immediately if any
+              untested command fails.  The exit status of a com-
+              mand is considered to be explicitly tested if the
+              command is used to control an if, elif, while, or
+              until; or if the command is the left hand operand
+              of an ``&&'' or ``||'' operator.
+
+
+       -f    noglob
+              Disable pathname expansion.
+
+       -n    noexec
+              If not interactive, read commands but do not exe-
+              cute them.  This is useful for checking the syntax
+              of shell scripts.
+
+       -u    nounset
+              Write a message to standard error when attempting
+              to expand a variable that is not set, and if the
+              shell is not interactive, exit immediately.  (UNIM-
+              PLEMENTED for 4.4alpha)
+
+       -v    verbose
+              The shell writes its input to standard error as it
+              is read.  Useful for debugging.
+
+       -x    xtrace
+              Write each command to standard error (preceded by a
+              '+ ') before it is executed.  Useful for debugging.
+
+       -I    ignoreeof
+              Ignore EOF's from input when interactive.
+
+       -i    interactive
+              Force the shell to behave interactively.
+
+       -m    monitor
+              Turn on job control (set automatically when inter-
+              active).
+
+       -s    stdin
+              Read commands from standard input (set automati-
+              cally if no file arguments are present).  This
+              option has no effect when set after the shell has
+              already started running (i.e. with set(1)).
+
+
+
+
+4.4BSD                                                          3
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       -V    vi
+              Enable the builtin vi(1) command line editor (dis-
+              ables -E if it has been set).
+
+       -E    emacs
+              Enable the builtin emacs(1) command line editor
+              (disables -V if it has been set).
+
+       -b    notify
+              Enable asynchronous notification of background job
+              completion.  (UNIMPLEMENTED for 4.4alpha)
+
+
+
+       L\bLe\bex\bxi\bic\bca\bal\bl S\bSt\btr\bru\buc\bct\btu\bur\bre\be
+
+
+       The shell reads input in terms of lines from a file and
+       breaks it up into words at whitespace (blanks and tabs),
+       and at certain sequences of characters that are special to
+       the shell called ``operators''.  There are two types of
+       operators: control operators and redirection operators
+       (their meaning is discussed later).  Following is a list
+       of operators:
+
+       Control operators: &  &&  (  )  ;  ;; | || <newline>
+
+       Redirection operator:  <  >  >|  <<  >>  <&  >&  <<-  <>
+
+
+
+       Q\bQu\buo\bot\bti\bin\bng\bg
+
+
+       Quoting is used to remove the special meaning of certain
+       characters or words to the shell, such as operators,
+       whitespace, or keywords.  There are three types of quot-
+       ing: matched single quotes, matched double quotes, and
+       backslash.
+
+
+       B\bBa\bac\bck\bks\bsl\bla\bas\bsh\bh
+
+
+       A backslash preserves the literal meaning of the following
+       character, with the exception of <newline>.  A backslash
+       preceding a <newline> is treated as a line continuation.
+
+
+       S\bSi\bin\bng\bgl\ble\be Q\bQu\buo\bot\bte\bes\bs
+
+
+
+
+4.4BSD                                                          4
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       Enclosing characters in single quotes preserves the lit-
+       eral meaning of all the characters.
+
+
+       D\bDo\bou\bub\bbl\ble\be Q\bQu\buo\bot\bte\bes\bs
+
+
+       Enclosing characters within double quotes preserves the
+       literal meaning of all characters except dollarsign ($),
+       backquote (`), and backslash (\).  The backslash inside
+       double quotes is historically weird, and serves to quote
+       only the following characters: $  `  "  \  <newline>.
+       Otherwise it remains literal.
+
+
+       R\bRe\bes\bse\ber\brv\bve\bed\bd W\bWo\bor\brd\bds\bs
+
+
+       Reserved words are words that have special meaning to the
+       shell and are recognized at the beginning of a line and
+       after a control operator.  The following are reserved
+       words:
+
+          ! elif fi   while     case
+          else   for  then {    }
+          do     done until     if   esac
+
+       Their meaning is discussed later.
+
+
+       A\bAl\bli\bia\bas\bse\bes\bs
+
+
+       An alias is a name and corresponding value set using the
+       alias(1) builtin command.  Whenever a reserved word may
+       occur (see above), and after checking for reserved words,
+       the shell checks the word to see if it matches an alias.
+       If it does, it replaces it in the input stream with its
+       value.  For example, if there is an alias called ``lf''
+       with the value ``ls -F'', then the input
+
+          lf foobar <return>
+
+            would become
+
+          ls -F foobar <return>
+
+
+       Aliases provide a convenient way for naive users to create
+       shorthands for commands without having to learn how to
+       create functions with arguments.  They can also be used to
+
+
+
+4.4BSD                                                          5
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       create lexically obscure code.  This use is discouraged.
+
+
+       C\bCo\bom\bmm\bma\ban\bnd\bds\bs
+
+
+       The shell interprets the words it reads according to a
+       language, the specification of which is outside the scope
+       of this man page (refer to the BNF in the POSIX 1003.2
+       document).  Essentially though, a line is read and if the
+       first word of the line (or after a control operator) is
+       not a reserved word, then the shell has recognized a sim-
+       ple command.  Otherwise, a complex command or some other
+       special construct may have been recognized.
+
+
+       S\bSi\bim\bmp\bpl\ble\be C\bCo\bom\bmm\bma\ban\bnd\bds\bs
+
+
+       If a simple command has been recognized, the shell per-
+       forms the following actions:
+
+       1) Leading words of the form ``name=value'' are stripped
+       off and assigned to the environment of the simple command.
+       Redirection operators and their arguments (as described
+       below) are stripped off and saved for processing.
+
+       2) The remaining words are expanded as described in the
+       section called ``Expansions'', and the first remaining
+       word is considered the command name and the command is
+       located.  The remaining words are considered the arguments
+       of the command.  If no command name resulted, then the
+       ``name=value'' variable assignments recognized in 1)
+       affect the current shell.
+
+       3) Redirections are performed as described in the next
+       section.
+
+
+       R\bRe\bed\bdi\bir\bre\bec\bct\bti\bio\bon\bns\bs
+
+
+       Redirections are used to change where a command reads its
+       input or sends its output.  In general, redirections open,
+       close, or duplicate an existing reference to a file.  The
+       overall format used for redirection is:
+
+                 [n] redir-op file
+
+       where redir-op is one of the redirection operators men-
+       tioned previously.  Following is a list of the possible
+
+
+
+4.4BSD                                                          6
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       redirections.  The [n] is an optional number, as in '3'
+       (not '[3]'), that refers to a file descriptor.
+
+       [n]> file
+              Redirect standard output (or n) to file.
+
+       [n]>| file
+              Same, but override the -C option.
+
+       [n]>> file
+              Append standard output (or n) to file.
+
+       [n]< file
+              Redirect standard input (or n) from file.
+
+       [n1]<&n2
+              Duplicate standard input (or n1) from file descrip-
+              tor n2.
+
+       [n]<&-
+              Close standard input (or n).
+
+       [n1]>&n2
+              Duplicate standard output (or n) from n2.
+
+       [n]>&-
+              Close standard output (or n).
+
+       [n]<> file
+              Open file for reading and writing on standard input
+              (or n).
+
+       The following redirection is often called a ``here-
+       document''.
+
+           [n]<< delimiter
+               here-doc-text...
+           delimiter
+
+       All the text on successive lines up to the delimiter is
+       saved away and made available to the command on standard
+       input, or file descriptor n if it is specified.  If the
+       delimiter as specified on the initial line is quoted, then
+       the here-doc-text is treated literally, otherwise the text
+       is subjected to parameter expansion, command substitution,
+       and arithmetic expansion (as described in the section on
+       ``Expansions''). If the operator is ``<<-'' instead of
+       ``<<'', then leading tabs in the here-doc-text are
+       stripped.
+
+
+
+
+
+4.4BSD                                                          7
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       S\bSe\bea\bar\brc\bch\bh a\ban\bnd\bd E\bEx\bxe\bec\bcu\but\bti\bio\bon\bn
+
+
+       There are three types of commands: shell functions,
+       builtin commands, and normal programs -- and the command
+       is searched for (by name) in that order.  They each are
+       executed in a different way.
+
+       When a shell function is executed, all of the shell posi-
+       tional parameters (except $0, which remains unchanged) are
+       set to the arguments of the shell function.  The variables
+       which are explicitly placed in the environment of the com-
+       mand (by placing assignments to them before the function
+       name) are made local to the function and are set to the
+       values given. Then the command given in the function defi-
+       nition is executed.   The positional parameters are
+       restored to their original values when the command com-
+       pletes.
+
+       Shell builtins are executed internally to the shell, with-
+       out spawning a new process.
+
+       Otherwise, if the command name doesn't match a function or
+       builtin, the command is searched for as a normal program
+       in the filesystem (as described in the next section).
+       When a normal program is executed, the shell runs the pro-
+       gram, passing the arguments and the environment to the
+       program. If the program is a shell procedure, the shell
+       will interpret the program in a subshell.  The shell will
+       reinitialize itself in this case, so that the effect will
+       be as if a new shell had been invoked to handle the shell
+       procedure, except that the location of commands located in
+       the parent shell will be remembered by the child.
+
+
+       P\bPa\bat\bth\bh S\bSe\bea\bar\brc\bch\bh
+
+
+       When locating a command, the shell first looks to see if
+       it has a shell function by that name.  Then it looks for a
+       builtin command by that name.  Finally, it searches each
+       entry in PATH in turn for the command.
+
+       The value of the PATH variable should be a series of
+       entries separated by colons.  Each entry consists of a
+       directory name.  The current directory may be indicated by
+       an empty directory name.
+
+       Command names containing a slash are simply executed with-
+       out performing any of the above searches.
+
+
+
+
+4.4BSD                                                          8
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       C\bCo\bom\bmm\bma\ban\bnd\bd E\bEx\bxi\bit\bt S\bSt\bta\bat\btu\bus\bs
+
+
+       Each command has an exit status that can influence the
+       behavior of other shell commands.  The paradigm is that a
+       command exits with zero for normal or success, and non-
+       zero for failure, error, or a false indication.  The man
+       page for each command should indicate the various exit
+       codes and what they mean.  Additionally, the builtin com-
+       mands return exit codes, as does an executed function.
+
+
+       C\bCo\bom\bmp\bpl\ble\bex\bx C\bCo\bom\bmm\bma\ban\bnd\bds\bs
+
+
+       Complex commands are combinations of simple commands with
+       control operators or reserved words, together creating a
+       larger complex command.  More generally, a command is one
+       of the following:
+
+         - simple command
+
+         - pipeline
+
+         - list or compound-list
+
+         - compound command
+
+         - function definition
+
+
+       Unless otherwise stated, the exit status of a command is
+       that of the last simple command executed by the command.
+
+
+       P\bPi\bip\bpe\bel\bli\bin\bne\be
+
+
+       A pipeline is a sequence of one or more commands separated
+       by the control operator |.  The standard output of all but
+       the last command is connected to the standard input of the
+       next command.
+
+       The format for a pipeline is:
+
+       [!] command1 [ | command2 ...]
+
+
+       The standard output of command1 is connected to the stan-
+       dard input of command2. The standard input, standard out-
+       put, or both of a command is considered to be assigned by
+
+
+
+4.4BSD                                                          9
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       the pipeline before any redirection specified by redirec-
+       tion operators that are part of the command.
+
+       If the pipeline is not in the background (discussed
+       later), the shell waits for all commands to complete.
+
+       If the reserved word ! does not precede the pipeline, the
+       exit status is the exit status of the last command speci-
+       fied in the pipeline.  Otherwise, the exit status is the
+       logical NOT of the exit status of the last command.  That
+       is, if the last command returns zero, the exit status is
+       1; if the last command returns greater than zero, the exit
+       status is zero.
+
+       Because pipeline assignment of standard input or standard
+       output or both takes place before redirection, it can be
+       modified by redirection.  For example:
+
+       $ command1 2>&1 | command2
+
+       sends both the standard output and standard error of com-
+       mand1 to the standard input of command2.
+
+       A ; or <newline> terminator causes the preceding AND-OR-
+       list (described next) to be executed sequentially; a &
+       causes asynchronous execution of the preceding AND-OR-
+       list.
+
+
+       B\bBa\bac\bck\bkg\bgr\bro\bou\bun\bnd\bd C\bCo\bom\bmm\bma\ban\bnd\bds\bs -\b--\b- &\b&
+
+
+       If a command is terminated by the control operator amper-
+       sand (&), the shell executes the command asynchronously --
+       that is, the shell does not wait for the command to finish
+       before executing the next command.
+
+       The format for running a command in background is:
+
+       command1 & [command2 & ...]
+
+       If the shell is not interactive, the standard input of an
+       asynchronous command is set to /dev/null.
+
+
+       L\bLi\bis\bst\bts\bs -\b--\b- G\bGe\ben\bne\ber\bra\bal\bll\bly\by S\bSp\bpe\bea\bak\bki\bin\bng\bg
+
+
+       A list is a sequence of zero or more commands separated by
+       newlines, semicolons, or ampersands, and optionally termi-
+       nated by one of these three characters.  The commands in a
+
+
+
+4.4BSD                                                         10
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       list are executed in the order they are written.  If com-
+       mand is followed by an ampersand, the shell starts the
+       command and immediately proceed onto the next command;
+       otherwise it waits for the command to terminate before
+       proceeding to the next one.
+
+       ``&&'' and ``||'' are AND-OR list operators.  ``&&'' exe-
+       cutes the first command, and then executes the second com-
+       mand iff the exit status of the first command is zero.
+       ``||'' is similar, but executes the second command iff the
+       exit status of the first command is nonzero.  ``&&'' and
+       ``||'' both have the same priority.
+
+       The syntax of the if command is
+
+           if list
+           then list
+           [ elif list
+           then    list ] ...
+           [ else list ]
+           fi
+
+       The syntax of the while command is
+
+           while list
+           do   list
+           done
+
+       The two lists are executed repeatedly while the exit sta-
+       tus of the first list is zero.  The until command is simi-
+       lar, but has the word until in place of while repeat until
+       the exit status of the first list is zero.
+
+       The syntax of the for command is
+
+           for variable in word...
+           do   list
+           done
+
+       The words are expanded, and then the list is executed
+       repeatedly with the variable set to each word in turn.  do
+       and done may be replaced with ``{'' and ``}''.
+
+       The syntax of the break and continue command is
+
+           break [ num ]
+           continue [ num ]
+
+       Break terminates the num innermost for or while loops.
+       Continue continues with the next iteration of the inner-
+       most loop.  These are implemented as builtin commands.
+
+
+
+4.4BSD                                                         11
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       The syntax of the case command is
+
+           case word in
+           pattern) list ;;
+           ...
+           esac
+
+
+       The pattern can actually be one or more patterns (see
+       Shell Patterns described later), separated by ``|'' char-
+       acters.
+
+
+       Commands may be grouped by writing either
+
+           (list)
+
+       or
+
+           { list; }
+
+       The first of these executes the commands in a subshell.
+
+
+       F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs
+
+
+       The syntax of a function definition is
+
+           name ( ) command
+
+
+       A function definition is an executable statement; when
+       executed it installs a function named name and returns an
+       exit status of zero.   The command is normally a list
+       enclosed between ``{'' and ``}''.
+
+       Variables may be declared to be local to a function by
+       using a local command.  This should appear as the first
+       statement of a function, and the syntax is
+
+           local [ variable | - ] ...
+
+       Local is implemented as a builtin command.
+
+       When a variable is made local, it inherits the initial
+       value and exported and readonly flags from the variable
+       with the same name in the surrounding scope, if there is
+       one.  Otherwise, the variable is initially unset.   The
+       shell uses dynamic scoping, so that if you make the vari-
+       able x local to function f, which then calls function g,
+
+
+
+4.4BSD                                                         12
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       references to the variable x made inside g will refer to
+       the variable x declared inside f, not to the global vari-
+       able named x.
+
+       The only special parameter than can be made local is
+       ``-''.  Making ``-'' local any shell options that are
+       changed via the set command inside the function to be
+       restored to their original values when the function
+       returns.
+
+       The syntax of the return command is
+
+           return [ exitstatus ]
+
+       It terminates the currently executing function.  Return is
+       implemented as a builtin command.
+
+
+       V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs a\ban\bnd\bd P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs
+
+
+       The shell maintains a set of parameters.  A parameter
+       denoted by a name is called a variable. When starting up,
+       the shell turns all the environment variables into shell
+       variables.  New variables can be set using the form
+
+           name=value
+
+
+       Variables set by the user must have a name consisting
+       solely of alphabetics, numerics, and underscores - the
+       first of which must not be numeric.  A parameter can also
+       be denoted by a number or a special character as explained
+       below.
+
+
+       P\bPo\bos\bsi\bit\bti\bio\bon\bna\bal\bl P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs
+
+
+       A positional parameter is a parameter denoted by a number
+       (n > 0).  The shell sets these initially to the values of
+       its command line arguments that follow the name of the
+       shell script.  The set(1) builtin can also be used to set
+       or reset them.
+
+
+       S\bSp\bpe\bec\bci\bia\bal\bl P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs
+
+
+       A special parameter is a parameter denoted by one of the
+       following special characters.  The value of the parameter
+
+
+
+4.4BSD                                                         13
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       is listed next to its character.
+
+       *      Expands to the positional parameters, starting from
+              one.  When the expansion occurs within a double-
+              quoted string it expands to a single field with the
+              value of each parameter separated by the first
+              character of the IFS variable, or by a <space> if
+              IFS is unset.
+
+       @      Expands to the positional parameters, starting from
+              one.  When the expansion occurs within double-
+              quotes, each positional parameter expands as a sep-
+              arate argument.  If there are no positional parame-
+              ters, the expansion of @ generates zero arguments,
+              even when @ is double-quoted.  What this basically
+              means, for example, is if $1 is ``abc'' and $2 is
+              ``def ghi'', then "$@" expands to the two argu-
+              ments:
+
+              "abc"   "def ghi"
+
+       #      Expands to the number of positional parameters.
+
+       ?      Expands to the exit status of the most recent
+              pipeline.
+
+       - (Hyphen)
+              Expands to the current option flags (the single-
+              letter option names concatenated into a string) as
+              specified on invocation, by the set builtin com-
+              mand, or implicitly by the shell.
+
+       $      Expands to the process ID of the invoked shell.  A
+              subshell retains the same value of $ as its parent.
+
+       !      Expands to the process ID of the most recent back-
+              ground command executed from the current shell.
+              For a pipeline, the process ID is that of the last
+              command in the pipeline.
+
+       0 (Zero.)
+              Expands to the name of the shell or shell script.
+
+
+
+       W\bWo\bor\brd\bd E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bns\bs
+
+
+       This clause describes the various expansions that are per-
+       formed on words.  Not all expansions are performed on
+       every word, as explained later.
+
+
+
+4.4BSD                                                         14
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       Tilde expansions, parameter expansions, command substitu-
+       tions, arithmetic expansions, and quote removals that
+       occur within a single word expand to a single field.  It
+       is only field splitting or pathname expansion that can
+       create multiple fields from a single word. The single
+       exception to this rule is the expansion of the special
+       parameter @ within double-quotes, as was described above.
+
+       The order of word expansion is:
+
+       (1)  Tilde Expansion, Parameter Expansion, Command Substi-
+       tution, Arithmetic Expansion (these all occur at the same
+       time).
+
+       (2)  Field Splitting is performed on fields generated by
+       step (1) unless the IFS variable is null.
+
+       (3)  Pathname Expansion (unless set -f is in effect).
+
+       (4)  Quote Removal.
+
+       The $ character is used to introduce parameter expansion,
+       command substitution, or arithmetic evaluation.
+
+
+       T\bTi\bil\bld\bde\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn (\b(s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bin\bng\bg a\ba u\bus\bse\ber\br'\b's\bs h\bho\bom\bme\be d\bdi\bir\bre\bec\bct\bto\bor\bry\by)\b)
+
+
+       A word beginning with an unquoted tilde character (~) is
+       subjected to tilde expansion.  All the characters up to a
+       slash (/) or the end of the word are treated as a username
+       and are replaced with the user's home directory.  If the
+       username is missing (as in ~/foobar), the tilde is
+       replaced with the value of the HOME variable (the current
+       user's home directory).
+
+
+
+       P\bPa\bar\bra\bam\bme\bet\bte\ber\br E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
+
+
+       The format for parameter expansion is as follows:
+
+           ${expression}
+
+       where expression consists of all characters until the
+       matching }.  Any } escaped by a backslash or within a
+       quoted string, and characters in embedded arithmetic
+       expansions, command substitutions, and variable expan-
+       sions, are not examined in determining the matching }.
+
+
+
+
+4.4BSD                                                         15
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       The simplest form for parameter expansion is:
+
+           ${parameter}
+
+       The value, if any, of parameter is substituted.
+
+       The parameter name or symbol can be enclosed in braces,
+       which are optional except for positional parameters with
+       more than one digit or when parameter is followed by a
+       character that could be interpreted as part of the name.
+       If a parameter expansion occurs inside double-quotes:
+
+       1) Pathname expansion is not performed on the results of
+       the expansion.
+
+       2) Field splitting is not performed on the results of the
+       expansion, with the exception of @.
+
+       In addition, a parameter expansion can be modified by
+       using one of the following formats.
+
+
+       ${parameter:-word}
+              Use Default Values.  If parameter is unset or null,
+              the expansion of word is substituted; otherwise,
+              the value of parameter is substituted.
+
+       ${parameter:=word}
+              Assign Default Values.  If parameter is unset or
+              null, the expansion of word is assigned to parame-
+              ter.  In all cases, the final value of parameter is
+              substituted.  Only variables, not positional param-
+              eters or special parameters, can be assigned in
+              this way.
+
+       ${parameter:?[word]}
+              Indicate Error if Null or Unset.  If parameter is
+              unset or null, the expansion of word (or a message
+              indicating it is unset if word is omitted) is writ-
+              ten to standard error and the shell exits with a
+              nonzero exit status.  Otherwise, the value of
+              parameter is substituted.  An interactive shell
+              need not exit.
+
+       ${parameter:+word}
+              Use Alternate Value.  If parameter is unset or
+              null, null is substituted; otherwise, the expansion
+              of word is substituted.
+
+       In the parameter expansions shown previously, use of the
+       colon in the format results in a test for a parameter that
+
+
+
+4.4BSD                                                         16
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       is unset or null; omission of the colon results in a test
+       for a parameter that is only unset.
+
+       ${#parameter}
+              String Length.  The length in characters of the
+              value of parameter.
+
+       The following four varieties of parameter expansion pro-
+       vide for substring processing.  In each case, pattern
+       matching notation (see Shell Patterns), rather than regu-
+       lar expression notation, is used to evaluate the patterns.
+       If parameter is * or @, the result of the expansion is
+       unspecified.  Enclosing the full parameter expansion
+       string in double-quotes does not cause the following four
+       varieties of pattern characters to be quoted, whereas
+       quoting characters within the braces has this effect.
+
+       ${parameter%word}
+              Remove Smallest Suffix Pattern.  The word is
+              expanded to produce a pattern.  The parameter
+              expansion then results in parameter, with the
+              smallest portion of the suffix matched by the pat-
+              tern deleted.
+
+
+       ${parameter%%word}
+              Remove Largest Suffix Pattern.  The word is
+              expanded to produce a pattern.  The parameter
+              expansion then results in parameter, with the
+              largest portion of the suffix matched by the pat-
+              tern deleted.
+
+       ${parameter#word}
+              Remove Smallest Prefix Pattern.  The word is
+              expanded to produce a pattern.  The parameter
+              expansion then results in parameter, with the
+              smallest portion of the prefix matched by the pat-
+              tern deleted.
+
+       ${parameter##word}
+              Remove Largest Prefix Pattern.  The word is
+              expanded to produce a pattern.  The parameter
+              expansion then results in parameter, with the
+              largest portion of the prefix matched by the pat-
+              tern deleted.
+
+
+
+       C\bCo\bom\bmm\bma\ban\bnd\bd S\bSu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn
+
+
+
+
+
+4.4BSD                                                         17
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       Command substitution allows the output of a command to be
+       substituted in place of the command name itself.  Command
+       substitution occurs when the command is enclosed as fol-
+       lows:
+
+              $(command)
+
+       or (``backquoted'' version):
+
+              `command`
+
+
+       The shell expands the command substitution by executing
+       command in a subshell environment and replacing the com-
+       mand substitution with the standard output of the command,
+       removing sequences of one or more <newline>s at the end of
+       the substitution.  (Embedded <newline>s before the end of
+       the output are not removed; however, during field split-
+       ting, they may be translated into <space>s, depending on
+       the value of IFS and quoting that is in effect.)
+
+
+
+       A\bAr\bri\bit\bth\bhm\bme\bet\bti\bic\bc E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
+
+
+       Arithmetic expansion provides a mechanism for evaluating
+       an arithmetic expression and substituting its value. The
+       format for arithmetic expansion is as follows:
+
+              $((expression))
+
+       The expression is treated as if it were in double-quotes,
+       except that a double-quote inside the expression is not
+       treated specially.  The shell expands all tokens in the
+       expression for parameter expansion, command substitution,
+       and quote removal.
+
+       Next, the shell treats this as an arithmetic expression
+       and substitutes the value of the expression.
+
+
+
+       W\bWh\bhi\bit\bte\be S\bSp\bpa\bac\bce\be S\bSp\bpl\bli\bit\btt\bti\bin\bng\bg (\b(F\bFi\bie\bel\bld\bd S\bSp\bpl\bli\bit\btt\bti\bin\bng\bg)\b)
+
+
+       After parameter expansion, command substitution, and
+       arithmetic expansion the shell scans the results of expan-
+       sions and substitutions that did not occur in double-
+       quotes for field splitting and multiple fields can result.
+
+
+
+
+4.4BSD                                                         18
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       The shell treats each character of the IFS as a delimiter
+       and use the delimiters to split the results of parameter
+       expansion and command substitution into fields.
+
+
+
+       P\bPa\bat\bth\bhn\bna\bam\bme\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn (\b(F\bFi\bil\ble\be N\bNa\bam\bme\be G\bGe\ben\bne\ber\bra\bat\bti\bio\bon\bn)\b)
+
+
+       Unless the -f flag is set, file name generation is per-
+       formed after word splitting is complete.  Each word is
+       viewed as a series of patterns, separated by slashes.  The
+       process of expansion replaces the word with the names of
+       all existing files whose names can be formed by replacing
+       each pattern with a string that matches the specified pat-
+       tern.  There are two restrictions on this: first, a pat-
+       tern cannot match a string containing a slash, and second,
+       a pattern cannot match a string starting with a period
+       unless the first character of the pattern is a period.
+       The next section describes the patterns used for both
+       Pathname Expansion and the case(1) command.
+
+
+
+       S\bSh\bhe\bel\bll\bl P\bPa\bat\btt\bte\ber\brn\bns\bs
+
+
+       A pattern consists of normal characters, which match them-
+       selves, and meta-characters.   The meta-characters are
+       ``!'', ``*'', ``?'', and ``[''.  These  characters lose
+       there special meanings if they are quoted.  When command
+       or variable substitution is performed and the dollar sign
+       or back quotes are not double quoted, the value of the
+       variable or the output of the command is scanned for these
+       characters and they are turned into meta-characters.
+
+       An asterisk (``*'') matches any string of characters.   A
+       question mark matches any single character. A left bracket
+       (``['') introduces a character class.  The end of the
+       character class is indicated by a ``]''; if the ``]'' is
+       missing then the ``['' matches a ``['' rather than intro-
+       ducing a character class.  A character class matches any
+       of the characters between the square brackets.   A range
+       of characters may be specified using a minus sign.  The
+       character class may be complemented by making an exclama-
+       tion point the first character of the character class.
+
+       To include a ``]'' in a character class, make it the first
+       character listed (after the ``!'', if any).  To include a
+       minus sign, make it the first or last character listed
+
+
+
+
+4.4BSD                                                         19
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       B\bBu\bui\bil\blt\bti\bin\bns\bs
+
+
+       This section lists the builtin commands which are builtin
+       because they need to perform some  operation that can't be
+       performed by a separate process. In addition to these,
+       there are several other commands that may be builtin for
+       efficiency (e.g. printf(1), echo(1), test(1), etc).
+
+       :      A null command that returns a 0 (true) exit value.
+
+       . file The commands in the specified file are read and
+              executed by the shell.
+
+       alias  [ name[=string] ...  ]
+              If name=string is specified, the shell defines the
+              alias ``name'' with value ``string''.  If just
+              ``name'' is specified, the value of the alias
+              ``name'' is printed.  With no arguments, the alias
+              builtin prints the names and values of all defined
+              aliases (see unalias).
+
+       bg [ job ] ...
+              Continue the specified jobs (or the current job if
+              no jobs are given) in the background.
+
+       command command arg...
+              Execute the specified builtin command.  (This is
+              useful when you have a shell function with the same
+              name as a builtin command.)
+
+       cd [ directory ]
+              Switch to the specified directory (default $HOME).
+              If the an entry for CDPATH appears in the environ-
+              ment of the cd command or the shell variable CDPATH
+              is set and the directory name does not begin with a
+              slash, then the directories listed in CDPATH will
+              be searched for the specified directory.  The for-
+              mat of CDPATH is the same as that of PATH. In an
+              interactive shell, the cd command will print out
+              the name of the directory that it actually switched
+              to if this is different from the name that the user
+              gave.  These may be different either because the
+              CDPATH mechanism was used or because a symbolic
+              link was crossed.
+
+       eval string...
+              Concatenate all the arguments with spaces.  Then
+              re-parse and execute the command.
+
+
+
+
+
+4.4BSD                                                         20
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       exec [ command arg...  ]
+              Unless command is omitted, the shell process is
+              replaced with the specified program (which must be
+              a real program, not a shell builtin or function).
+              Any redirections on the exec command are marked as
+              permanent, so that they are not undone when the
+              exec command finishes.
+
+       exit [ exitstatus ]
+              Terminate the shell process.  If exitstatus is
+              given it is used as the exit status of the shell;
+              otherwise the exit status of the preceding command
+              is used.
+
+       export name...
+              The specified names are exported so that they will
+              appear in the environment of subsequent commands.
+              The only way to un-export a variable is to unset
+              it.  The shell allows the value of a variable to be
+              set at the same time it is exported by writing
+
+                  export name=value
+
+              With no arguments the export command lists the
+              names of all exported variables.
+
+       fc  [-e editor] [first [last]]
+
+       fc  -l [-nr] [first [last]]
+
+       fc  -s [old=new] [first]
+              The fc builtin lists, or edits and re-executes,
+              commands previously entered to an interactive
+              shell.
+
+            -e editor
+              Use the editor named by editor to edit the com-
+              mands.  The editor string is a command name, sub-
+              ject to search via the PATH variable.  The value in
+              the FCEDIT variable is used as a default when -e is
+              not specified.  If FCEDIT is null or unset, the
+              value of the EDITOR variable is used.  If EDITOR is
+              null or unset, ed(1) is used as the editor.
+
+            -l (ell)
+              List the commands rather than invoking an editor on
+              them.  The commands are written in the sequence
+              indicated by the first and last operands, as
+              affected by -r, with each command preceded by the
+              command number.
+
+
+
+
+4.4BSD                                                         21
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+            -n
+              Suppress command numbers when listing with -l.
+
+            -r
+              Reverse the order of the commands listed (with -l)
+              or edited (with neither -l nor -s).
+
+            -s
+              Re-execute the command without invoking an editor.
+
+            first
+
+            last
+              Select the commands to list or edit.  The number of
+              previous commands that can be accessed are deter-
+              mined by the value of the HISTSIZE variable.  The
+              value of first or last or both are one of the fol-
+              lowing:
+
+            [+]number
+              A positive number representing a command number;
+              command numbers can be displayed with the -l
+              option.
+
+            -number
+              A negative decimal number representing the command
+              that was executed number of commands previously.
+              For example, -1 is the immediately previous com-
+              mand.
+
+            string
+              A string indicating the most recently entered com-
+              mand that begins with that string.  If the old=new
+              operand is not also specified with -s, the string
+              form of the first operand cannot contain an embed-
+              ded equal sign.
+
+            The following environment variables affect the
+              execution of fc:
+
+            FCEDIT
+              Name of the editor to use.
+
+            HISTSIZE
+              The number of previous commands that are access-
+              able.
+
+       fg [ job ]
+              Move the specified job or the current job to the
+              foreground.
+
+
+
+
+4.4BSD                                                         22
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       getopts optstring var
+              The POSIX getopts command.
+
+       hash -rv command...
+              The shell maintains a hash table which remembers
+              the locations of commands.  With no arguments what-
+              soever, the hash command  prints out the contents
+              of this table.  Entries which have not been looked
+              at since the last cd command are marked with an
+              asterisk; it is possible for these entries to be
+              invalid.
+
+              With arguments, the hash command removes the speci-
+              fied commands from the hash table (unless they are
+              functions) and then locates them.   With the -v
+              option, hash prints the locations of the commands
+              as it finds them.  The -r option causes the hash
+              command to delete all the entries in the hash table
+              except for functions.
+
+       jobid [ job ]
+              Print the process id's of the processes in the job.
+              If the job argument is omitted, use the current
+              job.
+
+       jobs   This command lists out all the background processes
+              which are children of the current shell process.
+
+       pwd    Print the current directory.  The builtin command
+              may differ from the program of the same name
+              because the builtin command remembers what the cur-
+              rent directory is rather than recomputing it each
+              time.  This makes it faster.  However, if the cur-
+              rent directory is renamed, the builtin version of
+              pwd will continue to print the old name for the
+              directory.
+
+       read [ -p prompt ] [ -e ] variable...
+              The prompt is printed if the -p option is specified
+              and the standard input is a terminal.  Then a line
+              is read from the standard input.  The trailing new-
+              line is deleted from the line and the line is split
+              as described in the section on word splitting
+              above, and the pieces are assigned to the variables
+              in order.  If there are more pieces than variables,
+              the remaining pieces (along with the characters in
+              IFS that separated them) are assigned to the last
+              variable.  If there are more variables than pieces,
+              the remaining variables are assigned the null
+              string.
+
+
+
+
+4.4BSD                                                         23
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+              The -e option causes any backslashes in the input
+              to be treated specially.  If a backslash is fol-
+              lowed by a newline, the backslash and the newline
+              will be deleted.   If a backslash is followed by
+              any other character, the backslash will be deleted
+              and the following character will be treated as
+              though it were not in IFS, even if it is.
+
+       readonly name...
+              The specified names are marked as read only, so
+              that they cannot be subsequently modified or unset.
+              The shell allows the value of a variable to be set
+              at the same time it is marked read only by writing
+
+       readonly name=value
+              With no arguments the readonly command lists the
+              names of all read only variables.
+
+       set [ { -options | +options | -- } ] arg...
+              The set command performs three different functions.
+
+              With no arguments, it lists the values of all shell
+              variables.
+
+              If options are given, it sets the specified option
+              flags, or clears them as described in the section
+              called ``Argument List Processing''.
+
+              The third use of the set command is to set the val-
+              ues of the shell's positional parameters to the
+              specified args.   To change the positional parame-
+              ters without changing any options, use ``--'' as
+              the first argument to set.  If no args are present,
+              the set command will clear all the positional
+              parameters (equivalent to executing ``shift $#''.
+
+       setvar variable value
+              Assigns value to variable. (In general it is better
+              to write variable=value rather than using setvar.
+              Setvar is intended to be used in functions that
+              assign values to variables whose names are passed
+              as parameters.)
+
+       shift [ n ]
+              Shift the positional parameters n times.  A shift
+              sets the value of $1 to the value of $2, the value
+              of $2 to the value of $3, and so on, decreasing the
+              value of $# by one. If there are zero positional
+              parameters, shifting doesn't do anything.
+
+
+
+
+
+4.4BSD                                                         24
+
+
+
+
+
+
+
+
+SH(1)                  BSD Reference Manual                 SH(1)
+
+
+       trap [ action ] signal...
+              Cause the shell to parse and execute action when
+              any of the specified signals are received. The sig-
+              nals are specified by signal number. Action may be
+              null or omitted; the former causes the specified
+              signal to be ignored and the latter causes the
+              default action to be taken. When the shell forks
+              off a subshell, it resets trapped (but not ignored)
+              signals to the default action. The trap command has
+              no effect on signals that were ignored on entry to
+              the shell.
+
+       umask [ mask ]
+              Set the value of umask (see umask(2)) to the speci-
+              fied octal value.  If the argument is omitted, the
+              umask value is printed.
+
+       unalias [-a] [name]
+              If ``name'' is specified, the shell removes that
+              alias.  If ``-a'' is specified, all aliases are
+              removed.
+
+       unset name...
+              The specified variables and functions are unset and
+              unexported. If a given name corresponds to both a
+              variable and a function, both the variable and the
+              function are unset.
+
+       wait [ job ]
+              Wait for the specified job to complete and return
+              the exit status of the last process in the job. If
+              the argument is omitted, wait for all jobs to com-
+              plete and the return an exit status of zero.
+
+
+
+       C\bCo\bom\bmm\bma\ban\bnd\bd L\bLi\bin\bne\be E\bEd\bdi\bit\bti\bin\bng\bg
+
+
+       When sh is being used interactively from a terminal, the
+       current command and the command history (see fc in
+       Builtins) can be edited using vi-mode command-line edit-
+       ing. This mode uses commands, described below, similar to
+       a subset of those described in the vi man page.  The com-
+       mand set -o vi enables vi-mode editing and place sh into
+       vi insert mode.  With vi-mode enabled, sh can be switched
+       between insert mode and command mode. The editor is not
+       described in full here, but will be in a later document.
+       It's similar to vi: typing <ESC> will throw you into com-
+       mand VI command mode. Hitting <return> while in command
+       mode will pass the line to the shell.
+
+
+
+4.4BSD                                                         25
+
+
+
+
+