ksh88(1) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

ksh88(1)

ksh88(1)                         User Commands                        ksh88(1)



NAME
       ksh88,  rksh88  - KornShell, a standard/restricted command and program‐
       ming language

SYNOPSIS
       /usr/sunos/bin/ksh [± abCefhikmnoprstuvx] [± o option]...
            [arg]...


       /usr/sunos/bin/ksh -c [± abCefhikmnoprstuvx]
            [± o option]... command_string
            [command_name [arg...]]


       /usr/xpg4/bin/sh [± abCefhikmnoprstuvx]
            [± o option]... [arg]...


       /usr/xpg4/bin/sh -c [± abCefhikmnoprstuvx]
            [± o option]... command_string
            [command_name [arg...]]


       /usr/sunos/bin/rksh [± abCefhikmnoprstuvx] [± o option]...
            [arg]...


       /usr/sunos/bin/rksh -c [± abCefhikmnoprstuvx]
            [± o option]... command_string
            [command_name [arg...]]

DESCRIPTION
       The /usr/xpg4/bin/sh utility is a standards compliant shell. This util‐
       ity  provides  all  the  functionality of /usr/sunos/bin/ksh, except in
       cases where differences in behavior exist.  See  Arithmetic  Expansions
       section for details.


       /usr/sunos/bin/ksh  is a command and programming language that executes
       commands read from a terminal or a file. rksh is a  restricted  version
       of  the  command  interpreter ksh; it is used to set up login names and
       execution environments whose  capabilities  are  more  controlled  than
       those of the standard shell. See the Invocation section for the meaning
       of arguments to the shell.

   Definitions
       A metacharacter is one of the following characters:


       ; & ( ) | < >  NEWLINE   SPACE   TAB


       A blank is a TAB or a SPACE. An identifier is a  sequence  of  letters,
       digits,  or  underscores  starting with a letter or underscore. Identi‐
       fiers are used as names for  functions  and  variables.  A  word  is  a
       sequence  of characters separated by one or more non-quoted metacharac‐
       ters.


       A command is a sequence of characters in the syntax of the  shell  lan‐
       guage.  The shell reads each command and carries out the desired action
       either directly or by invoking separate utilities. A special-command is
       a  command that is carried out by the shell without creating a separate
       process. Except for documented side effects, most special commands  can
       be implemented as separate utilities.

   Commands
       A  simple-command  is  a sequence of blank-separated words which can be
       preceded by a variable assignment list. See Environment. The first word
       specifies  the name of the command to be executed. Except as specified,
       the remaining words are passed as arguments to the invoked command. The
       command name is passed as argument 0 (see exec(2)). The value of a sim‐
       ple-command is its exit status if it terminates normally. If it  termi‐
       nates  abnormally  due  to receipt of a signal, the value is the signal
       number plus 128. See signal.h(3HEAD) for a list of signal values. Obvi‐
       ously,  normal  exit  status  values 129 to 255 cannot be distinguished
       from abnormal exit caused by receiving signal numbers 1 to 127.


       A pipeline is a sequence of one or more commands separated  by  |.  The
       standard  output of each command but the last is connected by a pipe(2)
       to the standard input of the next command. Each command  is  run  as  a
       separate  process;  the  shell waits for the last command to terminate.
       The exit status of a pipeline is the exit status of the last command.


       A list is a sequence of one or more pipelines separated by ;, &, &&, or
       ||, and optionally terminated by ;, &, or |&. Of these five symbols, ;,
       &, and |& have equal precedence, which is lower than that of && and ||.
       The  symbols  &&  and  ||  also  have equal precedence. A semicolon (;)
       causes sequential execution of the preceding pipeline; an ampersand (&)
       causes  asynchronous  execution of the preceding pipeline (that is, the
       shell does not wait for that pipeline to finish). The symbol |&  causes
       asynchronous execution of the preceding command or pipeline with a two-
       way pipe established to the parent shell.


       The standard input and output of the spawned command can be written  to
       and  read  from  by the parent shell using the -p option of the special
       commands read and print  described  in  Special  Commands.  The  symbol
       &&(||)  causes the list following it to be executed only if the preced‐
       ing pipeline returns 0 (or a non-zero) value. An  arbitrary  number  of
       new-lines  can  appear  in a list, instead of a semicolon, to delimit a
       command.


       A command is either a simple-command or one of  the  following.  Unless
       otherwise  stated,  the value returned by a command is that of the last
       simple-command executed in the command.

       for identifier [ in word ... ] ; do list ; done

           Each time a for command is executed, identifier is set to the  next
           word taken from the in  word list. If in  word ... is omitted, then
           the for command executes the do   list  once  for  each  positional
           parameter  that  is set. See Parameter Substitution. Execution ends
           when there are no more words in the list.


       select identifier [ in word ... ] ; do list ; done

           A select command prints to standard error (file descriptor 2),  the
           set of words, each preceded by a number. If in word ... is omitted,
           then the positional parameters are used instead. See Parameter Sub‐
           stitution.  The  PS3  prompt is printed and a line is read from the
           standard input. If this line consists of the number of one  of  the
           listed  words,  then the value of the variable identifier is set to
           the word corresponding to this number. If this line  is  empty  the
           selection  list  is printed again. Otherwise the value of the vari‐
           able identifier is set to NULL.  (See  Blank  Interpretation  about
           NULL).  The  contents of the line read from standard input is saved
           in the shell variable REPLY. The list is executed for  each  selec‐
           tion  until a break or EOF is encountered. If the REPLY variable is
           set to NULL by the execution of list, then the  selection  list  is
           printed before displaying the PS3 prompt for the next selection.


       case word in [ pattern [ | pattern ] ) list ;; ] ... esac

           A  case command executes the list associated with the first pattern
           that matches word. The form of the patterns is  the  same  as  that
           used for file-name generation. See File Name Generation.


       if list ; then list ; [ elif list ; then list ; ... ] [ else list ; ]
       fi

           The list following if is executed and, if it returns an exit status
           of 0, the list following the first then is executed. Otherwise, the
           list following elif is executed and, if its value is  0,  the  list
           following the next then is executed. Failing that, the else list is
           executed. If no else list or then list is  executed,  then  the  if
           command returns 0 exit status.


       while list ; do list ; done
       until list ; do list ; done

           A while command repeatedly executes the while list and, if the exit
           status of the last command in the list is 0, executes the  do list;
           otherwise  the  loop  terminates. If no commands in the do list are
           executed, then the while command returns 0 exit status.  until  can
           be used in place of while to negate the loop termination test.



       (list)

           Execute list in a separate environment. If two adjacent open paren‐
           theses are needed for nesting, a space must be  inserted  to  avoid
           arithmetic evaluation.


       {list}

           list is simply executed. Unlike the metacharacters ( and ), { and }
           are reserved words and must occur at the beginning  of  a  line  or
           after a ; in order to be recognized.


       [[expression]]

           Evaluates  expression  and returns 0 exit status when expression is
           true. See Conditional Expressions for a description of expression.


       function identifier { list ;}
       identifier( ) { list ;}

           Define a function which is referenced by identifier.  The  body  of
           the  function  is  the  list of commands between { and }. See Func‐
           tions.



       time pipeline

           The pipeline is executed and the elapsed time as well as  the  user
           and system time are printed to standard error.



       The following reserved words are only recognized as the first word of a
       command and when not quoted:

         !          if       then     else    elif    fi      case
         esac       for      while    until   do      done    {   }
         function   select   time     [[  ]]


   Comments
       A word beginning with # causes that word and all the following  charac‐
       ters up to a new-line to be ignored.

   Aliasing
       The  first  word of each command is replaced by the text of an alias if
       an alias for this word has been defined. An alias name consists of  any
       number of characters excluding metacharacters, quoting characters, file
       expansion characters, parameter and  command  substitution  characters,
       and  =.  The  replacement  string  can  contain  any valid shell script
       including the metacharacters listed above. The first word of each  com‐
       mand  in  the  replaced text, other than any that are in the process of
       being replaced, is tested for aliases. If the  last  character  of  the
       alias  value  is  a  blank then the word following the alias is also be
       checked for alias substitution. Aliases can be used to redefine special
       builtin  commands  but  cannot  be  used to redefine the reserved words
       listed above. Aliases can be created, listed,  and  exported  with  the
       alias  command  and  can  be removed with the unalias command. Exported
       aliases remain in effect for scripts  invoked  by  name,  but  must  be
       reinitialized for separate invocations of the shell. See Invocation. To
       prevent infinite loops in recursive aliasing, if the shell is not  cur‐
       rently  processing  an  alias of the same name, the word is replaced by
       the value of the alias; otherwise, it is not be replaced.


       Aliasing is performed when scripts are read, not while  they  are  exe‐
       cuted.  Therefore,  for  an  alias to take effect, the alias definition
       command has to be executed before  the  command  which  references  the
       alias is read.


       Aliases  are  frequently  used  as a short hand for full path names. An
       option to the aliasing facility allows the value of  the  alias  to  be
       automatically  set  to  the full pathname of the corresponding command.
       These aliases are called tracked aliases. The value of a tracked  alias
       is  defined  the  first time the corresponding command is looked up and
       becomes undefined each time the PATH variable is reset.  These  aliases
       remain  tracked  so  that  the  next subsequent reference redefines the
       value. Several tracked aliases are compiled  into  the  shell.  The  -h
       option  of  the  set  command makes each referenced command name into a
       tracked alias.


       The following exported aliases are compiled into (and built-in to)  the
       shell but can be unset or redefined:

         autoload='typeset −fu'
         functions='typeset −f'
         history='fc −l'
         integer='typeset −i'
         nohup='nohup '
         r='fc −e −'



       An example concerning trailing blank characters and reserved words fol‐
       lows. If the user types:

         $ alias foo="/bin/ls "
         $ alias while="/"



       the effect of executing:

         $ while true
         > do
         > echo "Hello, World"
         > done



       is a never-ending sequence of Hello, World strings to the screen.  How‐
       ever, if the user types:

         $ foo while



       the  result is an ls listing of /. Since the alias substitution for foo
       ends in a space character, the next word is checked for alias substitu‐
       tion. The next word, while, has also been aliased, so it is substituted
       as well. Since it is not in the proper position as a command  word,  it
       is not recognized as a reserved word.


       If the user types:

         $ foo; while



       while retains its normal reserved-word properties.

   Tilde Substitution
       After  alias  substitution is performed, each word is checked to see if
       it begins with an unquoted ~. If it does, then the word up to  a  /  is
       checked  to  see  if it matches a user name. If a match is found, the ~
       and the matched login name are replaced by the login directory  of  the
       matched  user.  This  is  called  a  tilde substitution. If no match is
       found, the original text is left unchanged. A ~ by itself, or in  front
       of  a  /, is replaced by $HOME. A ~ followed by a + or − is replaced by
       $PWD and $OLDPWD, respectively.


       In addition, tilde substitution is attempted when the value of a  vari‐
       able assignment begins with a ~.

   Tilde Expansion
       A tilde-prefix consists of an unquoted tilde character at the beginning
       of a word, followed by  all  of  the  characters  preceding  the  first
       unquoted  slash in the word, or all the characters in the word if there
       is no slash. In an assignment, multiple tilde-prefixes can be used:  at
       the  beginning  of  the  word (that is, following the equal sign of the
       assignment), following any unquoted colon or both. A tilde-prefix in an
       assignment  is terminated by the first unquoted colon or slash. If none
       of the characters in the tilde-prefix are quoted, the characters in the
       tilde-prefix  following  the tilde are treated as a possible login name
       from the user database.


       A portable login name cannot contain characters outside the  set  given
       in  the  description  of the LOGNAME environment variable. If the login
       name is null (that is, the tilde-prefix contains only the  tilde),  the
       tilde-prefix  is replaced by the value of the variable HOME. If HOME is
       unset, the results are  unspecified.  Otherwise,  the  tilde-prefix  is
       replaced  by a pathname of the home directory associated with the login
       name obtained using the getpwnam function. If the system does not  rec‐
       ognize the login name, the results are undefined.


       Tilde expansion generally occurs only at the beginning of words, but an
       exception based on historical practice has been included:

         PATH=/posix/bin:~dgk/bin



       is eligible for tilde expansion because tilde follows a colon and  none
       of  the  relevant characters is quoted. Consideration was given to pro‐
       hibiting this behavior because any of the following are reasonable sub‐
       stitutes:

         PATH=$(printf %s ~karels/bin : ~bostic/bin)
         for Dir in ~maart/bin ~srb/bin .
         do
              PATH=${PATH:+$PATH:}$Dir
         done



       With the first command, explicit colons are used for each directory. In
       all cases, the shell performs tilde expansion on each directory because
       all are separate words to the shell.


       Expressions in operands such as:

         make -k mumble LIBDIR=~chet/lib



       do not qualify as shell variable assignments and tilde expansion is not
       performed (unless the command does so itself, which make does not).


       The special sequence $~ has been designated for future  implementations
       to evaluate as a means of forcing tilde expansion in any word.


       Because  of  the requirement that the word not be quoted, the following
       are not equivalent; only the last causes tilde expansion:

         \~hlj/   ~h\lj/   ~"hlj"/   ~hlj\/   ~hlj/



       The results of giving tilde with an unknown login  name  are  undefined
       because  the KornShell ~+ and ~− constructs make use of this condition,
       but, in general it is an error to give an  incorrect  login  name  with
       tilde.  The  results  of having HOME unset are unspecified because some
       historical shells treat this as an error.

   Command Substitution
       The standard output from a command enclosed in parenthesis preceded  by
       a dollar sign (that is, $(command)) or a pair of grave accents (``) can
       be used as part or all of a word. Trailing new-lines  are  removed.  In
       the  second  (archaic) form, the string between the quotes is processed
       for special quoting characters before  the  command  is  executed.  See
       Quoting.  The  command substitution $(cat  file) can be replaced by the
       equivalent but faster $(<file). Command substitution  of  most  special
       commands  that  do not perform input/output redirection are carried out
       without creating a separate process.


       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 follows:

         $(command)



       or (backquoted version):

         `command`



       The shell expands the command substitution by executing  command  in  a
       subshell  environment  and replacing the command substitution (the text
       of command plus the enclosing $() or backquotes) with the standard out‐
       put  of  the command, removing sequences of one or more newline charac‐
       ters at the end of the substitution. Embedded newline characters before
       the  end  of the output is not be removed; however, they can be treated
       as field delimiters and eliminated during field splitting, depending on
       the value of IFS and quoting that is in effect.


       Within  the  backquoted  style of command substitution, backslash shall
       retain its literal meaning, except when followed by:

         $     `     \



       (dollar-sign, backquote, backslash). The search for the matching  back‐
       quote  is  satisfied  by  the first backquote found without a preceding
       backslash. During this search, if a non-escaped  backquote  is  encoun‐
       tered within a shell comment, a here-document, an embedded command sub‐
       stitution of the $(command) form, or a quoted string, undefined results
       occur. A single- or double-quoted string that begins, but does not end,
       within the `...` sequence produces undefined results.


       With the $(command) form, all characters following the open parenthesis
       to  the  matching closing parenthesis constitute the command. Any valid
       shell script can be used for command, except:

           o      A script consisting solely of redirections produces unspeci‐
                  fied results.


           o      See the restriction on single subshells.



       The  results  of command substitution are not field splitting and path‐
       name expansion processed for further tilde expansion, parameter  expan‐
       sion,  command  substitution or arithmetic expansion. If a command sub‐
       stitution occurs inside double-quotes, it is not be  performed  on  the
       results of the substitution.


       Command substitution can be nested. To specify nesting within the back‐
       quoted version, the application must precede the inner backquotes  with
       backslashes; for example:

         `\`command\``



       The  $()  form of command substitution solves a problem of inconsistent
       behavior when using backquotes. For example:


       tab() box; cw(2.75i) cw(2.75i) lw(2.75i) lw(2.75i) CommandOutput _ echo
       '\$x'\$x echo `echo '\$x'`$x echo $(echo '\$x')\$x



       Additionally,  the backquoted syntax has historical restrictions on the
       contents of the embedded command. While the new $()  form  can  process
       any  kind  of  valid embedded script, the backquoted form cannot handle
       some valid scripts that include backquotes. For example,  these  other‐
       wise valid embedded scripts do not work in the left column, but do work
       on the right:


       tab() box; lw(2.75i) lw(2.75i) echo `echo $(  cat  <<eeofcat  <<eeof  a
       here-doc  with  `a here-doc with ) eofeof `) echo `echo $( echo abc # a
       comment with `echo abc # a comment with ) `) echo `echo $( echo '`'echo
       ')' `)



       Because of these inconsistent behaviors, the backquoted variety of com‐
       mand substitution is not recommended for  new  applications  that  nest
       command substitutions or attempt to embed complex scripts.


       If the command substitution consists of a single subshell, such as:

         $( (command) )



       a portable application must separate the $( and ( into two tokens (that
       is, separate them with white space). This  is  required  to  avoid  any
       ambiguities with arithmetic expansion.

   Arithmetic Expansion
       An  arithmetic  expression enclosed in double parentheses preceded by a
       dollar sign ( $((arithmetic-expression)) ) is replaced by the value  of
       the  arithmetic  expression  within  the double parenthesis. 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 substitute
       the value of the expression. The  arithmetic  expression  is  processed
       according to the rules of the ISO C with the following exceptions:

           o      Only integer arithmetic is required.


           o      The  sizeof()  operator and the prefix and postfix ++ and −−
                  operators are not required.


           o      Selection, iteration, and jump statements are not supported.


           o      /usr/sunos/bin/ksh and /usr/sunos/bin/rksh  treat  prefix  0
                  through 9 as decimal constants. See the following examples:


                  tab();  lw(1.83i)  lw(1.83i)  lw(1.83i)  lw(1.83i) lw(1.83i)
                  lw(1.83i)     CommandResult     in     /bin/kshResult     in
                  /usr/xpg4/bin/sh       echo       $((010+10))2018       echo
                  $((019+10))29error [ 10 -le $((011)) ]truefalse




       As an extension, the shell can recognize arithmetic expressions  beyond
       those listed. If the expression is invalid, the expansion fails and the
       shell writes a message to standard error indicating the failure.


       A simple example using arithmetic expansion:

         # repeat a command 100 times
         x=100
         while [ $x −gt 0 ]
         do
              command
              x=$(($x−1))
         done


   Process Substitution
       This feature is available in Oracle Solaris and only on versions of the
       UNIX  operating  system  that  support the /dev/fd directory for naming
       open files. Each command argument of the form <(list) or  >(list)  runs
       process list asynchronously connected to some file in /dev/fd. The name
       of this file becomes the argument to the command. If the form with > is
       selected,  then  writing  on this file provides input for list. If < is
       used, then the file passed as an argument contains the  output  of  the
       list process. For example:

         paste <(cut -f1 file1) <(cut -f3 file2) | tee >(process1) >(process2)



       cuts  fields  1  and  3  from  the files file1 and file2, respectively,
       pastes the results together, and sends it to the processes process1 and
       process2,  as  well  as  putting it onto the standard output. The file,
       which is passed as an argument to the command, is  a  UNIX  pipe(2)  so
       programs that expect to lseek(2) on the file does not work.

   Parameter Substitution
       A parameter is an identifier, one or more digits, or any of the charac‐
       ters *, @, #, ?, −, $, and !. A variable (a  parameter  denoted  by  an
       identifier)  has  a value and zero or more attributes. variables can be
       assigned values and attributes by using the  typeset  special  command.
       The  attributes  supported  by  the  shell are described later with the
       typeset special command. Exported variables pass values and  attributes
       to the environment.


       The  shell  supports a one-dimensional array facility. An element of an
       array variable is referenced by a subscript. A subscript is denoted  by
       a  [, followed by an arithmetic expression, followed by a ]. See Arith‐
       metic Evaluation. To assign values to an array, use set  -A  name value
       ....  The  value  of  all  subscripts must be in the range of 0 through
       4095. Arrays need not be declared. Any reference to a variable  with  a
       valid  subscript  is legal and an array is created if necessary. Refer‐
       encing an array without a subscript is equivalent  to  referencing  the
       element  0.  If an array identifier with subscript * or @ is used, then
       the value for each of the elements is substituted (separated by a field
       separator character).


       The value of a variable can be assigned by writing:

         name=value [ name=value ] ...



       If  the integer attribute, -i, is set for name, the value is subject to
       arithmetic evaluation.


       Positional parameters, parameters denoted by a number, can be  assigned
       values  with the set special command. Parameter $0 is set from argument
       zero when the shell is invoked. If parameter is one or more digits then
       it  is  a positional parameter. A positional parameter of more than one
       digit must be enclosed in braces.

   Parameter Expansion
       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
       expansions, are not examined in determining the matching }.


       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. The matching closing brace are determined by counting
       brace levels, skipping over enclosed quoted strings and command substi‐
       tutions.


       If the parameter name or symbol is not enclosed in braces,  the  expan‐
       sion  uses the longest valid name whether or not the symbol represented
       by that name exists. When the shell is scanning its input to  determine
       the  boundaries  of  a  name,  it is not bound by its knowledge of what
       names are already defined. For example, if F is a defined  shell  vari‐
       able, the command:

         echo $Fred



       does  not  echo the value of $F followed by red; it selects the longest
       possible valid name, Fred, which in this case might be unset.


       If a parameter expansion occurs inside double-quotes:

           o      Pathname expansion is not be performed on the results of the
                  expansion.


           o      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.  In each case that a value of word is needed (based
       on the state of parameter),  word  is  subjected  to  tilde  expansion,
       parameter  expansion, command substitution and arithmetic expansion. If
       word is not needed, it is not expanded. The } character  that  delimits
       the  following  parameter  expansion  modifications  is  determined  as
       described previously in this  section  and  in  dquote.  (For  example,
       ${foo-bar}xyz}  would  result  in  the expansion of foo followed by the
       string xyz} if foo is set, else the string barxyz}).

       ${parameter:−word}       Use Default Values. If parameter is  unset  or
                                null,  the  expansion  of word is substituted.
                                Otherwise, the value of parameter  is  substi‐
                                tuted.


       ${parameter:=word}       Assign  Default  Values. If parameter is unset
                                or null, the expansion of word is assigned  to
                                parameter.  In  all  cases, the final value of
                                parameter is substituted. Only variables,  not
                                positional  parameters  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 written to standard error and the
                                shell exits with a non-zero exit status.  Oth‐
                                erwise, the value of parameter is substituted.
                                An interactive shell need not exit.


       ${parameter:+[word]}     Use Alternative 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 is unset or null. Omis‐
       sion of the colon results in a test for a parameter that is only unset.
       The following two tables summarize the effect of the colon:


       tab()   box;   lw(1.83i)  |lw(1.83i)  |lw(1.83i)  lw(1.83i)  |lw(1.83i)
       |lw(1.83i) parameter set & not nullparameter set  &  null  _  ${parame‐
       ter:-word}substitute  parametersubstitute  word _ ${parameter−word}sub‐
       stitute parametersubstitute null _ ${parameter:=word}substitute parame‐
       terassign word _ ${parameter=word}substitute parametersubstitute param‐
       eter _ ${parameter:?word}substitute parametererror,  exit  _  ${parame‐
       ter?word}substitute  parametersubstitute  null _ ${parameter:+word}sub‐
       stitute wordsubstitute null _  ${parameter+word}substitute  wordsubsti‐
       tute word



       tab()  box; lw(2.75i) |lw(2.75i) lw(2.75i) |lw(2.75i) parameter unset _
       ${parameter:-word}substitute word _ ${parameter−word}substitute word  _
       ${parameter:=word}assign word _ ${parameter=word}assign null _ ${param‐
       eter:?word}error,  exit  _  ${parameter?word}error,  exit  _  ${parame‐
       ter:+word}substitute null _ ${parameter+word}substitute null



       In  all  cases shown with "substitute", the expression is replaced with
       the value shown.  In  all  cases  shown  with  "assign",  parameter  is
       assigned that value, which also replaces the expression.

       ${#parameter}    String  Length.  The length in characters of the value
                        of parameter. If parameter is * or  @,  then  all  the
                        positional  parameters,  starting with $1, are substi‐
                        tuted (separated by a field separator character).



       The following four varieties of parameter expansion  provide  for  sub‐
       string  processing.  In  each case, pattern matching notation (see pat‐
       mat), rather than regular expression notation, is used to evaluate  the
       patterns.  If  parameter is * or @, then all the positional parameters,
       starting with $1, are substituted (separated by a field separator char‐
       acter).  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
                             pattern 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
                             pattern 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.



       Examples:


       ${parameter:−word}


       In  this example, ls is executed only if x is null or unset. (The $(ls)
       command substitution notation  is  explained  in  Command  Substitution
       above.)

         ${x:-$(ls)}



       ${parameter:=word}

         unset X
         echo ${X:=abc}
         abc



       ${parameter:?word}

         unset posix
         echo ${posix:?}
         sh: posix: parameter null or not set



       ${parameter:+word}

         set a b c
         echo ${3:+posix}
         posix



       ${#parameter}

         HOME=/usr/posix
         echo ${#HOME}
         10



       ${parameter%word}

         x=file.c
         echo ${x%.c}.o
         file.o



       ${parameter%%word}

         x=posix/src/std
         echo ${x%%/*}
         posix



       ${parameter#word}

         x=$HOME/src/cmd
         echo ${x#$HOME}
         /src/cmd



       ${parameter##word}

         x=/one/two/three
         echo ${x##*/}
         three


   Parameters Set by Shell
       The following parameters are automatically set by the shell:

       #          The number of positional parameters in decimal.


       −          Flags supplied to the shell on invocation or by the set com‐
                  mand.


       ?          The decimal value returned by the last executed command.


       $          The process number of this shell.


       _          Initially, the value of _ is an  absolute  pathname  of  the
                  shell or script being executed as passed in the environment.
                  Subsequently it is assigned the last argument of the  previ‐
                  ous  command.  This  parameter is not set for commands which
                  are asynchronous. This parameter is also used  to  hold  the
                  name of the matching MAIL file when checking for mail.


       !          The process number of the last background command invoked.


       ERRNO      The value of errno as set by the most recently failed system
                  call. This value is system dependent  and  is  intended  for
                  debugging purposes.


       LINENO     The  line  number  of  the current line within the script or
                  function being executed.


       OLDPWD     The previous working directory set by the cd command.


       OPTARG     The value of the  last  option  argument  processed  by  the
                  getopts special command.


       OPTIND     The  index  of  the  last  option  argument processed by the
                  getopts special command.


       PPID       The process number of the parent of the shell.


       PWD        The present working directory set by the cd command.


       RANDOM     Each time this variable is  referenced,  a  random  integer,
                  uniformly distributed between 0 and 32767, is generated. The
                  sequence of random numbers can be initialized by assigning a
                  numeric value to RANDOM.


       REPLY      This variable is set by the select statement and by the read
                  special command when no arguments are supplied.


       SECONDS    Each time this variable is referenced, the number of seconds
                  since  shell  invocation  is  returned.  If this variable is
                  assigned a value, then the value returned upon reference  is
                  the value that was assigned plus the number of seconds since
                  the assignment.


   Variables Used by Shell
       The following variables are used by the shell:

       CDPATH         The search path for the cd command.


       COLUMNS        If this variable is set, the value is used to define the
                      width  of  the  edit window for the shell edit modes and
                      for printing select lists.


       EDITOR         If the value of this variable ends in emacs,  gmacs,  or
                      vi  and  the VISUAL variable is not set, then the corre‐
                      sponding option is turned on. See the set  special  com‐
                      mand.


       ENV            This  variable,  when and only when an interactive shell
                      is invoked, is subjected to parameter expansion  by  the
                      shell and the resulting value is used as a pathname of a
                      file containing shell commands to execute in the current
                      environment.  The  file  need  not be executable. If the
                      expanded value of ENV is not an absolute  pathname,  the
                      results  are  unspecified.  ENV is ignored if the user's
                      real and effective user IDs or real and effective  group
                      IDs are different.

                      This variable can be used to set aliases and other items
                      local to the invocation of a shell. The file referred to
                      by  ENV  differs from $HOME/.profile in that .profile is
                      typically executed at session startup, whereas  the  ENV
                      file  is executed at the beginning of each shell invoca‐
                      tion. The ENV value is interpreted in a  manner  similar
                      to  a  dot  script, in that the commands are executed in
                      the current environment and the file needs to  be  read‐
                      able,  but  not executable. However, unlike dot scripts,
                      no PATH searching is performed. This is used as a  guard
                      against Trojan Horse security breaches.


       FCEDIT         The default editor name for the fc command.


       FPATH          The  search  path  for function definitions. By default,
                      the FPATH directories are searched after the PATH  vari‐
                      able.  If  an  executable file is found, then it is read
                      and  executed  in  the  current  environment.  FPATH  is
                      searched  before  PATH  when  a  function  with  the  -u
                      attribute  is  referenced.  The  preset  alias  autoload
                      causes a function with the -u attribute to be created.


       HISTFILE       If  this variable is set when the shell is invoked, then
                      the value is the pathname of the file that  is  used  to
                      store the command history. See Command re-entry.


       HISTSIZE       If  this variable is set when the shell is invoked, then
                      the number  of  previously  entered  commands  that  are
                      accessible  by  this  shell  is greater than or equal to
                      this number. The default is 128.


       HOME           The default argument (home directory) for  the  cd  com‐
                      mand.


       IFS            Internal field separators, normally space, tab, and new-
                      line that are  used  to  separate  command  words  which
                      result  from  command  or parameter substitution and for
                      separating words with  the  special  command  read.  The
                      first  character of the IFS variable is used to separate
                      arguments for the $* substitution. See Quoting.


       LANG           Provide a default  value  for  the  internationalization
                      variables that are unset or null. If any of the interna‐
                      tionalization variables contains an invalid setting, the
                      utility  behaves  as  if  none of the variables had been
                      defined.


       LC_ALL         This variable provides a  default  value  for  the  LC_*
                      variables.


       LC_COLLATE     This  variable  determines the behavior of range expres‐
                      sions, equivalence classes and multibyte character  col‐
                      lating elements within pattern matching.


       LC_CTYPE       Determines   how  the  shell  handles  characters.  When
                      LC_CTYPE is set to a valid value, the shell can  display
                      and  handle  text and filenames containing valid charac‐
                      ters for that locale. If LC_CTYPE  (see  environ(7))  is
                      not  set in the environment, the operational behavior of
                      the shell is determined by the value of the  LANG  envi‐
                      ronment  variable.  If  LC_ALL  is set, its contents are
                      used to override both the LANG and the other LC_*  vari‐
                      ables.


       LC_MESSAGES    This  variable determines the language in which messages
                      should be written.


       LINENO         This variable is set by the shell to  a  decimal  number
                      representing  the  current  sequential line number (num‐
                      bered starting with  1)  within  a  script  or  function
                      before  it  executes each command. If the user unsets or
                      resets LINENO, the variable can lose its special meaning
                      for the life of the shell. If the shell is not currently
                      executing a script or function, the value of  LINENO  is
                      unspecified.


       LINES          If  this variable is set, the value is used to determine
                      the column length  for  printing  select  lists.  Select
                      lists  print  vertically until about two-thirds of LINES
                      lines are filled.


       MAIL           If this variable is set to the name of a mail  file  and
                      the MAILPATH variable is not set, then the shell informs
                      the user of arrival of mail in the specified file.


       MAILCHECK      This variable specifies how often (in seconds) the shell
                      checks  for  changes  in the modification time of any of
                      the files specified by the MAILPATH or  MAIL  variables.
                      The  default  value  is  600  seconds. When the time has
                      elapsed the shell checks before issuing the next prompt.


       MAILPATH       A colon (:) separated list of file names. If this  vari‐
                      able is set, then the shell informs the user of any mod‐
                      ifications to the specified  files  that  have  occurred
                      within the last MAILCHECK seconds. Each file name can be
                      followed by a ? and a message that is printed. The  mes‐
                      sage  undergoes parameter substitution with the variable
                      $_ defined as the name of the file that has changed. The
                      default message is you have mail in $_.


       NLSPATH        Determine  the  location  of  message catalogues for the
                      processing of LC_MESSAGES.


       PATH           The search path for commands. See  Execution.  The  user
                      cannot  change  PATH  if executing under rksh (except in
                      .profile).


       PPID           This variable is set by the shell to the decimal process
                      ID of the process that invoked the shell. In a subshell,
                      PPID is set to the same value as that of the  parent  of
                      the  current  shell.  For  example, echo $PPID and (echo
                      $PPID) would produce the same value.


       PS1            The value of this variable  is  expanded  for  parameter
                      substitution  to  define the primary prompt string which
                      by default is "$ ".  The  character  !  in  the  primary
                      prompt  string  is  replaced  by the command number. See
                      Command Re-entry. Two successive occurrences of  !  pro‐
                      duces a single ! when the prompt string is printed.


       PS2            Secondary prompt string, by default "> ".


       PS3            Selection  prompt  string  used within a select loop, by
                      default "#? ".


       PS4            The value of this variable  is  expanded  for  parameter
                      substitution  and  precedes  each  line  of an execution
                      trace. If omitted, the execution trace prompt is "+ ".


       PWD            Set by the shell to be an absolute pathname of the  cur‐
                      rent working directory, containing no components of type
                      symbolic link, no components that are dot, and no compo‐
                      nents that are dot-dot when the shell is initialized. If
                      an application sets or unsets  the  value  of  PWD,  the
                      behaviors of the cd and pwd utilities are unspecified


       SHELL          The pathname of the shell is kept in the environment. At
                      invocation, if the basename of  this  variable  is  rsh,
                      rksh, or krsh, then the shell becomes restricted.


       TMOUT          If  set  to  a value greater than zero, the shell termi‐
                      nates if a command is not entered within the  prescribed
                      number  of  seconds  after  issuing  the PS1 prompt. The
                      shell can be compiled with  a  maximum  bound  for  this
                      value which cannot be exceeded.


       VISUAL         If  the  value of this variable ends in emacs, gmacs, or
                      vi, then the corresponding option is turned on. See Spe‐
                      cial Command set.



       The  shell gives default values to PATH, PS1, PS2, PS3, PS4, MAILCHECK,
       FCEDIT, TMOUT, and IFS, while HOME, SHELL, ENV, and MAIL are not set at
       all  by  the shell (although HOME  is set by login(1)). On some systems
       MAIL and SHELL are also set by login.

   Blank Interpretation
       After parameter and command substitution, the results of  substitutions
       are scanned for the field separator characters (those found in IFS) and
       split into distinct arguments where such characters are found. Explicit
       null  arguments  (  ""  ) or ('') are retained. Implicit null arguments
       (those resulting from parameters that have no values) are removed.

   File Name Generation
       Following substitution, each command word is scanned for the characters
       *,  ?, and [ unless the -f option has been set. If one of these charac‐
       ters appears, the word is regarded as a pattern. The word  is  replaced
       with  lexicographically sorted file names that match the pattern. If no
       file name  is  found  that  matches  the  pattern,  the  word  is  left
       unchanged. When a pattern is used for file name generation, the charac‐
       ter period (.) at the start of a file name or immediately  following  a
       /,  as  well  as  the character / itself, must be matched explicitly. A
       file name beginning with a period is not matched with  a  pattern  with
       the  period  inside parentheses. That is, ls .@(r*) would locate a file
       named .restore, but ls @(.r*) would not. In other instances of  pattern
       matching, the / and . are not treated specially.

       *        Matches any string, including the null string.


       ?        Matches any single character.


       [...]    Matches  any one of the enclosed characters. A pair of charac‐
                ters separated by − matches any  character  lexically  between
                the  pair,  inclusive.  If  the  first character following the
                opening "[" is a "! ", then  any  character  not  enclosed  is
                matched.  A  − can be included in the character set by putting
                it as the first or last character.



       A pattern-list is a list of one or more patterns  separated  from  each
       other  with  a  |. Composite patterns can be formed with one or more of
       the following:

       ?(pattern-list)    Optionally matches any one of the given patterns.


       *(pattern-list)    Matches zero or more occurrences of the  given  pat‐
                          terns.


       +(pattern-list)    Matches  one  or  more occurrences of the given pat‐
                          terns.


       @(pattern-list)    Matches exactly one of the given patterns.


       !(pattern-list)    Matches anything, except one of the given patterns.


   Quoting
       Each of the metacharacters listed above (see Definitions) has a special
       meaning  to the shell and causes termination of a word unless quoted. A
       character can be quoted (that is, made to stand for itself) by  preced‐
       ing  it with a \. The pair \NEWLINE is removed. All characters enclosed
       between a pair of single quote marks (' ') are quoted. A  single  quote
       cannot  appear  within  single  quotes. Inside double quote marks (""),
       parameter and command substitution occur and \ quotes the characters \,
       `,  ",  and $. The meaning of $* and $@ is identical when not quoted or
       when used as a parameter assignment value or as a file  name.  However,
       when used as a command argument, $* is equivalent to "$1d$2d...", where
       d is the first character of the IFS variable, whereas $@ is  equivalent
       to  $1   $2 .... Inside grave quote marks (``), \ quotes the characters
       \, ', and $. If the grave quotes occur within  double  quotes,  then  \
       also quotes the character ".


       The  special  meaning  of  reserved  words or aliases can be removed by
       quoting any character of the reserved word. The recognition of function
       names  or  special  command  names  listed cannot be altered by quoting
       them.

   Arithmetic Evaluation
       An ability to perform integer arithmetic is provided with  the  special
       command let. Evaluations are performed using long arithmetic. Constants
       are of the form [ base# ] n where base is a decimal number between  two
       and  thirty-six  representing  the arithmetic base and n is a number in
       that base. If base is omitted then base 10 is used.


       An arithmetic expression uses the same syntax, precedence, and associa‐
       tivity  of  expression  as  the C language. All the integral operators,
       other than ++, −−, ?:, and , are supported. Variables can be referenced
       by  name  within  an  arithmetic expression without using the parameter
       substitution syntax. When a variable is referenced, its value is evalu‐
       ated as an arithmetic expression.


       An  internal integer representation of a variable can be specified with
       the -i option of the typeset special command. Arithmetic evaluation  is
       performed  on  the  value  of each assignment to a variable with the -i
       attribute. If you do not specify an arithmetic base, the first  assign‐
       ment  to the variable determines the arithmetic base. This base is used
       when parameter substitution occurs.


       Since many of the arithmetic operators require quoting, an  alternative
       form  of the let command is provided. For any command which begins with
       a ((, all the characters until a matching )) are treated  as  a  quoted
       expression. More precisely, ((...)) is equivalent to let  "...".

   Prompting
       When  used interactively, the shell prompts with the parameter expanded
       value of PS1 before reading a command. If at any  time  a  new-line  is
       typed  and further input is needed to complete a command, then the sec‐
       ondary prompt (that is, the value of PS2) is issued.

   Conditional Expressions
       A conditional expression is used with the [[ compound command  to  test
       attributes  of  files  and  to compare strings. Word splitting and file
       name generation are not performed on the words between [[ and ]].  Each
       expression  can  be constructed from one or more of the following unary
       or binary expressions:

       -a file              True, if file exists.


       -b file              True, if file exists and is a block special file.


       -c file              True, if file exists and is  a  character  special
                            file.


       -d file              True, if file exists and is a directory.


       -e file              True, if file exists.


       -f file              True, if file exists and is an ordinary file.


       -g file              True, if file exists and has its setgid bit set.


       -h file              True, if file exists and is a symbolic link.


       -k file              True, if file exists and has its sticky bit set.


       -n string            True, if length of string is non-zero.


       -o option            True, if option named option is on.


       -p file              True, if file exists and is a fifo special file or
                            a pipe.


       -r file              True, if file exists and is  readable  by  current
                            process.


       -s file              True,  if  file  exists  and has size greater than
                            zero.


       -t fildes            True, if file descriptor number fildes is open and
                            associated with a terminal device.


       -u file              True, if file exists and has its setuid bit set.


       -w file              True,  if  file  exists and is writable by current
                            process.


       -x file              True, if file exists and is executable by  current
                            process.  If  file exists and is a directory, then
                            the current process has permission  to  search  in
                            the directory.


       -z string            True, if length of string is zero.


       -L file              True, if file exists and is a symbolic link.


       -O file              True, if file exists and is owned by the effective
                            user id of this process.


       -G file              True, if file exists and  its  group  matches  the
                            effective group id of this process.


       -S file              True, if file exists and is a socket.


       file1 -nt file2      True, if file1 exists and is newer than file2.


       file1 -ot file2      True, if file1 exists and is older than file2.


       file1 -ef file2      True,  if  file1  and file2 exist and refer to the
                            same file.


       string               True if the string string is not the null string.


       string == pattern    True, if string matches pattern.


       string = pattern     Same as ==, but is obsolete.


       string != pattern    True, if string does not match pattern.


       string1 < string2    True, if string1 comes  before  string2  based  on
                            strings  interpreted  as appropriate to the locale
                            setting for category LC_COLLATE.


       string1 > string2    True, if string1  comes  after  string2  based  on
                            strings  interpreted  as appropriate to the locale
                            setting for category LC_COLLATE.


       exp1 -eq exp2        True, if exp1 is equal to exp2.


       exp1 -ne exp2        True, if exp1 is not equal to exp2.


       exp1 -lt exp2        True, if exp1 is less than exp2.


       exp1 -gt exp2        True, if exp1 is greater than exp2.


       exp1 -le exp2        True, if exp1 is less than or equal to exp2.


       exp1 -ge exp2        True, if exp1 is greater than or equal to exp2.



       In each of the above expressions, if file is  of  the  form  /dev/fd/n,
       where  n is an integer, then the test is applied to the open file whose
       descriptor number is n.


       A compound expression can be constructed from these primitives by using
       any of the following, listed in decreasing order of precedence.

       (expression)                  True,  if  expression  is  true.  Used to
                                     group expressions.


       ! expression                  True if expression is false.


       expression1 && expression2    True, if expression1 and expression2  are
                                     both true.


       expression1 || expression2    True,  if  either  expression1 or expres‐
                                     sion2 is true.


   Input/Output
       Before a command is executed, its input and output  can  be  redirected
       using  a  special  notation interpreted by the shell. The following can
       appear anywhere in a simple-command or can precede or follow a  command
       and  are  not  passed  on to the invoked command. Command and parameter
       substitution occur before word or digit is used except as  noted.  File
       name  generation  occurs only if the pattern matches a single file, and
       blank interpretation is not performed.

       <word         Use file word as standard input (file descriptor 0).


       >word         Use file word as standard output (file descriptor 1).  If
                     the  file  does not exist then it is created. If the file
                     exists, and the -noclobber option is on, this  causes  an
                     error; otherwise, it is truncated to zero length.


       >|word        Sames  as  >,  except  that  it  overrides the -noclobber
                     option.


       >>word        Use file word as standard output.  If  the  file  exists,
                     output  is  appended to it (by first seeking to the EOF).
                     Otherwise, the file is created.


       <>word        Open file word for reading and writing as standard input.


       << [-]word    The shell input is read up to a line that is the same  as
                     word,  or  to  an EOF. No parameter substitution, command
                     substitution, or file name  generation  is  performed  on
                     word.  The  resulting  document,  called a here-document,
                     becomes the standard input. If any character of  word  is
                     quoted,  no  interpretation is placed upon the characters
                     of the document. Otherwise, parameter and command substi‐
                     tution  occur, \NEWLINE is ignored, and \ must be used to
                     quote the characters \, $, `, and the first character  of
                     word.  If  − is appended to <<, then all leading tabs are
                     stripped from word and from the document.


       <&digit       The standard input is  duplicated  from  file  descriptor
                     digit  (see  dup(2)).  Similarly  for the standard output
                     using >&digit.


       <&−           The standard input is closed. Similarly for the  standard
                     output using >&−.


       <&p           The input from the co-process is moved to standard input.


       >&p           The output to the co-process is moved to standard output.



       If  one  of  the above is preceded by a digit, then the file descriptor
       number referred to is that specified  by  the  digit  (instead  of  the
       default 0 or 1). For example:

         ... 2>&1



       means  file  descriptor 2 is to be opened for writing as a duplicate of
       file descriptor 1.


       The order in which redirections are specified is significant. The shell
       evaluates  each  redirection  in  terms  of the (file descriptor, file)
       association at the time of evaluation. For example:

         ... 1>fname 2>&1



       first associates file descriptor 1 with file fname. It then  associates
       file descriptor 2 with the file associated with file descriptor 1 (that
       is, fname). If the order of redirections were reversed, file descriptor
       2 would be associated with the terminal (assuming file descriptor 1 had
       been) and then file descriptor 1 would be associated with file fname.


       If a command is followed by & and job control is not active,  then  the
       default  standard  input  for  the command is the empty file /dev/null.
       Otherwise, the environment for the execution of a command contains  the
       file  descriptors  of  the  invoking  shell as modified by input/output
       specifications.

   Environment
       The environment (see environ(7)) is a list of name-value pairs that  is
       passed  to  an  executed  program  in the same way as a normal argument
       list. The names must  be  identifiers  and  the  values  are  character
       strings.  The  shell interacts with the environment in several ways. On
       invocation, the shell scans the environment and creates a variable  for
       each  name  found,  giving  it  the  corresponding value and marking it
       export. Executed commands inherit the environment. If the user modifies
       the  values of these variables or creates new ones, using the export or
       typeset  -x commands, they become part of the environment. The environ‐
       ment  seen  by  any executed command is thus composed of any name-value
       pairs originally inherited by the shell, whose values can  be  modified
       by  the current shell, plus any additions which must be noted in export
       or typeset  -x commands.


       The environment for any simple-command or function can be augmented  by
       prefixing  it with one or more variable assignments. A variable assign‐
       ment argument is a word of the form identifier=value. Thus:

         TERM=450 cmd args



       and

         (export TERM; TERM=450; cmd args)



       are equivalent (as far as the above  execution  of  cmd  is  concerned,
       except for special commands listed that are preceded with an asterisk).


       If  the -k flag is set, all variable assignment arguments are placed in
       the environment, even if they occur after the command name. The follow‐
       ing first prints a=b c and then c:

         echo a=b c
         set −k echo
         a=b c



       This  feature  is  intended for use with scripts written for early ver‐
       sions of the shell and its use in new scripts is strongly  discouraged.
       It is likely to disappear someday.

   Functions
       The function reserved word, described in the Commands section above, is
       used to define shell functions. Shell functions are read in and  stored
       internally.  Alias  names are resolved when the function is read. Func‐
       tions are executed like commands with the  arguments  passed  as  posi‐
       tional parameters. See Execution.


       Functions execute in the same process as the caller and share all files
       and present working directory with the  caller.  Traps  caught  by  the
       caller  are  reset  to their default action inside the function. A trap
       condition that is not caught or ignored  by  the  function  causes  the
       function to terminate and the condition to be passed on to the caller.


       A  trap  on  EXIT  set inside a function is executed after the function
       completes in the environment of the caller. This is true only for  non-
       POSIX-style functions, that is, functions declared as

         function func



       as opposed to POSIX-style functions, declared as

         func()



       Ordinarily,  variables  are  shared between the calling program and the
       function. However, the typeset special command used within  a  function
       defines  local  variables whose scope includes the current function and
       all functions it calls.


       The special command return is  used  to  return  from  function  calls.
       Errors within functions return control to the caller.


       The  names of all functions can be listed with typeset  -f. typeset  -f
       lists all function names as well as the text of all functions.  typeset
       -f function-names lists the text of the named functions only. Functions
       can be undefined with the -f option of the unset special command.


       Ordinarily, functions are unset when the shell executes a shell script.
       The  -xf option of the typeset command allows a function to be exported
       to scripts that are executed  without  a  separate  invocation  of  the
       shell. Functions that need to be defined across separate invocations of
       the shell should be specified in the ENV file with the  -xf  option  of
       typeset.

   Function Definition Command
       A  function  is a user-defined name that is used as a simple command to
       call a compound command with new positional parameters. A  function  is
       defined with a function definition command.


       The format of a function definition command is as follows:

         fname() compound-command[io-redirect ...]



       The  function  is named fname; it must be a name. An implementation can
       allow other characters in a function name as an extension.  The  imple‐
       mentation maintains separate name spaces for functions and variables.


       The  ()  in  the function definition command consists of two operators.
       Therefore, intermixing blank characters with the fname,  (,  and  )  is
       allowed, but unnecessary.


       The argument compound-command represents a compound command.


       When  the  function  is  declared, none of the expansions in wordexp is
       performed on the text in compound-command or  io-redirect;  all  expan‐
       sions  is  performed  as normal each time the function is called. Simi‐
       larly, the optional io-redirect redirections and any  variable  assign‐
       ments  within compound-command is performed during the execution of the
       function itself, not the function definition.


       When a function is executed, it  has  the  syntax-error  and  variable-
       assignment properties described for the special built-in utilities.


       The  compound-command  is executed whenever the function name is speci‐
       fied as the name of a simple command The operands to the command tempo‐
       rarily  becomes  the  positional parameters during the execution of the
       compound-command; the special parameter # is also  changed  to  reflect
       the  number of operands. The special parameter 0 is unchanged. When the
       function completes, the values of the  positional  parameters  and  the
       special parameter # is restored to the values they had before the func‐
       tion was executed. If the special built-in return is  executed  in  the
       compound-command, the function completes and execution resumes with the
       next command after the function call.


       An example of how a function definition can be used wherever  a  simple
       command is allowed:

         # If variable i is equal to "yes",
         # define function foo to be ls −l
         #
         [ "$i" = yes ] && foo() {
               ls −l
         }



       The  exit  status  of  a  function  definition is 0 if the function was
       declared successfully; otherwise, it is greater  than  zero.  The  exit
       status  of a function invocation is the exit status of the last command
       executed by the function.

   Jobs
       If the monitor option of the set command is turned on,  an  interactive
       shell  associates a job with each pipeline. It keeps a table of current
       jobs, printed by the jobs command, and assigns them small integer  num‐
       bers.  When  a job is started asynchronously with &, the shell prints a
       line which looks like:

         [1] 1234



       indicating that the job, which was started asynchronously, was job num‐
       ber 1 and had one (top-level) process, whose process id was 1234.


       If  you  are  running a job and wish to do something else you can press
       the key ^Z (Control-Z) which sends a STOP signal to  the  current  job.
       The shell normally indicates that the job has been `Stopped', and print
       another prompt. You can then manipulate the state of this job,  putting
       it  in  the  background with the bg command, or run some other commands
       and then eventually bring the job back into  the  foreground  with  the
       foreground  command  fg.  A  ^Z takes effect immediately and is like an
       interrupt in that pending output and unread input are discarded when it
       is typed.


       A  job  being  run in the background stops if it tries to read from the
       terminal. Background jobs are normally allowed to produce  output,  but
       this  can  be  disabled by giving the command "stty tostop". If you set
       this tty option, then background jobs stop when  they  try  to  produce
       output as they do when they try to read input.


       There  are  several  ways  to  refer to jobs in the shell. A job can be
       referred to by the process id of any process of the job or  by  one  of
       the following:

       %number     The job with the given number.


       %string     Any job whose command line begins with string.


       %?string    Any job whose command line contains string.


       %%          Current job.


       %+          Equivalent to %%.


       %−          Previous job.



       The  shell learns immediately whenever a process changes state. It nor‐
       mally informs you whenever a job becomes blocked  so  that  no  further
       progress  is possible, but only just before it prints a prompt. This is
       done so that it does not otherwise disturb your work.


       When the monitor mode is on, each background job that  completes  trig‐
       gers any trap set for CHLD.


       When  you try to leave the shell while jobs are running or stopped, you
       are warned with the message, `You have stopped(running) jobs.' You  can
       use  the  jobs  command to see what they are. If you do this or immedi‐
       ately try to exit again, the shell does not warn you a second time, and
       the  stopped jobs is terminated. If you have jobs running for which the
       nohup command was invoked and attempt to logout, you  are  warned  with
       the message:


       You have jobs running.


       You  need  to  logout  a  second time to actually logout. However, your
       background jobs continue to run.

   Signals
       The INT and QUIT signals for an invoked command are ignored if the com‐
       mand is followed by & and the -monitor option is not active. Otherwise,
       signals have the values inherited by the shell from its parent. See the
       trap special command section.

   Execution
       Each  time  a  command is executed, the above substitutions are carried
       out. If the command name matches one of the Special Commands listed, it
       is executed within the current shell process. Next, the command name is
       checked to see if it matches one of the user defined functions.  If  it
       does,  the  positional parameters are saved and then reset to the argu‐
       ments of the function call. When the function  completes  or  issues  a
       return,  the  positional parameter list is restored and any trap set on
       EXIT within the function is executed. The value of a  function  is  the
       value  of the last command executed. A function is also executed in the
       current shell process. If a command name is not a special command or  a
       user  defined  function, a process is created and an attempt is made to
       execute the command using exec(2).


       The shell variable PATH defines the search path for the directory  con‐
       taining  the  command.  Alternative  directory names are separated by a
       colon (:). The default path is /usr/bin: (specifying /usr/bin  and  the
       current  directory  in that order). The current directory can be speci‐
       fied by two or more adjacent colons, or by a colon at the beginning  or
       end  of the path list. If the command name contains a / then the search
       path is not used. Otherwise, each directory in the path is searched for
       an  executable  file.  If  the file has execute permission but is not a
       directory or an a.out file, it is assumed to be a file containing shell
       commands.  A sub-shell is spawned to read it. All non-exported aliases,
       functions, and variables are removed in this case. A parenthesized com‐
       mand  is  executed in a sub-shell without removing non-exported quanti‐
       ties.

   Command Re-entry
       The text of the last HISTSIZE (default 128)  commands  entered  from  a
       terminal  device is saved in a history file. The file $HOME/.sh_history
       is used if the HISTFILE variable is not set or if the file it names  is
       not writable. A shell can access the commands of all interactive shells
       which use the same named HISTFILE. The special command fc  is  used  to
       list  or  edit  a  portion  of this file. The portion of the file to be
       edited or listed can be selected by number or by giving the first char‐
       acter  or  characters of the command. A single command or range of com‐
       mands can be specified. If you do not specify an editor program  as  an
       argument to fc then the value of the variable FCEDIT is used. If FCEDIT
       is not defined, then /bin/ed is used. The edited command(s) is  printed
       and  re-executed  upon leaving the editor. The editor name − is used to
       skip the editing phase and to re-execute the command. In  this  case  a
       substitution  parameter  of  the form old=new can be used to modify the
       command before execution. For example, if r is aliased to 'fc   -e   -'
       then  typing  'r  bad=good c' re-executes the most recent command which
       starts with the letter c, replacing the first occurrence of the  string
       bad with the string good.

   In-line Editing Option
       Normally,  each  command  line entered from a terminal device is simply
       typed followed by a new-line (RETURN or LINEFEED). If either the emacs,
       gmacs,  or  vi option is active, the user can edit the command line. To
       be in either of these edit modes set the corresponding option. An edit‐
       ing  option  is  automatically  selected each time the VISUAL or EDITOR
       variable is assigned a value ending in either of these option names.


       The editing features require that the user's terminal accept RETURN  as
       carriage  return  without line feed and that a space must overwrite the
       current character on the screen.


       The editing modes implement a concept where the user is looking through
       a  window at the current line. The window width is the value of COLUMNS
       if it is defined, otherwise 80. If the window width  is  too  small  to
       display  the  prompt  and  leave at least 8 columns to enter input, the
       prompt is truncated from the left. If the line is longer than the  win‐
       dow  width  minus  two, a mark is displayed at the end of the window to
       notify the user. As the cursor moves and reaches the window  boundaries
       the  window  are centered about the cursor. The mark is a > if the line
       extends on the right side of the window, < if the line extends  on  the
       left, and * if the line extends on both sides of the window.


       The  search  commands  in  each edit mode provide access to the history
       file. Only strings are matched, not patterns, although a leading  caret
       (^)  in  the string restricts the match to begin at the first character
       in the line.

   emacs Editing Mode
       This mode is entered by enabling either the emacs or gmacs option.  The
       only  difference  between these two modes is the way they handle ^T. To
       edit, move the cursor to the point needing correction and  then  insert
       or  delete  characters or words as needed. All the editing commands are
       control characters or escape sequences. The notation for control  char‐
       acters is caret ( ^ ) followed by the character. For example, ^F is the
       notation for control F. This is entered by pressing the 'f'  key  while
       holding down the CTRL (control) key. The SHIFT key is not pressed. (The
       notation ^? indicates the DEL (delete) key.)


       The notation for escape sequences is M- followed by  a  character.  For
       example, M-f (pronounced Meta f) is entered by pressing ESC followed by
       'f'. (M-F would be the notation for ESC  followed  by  SHIFT  (capital)
       'F'.)


       All  edit  commands operate from any place on the line (not just at the
       beginning). Neither the RETURN nor the LINEFEED key  is  entered  after
       edit commands except when noted.

       ^F           Move cursor forward (right) one character.


       M-f          Move  cursor forward one word. (The emacs editor's idea of
                    a word is a string of characters consisting of  only  let‐
                    ters, digits and underscores.)


       ^B           Move cursor backward (left) one character.


       M-b          Move cursor backward one word.


       ^A           Move cursor to start of line.


       ^E           Move cursor to end of line.


       ^]char       Move cursor forward to character char on current line.


       M-^]char     Move cursor backward to character char on current line.


       ^X^X         Interchange the cursor and mark.


       erase        (User  defined  erase  character as defined by the stty(1)
                    command, usually ^H or #.) Delete previous character.


       ^D           Delete current character.


       M-d          Delete current word.


       M-^H         (Meta-backspace) Delete previous word.


       M-h          Delete previous word.


       M-^?         (Meta-DEL) Delete previous word (if your interrupt charac‐
                    ter  is  ^?  (DEL, the default) then this command does not
                    work).


       ^T           Transpose current character with next character  in  emacs
                    mode. Transpose two previous characters in gmacs mode.


       ^C           Capitalize current character.


       M-c          Capitalize current word.


       M-l          Change the current word to lowercase.


       ^K           Delete from the cursor to the end of the line. If preceded
                    by a numerical parameter whose value is less than the cur‐
                    rent  cursor  position, then delete from given position up
                    to the cursor. If preceded by a numerical parameter  whose
                    value  is  greater  than the current cursor position, then
                    delete from cursor up to given cursor position.


       ^W           Kill from the cursor to the mark.


       M-p          Push the region from the cursor to the mark on the stack.


       kill         (User defined kill character as  defined  by  the  stty(1)
                    command,  usually  ^G or @.) Kill the entire current line.
                    If two kill characters are entered in succession, all kill
                    characters  from  then  on  cause a line feed (useful when
                    using paper terminals).


       ^Y           Restore last item removed from line. (Yank  item  back  to
                    the line.)


       ^L           Line feed and print current line.


       ^@           (null character) Set mark.


       M-space      (Meta space) Set mark.


       J            (New line) Execute the current line.


       M            (Return) Execute the current line.


       eof          End-of-file  character,  normally  ^D,  is processed as an
                    End-of-file only if the current line is null.


       ^P           Fetch previous command. Each time ^P is entered the previ‐
                    ous  command back in time is accessed. Moves back one line
                    when not on the first line of a multi-line command.


       M-<          Fetch the least recent (oldest) history line.


       M->          Fetch the most recent (youngest) history line.


       ^N           Fetch next command line. Each time ^N is entered the  next
                    command line forward in time is accessed.


       ^Rstring     Reverse  search  history  for a previous command line con‐
                    taining string. If a  parameter  of  zero  is  given,  the
                    search is forward. string is terminated by a RETURN or NEW
                    LINE. If string is preceded by a ^, the matched line  must
                    begin  with  string.  If  string is omitted, then the next
                    command  line  containing  the  most  recent   string   is
                    accessed.  In  this  case a parameter of zero reverses the
                    direction of the search.


       ^O           Operate. Execute the current line and fetch the next  line
                    relative to current line from the history file.


       M-digits     (Escape) Define numeric parameter, the digits are taken as
                    a parameter to the next command. The commands that  accept
                    a parameter are ^F, ^B, erase, ^C, ^D, ^K, ^R, ^P, ^N, ^],
                    M-., M-^], M-_, M-b, M-c, M-d, M-f, M-h, M-l and M-^H.


       M-letter     Soft-key. Your alias list is searched for an alias by  the
                    name  _letter and if an alias of this name is defined, its
                    value is inserted on the input queue. The letter must  not
                    be one of the above meta-functions.


       M-[letter    Soft-key.  Your alias list is searched for an alias by the
                    name __letter and if an alias of this name is defined, its
                    value  is  inserted on the input queue. The can be used to
                    program functions keys on many terminals.


       M−.          The last word of the previous command is inserted  on  the
                    line.  If  preceded  by  a numeric parameter, the value of
                    this parameter determines which word to insert rather than
                    the last word.


       M−_          Same as M−..


       M−*          An  asterisk is appended to the end of the word and a file
                    name expansion is attempted.


       M−ESC        File name completion. Replaces the current word  with  the
                    longest  common  prefix of all filenames matching the cur‐
                    rent word with an  asterisk  appended.  If  the  match  is
                    unique,  a  / is appended if the file is a directory and a
                    space is appended if the file is not a directory.


       M−=          List files matching current word pattern  if  an  asterisk
                    were appended.


       ^U           Multiply parameter of next command by 4.


       \            Escape  next  character.  Editing  characters,  the user's
                    erase, kill and interrupt (normally ^?) characters can  be
                    entered  in  a  command line or in a search string if pre‐
                    ceded by a \. The \ removes the next  character's  editing
                    features (if any).


       ^V           Display version of the shell.


       M-#          Insert  a  #  at the beginning of the line and execute it.
                    This causes a comment to be inserted in the history file.


   vi Editing Mode
       There are two typing modes. Initially, when you enter a command you are
       in  the input mode. To edit, enter control mode by typing ESC (033) and
       move the cursor to the point needing  correction  and  then  insert  or
       delete  characters  or words as needed. Most control commands accept an
       optional repeat count prior to the command.


       When in vi mode on most  systems,  canonical  processing  is  initially
       enabled  and  the  command is echoed again if the speed is 1200 baud or
       greater and it contains any control characters or less than one  second
       has  elapsed since the prompt was printed. The ESC character terminates
       canonical processing for the remainder of the command and the user  can
       then modify the command line. This scheme has the advantages of canoni‐
       cal processing with the type-ahead echoing of raw mode.


       If the option viraw is also set, the  terminal  always  have  canonical
       processing disabled. This mode is implicit for systems that do not sup‐
       port two alternate end of line delimiters, and can be helpful for  cer‐
       tain terminals.

   Input Edit Commands
       By default the editor is in input mode.

       erase    (User  defined  erase character as defined by the stty(1) com‐
                mand, usually ^H or #.) Delete previous character.


       ^W       Delete the previous blank separated word.


       ^D       Terminate the shell.


       ^V       Escape next character. Editing characters and the user's erase
                or  kill  characters  can be entered in a command line or in a
                search string if preceded by a ^V. The  ^V  removes  the  next
                character's editing features (if any).


       \        Escape the next erase or kill character.


   Motion Edit Commands
       The following commands move the cursor:

       [count]l     Cursor forward (right) one character.


       [count]w     Cursor forward one alpha-numeric word.


       [count]W     Cursor  to  the  beginning of the next word that follows a
                    blank.


       [count]e     Cursor to end of word.


       [count]E     Cursor to end of the current blank delimited word.


       [count]h     Cursor backward (left) one character.


       [count]b     Cursor backward one word.


       [count]B     Cursor to preceding blank separated word.


       [count]|     Cursor to column count.


       [count]fc    Find the next character c in the current line.


       [count]Fc    Find the previous character c in the current line.


       [count]tc    Equivalent to f followed by h.


       [count]Tc    Equivalent to F followed by l.


       [count];     Repeats count times, the last single character  find  com‐
                    mand, f, F, t, or T.


       [count],     Reverses  the  last  single  character  find command count
                    times.


       0            Cursor to start of line.


       ^            Cursor to first non-blank character in line.


       $            Cursor to end of line.


       %            Moves to balancing (, ), {, }, [, or ]. If cursor  is  not
                    on  one of the above characters, the remainder of the line
                    is searched for the first occurrence of one of  the  above
                    characters first.


   Search Edit Commands
       These commands access your command history.

       [count]k       Fetch  previous command. Each time k is entered the pre‐
                      vious command back in time is accessed.


       [count]−       Equivalent to k.


       [count]j       Fetch next command. Each time j  is  entered,  the  next
                      command forward in time is accessed.


       [count]+       Equivalent to j.


       [count]G       The  command number count is fetched. The default is the
                      least recent history command.


       /string        Search backward through history for a  previous  command
                      containing  string.  string is terminated by a RETURN or
                      NEWLINE. If string is preceded by a ^, the matched  line
                      must  begin with string. If string is NULL, the previous
                      string is used.


       ?string        Same as / except that search is in  the  forward  direc‐
                      tion.


       n              Search for next match of the last pattern to / or ? com‐
                      mands.


       N              Search for next match of the last pattern to / or ?, but
                      in  reverse  direction.  Search  history  for the string
                      entered by the previous / command.


   Text Modification Edit Commands
       These commands modifies the line.

       a                 Enter input mode and enter  text  after  the  current
                         character.


       A                 Append text to the end of the line. Equivalent to $a.


       [count]cmotion    Delete  current  character through the character that
       c[count]motion    motion would move the cursor to and enter input mode.
                         If  motion is c, the entire line is deleted and input
                         mode entered.



       C                 Delete the current character through the end of  line
                         and enter input mode. Equivalent to c$.


       [count]s          Delete count characters and enter input mode.


       S                 Equivalent to cc.


       D                 Delete the current character through the end of line.
                         Equivalent to d$.


       [count]dmotion    Delete current character through the  character  that
       d[count]motion    motion would move to. If motion is d, the entire line
                         is deleted.



       i                 Enter input mode and insert text before  the  current
                         character.


       I                 Insert text before the beginning of the line. Equiva‐
                         lent to 0i.


       [count]P          Place the previous text modification before the  cur‐
                         sor.


       [count]p          Place  the  previous text modification after the cur‐
                         sor.


       R                 Enter input mode and replace characters on the screen
                         with characters you type overlay fashion.


       [count]rc         Replace  the  count character(s) starting at the cur‐
                         rent cursor position with c, and advance the cursor.


       [count]x          Delete current character.


       [count]X          Delete preceding character.


       [count].          Repeat the previous text modification command.


       [count]~          Invert the case of the count character(s) starting at
                         the current cursor position and advance the cursor.


       [count]_          Causes  the  count word of the previous command to be
                         appended and input mode entered.  The  last  word  is
                         used if count is omitted.


       *                 Causes  an  *  to be appended to the current word and
                         file name generation attempted. If no match is found,
                         it rings the bell. Otherwise, the word is replaced by
                         the matching pattern and input mode is entered.


       \                 Filename completion. Replaces the current  word  with
                         the  longest  common prefix of all filenames matching
                         the current word with an asterisk  appended.  If  the
                         match  is  unique,  a  / is appended if the file is a
                         directory and a space is appended if the file is  not
                         a directory.


   Other Edit Commands
       Miscellaneous commands.

       [count]ymotion    Yank  current character through character that motion
       y[count]motion    would move the cursor  to  and  puts  them  into  the
                         delete buffer. The text and cursor are unchanged.



       Y                 Yanks  from  current position to end of line. Equiva‐
                         lent to y$.


       u                 Undo the last text modifying command.


       U                 Undo all the text modifying commands performed on the
                         line.


       [count]v          Returns  the command fc  -e  ${VISUAL:-${EDITOR:−vi}}
                         count in the input buffer. If count is omitted,  then
                         the current line is used.


       ^L                Line  feed and print current line. Has effect only in
                         control mode.


       J                 (New line) Execute the current  line,  regardless  of
                         mode.


       M                 (Return)  Execute  the  current  line,  regardless of
                         mode.


       #                 If the first character of the command is  a  #,  then
                         this command deletes this # and each # that follows a
                         newline. Otherwise, sends the line after inserting  a
                         #  in  front  of each line in the command. Useful for
                         causing the current line to be inserted in  the  his‐
                         tory as a comment and removing comments from previous
                         comment commands in the history file.


       =                 List the file names that match the current word if an
                         asterisk were appended it.


       @letter           Your  alias list is searched for an alias by the name
                         _letter and if an alias of this name is defined,  its
                         value is inserted on the input queue for processing.


   Special Commands
       The  following  simple-commands  are  executed  in  the  shell process.
       Input/Output redirection is permitted. Unless otherwise indicated,  the
       output  is written on file descriptor 1 and the exit status, when there
       is no syntax error, is 0. Commands that are preceded by one  or  two  *
       (asterisks) are treated specially in the following ways:

           1.     Variable  assignment  lists  preceding the command remain in
                  effect when the command completes.


           2.     I/O redirections are processed after variable assignments.


           3.     Errors cause a script that contains them to abort.


           4.     Words, following a command preceded by ** that  are  in  the
                  format  of a variable assignment, are expanded with the same
                  rules as a variable assignment. This means that  tilde  sub‐
                  stitution  is  performed after the = sign and word splitting
                  and file name generation are not performed.



       * : [ arg ... ]

           The command only expands parameters.


       * . file [ arg ... ]

           Read the complete file then execute the commands. The commands  are
           executed  in  the current shell environment. The search path speci‐
           fied by PATH is used to find the directory containing file. If  any
           arguments  arg  are  given,  they become the positional parameters.
           Otherwise the positional parameters are unchanged. The exit  status
           is the exit status of the last command executed.


       ** alias [ -tx ] [ name[ =value ] ] ...

           alias  with  no  arguments  prints  the list of aliases in the form
           name=value on standard output. An alias is defined  for  each  name
           whose  value  is  given.  A trailing space in value causes the next
           word to be checked for alias substitution. The -t flag is  used  to
           set  and  list tracked aliases. The value of a tracked alias is the
           full pathname corresponding to the given name.  The  value  becomes
           undefined  when the value of PATH is reset but the aliases remained
           tracked. Without the -t flag, for each name in  the  argument  list
           for  which  no  value  is given, the name and value of the alias is
           printed. The -x flag is used to set or print exported  aliases.  An
           exported  alias  is  defined  for scripts invoked by name. The exit
           status is non-zero if a name is given, but no value, and  no  alias
           has been defined for the name.


       bg [ %job... ]

           This command is only on systems that support job control. Puts each
           specified job into the background. The current job is  put  in  the
           background  if  job  is not specified. See Jobs section above for a
           description of the format of job.


       * break [ n ]

           Exit from the enclosed for, while, until, or select loop,  if  any.
           If  n  is  specified then break  n levels. If n is greater than the
           number of enclosing loops, the outermost enclosing  loop  shall  be
           exited.


       * continue [ n ]

           Resume  the  next  iteration  of the enclosed for, while, until, or
           select loop. If n is specified then resume  at  the  n-th  enclosed
           loop.  If n is greater than the number of enclosing loops, the out‐
           ermost enclosing loop shall be used.


       cd [ -L ] [ -P ] [ arg ]
       cd old new

           This command can be in either of two forms. In the  first  form  it
           changes  the current directory to arg. If arg is − the directory is
           changed to the previous directory. The shell variable HOME  is  the
           default  arg.  The  environment  variable PWD is set to the current
           directory. If the PWD is changed, the OLDPWD  environment  variable
           shall  also  be  changed to the value of the old working directory,
           that is, the current working directory  immediately  prior  to  the
           call  to  change  directory (cd). The shell variable CDPATH defines
           the search path  for  the  directory  containing  arg.  Alternative
           directory  names  are separated by a colon (:). The default path is
           null (specifying the current directory). The current  directory  is
           specified  by  a null path name, which can appear immediately after
           the equal sign or between the colon delimiters anywhere else in the
           path list. If arg begins with a / then the search path is not used.
           Otherwise, each directory in the  path  is  searched  for  arg.  If
           unsuccessful,  cd  attempts  to  change directories to the pathname
           formed by the concatenation of the value of PWD, a slash character,
           and arg.


           -L    Handles  the  operation dot-dot (..) logically. Symbolic link
                 components are not resolved  before  dot-dot  components  are
                 processed.


           -P    Handles  the operand dot-dot physically. Symbolic link compo‐
                 nents are resolved before dot-dot components are processed.

           If both -L and -P options are specified,  the  last  option  to  be
           invoked  is  used and the other is ignored. If neither -L nor -P is
           specified, the operand is handled dot-dot logically.

           The second form of cd substitutes the string new for the string old
           in the current directory name, PWD, and tries to change to this new
           directory. The cd command cannot be executed by rksh.



       command [-p] [command_name] [argument ...]
       command [-v | -V] command_name

           The command utility causes the shell to treat the  arguments  as  a
           simple  command, suppressing the shell function lookup. The -p flag
           performs the command search using a default value for PATH that  is
           guaranteed  to  find  all  of  the  standard utilities. The -v flag
           writes a string to standard output that indicates the  pathname  or
           command  that  is used by the shell, in the current shell execution
           environment, to invoke command_name. The -V flag writes a string to
           standard  output  that  indicates  how  the  name given in the com‐
           mand_name operand is interpreted by the shell, in the current shell
           execution environment.



       echo [ arg ... ]

           See echo(1) for usage and description.


       * eval [ arg ... ]

           The arguments are read as input to the shell and the resulting com‐
           mand(s) executed.


       * exec [ arg ... ]

           If arg is given, the command specified by the arguments is executed
           in place of this shell without creating a new process. Input/output
           arguments can appear and affect the current process.  If  no  argu‐
           ments  are  given  the  effect  of  this  command is to modify file
           descriptors as prescribed by the input/output redirection list.  In
           this  case,  any  file  descriptor  numbers greater than 2 that are
           opened with this mechanism are closed when  invoking  another  pro‐
           gram.


       * exit [ n ]

           Causes the calling shell or shell script to exit with the exit sta‐
           tus specified by n. The value is the least significant  8  bits  of
           the  specified status. If n is omitted then the exit status is that
           of the last command executed. When exit  occurs  when  executing  a
           trap,  the  last command refers to the command that executed before
           the trap was invoked. An EOF also causes the shell to  exit  except
           for a shell which has the ignoreeof option turned on. See set.


       ** export [ name[=value] ] ...
       ** export -p

           The  given names are marked for automatic export to the environment
           of subsequently-executed commands.

           When -p is specified, export writes  to  the  standard  output  the
           names and values of all exported variables in the following format:


             "export %s=%s\n", name, value

           if name is set, and:


             "export %s\n", name

           if name is unset.

           The  shell formats the output, including the proper use of quoting,
           so that it is suitable for reinput to the shell  as  commands  that
           achieve the same exporting results, except for the following:

               1.     Read-only variables with values cannot be reset.


               2.     Variables  that  were unset at the time they were output
                      are not reset to the unset state if a value is  assigned
                      to the variable between the time the state was saved and
                      the time at which the saved output  is  reinput  to  the
                      shell.





       fc [ -e ename ] [ -nlr ] [ first [ last ] ]
       fc -e - [ old=new ] [ command ]
       fc -s [ old=new ] [ command ]

           In  the  first  form,  a  range  of  commands from first to last is
           selected from the last HISTSIZE commands that  were  typed  at  the
           terminal. The arguments first and last can be specified as a number
           or as a string. A string is used to locate the most recent  command
           starting  with  the  given  string. A negative number is used as an
           offset to the current command number. If the -l flag  is  selected,
           the  commands  are listed on standard output. Otherwise, the editor
           program ename is invoked on a file containing these  keyboard  com‐
           mands.  If  ename  is  not supplied, then the value of the variable
           FCEDIT (default /bin/ed) is used as the  editor.  When  editing  is
           complete,  the edited command(s) is executed. If last is not speci‐
           fied then it is set to first. If first is not specified the default
           is  the  previous command for editing and −16 for listing. The flag
           -r reverses the order of the commands and the  flag  -n  suppresses
           command numbers when listing. In the second form the command is re-
           executed after the substitution old=new is performed. If  there  is
           not  a command argument, the most recent command typed at this ter‐
           minal is executed.




       fg [ %job... ]

           This command is only on systems that support job control. Each  job
           specified  is brought to the foreground. Otherwise, the current job
           is brought into the foreground. See  "Jobs"  section  above  for  a
           description of the format of job.


       getopts optstring name [ arg ... ]

           Checks  arg  for  legal  options. If arg is omitted, the positional
           parameters are used. An option argument begins with a + or a −.  An
           option  not  beginning  with  +  or  -  or the argument -- ends the
           options. optstring contains the letters that getopts recognizes. If
           a  letter  is  followed  by a :, that option is expected to have an
           argument. The options can be separated from the argument by blanks.

           getopts places the next option letter it finds inside variable name
           each  time  it is invoked with a + prepended when arg begins with a
           +. The index of the next arg is stored in OPTIND. The option  argu‐
           ment, if any, gets stored in OPTARG.

           A  leading  : in optstring causes getopts to store the letter of an
           invalid option in OPTARG, and to set  name  to  ?  for  an  unknown
           option  and  to  :  when  a  required option is missing. Otherwise,
           getopts prints an error message. The exit status is  non-zero  when
           there  are no more options. See getoptcvt(1) for usage and descrip‐
           tion.

           getopts supports both traditional  single-character  short  options
           and  long  options defined by Sun's Command Line Interface Paradigm
           (CLIP).

           Each long option is an alias for a short option and is specified in
           parentheses following its equivalent short option. For example, you
           can specify the long option file as an alias for the short option f
           using the following script line:


             getopts "f(file)" opt

           Precede  long  options  on  the  command line with -- or ++. In the
           example above, --file on the command line would be  the  equivalent
           of  -f,  and  ++file on the command line would be the equivalent of
           +f.

           Each short  option  can  have  multiple  long  option  equivalents,
           although  this is in violation of the CLIP specification and should
           be used with caution. You must enclose each long option  equivalent
           parentheses, as follows:


             getopts "f:(file)(input-file)o:(output-file)"

           In  the above example, both --file and --input-file are the equiva‐
           lent of -f, and --output-file is the equivalent of -o.

           The variable name is always set to a  short  option.  When  a  long
           option  is specified on the command line, name is set to the short-
           option equivalent.


       hash [ name ... ]
       hash [ -r ]

           For each name, the location in the search path of the command spec‐
           ified  by  name  is  determined and remembered by the shell. The -r
           option causes the shell to forget all remembered locations.  If  no
           arguments  are given, information about remembered commands is pre‐
           sented. Hits is the number of times a command has been  invoked  by
           the shell process. Cost is a measure of the work required to locate
           a command in the search path. If a command is found in  a  relative
           directory in the search path, after changing to that directory, the
           stored location of that command is recalculated. Commands for which
           this  is done are indicated by an asterisk (*) adjacent to the hits
           information. Cost is incremented when the recalculation is done.



       jobs [ -lnp ] [ %job ... ]

           Lists information about each given job; or all active jobs  if  job
           is omitted. The -l flag lists process ids in addition to the normal
           information. The -n flag displays only jobs that  have  stopped  or
           exited  since  last  notified.  The -p flag causes only the process
           group to be listed. See "Jobs" section  above  and  jobs(1)  for  a
           description of the format of job.


       kill [ -sig ] %job ...
       kill [ -sig ] pid ...
       kill -l

           Sends either the TERM (terminate) signal or the specified signal to
           the specified jobs or processes. Signals are either given by number
           or  by  names  (as  given in signal.h(3HEAD) stripped of the prefix
           "SIG" with the exception that SIGCHD is named CHLD). If the  signal
           being  sent  is  TERM  (terminate) or HUP (hangup), then the job or
           process is sent a CONT (continue) signal  if  it  is  stopped.  The
           argument  job can be the process id of a process that is not a mem‐
           ber of one of the active jobs. See Jobs for a  description  of  the
           format of job. In the second form, kill  -l, the signal numbers and
           names are listed.




       let arg...

           Each arg is a separate arithmetic expression to be  evaluated.  See
           the  Arithmetic  Evaluation  section  above,  for  a description of
           arithmetic expression evaluation.

           The exit status is 0 if the value of the last  expression  is  non-
           zero, and 1 otherwise.


       login argument ...

           Equivalent  to `exec login argument....' See login(1) for usage and
           description.


       * newgrp [ arg ... ]

           Equivalent to exec /bin/newgrp  arg ....


       print [ -Rnprsu[n ] ] [ arg ... ]

           The shell output mechanism. With no flags or with flag - or --, the
           arguments  are  printed on standard output as described by echo(1).
           The exit status is 0, unless the output file is not open for  writ‐
           ing.

           -n          Suppresses NEWLINE from being added to the output.


           -R | -r     Raw  mode.  Ignores the escape conventions of echo. The
                       -R option prints all subsequent arguments  and  options
                       other than -n.


           -p          Writes the arguments to the pipe of the process spawned
                       with |& instead of standard output.


           -s          Writes the arguments to the  history  file  instead  of
                       standard output.


           -u [ n ]    Specifies  a one digit file descriptor unit number n on
                       which the output is placed. The default is 1.



       pwd [ -L | -P ]

           Writes to the standard output an absolute pathname of  the  current
           working  directory, which does not contain the filenames dot (.) or
           dot-dot (..).


           -L    If the PWD environment variable contains an absolute pathname
                 of  the current directory that does not contain the filenames
                 dot or dot-dot, pwd writes this pathname to standard  output.
                 Otherwise, the -L option behaves like the -P option.


           -P    The  absolute  pathname  written  shall not contain filenames
                 that, in the context of the pathname, refer to files of  type
                 symbolic link.

           If  both  -L and -P are specified, the last one applies. If neither
           -L nor -P is specified, pwd behaves as if -L had been specified.


       read [ -prsu[ n ] ] [ name?prompt ] [ name ... ]

           The shell input mechanism. One line is read and is broken  up  into
           fields  using the characters in IFS as separators. The escape char‐
           acter, (\), is used to remove any  special  meaning  for  the  next
           character and for line continuation. In raw mode, -r, the \ charac‐
           ter is not treated specially. The first field is  assigned  to  the
           first  name,  the second field to the second name, etc., with left‐
           over fields assigned to the last name. The  -p  option  causes  the
           input  line to be taken from the input pipe of a process spawned by
           the shell using |&. If the -s flag is present, the input  is  saved
           as  a command in the history file. The flag -u can be used to spec‐
           ify a one digit file descriptor unit  n  to  read  from.  The  file
           descriptor can be opened with the exec special command. The default
           value of n is 0. If name is omitted  then  REPLY  is  used  as  the
           default  name.  The  exit  status is 0 unless the input file is not
           open for reading or an EOF is  encountered.  An  EOF  with  the  -p
           option  causes  cleanup  for  this  process  so that another can be
           spawned. If the first argument contains a ?, the remainder of  this
           word is used as a prompt on standard error when the shell is inter‐
           active. The exit status is 0 unless an EOF is encountered.


       ** readonly [ name[=value] ] ...
       ** readonly -p

           The given names are marked  readonly  and  these  names  cannot  be
           changed by subsequent assignment.

           When  -p  is  specified, readonly writes to the standard output the
           names and values of all read-only variables, in the following  for‐
           mat:


             "readonly %s=%s\n", name, value

           if name is set, and:


             "readonly $s\n", name

           if name is unset.

           The  shell formats the output, including the proper use of quoting,
           so that it is suitable for reinput to the shell  as  commands  that
           achieve  the same value and readonly attribute-setting results in a
           shell execution environment in which:

               1.     Variables with values set at the time they  were  output
                      do not have the readonly attribute set.


               2.     Variables  that  were unset at the time they were output
                      do not have a value at the time at which the saved  out‐
                      put is reinput to the shell.





       * return [ n ]

           Causes  a  shell  function  or '.' script to return to the invoking
           script with the return status specified by  n.  The  value  is  the
           least  significant  8 bits of the specified status. If n is omitted
           then the return status is that of the  last  command  executed.  If
           return  is invoked while not in a function or a '.' script, then it
           is the same as an exit.


       set [ ±abCefhkmnopstuvx ] [ ±o option ]... [ ±A name ] [ arg ... ]

           The flags for this command have meaning as follows:

           -A          Array assignment. Unsets the variable name and  assigns
                       values  sequentially  from the list arg. If +A is used,
                       the variable name is not unset first.


           -a          All subsequent variables that are defined are automati‐
                       cally exported.


           -b          Causes  the  shell to notify the user asynchronously of
                       background job completions. The  following  message  is
                       written to standard error:


                         "[%d]%c %s%s\n", <job-number>, <current>, <status>, \
                              <job-name>

                       where the fields are as follows:


                       <current>       The character + identifies the job that
                                       would be used as a default for  the  fg
                                       or  bg  utilities. This job can also be
                                       specified using the job_id  %+  or  %%.
                                       The character − identifies the job that
                                       would become the default if the current
                                       default  job were to exit; this job can
                                       also be specified using the job_id  %−.
                                       For  other  jobs, this field is a space
                                       character. At most one job can be iden‐
                                       tified  with  + and at most one job can
                                       be identified with −. If there  is  any
                                       suspended  job, then the current job is
                                       a suspended job. If there are at  least
                                       two  suspended  jobs, then the previous
                                       job is also a suspended job.


                       <job-number>    A number that can be used  to  identify
                                       the  process group to the wait, fg, bg,
                                       and kill utilities. Using these  utili‐
                                       ties, the job can be identified by pre‐
                                       fixing the job number with %.


                       <status>        Unspecified.


                       <job-name>      Unspecified.

                       When the shell notifies the user a job  has  been  com‐
                       pleted,  it  can  remove  the job's process ID from the
                       list of those known  in  the  current  shell  execution
                       environment.  Asynchronous  notification is not enabled
                       by default.


           -C          Prevents existing files from being overwritten  by  the
                       shell's  >  redirection  operator.  The  >| redirection
                       operator overrides this -noclobber option for an  indi‐
                       vidual file.


           -e          If  a  command has a non-zero exit status, executes the
                       ERR trap, if set, and exit. This mode is disabled while
                       reading profiles.


           -f          Disables file name generation.


           -h          Each command becomes a tracked alias when first encoun‐
                       tered.


           -k          All variable assignment arguments  are  placed  in  the
                       environment  for a command, not just those that precede
                       the command name.


           -m          Background jobs runs in a separate process group and  a
                       line  prints  upon completion. The exit status of back‐
                       ground jobs is reported in  a  completion  message.  On
                       systems  with job control, this flag is turned on auto‐
                       matically for interactive shells.


           -n          Reads commands and check them for syntax errors, but do
                       not execute them. Ignored for interactive shells.


           -o          Writes  the  current option settings to standard output
                       in a format that is suitable for reinput to  the  shell
                       as commands that achieve the same option settings.


           -o          The  following  argument  can  be  one of the following
                       option names:


                       allexport     Same as -a.


                       errexit       Same as -e.


                       bgnice        All background jobs are run  at  a  lower
                                     priority. This is the default mode.


                       emacs         Puts you in an emacs style in-line editor
                                     for command entry.


                       gmacs         Puts you in a gmacs style in-line  editor
                                     for command entry.


                       ignoreeof     The  shell  does not exit onEOF. The com‐
                                     mand exit must be used.


                       keyword       Same as -k.


                       markdirs      All directory names resulting  from  file
                                     name   generation   have   a  trailing  /
                                     appended.


                       monitor       Same as -m.


                       noclobber     Prevents redirection  >  from  truncating
                                     existing  files. Require >| to truncate a
                                     file when turned on. Equivalent to -C.


                       noexec        Same as -n.


                       noglob        Same as -f.


                       nolog         Do not save function definitions in  his‐
                                     tory file.


                       notify        Equivalent to -b.


                       nounset       Same as -u.


                       privileged    Same as -p.


                       verbose       Same as -v.


                       trackall      Same as -h.


                       vi            Puts you in insert mode of a vi style in-
                                     line editor until you press Escape (char‐
                                     acter  033).  This  puts  you  in control
                                     mode. A return sends the line.


                       viraw         Each character  is  processed  as  it  is
                                     typed in vi mode.


                       xtrace        Same as -x.

                       If  no option name is supplied, the current option set‐
                       tings are printed.


           -p          Disables processing of the $HOME/.profile file and uses
                       the  file  /etc/suid_profile  instead  of the ENV file.
                       This mode is on whenever the effective uid is not equal
                       to the real uid, or when the effective gid is not equal
                       to the real gid. Turning this off causes the  effective
                       uid and gid to be set to the real uid and gid.


           -s          Sorts the positional parameters lexicographically.


           -t          Exits after reading and executing one command.


           -u          Treats unset parameters as an error when substituting.


           -v          Prints shell input lines as they are read.


           -x          Prints  commands  and  their arguments as they are exe‐
                       cuted.


           −           Turns off -x and -v flags and stops examining arguments
                       for flags.


           −−          Does  not change any of the flags. Useful in setting $1
                       to a value beginning with −.  If  no  arguments  follow
                       this flag then the positional parameters are unset.

                       Using  +  rather than − causes these flags to be turned
                       off. These flags can also be used  upon  invocation  of
                       the shell. The current set of flags can be found in $−.
                       Unless -A is specified,  the  remaining  arguments  are
                       positional parameters and are assigned, in order, to $1
                       $2 .... If no arguments are given, the names and values
                       of all variables are printed on the standard output.



       * shift [ n ]

           The  positional  parameters from $n+1  $n+1 ... are renamed $1 ...,
           default n is 1. The parameter n can be  any  arithmetic  expression
           that evaluates to a non-negative number less than or equal to $#.


       stop%jobid ...
       stop pid ...

           stop stops the execution of a background job(s) by using its jobid,
           or of any process by using its pid. See ps(1).



       suspend

           Stops the execution of the current shell (but  not  if  it  is  the
           login shell).


       test expression

           Evaluates conditional expressions. See Conditional Expressions sec‐
           tion above and test(1) for usage and description.


       * times

           Prints the accumulated user and system times for the shell and  for
           processes run from the shell.


       * trap [ arg sig ... ]

           arg  is  a  command to be read and executed when the shell receives
           signal(s) sig. arg is scanned once when the trap is  set  and  once
           when  the trap is taken. sig can be specified as a signal number or
           signal name. trap commands are executed in order of signal  number.
           Any  attempt  to  set a trap on a signal number that was ignored on
           entry to the current shell is ineffective.

           If arg is −, the shell resets each sig to the default value. If arg
           is  null  (''),  the shell ignores each specified sig if it arises.
           Otherwise, arg is read and executed by the shell when  one  of  the
           corresponding  sigs arises. The action of the trap overrides a pre‐
           vious action (either default action or  one  explicitly  set).  The
           value  of  $?  after  the trap action completes is the value it had
           before the trap was invoked.

           sig can be EXIT, 0 (equivalent to EXIT) or a signal specified using
           a  symbolic  name,  without  the SIG prefix, for example, HUP, INT,
           QUIT, TERM. If sig is 0 or EXIT and the trap statement is  executed
           inside  the  body  of  a function, then the command arg is executed
           after the function completes. If sig is 0 or EXIT for  a  trap  set
           outside  any function, the command arg is executed on exit from the
           shell. If sig is ERR, arg is executed whenever a command has a non-
           zero  exit status. If sig is DEBUG, arg is executed after each com‐
           mand.

           The environment in which the shell executes a trap on EXIT is iden‐
           tical  to  the  environment immediately after the last command exe‐
           cuted before the trap on EXIT was taken.

           Each time the trap is invoked, arg is processed in a manner equiva‐
           lent to eval "$arg".

           Signals  that were ignored on entry to a non-interactive shell can‐
           not be trapped or reset, although no error need  be  reported  when
           attempting  to  do so. An interactive shell can reset or catch sig‐
           nals ignored on entry. Traps remain in  place  for  a  given  shell
           until explicitly changed with another trap command.

           When a subshell is entered, traps are set to the default args. This
           does not imply that the trap command cannot be used within the sub‐
           shell to set new traps.

           The trap command with no arguments writes to standard output a list
           of commands associated with each sig. The format is:


             trap −− %s %s ... <arg>, <sig> ...

           The shell formats the output, including the proper use of  quoting,
           so  that  it  is suitable for reinput to the shell as commands that
           achieve the same trapping results. For example:


             save_traps=$(trap)
             ...
             eval "$save_traps"

           If the trap name or number is invalid, a non-zero  exit  status  is
           returned.  Otherwise,  0 is returned. For both interactive and non-
           interactive shells, invalid signal names or numbers are not consid‐
           ered a syntax error and dol not cause the shell to abort.

           Traps  are  not  processed  while a job is waiting for a foreground
           process. Thus, a trap on CHLD won't be  executed  until  the  fore‐
           ground job terminates.


       type name ...

           For  each  name, indicates how it would be interpreted if used as a
           command name.


       ** typeset [ ±HLRZfilrtux[n] ] [ name[=value ] ] ...

           Sets attributes and values for shell variables and functions.  When
           typeset  is  invoked inside a function, a new instance of the vari‐
           ables name is created. The variables value and  type  are  restored
           when  the  function completes. The following list of attributes can
           be specified:


           -H    This flag provides UNIX to host-name file mapping on non-UNIX
                 machines.


           -L    Left justifies and removes leading blanks from value. If n is
                 non-zero it defines the width of the field. Otherwise, it  is
                 determined  by  the  width  of the value of first assignment.
                 When the variable is assigned to, it is filled on  the  right
                 with  blanks  or  truncated,  if  necessary,  to fit into the
                 field. Leading zeros are removed if the -Z flag is also  set.
                 The -R flag is turned off.


           -R    Right  justifies  and fills with leading blanks. If n is non-
                 zero it defines the width  of  the  field,  otherwise  it  is
                 determined by the width of the value of first assignment. The
                 field is left filled with blanks or truncated from the end if
                 the variable is reassigned. The -L flag is turned off.


           -Z    Right  justifies  and  fills  with leading zeros if the first
                 non-blank character is a digit and the -L flag has  not  been
                 set. If n is non-zero it defines the width of the field. Oth‐
                 erwise, it is determined by the width of the value  of  first
                 assignment.


           -f    The names refer to function names rather than variable names.
                 No assignments can be made and the only other valid flags are
                 -t,  -u,  and  -x. The flag -t turns on execution tracing for
                 this function. The flag -u causes this function to be  marked
                 undefined.  The  FPATH variable is searched to find the func‐
                 tion definition when the function is referenced. The flag  -x
                 allows  the  function  definition  to remain in effect across
                 shell procedures invoked by name.


           -i    Parameter is an integer. This makes arithmetic faster.  If  n
                 is non-zero it defines the output arithmetic base; otherwise,
                 the first assignment determines the output base.


           -l    All uppercase characters  are  converted  to  lowercase.  The
                 uppercase flag, -u is turned off.


           -r    The given names are marked readonly and these names cannot be
                 changed by subsequent assignment.


           -t    Tags the variables. Tags are user definable and have no  spe‐
                 cial meaning to the shell.


           -u    All  lowercase  characters are converted to uppercase charac‐
                 ters. The lowercase flag, -l is turned off.


           -x    The given names are marked for automatic export to the  envi‐
                 ronment of subsequently-executed commands.

           The -i attribute cannot be specified along with -R, -L, -Z, or -f.

           Using  +  rather  than − causes these flags to be turned off. If no
           name arguments are given but flags are specified, a list  of  names
           (and optionally the values) of the variables which have these flags
           set is printed. (Using + rather than − keeps the values from  being
           printed.) If no names and flags are given, the names and attributes
           of all variables are printed.


       ulimit [ -HSacdfnstv ] [ limit ]

           Sets or displays a resource limit. The available  resources  limits
           are  listed  in  the following section. Many systems do not contain
           one or more of these limits. The limit for a specified resource  is
           set  when limit is specified. The value of limit can be a number in
           the unit specified with each resource, or the value unlimited.  The
           string  unlimited  requests  that  the  current  limit,  if any, be
           removed. The -H and -S flags specify whether the hard limit or  the
           soft  limit  for  the given resource is set. A hard limit cannot be
           increased once it is set. A soft limit can be increased up  to  the
           value  of the hard limit. If neither the -H or -S options is speci‐
           fied, the limit applies to both.  The  current  resource  limit  is
           printed  when  limit  is  omitted.  In this case, the soft limit is
           printed unless -H is specified. When  more  than  one  resource  is
           specified, the limit name and unit is printed before the value.


           -a    Lists all of the current resource limits.


           -c    The number of 512-byte blocks on the size of core dumps.


           -d    The number of K-bytes on the size of the data area.


           -f    The  number of 512-byte blocks on files written by child pro‐
                 cesses (files of any size can be read).


           -n    The number of file descriptors plus 1.


           -s    The number of K-bytes on the size of the stack area.


           -t    The number of seconds to be used by each process.


           -v    The number of K-bytes for virtual memory.

           If no option is given, -f is assumed.


       umask [-S] [ mask ]

           The user file-creation mask is set to mask (see umask(2)). mask can
           either  be  an  octal  number  or  a symbolic value as described in
           chmod(1). If a symbolic value is given, the new umask value is  the
           complement  of the result of applying mask to the complement of the
           previous umask value. If mask is omitted, the current value of  the
           mask is printed. The -S flag produces symbolic output.


       unalias name ...
       unalias -a

           The  aliases  given by the list of names are removed from the alias
           list. The -a option removes all alias definitions from the  current
           execution environment.



       unset [ -f ] name ...

           The  variables  given by the list of names are unassigned, that is,
           their values and attributes are erased. readonly  variables  cannot
           be  unset. If the -f, flag is set, then the names refer to function
           names. Unsetting ERRNO, LINENO, MAILCHECK, OPTARG, OPTIND,  RANDOM,
           SECONDS,  TMOUT,  and  _ removes their special meaning even if they
           are subsequently assigned to.


       * wait [ job ]

           Waits for the specified job and report its termination  status.  If
           job  is  not  given  then  all currently active child processes are
           waited for. The exit status  from  this  command  is  that  of  the
           process  waited  for.  See  Jobs for a description of the format of
           job.


       whence [ -pv ] name ...

           For each name, indicates how it would be interpreted if used  as  a
           command name.

           The -v flag produces a more verbose report.

           The -p flag does a path search for name even if name is an alias, a
           function, or a reserved word.


   Invocation
       If the shell is invoked by exec(2), and the first character of argument
       zero  ($0) is −, then the shell is assumed to be a login shell and com‐
       mands are read from /etc/profile and then from either .profile  in  the
       current  directory or $HOME/.profile, if either file exists. Next, com‐
       mands are read from the file named by performing parameter substitution
       on the value of the environment variable ENV if the file exists. If the
       -s flag is not present and arg is, then a path search is  performed  on
       the  first  arg  to  determine  the  name of the script to execute. The
       script arg must have read permission and any setuid and setgid settings
       are  ignored.  If the script is not found on the path, arg is processed
       as if it named a builtin command or function. Commands are then read as
       described  as follows. The following flags are interpreted by the shell
       when it is invoked:

       -c    Reads commands from the command_string operand. Sets the value of
             special  parameter  0  from the value of the command_name operand
             and the positional parameters ($1, $2, and  so  on)  in  sequence
             from  the  remaining  arg operands. No commands are read from the
             standard input.


       -s    If the -s flag is present or if no arguments remain, commands are
             read from the standard input. Shell output, except for the output
             of the Special Commands listed above, is written to file descrip‐
             tor 2.


       -i    If  the  -i  flag is present or if the shell input and output are
             attached to a terminal (as told by ioctl(2)), then this shell  is
             interactive.  In this case, TERM is ignored (so that kill  0 does
             not kill an interactive shell) and INTR is caught and ignored (so
             that wait is interruptible). In all cases, QUIT is ignored by the
             shell.


       -r    If the -r flag is present the shell is a restricted shell.



       The remaining flags and arguments are described under the  set  command
       above.

   rksh Only
       rksh  is  used  to  set up login names and execution environments whose
       capabilities are more controlled than those of the standard shell.  The
       actions  of rksh are identical to those of ksh, except that the follow‐
       ing are disallowed:

           o      changing directory (see cd(1))


           o      setting the value of SHELL, ENV, or PATH


           o      specifying path or command names containing /


           o      redirecting output (>, >|, <>, and >>)


           o      changing group (see newgrp(1)).



       The restrictions above are enforced after .profile and  the  ENV  files
       are interpreted.


       When  a  command  to be executed is found to be a shell procedure, rksh
       invokes ksh to execute it. Thus, it is possible to provide to the  user
       shell  procedures  that  have  access to the full power of the standard
       shell, while imposing a limited menu of commands; this  scheme  assumes
       that  the  user does not have write and execute permissions in the same
       directory.


       The net effect of these rules is that the writer of  the  .profile  has
       complete  control  over  user  actions,  by performing guaranteed setup
       actions and leaving the user in an appropriate directory (probably  not
       the login directory).


       The  system  administrator  often sets up a directory of commands (that
       is, /usr/rbin) that can be safely invoked by rksh.

ERRORS
       Errors detected by the shell, such as syntax errors, cause the shell to
       return  a  non-zero  exit status. Otherwise, the shell returns the exit
       status of the last command executed (see also the exit command  above).
       If  the  shell  is  being  used non-interactively then execution of the
       shell file is abandoned. Runtime  errors  detected  by  the  shell  are
       reported  by printing the command or function name and the error condi‐
       tion. If the line number that the error occurred  on  is  greater  than
       one, then the line number is also printed in square brackets ([]) after
       the command or function name.


       For a non-interactive shell, an error condition encountered by  a  spe‐
       cial  built-in  or  other  type  of utility causes the shell to write a
       diagnostic message to standard error and exit as shown in the following
       table:


       tab()  box; cw(3.17i) cw(1.17i) cw(1.17i) lw(3.17i) cw(1.17i) cw(1.17i)
       ErrorSpecial Built-inOther Utilities _ Shell language syntax errorexit‐
       sexits  T{  Utility  syntax error (option or operand error) T}exitsdoes
       not  exit  Redirection  errorexitsdoes  not  exit  Variable  assignment
       errorexitsdoes   not   exit   Expansion   errorexitsexits  Command  not
       foundn/amight exit Dot script not foundexitsn/a



       An expansion error is one that occurs when  the  shell  expansions  are
       carried  out  (for example, ${x!y}, because ! is not a valid operator).
       An implementation can treat these as syntax errors if  it  is  able  to
       detect them during tokenization, rather than during expansion.


       If  any  of the errors shown as "might exit" or "exits" occur in a sub‐
       shell, the subshell exits or might exit with a non-zero status, but the
       script containing the subshell does not exit because of the error.


       In  all  of the cases shown in the table, an interactive shell writes a
       diagnostic message to standard error without exiting.

EXIT STATUS
       Each command has an exit status that  can  influence  the  behavior  of
       other  shell  commands. The exit status of commands that are not utili‐
       ties is documented in this section. The exit  status  of  the  standard
       utilities is documented in their respective sections.


       If  a command is not found, the exit status is 127. If the command name
       is found, but it is not an executable utility, the exit status is  126.
       Applications  that  invoke utilities without using the shell should use
       these exit status values to report similar errors.


       If a command fails during word expansion or redirection, its exit  sta‐
       tus is greater than zero.


       When  reporting the exit status with the special parameter ?, the shell
       reports the full eight bits of exit status available. The  exit  status
       of  a  command that terminated because it received a signal reported as
       greater than 128.

FILES
       /etc/profile


       /etc/suid_profile


       $HOME/.profile


       /tmp/sh*


       /dev/null

ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

   /usr/sunos/bin/ksh, /usr/sunos/bin/rksh
       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE VALUE _ Availabilitylegacy/shell/ksh88 _ CSIEnabled _ Interface
       StabilityObsolete Committed


   /usr/xpg4/bin/sh
       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE  VALUE  _  Availabilitysystem/core-os  _ CSIEnabled _ Interface
       StabilityCommitted _ StandardSee standards(7).


SEE ALSO
       cat(1),  cd(1),  chmod(1),  cut(1),  echo(1),   env(1),   getoptcvt(1),
       jobs(1),  login(1),  newgrp(1),  paste(1),  pfksh(1), pfexec(1), ps(1),
       shell_builtins(1), stty(1), test(1), vi(1), dup(2),  exec(2),  fork(2),
       ioctl(2), lseek(2), pipe(2), ulimit(2), umask(2), rand(3C), signal(3C),
       signal.h(3HEAD), wait(3C), a.out(5), profile(5),  attributes(7),  envi‐
       ron(7), standards(7)


       Morris  I. Bolsky and David G. Korn, The KornShell Command and Program‐
       ming Language, Prentice Hall, 1989.

WARNINGS
       The use of setuid shell scripts is strongly discouraged.

NOTES
       If a command which is a tracked alias is executed, and then  a  command
       with  the  same  name  is  installed  in a directory in the search path
       before the directory where the original command was  found,  the  shell
       continues  to exec the original command. Use the -t option of the alias
       command to correct this situation.


       Some very old shell scripts contain a ^ as a synonym for the pipe char‐
       acter |.


       Using  the  fc  built-in  command  within a compound command causes the
       whole command to disappear from the history file.


       The built-in command .file reads the whole file before any commands are
       executed.  Therefore,  alias  and unalias commands in the file does not
       apply to any functions defined in the file.


       When the shell executes a shell script that attempts to execute a  non-
       existent command interpreter, the shell returns an erroneous diagnostic
       message that the shell script file does not exist.


       /usr/sunos/bin/ksh may  be  removed  in  a  future  release  of  Oracle
       Solaris.  In  order  to  prevent issues in the future it is recommended
       that any scripts using it be migrated to a more modern  shell  such  as
       bash(1) or ksh93(1).



Oracle Solaris 11.4               11 May 2021                         ksh88(1)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3