IPB
>  Man Pages > Unix > Solaris 10 11/06 > Section 1 > ksh man page

ksh man page

Section 1 - Solaris 10 11/06 Man Pages

Other operating system man pages available here


Advanced Search

Hopefully, this page is exactly what you are looking for, but if not, you can always find further assistance on Unix/Linux Forum!





User Commands                                              ksh(1)



NAME
     ksh, rksh - KornShell,  a  standard/restricted  command  and
     programming language

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

     /usr/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/bin/rksh [ _ abCefhikmnoprstuvx] [  _  o   option]  ...
     [arg...]

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

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

     /usr/bin/ksh is a command and programming language that exe-
     cutes  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 argu-
     ments 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. Identifiers are used as names for functions  and
     variables.  A  word is a sequence of characters separated by
     one or more non-quoted metacharacters.

     A command is a sequence of characters in the syntax  of  the
     shell language. 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



SunOS 5.10          Last change: 29 Jun 2005                    1






User Commands                                              ksh(1)



     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  com-
     mand  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 simple-command is its  exit  status  if  it  ter-
     minates normally. If it terminates 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. Obviously, nor-
     mal 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  sequen-
     tial  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 fin-
     ish). The symbol |& causes  asynchronous  execution  of  the
     preceding  command  or  pipeline  with  a two-way pipe esta-
     blished 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 follow-
     ing it to be executed only if the preceding 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  follow-
     ing.  Unless  otherwise stated, the value returned by a com-
     mand is that of the last simple-command executed in the com-
     mand.




SunOS 5.10          Last change: 29 Jun 2005                    2






User Commands                                              ksh(1)



     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 descrip-
         tor  2), the set of words, each preceded by a number. If
         in word ... is omitted, then the  positional  parameters
         are  used  instead.  See Parameter Substitution. 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.  Oth-
         erwise  the  value  of the variable identifier is set to
         NULL. (See Blank Interpretation about  NULL).  The  con-
         tents  of  the line read from standard input is saved in
         the shell variable REPLY. The list is executed for  each
         selection  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 pat-
         terns 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 com-
         mand returns 0 exit status.



SunOS 5.10          Last change: 29 Jun 2005                    3






User Commands                                              ksh(1)



     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 parentheses 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  recog-
         nized.



     [[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 Functions.




     time pipeline

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



SunOS 5.10          Last change: 29 Jun 2005                    4






User Commands                                              ksh(1)



     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 follow-
     ing characters 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  meta-
     characters,  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  command  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  sub-
     stitution.  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 infin-
     ite loops  in  recursive  aliasing,  if  the  shell  is  not
     currently  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  executed.  Therefore,  for an alias to take effect, the
     alias definition command has to be executed before the  com-
     mand 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.




SunOS 5.10          Last change: 29 Jun 2005                    5






User Commands                                              ksh(1)



     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 follows. 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. However, if the user types:

     $ foo while

     the result is an ls listing of /. Since the alias  substitu-
     tion  for  foo  ends  in a space character, the next word is
     checked for alias substitution. 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 ori-
     ginal 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.



SunOS 5.10          Last change: 29 Jun 2005                    6






User Commands                                              ksh(1)



     In addition, tilde substitution is attempted when the  value
     of a variable 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 assign-
     ment, 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 fol-
     lowing 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 asso-
     ciated with the login name obtained using the getpwnam func-
     tion. If the system does not recognize 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. Con-
     sideration was given to prohibiting  this  behavior  because
     any of the following are reasonable substitutes:

     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.




SunOS 5.10          Last change: 29 Jun 2005                    7






User Commands                                              ksh(1)



     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 hav-
     ing 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 Quot-
     ing. 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 pro-
     cess.

     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 com-
     mand  in  a  subshell  environment and replacing the command
     substitution (the text of command plus the enclosing $()  or



SunOS 5.10          Last change: 29 Jun 2005                    8






User Commands                                              ksh(1)



     backquotes)  with the standard output of the command, remov-
     ing sequences of one or more newline characters 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 fol-
     lowed by:

     $     `     \

     (dollar-sign, backquote,  backslash).  The  search  for  the
     matching backquote is satisfied by the first backquote found
     without a preceding backslash.  During  this  search,  if  a
     non-escaped backquote is encountered within a shell comment,
     a here-document, an embedded  command  substitution  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
          unspecified results.

       o  See the restriction on single subshells.


     The results of command substitution are not field  splitting
     and  pathname  expansion  processed for further tilde expan-
     sion, parameter expansion, command  substitution  or  arith-
     metic  expansion.  If  a  command substitution 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 backquoted 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:





SunOS 5.10          Last change: 29 Jun 2005                    9






User Commands                                              ksh(1)



     ____________________________________________________________
    |           Command                        Output           |
    | echo '\$x'                    \$x                         |
    | echo `echo '\$x'`             $x                          |
    | echo $(echo '\$x')            \$x                         |
    |___________________________________________________________|


     Additionally, the backquoted syntax has historical  restric-
     tions 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  otherwise  valid
     embedded scripts do not work in the left column, but do work
     on the right:

     ____________________________________________________________
    | echo `                        echo $(                     |
    | cat <<eeof                    cat <<eeof                  |
    | a here-doc with `             a here-doc with )           |
    | eof                           eof                         |
    | `                             )                           |
    | 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  command 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 pre-
     ceded  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  sub-
     stituting  its value. The format for arithmetic expansion is



SunOS 5.10          Last change: 29 Jun 2005                   10






User Commands                                              ksh(1)



     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  sup-
          ported.

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


          Command               Result in /bin/ksh   Result in /usr/xpg4/bin/sh
          echo $((010+10))      20                   18
          echo $((019+10))      29                   error
          [ 10 -le $((011)) ]   true                 false


     As an extension, the shell can recognize arithmetic  expres-
     sions 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 SunOS and only on  versions  of
     the UNIX operating system that support the /dev/fd directory



SunOS 5.10          Last change: 29 Jun 2005                   11






User Commands                                              ksh(1)



     for naming open files. Each command  argument  of  the  form
     <(list)  or  >(list)  runs  process list asynchronously con-
     nected 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,  respec-
     tively,  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 argu-
     ment 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 characters *, @, #, ?, -, $, and !. A variable (a param-
     eter 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  sup-
     ported  by  the  shell  are described later with the typeset
     special command. Exported variables pass values  and  attri-
     butes to the environment.

     The shell supports a one-dimensional array facility. An ele-
     ment  of  an  array variable is referenced by a subscript. A
     subscript is denoted by  a  [,  followed  by  an  arithmetic
     expression,  followed  by a ]. See Arithmetic 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 vari-
     able with a valid subscript is legal and an array is created
     if necessary. Referencing an array without  a  subscript  is
     equivalent  to  referencing the element 0. If an array iden-
     tifier 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



SunOS 5.10          Last change: 29 Jun 2005                   12






User Commands                                              ksh(1)



     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 match-
     ing  }.  Any  }  escaped  by  a backslash or within a quoted
     string, and characters in  embedded  arithmetic  expansions,
     command substitutions and variable expansions, are not exam-
     ined 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 char-
     acter  that  could  be  interpreted as part of the name. The
     matching closing brace are determined by counting brace lev-
     els,  skipping over enclosed quoted strings and command sub-
     stitutions.

     If the parameter name or symbol is not enclosed  in  braces,
     the expansion 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 variable, 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 @.






SunOS 5.10          Last change: 29 Jun 2005                   13






User Commands                                              ksh(1)



     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  deter-
     mined 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 substituted.



     ${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 param-
                             eter 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. Otherwise, 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 substi-
                             tuted. 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. Omission of the colon results  in  a  test



SunOS 5.10          Last change: 29 Jun 2005                   14






User Commands                                              ksh(1)



     for a parameter that is only unset. The following two tables
     summarize the effect of the colon:

                        | parameter set and not null | parameter set and null
     ${parameter:-word} | substitute parameter       | substitute word
     ${parameter-word}  | substitute parameter       | substitute null
     ${parameter:=word} | substitute parameter       | assign word
     ${parameter=word}  | substitute parameter       | substitute parameter
     ${parameter:?word} | substitute parameter       | error, exit
     ${parameter?word}  | substitute parameter       | substitute null
     ${parameter:+word} | substitute word            | substitute null
     ${parameter+word}  | substitute word            | substitute word


                                 | parameter unset
     ${parameter:-word}          | substitute word
     ${parameter-word}           | substitute word
     ${parameter:=word}          | assign word
     ${parameter=word}           | assign null
     ${parameter:?word}          | error, exit
     ${parameter?word}           | error,exit
     ${parameter:+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 charac-
                             ters  of  the value of parameter. If
                             parameter is * or @,  then  all  the
                             positional parameters, starting with
                             $1, are substituted (separated by  a
                             field separator character).



     The following four varieties of parameter expansion  provide
     for  substring  processing.  In  each case, pattern matching
     notation (see patmat), rather than regular expression  nota-
     tion, 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 character).
     Enclosing the full parameter  expansion  string  in  double-
     quotes  does  not cause the following four varieties of pat-
     tern 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



SunOS 5.10          Last change: 29 Jun 2005                   15






User Commands                                              ksh(1)



                             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 pat-
                             tern. The parameter  expansion  then
                             results in parameter, with the larg-
                             est portion of the suffix matched by
                             the pattern deleted.



     ${parameter#word}       Remove Smallest Prefix Pattern.  The
                             word  is  expanded to produce a pat-
                             tern. The parameter  expansion  then
                             results in parameter, with the smal-
                             lest portion of the  prefix  matched
                             by the pattern deleted.



     ${parameter##word}      Remove Largest Prefix  Pattern.  The
                             word  is  expanded to produce a pat-
                             tern. The parameter  expansion  then
                             results in parameter, with the larg-
                             est portion of the prefix matched by
                             the pattern 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





SunOS 5.10          Last change: 29 Jun 2005                   16






User Commands                                              ksh(1)



     ${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:




SunOS 5.10          Last change: 29 Jun 2005                   17






User Commands                                              ksh(1)



     #               The  number  of  positional  parameters   in
                     decimal.



     -               Flags supplied to the shell on invocation or
                     by the set command.



     ?               The decimal value returned by the last  exe-
                     cuted command.



     $               The process number of this shell.



     _               Initially, the value of  _  is  an  absolute
                     pathname  of  the shell or script being exe-
                     cuted as passed in the  environment.  Subse-
                     quently  it is assigned the last argument of
                     the previous 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  debug-
                     ging 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.





SunOS 5.10          Last change: 29 Jun 2005                   18






User Commands                                              ksh(1)



     OPTARG          The value of the last option  argument  pro-
                     cessed by the getopts special command.



     OPTIND          The index of the last option  argument  pro-
                     cessed 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 initial-
                     ized 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 refer-
                     ence 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



SunOS 5.10          Last change: 29 Jun 2005                   19






User Commands                                              ksh(1)



                     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 corresponding option is turned
                     on. See the set special command.



     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 invocation. The  ENV
                     value  is interpreted in a manner similar to
                     a dot script, in that the commands are  exe-
                     cuted  in  the  current  environment and the
                     file needs to be readable, but  not  execut-
                     able.  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 variable.  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



SunOS 5.10          Last change: 29 Jun 2005                   20






User Commands                                              ksh(1)



                     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 command.



     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  $*  substitu-
                     tion. See Quoting.



     LANG            Provide a default value for the internation-
                     alization  variables that are unset or null.
                     If any of the internationalization 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.







SunOS 5.10          Last change: 29 Jun 2005                   21






User Commands                                              ksh(1)



     LC_COLLATE      This variable  determines  the  behavior  of
                     range  expressions,  equivalence classes and
                     multi-byte  character   collating   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  characters for
                     that locale. If LC_CTYPE (see environ(5)) is
                     not  set in the environment, the operational
                     behavior of the shell is determined  by  the
                     value  of  the LANG environment variable. If
                     LC_ALL is set,  its  contents  are  used  to
                     override  both  the  LANG and the other LC_*
                     variables.



     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  (numbered  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.




SunOS 5.10          Last change: 29 Jun 2005                   22






User Commands                                              ksh(1)



     MAILCHECK       This  variable  specifies  how   often   (in
                     seconds) the shell checks for changes in the
                     modification time of any of the files speci-
                     fied  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 variable is set, then the shell informs
                     the user of any modifications to the  speci-
                     fied  files  that  have  occurred within the
                     last MAILCHECK seconds. Each file  name  can
                     be  followed  by  a  ? and a message that is
                     printed.  The  message  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  Com-
                     mand Re-entry. Two successive occurrences of
                     ! produces a single ! when the prompt string
                     is printed.



SunOS 5.10          Last change: 29 Jun 2005                   23






User Commands                                              ksh(1)



     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 current working directory, containing
                     no components of type symbolic link, no com-
                     ponents that are dot, and no components 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 terminates 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 Special 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



SunOS 5.10          Last change: 29 Jun 2005                   24






User Commands                                              ksh(1)



     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 characters 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  character
     period  (.)  at the start of a file name or immediately fol-
     lowing 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 characters separated by - matches
                     any character lexically  between  the  pair,
                     inclusive.  If the first character following
                     the opening "[" is a "! ", then any  charac-
                     ter  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:





SunOS 5.10          Last change: 29 Jun 2005                   25






User Commands                                              ksh(1)



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



     *(pattern-list)         Matches zero or more occurrences  of
                             the given patterns.



     +(pattern-list)         Matches one or more  occurrences  of
                             the given patterns.



     @(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 preceding it with a \. The pair
     \NEWLINE is removed. All characters enclosed between a  pair
     of single quote marks ( ' ') are quoted. A single quote can-
     not 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



SunOS 5.10          Last change: 29 Jun 2005                   26






User Commands                                              ksh(1)



     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  associativity  of expression as the C language. All the
     integral operators, other than ++, -;, ?:, and  ,  are  sup-
     ported. Variables can be referenced by name within an arith-
     metic expression without using  the  parameter  substitution
     syntax.   When  a  variable  is  referenced,  its  value  is
     evaluated 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 assignment 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 pre-
     cisely, ((...)) is equivalent to let "...".

  Prompting
     When used interactively, the shell prompts with the  parame-
     ter  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 secondary prompt (that is, the
     value of PS2) is issued.

  Conditional Expressions
     A conditional expression is used with the [[  compound  com-
     mand  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 con-
     structed 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  char-
                             acter special file.



SunOS 5.10          Last change: 29 Jun 2005                   27






User Commands                                              ksh(1)



     -d file                 True, if file exists and is a direc-
                             tory.



     -e file                 True, if file exists.



     -f file                 True, if file exists and is an ordi-
                             nary file.



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



     -h file                 True, if file exists and is  a  sym-
                             bolic 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.





SunOS 5.10          Last change: 29 Jun 2005                   28






User Commands                                              ksh(1)



     -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  execut-
                             able  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  sym-
                             bolic link.



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



     -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.



SunOS 5.10          Last change: 29 Jun 2005                   29






User Commands                                              ksh(1)



     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       True, if string does not match  pat-
                             tern.



     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.




SunOS 5.10          Last change: 29 Jun 2005                   30






User Commands                                              ksh(1)



     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  primi-
     tives  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 expression2 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).






SunOS 5.10          Last change: 29 Jun 2005                   31






User Commands                                              ksh(1)



     >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 writ-
                             ing 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, com-
                             mand substitution, or file name gen-
                             eration 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
                             substitution   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.



SunOS 5.10          Last change: 29 Jun 2005                   32






User Commands                                              ksh(1)



     <&-                     The standard input is closed.  Simi-
                             larly  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  signifi-
     cant.  The  shell evaluates each redirection in terms of the
     (file descriptor, file) association at the time  of  evalua-
     tion. 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 redirec-
     tions  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(5)) 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



SunOS 5.10          Last change: 29 Jun 2005                   33






User Commands                                              ksh(1)



     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 environment seen  by  any  exe-
     cuted  command is thus composed of any name-value pairs ori-
     ginally 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 assign-
     ments. A variable assignment 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 con-
     cerned, 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 com-
     mand name. The following 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  versions  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  sec-
     tion  above,  is used to define shell functions. Shell func-
     tions are read in and stored  internally.  Alias  names  are
     resolved  when  the function is read. Functions are executed
     like commands with the arguments passed as positional param-
     eters. 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.




SunOS 5.10          Last change: 29 Jun 2005                   34






User Commands                                              ksh(1)



     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 implemen-
     tation  can  allow other characters in a function name as an
     extension. The implementation 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.




SunOS 5.10          Last change: 29 Jun 2005                   35






User Commands                                              ksh(1)



     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 expansions is performed as  normal  each  time
     the  function is called. Similarly, the optional io-redirect
     redirections and any variable assignments  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 specified as the name of a simple command The operands to
     the command temporarily 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  function  was  executed.   If  the  special
     built-in  return  is  executed  in the compound-command, the
     function completes and execution resumes with the next  com-
     mand 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  func-
     tion  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  com-
     mand,  and assigns them small integer numbers. When a job is
     started asynchronously with &, the shell prints a line which
     looks like:

     [1] 1234




SunOS 5.10          Last change: 29 Jun 2005                   36






User Commands                                              ksh(1)



     indicating that the job, which was  started  asynchronously,
     was job number 1 and had one (top-level) process, whose pro-
     cess 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 immedi-
     ately 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  com-
     mand  "stty  tostop". If you set this tty option, then back-
     ground 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.







SunOS 5.10          Last change: 29 Jun 2005                   37






User Commands                                              ksh(1)



     The shell learns  immediately  whenever  a  process  changes
     state.  It  normally  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  com-
     pletes triggers 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 immediately 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.  How-
     ever, your background jobs continue to run.

  Signals
     The INT and QUIT signals for an invoked command are  ignored
     if  the  command  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 sec-
     tion.

  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  containing  the  command.  Alternative  directory
     names are separated by a colon  (:).  The  default  path  is
     /bin:/usr/bin:  (specifying  /bin, /usr/bin, and the current
     directory in that  order).  The  current  directory  can  be
     specified  by  two or more adjacent colons, or by a colon at



SunOS 5.10          Last change: 29 Jun 2005                   38






User Commands                                              ksh(1)



     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 direc-
     tory 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  command is executed in a sub-
     shell without removing non-exported quantities.

  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 character or characters of the command.  A  single
     command or range of commands 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 execu-
     tion.  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  editing  option  is
     automatically  selected each time the VISUAL or EDITOR vari-
     able 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



SunOS 5.10          Last change: 29 Jun 2005                   39






User Commands                                              ksh(1)



     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 cur-
     sor.  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  char-
     acters or escape sequences. The notation for control charac-
     ters is caret ( ^ ) followed by the character. For  example,
     ^F  is  the  notation  for  control  F.  This  is entered by
     depressing `f' while holding down the  CTRL  (control)  key.
     The  SHIFT key is not depressed. (The notation ^?  indicates
     the DEL (delete) key.)

     The notation for escape sequences is M- followed by a  char-
     acter.  For  example,  M-f (pronounced Meta f) is entered by
     depressing ESC (ascii 033) 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 char-
                     acters consisting of  only  letters,  digits
                     and underscores.)



     ^B              Move cursor backward (left) one character.



     M-b             Move cursor backward one word.




SunOS 5.10          Last change: 29 Jun 2005                   40






User Commands                                              ksh(1)



     ^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 character is ^? (DEL, the default)
                     then this command does not work).



     ^T              Transpose current character with next  char-
                     acter  in emacs mode. Transpose two previous



SunOS 5.10          Last change: 29 Jun 2005                   41






User Commands                                              ksh(1)



                     characters in gmacs mode.



     ^C              Capitalize current character.



     M-c             Capitalize current word.



     M-l             Change the current word to lower case.



     ^K              Delete from the cursor to  the  end  of  the
                     line.  If  preceded by a numerical parameter
                     whose value is less than the current  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 charac-
                     ters  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.




SunOS 5.10          Last change: 29 Jun 2005                   42






User Commands                                              ksh(1)



     ^@              (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  pro-
                     cessed as an End-of-file only if the current
                     line is null.



     ^P              Fetch previous  command.  Each  time  ^P  is
                     entered the previous 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  com-
                     mand  line containing 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



SunOS 5.10          Last change: 29 Jun 2005                   43






User Commands                                              ksh(1)



                     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  parame-
                     ter  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 parame-
                     ter  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.




SunOS 5.10          Last change: 29 Jun 2005                   44






User Commands                                              ksh(1)



     M-ESC           File name 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.



     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 (nor-
                     mally ^?) 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 com-
     mand  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



SunOS 5.10          Last change: 29 Jun 2005                   45






User Commands                                              ksh(1)



     then modify the command line. This scheme has the advantages
     of  canonical  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 support two alternate end of line delim-
     iters, and can be helpful for certain terminals.

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

     erase           (User defined erase character as defined  by
                     the  stty(1)  command,  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.



SunOS 5.10          Last change: 29 Jun 2005                   46






User Commands                                              ksh(1)



     [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 charac-
                     ter find command, f, F, t, or T.



     [count],        Reverses the last single character find com-
                     mand count times.





SunOS 5.10          Last change: 29 Jun 2005                   47






User Commands                                              ksh(1)



     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 charac-
                     ters, 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 previous 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 previ-
                     ous  command  containing  string.  string is
                     terminated by a RETURN or NEWLINE. If string
                     is  preceded  by  a ^, the matched line must



SunOS 5.10          Last change: 29 Jun 2005                   48






User Commands                                              ksh(1)



                     begin with string. If string  is  NULL,  the
                     previous string is used.



     ?string         Same as / except that search is in the  for-
                     ward direction.



     n               Search for next match of the last pattern to
                     / or ? commands.



     N               Search for next match of the last pattern to
                     /  or  ?,  but  in reverse direction. Search
                     history for the string entered by the previ-
                     ous / 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
     c[count]motion          character that 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.



SunOS 5.10          Last change: 29 Jun 2005                   49






User Commands                                              ksh(1)



     S                       Equivalent to cc.



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



     [count]dmotion          Delete current character through the
     d[count]motion          character that 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. Equivalent to 0i.



     [count]P                Place the previous text modification
                             before the cursor.



     [count]p                Place the previous text modification
                             after the cursor.



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



     [count]rc               Replace   the   count   character(s)
                             starting at the current cursor posi-
                             tion with c, and advance the cursor.



     [count]x                Delete current character.





SunOS 5.10          Last change: 29 Jun 2005                   50






User Commands                                              ksh(1)



     [count]X                Delete preceding character.



     [count].                Repeat the previous  text  modifica-
                             tion command.



     [count]~                Invert  the  case   of   the   count
                             character(s) starting at the current