unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (HP-UX-11.11)
Page:
Section:
Apropos / Subsearch:
optional field



 ksh(1)								      ksh(1)




 NAME
      ksh, rksh - shell, the standard/restricted command programming
      language

 SYNOPSIS
      ksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ...  [+o
      option] ...  [-c string] [arg ...]

      rksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ...  [+o
      option] ...  [-c string] [arg ...]

 DESCRIPTION
      ksh is a command programming language that executes commands read from
      a terminal or a file.  rksh is a restricted version of the command
      interpreter ksh, used to set up login names and execution environments
      whose capabilities are more controlled than those of the standard
      shell.  See Invoking ksh and Special Commands sections later in this
      entry for details about command line options and arguments,
      particularly the set command.

    Definitions
      metacharacter  One of the following characters:

		     ;	 &&amp&amp&amp;   (	 )   |	 <&lt&lt&lt;   >&gt&gt&gt;	 new-line   space   tab

      blank	     A tab or space character.

      identifier     A sequence of letters, digits, or underscores starting
		     with a letter or underscore.  Identifiers are used as
		     names for functions and named parameters.

      word	     A sequence of characters separated by one or more non-
		     quoted metacharacters .

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

      special command
		     A command that is carried out by the shell without
		     creating a separate process.  Often called ``built-in
		     commands''.  Except for documented side effects, most
		     special commands can be implemented as separate
		     utilities.

      #		     The # character is interpreted as the beginning of a
		     comment.  See Quoting below.

    Commands
      A simple-command is a sequence of blank-separated words that can be



 Hewlett-Packard Company	    - 1 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      preceded by a parameter assignment list.	(See Environment below).
      The first word specifies the name of the command to be executed.
      Except as specified below, 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
      terminates normally, or (octal) 200+status if it terminates abnormally
      (see signal(5) for a list of status values).

      A pipeline is a sequence of one or more commands separated by |.	The
      standard output of each command except the last is connected by a pipe
      (see 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 in the pipeline.

      A list is a sequence of one or more pipelines separated by ;, &&amp&amp&amp;, &&amp&amp&amp;&&amp&amp&amp;,
      or ||, and optionally terminated by ;, &&amp&amp&amp;, or |&&amp&amp&amp;.	Of these five
      symbols, ;, &&amp&amp&amp;, and |&&amp&amp&amp; have equal precedence.  &&amp&amp&amp;&&amp&amp&amp; and || have a higher
      but also equal precedence.  A semicolon (;) causes sequential
      execution of the preceding pipeline; an ampersand (&&amp&amp&amp;) causes
      asynchronous execution of the preceding pipeline (that is, the shell
      does not wait for that pipeline to finish).  The symbol |&&amp&amp&amp; causes
      asynchronous execution of the preceding command or pipeline with a
      two-way pipe established to the parent shell (known as a co-process).
      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 later.	The symbol &&amp&amp&amp;&&amp&amp&amp; (||) causes
      the list following it to be executed only if the preceding pipeline
      returns a zero (non-zero) value.	An arbitrary number of new-lines can
      appear in a list, instead of semicolons, to delimit commands.

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

      for identifier [in word ...] do list done
		     Each time for is executed, identifier is set to the
		     next word taken from the in word list.  If in word ...
		     is omitted, for executes the do list once for each
		     positional parameter set (see Parameter Substitution
		     below).  Execution ends when there are no more words in
		     the list.

      select identifier [in word...] do list done
		     A select command prints on standard error (file
		     descriptor 2), the set of words, each preceded by a
		     number.  If in word ...  is omitted, the positional
		     parameters are used instead (see Parameter Substitution
		     below).  The PS3 prompt is printed and a line is read
		     from the standard input.  If this line starts with the
		     number of one of the listed words, the value of the



 Hewlett-Packard Company	    - 2 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




		     parameter identifier is set to the word corresponding
		     to this number.  If this line is empty, the selection
		     list is printed again.  Otherwise the value of the
		     parameter identifier is set to null.  The contents of
		     the line read from standard input is saved in the
		     parameter REPLY.  The list is executed for each
		     selection until a break or end-of-file (eof) is
		     encountered.

      case word in [[ (] pattern [ | pattern] ... ) list ;; ] ... esac
		     A case command executes the list associated with the
		     first pattern that matches word.  The form of the
		     patterns is identical to that used for file name
		     generation (see File Name Generation below).

      if list then list [ elif list then list] ... [ else list] fi
		     The list following if is executed and, if it returns a
		     zero exit status, the list following the first then is
		     executed.	Otherwise, the list following elif is
		     executed and, if its value is zero, the list following
		     the next then is executed.	 Failing that, the else list
		     is executed.  If no else list or then list is executed,
		     if returns a zero exit status.

      while list do list done
      until list do list done
		     A while command repeatedly executes the while list, and
		     if the exit status of the last command in the list is
		     zero, executes the do list; otherwise the loop
		     terminates.  If no commands in the do list are
		     executed, while returns a zero 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
		     as described below.

      { list;}	     Execute list, but not in a separate environment.  Note
		     that { is a keyword and requires a trailing blank to be
		     recognized.

      [[ expression ]]
		     Evaluates expression and returns a zero exit status
		     when expression is true.  See Conditional Expressions
		     below, for a description of expression.  Note that [[
		     and ]] are keywords and require blanks between them and
		     expression.





 Hewlett-Packard Company	    - 3 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      function identifier {list;}
      identifier () {list;}
		     Define a function referred to by identifier.  The body
		     of the function is the list of commands between { and }
		     (see Functions below).

      time pipeline  pipeline is executed and the elapsed time, user time,
		     and system time are printed on standard error. Note
		     that the time keyword can appear anywhere in the
		     pipeline to time the entire pipeline. To time a
		     particular command in a pipeline, see time(1).

      The following keywords are recognized only 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 subsequent 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 metacharacters, quoting characters,
      file expansion characters, parameter and command substitution
      characters, and =.  The replacement string can contain any valid shell
      script, including the metacharacters listed above.  The first word of
      each command in the replaced text, other than any that are in the
      process of being replaced, is tested for additional aliases.  If the
      last character of the alias value is a blank, the word following the
      alias is also checked for alias substitution.  Aliases can be used to
      redefine special built-in commands, but cannot be used to redefine the
      keywords 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 subshells but must be
      reinitialized for separate invocations of the shell (see Invoking ksh
      below).

      Aliasing is performed when scripts are read, not while they are
      executed.	 Therefore, for it to take effect, alias must be executed
      before the command referring to the alias is read.

      Aliases are frequently used as a shorthand for full path names.  An
      option to the aliasing facility allows the value of the alias to be
      automatically set to the full path name of the corresponding command.
      These aliases are called tracked aliases.	 The value of a tracked
      alias is defined the first time the identifier is read and becomes
      undefined each time the PATH variable is reset.  These aliases remain
      tracked so that the next reference redefines the value.  Several



 Hewlett-Packard Company	    - 4 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      tracked aliases are compiled into the shell.  The -h option of the set
      command converts each command name that is an identifier into a
      tracked alias.

      The following exported aliases are compiled into the shell but can be
      unset or redefined:

	   autoload='typeset -fu'
	   false='let 0'
	   functions='typeset -f'
	   hash='alias -t -'
	   history='fc -l'
	   integer='typeset -i'
	   nohup='nohup '
	   r='fc -e -'
	   stop='kill -STOP'
	   suspend='kill -STOP $$'
	   true=':'
	   type='whence -v'

    Tilde Substitution
      After alias substitution is performed, each word is checked to see if
      it begins with an unquoted ~.  If it does, the word up to a / is
      checked to see if it matches a user name in the /etc/passwd file.	 If
      a match is found, the ~ and the matched login name are replaced by the
      login directory of the matched user.  This is called a tilde
      substitution.  If no match is found, the original text is left
      unchanged.  A ~, alone or before a /, is replaced by the value of the
      HOME parameter.  A ~ followed by a + or - is replaced by the value of
      the parameter PWD and OLDPWD, respectively.  In addition, tilde
      substitution is attempted when the value of a parameter assignment
      begins with a ~.

    Command Substitution
      The standard output from a command enclosed in parenthesis preceded by
      a dollar sign ($(command)) or a pair of back single quotes (accent
      grave) (`command`) can be used as part or all of a word; trailing
      new-lines are removed.  In the second (archaic) form, the string
      between the quotes is processed for special quoting characters before
      the command is executed (see Quoting below).  The command substitution
      $(cat file) can be replaced by the equivalent but faster $(<&lt&lt&lt;file).
      Command substitution of most special commands (built-ins) that do not
      perform I/O redirection are carried out without creating a separate
      process.	However, command substitution of a function creates a
      separate process to execute the function and all commands (built-in or
      otherwise) in that function.

      An arithmetic expression enclosed in double parenthesis preceded by a
      dollar sign ($((expression))) is replaced by the value of the
      arithmetic expression within the double parenthesis (see Arithmetic
      Evaluation below for a description of arithmetic expressions).



 Hewlett-Packard Company	    - 5 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




    Parameter Substitution
      A parameter is an identifier, one or more digits, or any of the
      characters *, @, #, ?, -, $, and !.  A named parameter (a parameter
      denoted by an identifier) has a value and zero or more attributes.
      Named parameters can be assigned values and attributes by using the
      typeset special command.	Attributes supported by ksh are described
      later with the typeset special command.  Exported parameters pass
      values and attributes to the environment.

      The shell supports a limited one-dimensional array facility.  An
      element of an array parameter is referenced by a subscript.  A
      subscript is denoted by a [ followed by an arithmetic expression (see
      Arithmetic Evaluation below) followed by a ].  To assign values to an
      array, use set -A name value ....	 The value of all subscripts must be
      in the range of 0 through 1023.  Arrays need not be declared.  Any
      reference to a named parameter with a valid subscript is legal and an
      array is created if necessary.  Referencing an array without a
      subscript is equivalent to referencing the first element.

      The value of a named parameter can also be assigned by writing:

	   name=value [name=value] ...

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

      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.

      The character $ is used to introduce substitutable parameters.

	   ${parameter}	       Substitute the value of the parameter, if
			       any.  Braces are required when parameter is
			       followed by a letter, digit, or underscore
			       that should not be interpreted as part of its
			       name or when a named parameter is
			       subscripted.  If parameter is one or more
			       digits, it is a positional parameter.  A
			       positional parameter of more than one digit
			       must be enclosed in braces.  If parameter is
			       * or @ all the positional parameters,
			       starting with $1, are substituted (separated
			       by a field separator character).	 If an array
			       identifier with subscript * or @ is used, the
			       value for each element is substituted
			       (separated by a field separator character).
			       The shell reads all the characters from ${ to
			       the matching } as part of the same word even
			       if it contains braces or metacharacters.




 Hewlett-Packard Company	    - 6 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




	   ${#parameter}       If parameter is * or @, the number of
			       positional parameters is substituted.
			       Otherwise, the length of the value of the
			       parameter is substituted.

	   ${#identifier[*]}   Substitute the number of elements in the
			       array identifier.

	   ${parameter:-word}  If parameter is set and is non-null,
			       substitute its value; otherwise substitute
			       word.

	   ${parameter:=word}  If parameter is not set or is null, set it to
			       word; then substitute the value of the
			       parameter.  Positional parameters cannot be
			       assigned in this way.

	   ${parameter:?word}  If parameter is set and is non-null,
			       substitute its value; otherwise, print word
			       and exit from the shell.	 If word is omitted,
			       a standard message is printed.

	   ${parameter:+word}  If parameter is set and is non-null,
			       substitute word; otherwise substitute
			       nothing.

	   ${parameter#pattern}
	   ${parameter##pattern}
			       If the shell pattern matches the beginning of
			       the value of parameter, the value of this
			       substitution is the value of the parameter
			       with the matched portion deleted; otherwise
			       the value of this parameter substituted.	 In
			       the former case, the smallest matching
			       pattern is deleted; in the latter case, the
			       largest matching pattern is deleted.

	   ${parameter%pattern}
	   ${parameter%%pattern}
			       If the shell pattern matches the end of the
			       value of parameter, the value of parameter
			       with the matched part is deleted; otherwise
			       substitute the value of parameter.  In the
			       former, the smallest matching pattern is
			       deleted; in the latter, the largest matching
			       pattern is deleted.

	   In the above, word is not evaluated unless it is used as the
	   substituted string.	Thus, in the following example, pwd is
	   executed only if d is not set or is null:




 Hewlett-Packard Company	    - 7 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




		echo ${d:-$(pwd)}

	   If the colon (:) is omitted from the above expressions, the shell
	   only checks to determine whether or not parameter is set.

      The following parameters are set automatically by the shell:

	   #		  The number of positional parameters in decimal.
	   -		  Options supplied to the shell on invocation or by
			  the set command.
	   ?		  The decimal value returned by the last executed
			  command.
	   $		  The process number of this shell.
	   _		  Initially, the value of _ is an absolute pathname
			  of the shell or script being executed as passed in
			  the environment.  Subsequently it is assigned the
			  last argument of the 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.
	   COLUMNS	  If this variable is set, its value is used to
			  define the width of the edit window for the shell
			  edit modes and for printing select lists.  In a
			  windowed environment, if the shell detects that
			  the window size has changed, the shell updates the
			  value of COLUMNS.
	   ERRNO	  The value of errno as set by the most recently
			  failed system call.  This value is system
			  dependent and is intended for debugging purposes.
	   LINENO	  The line number of the current line within the
			  script or function being executed.
	   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.	 In a
			  windowed environment, if the shell detects that
			  the window size has changed, the shell updates the
			  value of LINES.
	   OLDPWD	  The previous working directory set by the cd
			  command.
	   OPTARG	  The value of the last option argument processed by
			  the getopts special command.
	   OPTIND	  The index of the last option argument processed by
			  the getopts special command.
	   PPID		  The process number of the parent of the shell.
	   PWD		  The present working directory set by the cd
			  command.




 Hewlett-Packard Company	    - 8 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




	   RANDOM	  Each time this parameter is evaluated, a random
			  integer, uniformly distributed between 0 and
			  32767, is generated.	The sequence of random
			  numbers can be initialized by assigning a numeric
			  value to RANDOM.
	   REPLY	  This parameter is set by the select statement and
			  by the read special command when no arguments are
			  supplied.
	   SECONDS	  Each time this parameter is referenced, the number
			  of seconds since shell invocation is returned.  If
			  this parameter is assigned a value, the value
			  returned upon reference is the value that was
			  assigned plus the number of seconds since the
			  assignment.

      The following parameters are used by the shell:

	   CDPATH	  The search path for the cd command.
	   EDITOR	  If the value of this variable ends in emacs,
			  gmacs, or vi and the VISUAL variable is not set,
			  the corresponding option is turned on (see set in
			  Special Commands below).
	   ENV		  If this parameter is set, parameter substitution
			  is performed on the value to generate the path
			  name of the script to be executed when the shell
			  is invoked (see Invoking ksh below).	This file is
			  typically used for alias and function definitions.
	   FCEDIT	  The default editor name for the fc command.
	   FPATH	  The search path for function definitions.  This
			  path is searched when a function with the -u
			  attribute is referenced and when a command is not
			  found.  If an executable file is found, then it is
			  read and executed in the current environment.
	   IFS		  Internal field separators, normally space, tab,
			  and new-line that are used to separate command
			  words resulting from command or parameter
			  substitution, and for separating words with the
			  special command read.	 The first character of the
			  IFS parameter is used to separate arguments for
			  the "$*" substitution (see Quoting below).
	   HISTFILE	  If this parameter is set when the shell is
			  invoked, its value is the path name of the file
			  that is used to store the command history.  The
			  default value is $HOME/.sh_history.  If the user
			  has appropriate privileges and no HISTFILE is
			  given, then no history file is used (see Command
			  Re-entry below).
	   HISTSIZE	  If this parameter is set when the shell is
			  invoked, the number of previously entered commands
			  accessible to this shell will be greater than or
			  equal to this number.	 The default is 128.



 Hewlett-Packard Company	    - 9 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




	   HOME		  The default argument (home directory) for the cd
			  command.
	   MAIL		  If this parameter is set to the name of a mail
			  file and the MAILPATH parameter is not set, the
			  shell informs the user of arrival of mail in the
			  specified file.
	   MAILCHECK	  This variable specifies how often (in seconds) the
			  shell checks for changes in the modification time
			  of any of the files specified by the MAILPATH or
			  MAIL parameters.  The default value is 600
			  seconds.  When the time has elapsed the shell
			  checks before issuing the next prompt.
	   MAILPATH	  A list of file names separated by colons (:).	 If
			  this parameter is set, the shell informs the user
			  of any modifications to the specified files that
			  have occurred within the last MAILCHECK seconds.
			  Each file name can be followed by a ? and a
			  message to be printed, in which case the message
			  undergoes parameter and command substitution with
			  the parameter $_ defined as the name of the
			  changed file.	 The default message is you have
			  mail in $_.
	   PATH		  The search path for commands (see Execution
			  below).  The user cannot change PATH if executing
			  rksh (except in the .profile file).
	   PS1		  The value of this parameter is expanded for
			  parameter substitution, to define the primary
			  prompt string which, by default, is $ followed by
			  a space character.  The character ! in the primary
			  prompt string is replaced by the command number
			  (see Command Re-entry below).	 To include a ! in
			  the prompt, use !!.
	   PS2		  Secondary prompt string, by default >&gt&gt&gt; followed by
			  a space character.
	   PS3		  Selection prompt string used within a select loop,
			  by default #? followed by a space character.
	   PS4		  The value of this variable is expanded for
			  parameter substitution and precedes each line of
			  an execution trace.  If PS4 is unset, the
			  execution trace prompt is + followed by a space
			  character.
	   SHELL	  The path name of the shell is kept in the
			  environment.	When invoked, the shell is
			  restricted if the value of this variable contains
			  an r in the basename.
	   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.
	   VISUAL	  Invokes the corresponding option when the value of
			  this variable ends in emacs, gmacs, or vi (see set



 Hewlett-Packard Company	   - 10 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




			  in Special Commands below).

      The shell gives default values to PATH, PS1, PS2, MAILCHECK, TMOUT,
      and IFS.	HOME, SHELL, ENV, and MAIL are never set automatically by
      the shell (although HOME, SHELL, and MAIL are set by login(1)).

    Blank Interpretation
      After parameter and command substitution, the results of substitution
      are scanned for field separator characters (found in IFS), and split
      into distinct arguments where such characters are found.	ksh retains
      explicit null arguments ( or '') but removes implicit null arguments
      (those resulting from parameters that have no values).

    File Name Generation
      Following substitution, each command word is processed as a pattern
      for file name expansion unless the -f option has been set.  The form
      of the patterns is the Pattern Matching Notation defined by regexp(5).
      The word is replaced with sorted file names matching the pattern.	 If
      no file name is found that matches the pattern, the word is left
      unchanged.

      In addition to the notation described in regexp(5), ksh recognizes
      composite patterns made up of one or more pattern lists separated from
      each other with a |.  Composite patterns can be formed with one or
      more of the following:

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

	   *(pattern-list)     Matches zero or more occurrences of the given
			       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 above) has a
      special meaning to the shell and causes termination of a word unless
      quoted.  A character can be quoted (i.e., made to stand for itself) by
      preceding it with a \.  The pair \new-line is ignored.  All characters
      enclosed between a pair of single quote marks (''), are quoted.  A
      single quote cannot appear within single quotes.	Inside double quote
      marks (""), parameter and command substitution occurs and \ quotes the
      characters \, `, ", and $.  $* and $@ have identical meanings 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



 Hewlett-Packard Company	   - 11 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      "$1d$2d...", where d is the first character of the IFS parameter,
      whereas "$@" is equivalent to "$1" "$2" ....  Inside back single quote
      (accent grave) marks (``) \ quotes the characters \, `, and $.  If the
      back single quotes occur within double quotes, \ also quotes the
      character ".

      The special meaning of keywords or aliases can be removed by quoting
      any character of the keyword.  The recognition of function names or
      special command names listed below cannot be altered by quoting them.

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

      An arithmetic expression uses the same syntax, precedence, and
      associativity of expression of the C language.  All the integral
      operators, other than ++, --, ?:, and , are supported.  Variables can
      be referenced by name within an arithmetic expression without using
      the parameter substitution syntax.  When a variable is referenced, its
      value is 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 beginning with
      ((, all characters until the matching )) are treated as a quoted
      expression.  More precisely, ((...)) is equivalent to let "...".

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

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

	   -a file	       True if file exists.




 Hewlett-Packard Company	   - 12 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




	   -b file	       True if file exists and is a block special
			       file.
	   -c file	       True if file exists and is a character
			       special file.
	   -d file	       True if file exists and is a directory.
	   -f file	       True if file exists and is an ordinary file.
	   -g file	       True if file exists and is has its setgid bit
			       set.
	   -h file	       True if file exists and is a a symbolic link.
	   -k file	       True if file exists and is has its sticky bit
			       set.
	   -n string	       True if length of string is non-zero.
	   -o option	       True if option named option is on.
	   -p file	       True if file exists and is a fifo special
			       file or a pipe.
	   -r file	       True if file exists and is readable by
			       current process.
	   -s file	       True if file exists and has size greater than
			       zero.
	   -t fildes	       True if file descriptor number fildes is open
			       and associated with a terminal device.
	   -u file	       True if file exists and is has its setuid bit
			       set.
	   -w file	       True if file exists and is writable by
			       current process.
	   -x file	       True if file exists and is executable by
			       current process.	 If file exists and is a
			       directory, the current process has permission
			       to search in the directory.
	   -z string	       True if length of string is zero.  -L file
			       True if file exists and is a symbolic link.
	   -O file	       True if file exists and is owned by the
			       effective user ID of this process.
	   -G file	       True if file exists and its group matches the
			       effective group ID of this process.
	   -S file	       True if file exists and is a socket.
	   file1 -nt file2     True if file1 exists and is newer than file2.
	   file1 -ot file2     True if file1 exists and is older than file2.
	   file1 -ef file2     True if file1 and file2 exist and refer to
			       the same file.
	   string = pattern    True if string matches pattern.
	   string != pattern   True if string does not match pattern.
	   string1 <&lt&lt&lt; string2   True if string1 comes before string2 based on
			       ASCII value of their characters.
	   string1 >&gt&gt&gt; string2   True if string1 comes after string2 based on
			       ASCII value of their characters.
	   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.




 Hewlett-Packard Company	   - 13 -   HP-UX Release 11i: November 2000






 ksh(1)								      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.

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

	   (expression)			      True, if expression is true.
					      Used to group expressions.
	   ! expression			      True if expression is false.
	   expression1 &&amp&amp&amp;&&amp&amp&amp; 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 occurs before word or digit is used, except as noted
      below.  File name generation occurs only if the pattern matches a
      single file and blank interpretation is not performed.

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

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

	   >&gt&gt&gt;|word	  Sames as >&gt&gt&gt;, except that it overrides the noclobber
			  option.

	   >&gt&gt&gt;>&gt&gt&gt;word	  Use file word as standard output.  If the file
			  exists, output is appended to it (by first
			  searching for the end-of-file); otherwise, the
			  file is created.

	   <&lt&lt&lt;>&gt&gt&gt;word	  Open file word for reading and writing as standard
			  input.  If the file does not exist it is created.

	   <&lt&lt&lt;<&lt&lt&lt;[-]word	  The shell input is read up to a line that matches
			  word, or to an end-of-file.  No parameter
			  substitution, command substitution, or file name
			  generation is performed on word.  The resulting
			  document, called a here-document, becomes the
			  standard input.  If any character of word is
			  quoted, no interpretation is placed upon the



 Hewlett-Packard Company	   - 14 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




			  characters of the document.  Otherwise, parameter
			  and command substitution occurs, \new-line is
			  ignored, and \ must be used to quote the
			  characters \, $, `, and the first character of
			  word.	 If - is appended to <&lt&lt&lt;<&lt&lt&lt;, all leading tabs
			  are stripped from word and from the document.

	   <&lt&lt&lt;&&amp&amp&amp;digit	  The standard input is duplicated from file
			  descriptor digit (see dup(2)).

	   >&gt&gt&gt;&&amp&amp&amp;digit	  The standard output is duplicated to file
			  descriptor digit (see dup(2)).

	   <&lt&lt&lt;&&amp&amp&amp;-		  The standard input is closed.

	   >&gt&gt&gt;&&amp&amp&amp;-		  The standard output is closed.

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

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

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

	   ... 2>&gt&gt&gt;&&amp&amp&amp;1

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

      Redirection order is significant because the shell evaluates
      redirections referencing file descriptors in terms of the currently
      open file associated with the specified file descriptor at the time of
      evaluation.  For example:

	   ...	1>fname 2>&1

      first assigns file descriptor 1 (standard output) to file	 fname ,
      then assigns file descriptor 2 (standard error) to the file assigned
      to file descriptor 1; i.e., fname.  On the other hand, if the order of
      redirection is reversed as follows:

	   ...	2>&1 1>fname

      file descriptor 2 is assigned to the current standard output (user
      terminal unless a different assignment is inherited).  File descriptor
      1 is then reassigned to file fname without changing the assignment of
      file descriptor 2.




 Hewlett-Packard Company	   - 15 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      The input and output of a co-process can be moved to a numbered file
      descriptor allowing other commands to write to them and read from them
      using the above redirection operators.  If the input of the current
      co-process is moved to a numbered file descriptor, another co-process
      can be started.

      If a command is followed by &&amp&amp&amp; and job control is inactive, 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 passed
      to an executed program much like a normal argument list.	The names
      must be identifiers and the values are character strings.	 The shell
      interacts with the environment in several ways.  When invoked, the
      shell scans the environment and creates a parameter for each name
      found, gives it the corresponding value, and marks it export.
      Executed commands inherit the environment.  If the user modifies the
      values of these parameters or creates new ones by using the export or
      typeset -x commands, the values become part of the environment.  The
      environment seen by any executed command is thus composed of any
      name-value pairs originally inherited by the shell whose values can be
      modified by the current shell, plus any additions which must be noted
      in export or typeset -x commands.

      The environment for any simple-command or function can be augmented by
      prefixing it with one or more parameter assignments.  A parameter
      assignment argument takes the form identifier=value.  For example,

	   TERM=450 cmd args

      and

	   (export TERM; TERM=450; cmd args)

      are equivalent (as far as the above execution of cmd is concerned
      except for special commands listed below that are preceded by a
      percent sign).

      If the -k option is set, all parameter assignment arguments are placed
      in the environment, even if they occur after the command name.  The
      following echo statement prints a=b c.  After the -k option is set,
      the second echo statement prints only c:

	   echo a=b c
	   set -k
	   echo a=b c





 Hewlett-Packard Company	   - 16 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      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 keyword (described in the Commands section above) is used
      to define shell functions.  Shell functions are read and stored
      internally.  Alias names are resolved when the function is read.
      Functions are executed like commands, with the arguments passed as
      positional parameters (see Execution below).

      Functions execute in the same process as the caller except that
      command substitution of a function creates a new process.	 Functions
      share all files and present working directory with the caller.  Traps
      caught by the caller are reset to their default action inside the
      function.	 If a function does not catch or specifically ignore a trap
      condition, the function terminates and the condition is passed on to
      the caller.  A trap on EXIT set inside a function is executed after
      the function completes in the environment of the caller.	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.

      Function identifiers can be listed with the +f option of the typeset
      special command.	Function identifiers and the associated text of the
      functions can be listed with the -f option.  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 reinvoking the shell.
      Functions that must be defined across separate invocations of the
      shell should be placed in the ENV file.

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

	   [1] 1234

      indicating that job number 1 was started asynchronously and had one
      (top-level) process whose process ID was 1234.





 Hewlett-Packard Company	   - 17 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      If you are running a job and want to do something else, type the
      suspend character (usually ^Z (Ctrl-Z)) to send a STOP signal to the
      current job.  The shell then indicates that the job has been
      `Stopped', and prints another prompt.  The state of this job can be
      manipulated by using the bg command to put it in the background,
      running other commands (while it is stopped or running in the
      background), and eventually restarting or returning the job to the
      foreground by using the fg command.  A ^Z takes effect immediately and
      resembles an interrupt, since pending output and unread input are
      discarded when ^Z is typed.

      A job run in the background stops if it tries to read from the
      terminal.	 Background jobs normally are allowed to produce output, but
      can be disabled by giving the stty tostop command.  If the user sets
      this tty option, background jobs stop when trying to produce output.

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

	   %number	       The job with the given number.
	   %string	       Any job whose command line begins with
			       string.
	   %?string	       Any job whose command line contains string.
	   %%		       Current job.
	   %+		       Equivalent to %%.
	   %-		       Previous job.

      The shell learns immediately when a process changes state.  It informs
      the user when a job is blocked and prevented from further progress,
      but only just before it prints a prompt.

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

      Attempting to leave the shell while jobs are running or stopped
      produces the warning, You have stopped (running) jobs.  Use the jobs
      command to identify them.	 An immediate attempt to exit again
      terminates the stopped jobs; the shell does not produce a warning the
      second time.

    Signals
      The INT and QUIT signals for an invoked command are ignored if the
      command is followed by &&amp&amp&amp; and the monitor option is off.  Otherwise,
      signals have the values inherited by the shell from its parent, with
      the exception of signal 11 (but see also the trap command below).

    Execution
      Substitutions are made each time a command is executed.  If the
      command name matches one of the Special Commands listed below, it is
      executed within the current shell process.  Next, ksh checks the



 Hewlett-Packard Company	   - 18 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      command name to determine whether it matches one of the user-defined
      functions.  If it does, ksh saves the positional parameters and then
      sets them to the arguments of the function call.	The positional
      parameter 0 is set to the function name.	When the function completes
      or issues a return, ksh restores the positional parameter list and
      executes any trap set on EXIT within the function.  The value of a
      function is the value of the last command executed.  A function is
      executed in the current shell process.  If a command name is not a
      special command or a user-defined function, ksh creates a process and
      attempts to execute the command using exec (see exec(2)).

      The shell parameter PATH defines the search path for the directory
      containing the command.  Alternative directory names are separated by
      a colon (:).  The default path is /usr/bin: (specifying /usr/bin and
      the current directory in that order).  Note that the current directory
      is specified by a null path name which can appear immediately after
      the equals sign, between colon delimiters, or at the end of the path
      list.  The search path is not used if the command name contains a /.
      Otherwise, each directory in the path is searched for an executable
      file.  If the file has execute permissions but is not a directory or
      an executable object code file, it is assumed to be a script file,
      which is a file of data for an interpreter.  If the first two
      characters of the script file are #!, exec (see exec(2)) expects an
      interpreter path name to follow.	exec then attempts to execute the
      specified interpreter as a separate process to read the entire script
      file.  If a call to exec fails, /usr/bin/ksh is spawned to interpret
      the script file.	All non-exported aliases, functions, and named
      parameters are removed in this case.  If the shell command file does
      not have read permission, or if the setuid and/or setgid bits are set
      on the file, the shell executes an agent to set up the permissions and
      execute the shell with the shell command file passed down as an open
      file.  A parenthesized command is also 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
      writable.	 A shell can access the commands of all interactive shells
      that 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 no editor program is specified as an
      argument to fc, the value of the FCEDIT parameter is used.  If FCEDIT
      is not defined, /usr/bin/ed is used.  The edited command is printed
      and re-executed upon leaving the editor.	The editor name - is used to
      skip the editing phase and to re-execute the command.  In this case a
      substitution parameter of the form old=new can be used to modify the
      command before execution.	 For example, if r is aliased to fc -e -,
      typing r bad=good c re-executes the most recent command that starts



 Hewlett-Packard Company	   - 19 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      with the letter c and replaces the first occurrence of the string bad
      with the string good.

      The history file will be trimmed when all of the following conditions
      occurs:

	   Its size is greater than four kilobytes.

	   The number of commands in it is more than HISTSIZE.

	   The file has not been modified in the last ten minutes.

	   The user has write permission for the directory in which the
	   history file resides.

      If any one of the above conditions does not occur, the history file
      will not be trimmed. When the history file is trimmed, the latest
      HISTSIZE commands will be available in the history file.

    Special Commands
      The following simple-commands are executed in the shell process.	They
      permit input/output redirection.	Unless otherwise indicated, file
      descriptor 1 is the default output location and the exit status, when
      there are no syntax errors, is zero.  Commands that are preceded by %
      or %% are treated specially in the following ways:

	   1.  Variable assignment lists preceding the command remain in
	       effect when the command completes.
	   2.  I/O redirections are processed after variable assignments.
	   3.  Errors cause a script that contains them to abort.
	   4.  Words following a command preceded by %% that are in the
	       format of a variable assignment are expanded with the same
	       rules as a variable assignment.	This means that tilde
	       substitution is performed after the = sign and word splitting
	       and file name generation are not performed.

      % : [arg ...]  The command only expands parameters.  A zero exit code
		     is returned.

      % . file [arg ...]
		     Read and execute commands from file and return.  The
		     commands are executed in the current shell environment.
		     The search path specified by PATH is used to find the
		     directory containing file.	 If any arguments arg are
		     given, they become the positional parameters.
		     Otherwise the positional parameters are unchanged.	 The
		     exit status is the exit status of the last command
		     executed.	It is not necessary that the execute
		     permission bit be set for file.





 Hewlett-Packard Company	   - 20 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      %% alias [-tx] [name[=value] ...]
		     alias with no arguments prints the list of aliases in
		     the form name=value on standard output.  An alias is
		     defined for each name whose value is given.  A trailing
		     space in value causes the next word to be checked for
		     alias substitution.  The -t option is used to set and
		     list tracked aliases.  The value of a tracked alias is
		     the full path name corresponding to the given name.
		     The value of a tracked alias becomes undefined when the
		     value of PATH is reset, but the alias remains tracked.
		     Without the -t option, for each name in the argument
		     list for which no value is given, the name and value of
		     the alias is printed.  The -x option is used to set or
		     print exported aliases.  An exported alias is defined
		     across sub-shell environments.  Alias returns true
		     unless a name is given for which no alias has been
		     defined.

      bg [job ...]   Puts the specified jobs into the background.  The
		     current job is put in the background if job is
		     unspecified.  See Jobs for a description of the format
		     of job.

      % break [n]    Exit from the enclosing for, while, until, or select
		     loop, if any.  If n is specified, break n levels.

      % continue [n] Resume the next iteration of the enclosing for, while,
		     until, or select loop.  If n is specified, resume at
		     the n-th enclosing loop.

      cd [-L|-P] [arg]
      cd old new     This command can take either of two forms.	 In the
		     first form it changes the current directory to arg.  If
		     arg is - the directory is changed to the previous
		     directory.	 The -L option (default) preserves logical
		     naming when treating symbolic links.  cd -L .. moves
		     the current directory one path component closer to the
		     root directory.  The -P option preserves the physical
		     path when treating symbolic links.	 cd -P .. changes
		     the working directory to the parent directory of the
		     current directory.	 The shell parameter HOME is the
		     default arg.  The parameter PWD is set to the current
		     directory.	 The shell parameter CDPATH defines the
		     search path for the directory containing arg.
		     Alternative directory names are separated by a colon
		     (:).  If CDPATH is null or undefined, the default value
		     is the current directory.	Note that the current
		     directory is specified by a null path name which can
		     appear immediately after the equal sign or between the
		     colon delimiters anywhere else in the path list.  If
		     arg begins with a /, the search path is not used.



 Hewlett-Packard Company	   - 21 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




		     Otherwise, each directory in the path is searched for
		     arg.  See also cd(1).

		     The second form of cd substitutes the string new for
		     the string old in the current directory name, PWD and
		     tries to change to this new directory.

		     The cd command cannot be executed by rksh.

      echo [arg ...] See echo(1) for usage and description.

      % eval [arg ...]
		     Reads the arguments as input to the shell and executes
		     the resulting command(s).

      % exec [arg ...]
		     Parameter assignments remain in effect after the
		     command completes.	 If arg is given, the command
		     specified by the arguments is executed in place of this
		     shell without creating a new process.  Input/output
		     arguments can appear and affect the current process.
		     If no arguments are given, the effect of this command
		     is to modify file descriptors as prescribed by the
		     input/output redirection list.  In this case, any file
		     descriptor numbers greater than 2 opened with this
		     mechanism are closed when invoking another program.

      % exit [n]     Causes the shell to exit with the exit status specified
		     by n.  If n is omitted, the exit status is that of the
		     last command executed.  An end-of-file also causes the
		     shell to exit, except when a shell has the ignoreeof
		     option set (see set below).

      %% export [name [=value] ...]
		     The given names are marked for automatic export to the
		     environment of subsequently executed commands.

      fc [-eename] [-nlr] [first [last]]
      fc -e - [old=new] [command]
		     In the first form, a range of commands from first to
		     last is selected from the last HISTSIZE commands typed
		     at the terminal.  The arguments first and last can be
		     specified as a number or string.  A given string is
		     used to locate the most recent command.  A negative
		     number is used to offset the current command number.
		     The -l option causes the commands to be listed on
		     standard output.  Otherwise, the editor program ename
		     is invoked on a file containing these keyboard
		     commands.	If ename is not supplied, the value of the
		     parameter FCEDIT (default /usr/bin/ed) is used as the
		     editor.  Once editing has ended, the commands (if any)



 Hewlett-Packard Company	   - 22 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




		     are executed.  If last is omitted, only the command
		     specified by first is used.  If first is not specified,
		     the default is the previous command for editing and -16
		     for listing.  The -r option reverses the order of the
		     commands and the -n option suppresses command numbers
		     when listing.  In the latter, the command is re-
		     executed after the substitution old=new is performed.

      fg [job ...]   Brings each job into the foreground in the order
		     specified.	 If no job is specified, the current job is
		     brought into the foreground.  See Jobs for a
		     description of the format of job.

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

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

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

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

      kill [-sig] process ...
		     Sends either the TERM (terminate) signal or the
		     specified signal to the specified jobs or processes.
		     Signals are given either by number or name (as given in
		     signal(5), stripped of the prefix SIG).  The signal
		     names are listed by kill -l.  No default exists; merely



 Hewlett-Packard Company	   - 23 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




		     typing kill does not affect the current job.  If the
		     signal being sent is TERM (terminate) or HUP (hangup),
		     the job or process is sent a CONT (continue) signal
		     when stopped.  The process argument can be either a
		     process ID or job.	 If the first argument to kill is a
		     negative integer, it is interpreted as a sig argument
		     and not as a process group.  See also kill(1).

      let arg ...    Each arg is a separate arithmetic expression to be
		     evaluated.	 See Arithmetic Evaluation above, for a
		     description of arithmetic expression evaluation.  The
		     exit status is 0 if the value of the last expression is
		     non-zero, and 1 otherwise.

      % newgrp [arg ...]
		     Equivalent to exec newgrp arg ....

      print[-Rnprsu[n]] [arg ...]
		     The shell output mechanism.  With no options or with
		     option - or -- the arguments are printed on standard
		     output as described by echo(1).  Raw mode, -R or -r,
		     ignores the escape conventions of echo.  The -R option
		     prints all subsequent arguments and options other than
		     -n.  The -p option causes the arguments to be written
		     onto the pipe of the process spawned with |&&amp&amp&amp; instead of
		     standard output.  The -s option causes the arguments to
		     be written onto the history file instead of standard
		     output.  The -u option can be used to specify a one-
		     digit file descriptor unit number n on which the output
		     is to be placed.  The default is 1.  If the option -n
		     is used, no new-line character is added to the output.

      pwd [-L|-P]    With no arguments prints the current working directory
		     (equivalent to print -r - $PWD).  The -L option
		     (default) preserves the logical meaning of the current
		     directory and -P preserves the physical meaning of the
		     current directory if it is a symbolic link.  See the
		     special cd command, cd(1), ln(1)), and pwd(1).

      read [-prsu[n]] [name] [?prompt] [name ...]
		     The shell input mechanism.	 One line is read and broken
		     up into words using the characters in IFS as
		     separators.  In -r raw mode, \ at the end of a line
		     does not signify line continuation.  The first word is
		     assigned to the first name, the second word to the
		     second name, etc., with remaining words assigned to the
		     last name.	 The -p option causes the input line to be
		     taken from the input pipe of a process spawned by the
		     shell using |&&amp&amp&amp;.  If the -s option is present, the input
		     is saved as a command in the history file.	 The option
		     -u can be used to specify a one-digit file descriptor



 Hewlett-Packard Company	   - 24 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




		     unit to read from.	 The file descriptor can be opened
		     with the exec special command.  The default value of n
		     is 0.  If name is omitted, REPLY is used as the default
		     name.  The return code is 0, unless an end-of-file is
		     encountered.  An end-of-file with the -p option causes
		     cleanup for this process so that another process can be
		     spawned.  If the first argument contains a ?, the
		     remainder of this word is used as a prompt when the
		     shell is interactive.  If the given file descriptor is
		     open for writing and is a terminal device, the prompt
		     is placed on this unit.  Otherwise the prompt is issued
		     on file descriptor 2.  The return code is 0, unless an
		     end-of-file is encountered.  See also read(1).

      %% readonly [name[=value] ...]
		     The given names are marked read-only and these names
		     cannot be changed by subsequent assignment.

      % return [n]   Causes a shell function to return to the invoking
		     script with the return status specified by n.  If n is
		     omitted, the return status is that of the last command
		     executed.	Only the low 8 bits of n are passed back to
		     the caller.  If return is invoked while not in a
		     function or executing a script by the . (dot) built-in
		     command, it has the same effect as an exit command.

      set [+<b class="man">_aefhkmnopstuvx | +<b class="man">_o option] ... [ +<b class="man">_A name] [arg ...]
		     The following options are used for this command:
			  -A	  Array assignment.  Unset the variable name
				  and assign values sequentially from the
				  list arg.  If +A is used, the variable
				  name is not unset first.
			  -a	  All subsequent defined parameters are
				  automatically exported.
			  -e	  If the shell is non-interactive and if a
				  command fails, execute the ERR trap, if
				  set, and exit immediately.  This mode is
				  disabled while reading profiles.
			  -f	  Disables file name generation.
			  -h	  Each command whose name is an identifier
				  becomes a tracked alias when first
				  encountered.
			  -k	  All parameter assignment arguments (not
				  just those that precede the command name)
				  are placed in the environment for a
				  command.
			  -m	  Background jobs are run in a separate
				  process group and a line is printed upon
				  completion.  The exit status of background
				  jobs is reported in a completion message.
				  This option is turned on automatically for



 Hewlett-Packard Company	   - 25 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




				  interactive shells.
			  -n	  Read commands and check them for syntax
				  errors, but do not execute them.  The -n
				  option is ignored for interactive shells.
			  -o	  The -o argument takes any of several
				  option names, but only one option can be
				  specified with each -o option.  If none is
				  supplied, the current option settings are
				  printed.  The -o argument option names
				  follow:

				  allexport	    Same as -a.
				  bgnice	    All background jobs are
						    run at a lower priority.
				  errexit	    Same as -e.
				  emacs		    Activates an emacs-style
						    in-line editor for
						    command entry.
				  gmacs		    Activates a gmacs-style
						    in-line editor for
						    command entry.
				  ignoreeof	    The shell does not exit
						    on end-of-file.  The
						    command exit must be
						    used.
				  keyword	    Same as -k.
				  markdirs	    All directory names
						    resulting from file name
						    generation have a
						    trailing / appended.
				  monitor	    Same as -m.
				  noclobber	    Prevents redirection >&gt&gt&gt;
						    from truncating existing
						    files.  Requires >&gt&gt&gt;| to
						    truncate a file when
						    turned on.
				  noexec	    Same as -n.
				  noglob	    Same as -f.
				  nolog		    Do not save function
						    definitions in history
						    file.
				  nounset	    Same as -u.
				  privileged	    Same as -p.
				  verbose	    Same as -v.
				  trackall	    Same as -h.
				  vi		    Activates the insert
						    mode of a vi-style in-
						    line editor until you
						    press the ESC key which
						    puts you in move mode.
						    A return sends the line.



 Hewlett-Packard Company	   - 26 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




				  viraw		    Each character is
						    processed as it is typed
						    in vi mode.
				  xtrace	    Same as -x.

			  -p	  Disables processing of the $HOME/.profile
				  file and uses the file /etc/suid_profile
				  instead of the ENV file.  This mode is on
				  whenever the effective uid (gid) is not
				  equal to the real uid (gid).	Turning this
				  off causes the effective uid and gid to be
				  set to the real uid and gid.
			  -s	  Sort the positional parameters.
			  -t	  Exit after reading and executing one
				  command.
			  -u	  Treat unset parameters as an error when
				  substituting.
			  -v	  Print shell input lines as they are read.
			  -x	  Print commands and their arguments as they
				  are executed.
			  -	  Turns off -x and -v options and stops
				  examining arguments for options.
			  --	  Do not change any of the options; useful
				  in setting $1 to a value beginning with -.
				  If no arguments follow this option, the
				  positional parameters are unset.

		     Using + instead of - before a option causes the option
		     to be turned off.	These options can also be used when
		     invoking the shell.  The current set of options can be
		     examined by using $-.

		     Unless -A is specified, the remaining arg arguments are
		     positional parameters and are assigned consecutively to
		     $1, $2, ....  If neither arguments nor options are
		     given, the values of all names are printed on the
		     standard output.

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

      test [expr]    Evaluate conditional expression expr.  See test(1) for
		     usage and description.  The arithmetic comparison
		     operators are not restricted to integers.	They allow
		     any arithmetic expression.	 Four additional primitive
		     expressions are allowed:

			  -L file	      True if file is a symbolic
					      link.



 Hewlett-Packard Company	   - 27 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




			  file1 -nt file2     True if file1 is newer than
					      file2.
			  file1 -ot file2     True if file1 is older than
					      file2.
			  file1 -ef file2     True if file1 has the same
					      device and i-node number as
					      file2.

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

      % trap [arg] [sig ...]
		     arg is a command read and executed when the shell
		     receives signal(s) sig.  (Note that arg is scanned once
		     when the trap is set and once when the trap is taken.)
		     Each sig can be given as a number or name of the
		     signal.  Trap commands are executed in signal number
		     order.  Any attempt to set a trap on a signal that was
		     ignored upon entering the current shell has no effect.
		     If arg is omitted or is -, all traps for sig are reset
		     to their original values.	If arg is the null string,
		     this signal is ignored by the shell and by the commands
		     it invokes.  If sig is DEBUG, arg is executed after
		     each command.  If sig is ERR, arg is executed whenever
		     a command has a non-zero exit code.  If sig is 0 or
		     EXIT and the trap statement is executed inside the body
		     of a function, the command arg is executed after the
		     function completes.  If sig is 0 or EXIT for a trap set
		     outside any function, the command arg is executed on
		     exit from the shell.  The trap command with no
		     arguments prints a list of commands associated with
		     each signal number.

      %% typeset [+<b class="man">_LRZfilrtux[n]] [name[ = value]] ...
		     Parameter assignments remain in effect after the
		     command completes.	 When invoked inside a function, a
		     new instance of the parameter name is created.  The
		     parameter value and type are restored when the function
		     completes.	 The following list of attributes can be
		     specified:
			  -L   Left justify and remove leading blanks from
			       value.  If n is non-zero, it defines the
			       width of the field.  Otherwise, it is
			       determined by the width of the value of first
			       assignment.  When the name is assigned, the
			       value is filled on the right with blanks or
			       truncated, if necessary, to fit into the
			       field.  Leading zeros are removed if the -Z
			       option is also set.  The -R option is turned
			       off.




 Hewlett-Packard Company	   - 28 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




			  -R   Right justify and fill with leading blanks.
			       If n is non-zero, it defines the width of the
			       field.  Otherwise, it is determined by the
			       width of the value of first assignment.	The
			       field is left-filled with blanks or truncated
			       from the end if the parameter is reassigned.
			       The -L option is turned off.
			  -Z   Right justify and fill with leading zeros if
			       the first non-blank character is a digit and
			       the -L option has not been set.	If n is
			       non-zero, it defines the width of the field.
			       Otherwise, it is determined by the width of
			       the value of first assignment.
			  -f   Cause name to refer to function names rather
			       than parameter names.  No assignments can be
			       made to the name declared with the typeset
			       statement.  The only other valid options are
			       -t (which turns on execution tracing for this
			       function) and -x (which allows the function
			       to remain in effect across shell procedures
			       executed in the same process environment).
			  -i   Parameter is an integer.	 This makes
			       arithmetic faster.  If n is non-zero, it
			       defines the output arithmetic base; otherwise
			       the first assignment determines the output
			       base.
			  -l   Convert all uppercase characters to
			       lowercase.  The uppercase -u option is turned
			       off.
			  -r   Any given name is marked "read only" and
			       cannot be changed by subsequent assignment.
			  -t   Tag the named parameters.  Tags are user
			       definable and have no special meaning to the
			       shell.
			  -u   Convert all lowercase characters to uppercase
			       characters.  The lowercase -l option is
			       turned off.
			  -x   Mark any given name for automatic export to
			       the environment of subsequently executed
			       commands.

			       Using + instead of - causes these options to
			       be turned off.  If no name arguments are
			       given but options are specified, a list of
			       names (and optionally the values) of the
			       parameters that have these options set is
			       printed.	 Using + instead of - retains the
			       values to be printed.  If neither names nor
			       options are given, the names and attributes
			       of all parameters are printed.




 Hewlett-Packard Company	   - 29 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      ulimit [n]     If n is given, impose a size limit of n 512 byte blocks
		     on files written by child processes (files of any size
		     can be read).  If n is not given, the current limit is
		     printed.

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

      unalias name ...
		     The parameters given by the list of names are removed
		     from the alias list.

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

      % wait [job]   Wait for the specified job to terminate or stop, and
		     report its status.	 This status becomes the return code
		     for the wait command.  If job is not given, wait waits
		     for all currently active child processes to terminate
		     or stop.  The termination status returned is that of
		     the last process.	See Jobs for a description of the
		     format of a job.

      whence [-pv] name ...
		     For each name, indicate how it would be interpreted if
		     used as a command name.  The -v option produces a more
		     verbose report.  The -p option does a path search for
		     name even if name is an alias, a function, or a
		     reserved word.

    Invoking ksh
      If the shell is invoked by exec (see exec(2)), and the first character
      of argument zero ($0) is -, the shell is assumed to be a login shell
      and commands are read first from /etc/profile.  The expression
      ${HOME:-.}/.profile is then evaluated and an attempt to open the
      resulting filename is made.  If the file is opened successfully, the
      file is read.  Next, commands are read from the file named by
      performing parameter substitution on the value of the environment
      parameter ENV, if the file exists.  If the -s option is not present
      and arg is, a path search is performed on the first arg to determine



 Hewlett-Packard Company	   - 30 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      the name of the script to execute.  When running ksh with arg, the
      script arg must have read permission and any setuid and getgid
      settings are ignored.  Commands are then read as described below.	 The
      following options are interpreted by the shell when it is invoked:

	   -c string	  If the -c option is present, commands are read
			  from string.
	   -s		  If the -s option is present or if no arguments
			  remain, commands are read from the standard input.
			  Shell output, except for the output of some of the
			  Special Commands listed above, is written to file
			  descriptor 2.
	   -i		  If the -i option is present or if the shell input
			  and output are attached to a terminal, the shell
			  is interactive.  In this case SIGTERM is ignored
			  (so that kill 0 does not kill an interactive
			  shell) and SIGINT +1 is caught and ignored (so
			  that wait is interruptible).	In all cases,
			  SIGQUIT is ignored by the shell.  (See signal(5).)
	   -r		  If the -r option is present, the shell is a
			  restricted shell.

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

    rksh Only
      rksh is used to set up login names and execution environments where
      capabilities are more controlled than those of the standard shell.
      The actions of rksh are identical to those of ksh, except that the
      following are forbidden:

	   +  Changing directory (see cd(1))
	   +  Setting the value of SHELL, ENV, or PATH
	   +  Specifying path or command names containing /
	   +  Redirecting output (>&gt&gt&gt;, >&gt&gt&gt;|, <&lt&lt&lt;>&gt&gt&gt;, and >&gt&gt&gt;>&gt&gt&gt;)

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

      When a command to be executed is found to be a shell procedure, rksh
      invokes ksh to execute it.  Thus, the end-user is provided with shell
      procedures accessible to the full power of the standard shell, while
      being restricted to a limited menu of commands.  This scheme assumes
      that the end-user does not have write and execute permissions in the
      same directory.

      When a shell procedure is invoked from rksh, the shell interpreter
      specified with the #! magic inherits all the restricted features of
      rksh.  So, the shell procedures written for execution under rksh with
      the intent of utilizing the full power of the standard shell should
      not specify an interpreter with #!.



 Hewlett-Packard Company	   - 31 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      These rules effectively give the writer of the .profile file complete
      control over user actions, by performing guaranteed set-up actions and
      leaving the user in an appropriate directory (probably not the login
      directory).

      The system administrator often sets up a directory of commands
      (usually /usr/rbin) that can be safely invoked by rksh.  HP-UX systems
      provide a restricted editor red (see ed(1)), suitable for restricted
      users.

 COMMAND-LINE EDITING
    In-line Editing Options
      Normally, each command line typed at a terminal device is followed by
      a new-line (carriage-return or line-feed).  If either the emacs,
      gmacs, or vi option is set, the user can edit the command line.  An
      editing option is automatically selected each time the VISUAL or
      EDITOR variable is assigned a value ending in either of these option
      names.

      The editing features require that the user's terminal accept Return as
      carriage return without line feed and that a space character must
      overwrite the current character on the screen.  ADM terminal users
      should set the ``space/advance'' switch to ``space''.  Hewlett-Packard
      terminal users should set the straps to ``bcGHxZ etX''.

      The editing modes enable the user to look through a window at the
      current line.  The default window width is 80, unless the value of
      COLUMNS is defined.  If the line is longer than the window width minus
      two, a mark displayed at the end of the window notifies the user.	 The
      mark is a >&gt&gt&gt;, <&lt&lt&lt;, or * if the line extends respectively on the right,
      left, or both side(s) of the window.  As the cursor moves and reaches
      the window boundaries, the window is centered about the cursor.

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

    Emacs Editing Mode
      This mode is invoked by either the emacs or gmacs option.	 Their sole
      difference is their handling of ^T.  To edit, the user moves the
      cursor to the point needing correction and inserts or deletes
      characters or words.  All editing commands are control characters or
      escape sequences.	 The notation for control characters is circumflex
      (^) followed by the character.  For example, ^F is the notation for
      Ctrl-F.  This is entered by pressing the f key while holding down the
      Ctrl (control) key.  The Shift key is not pressed.  (The notation ^?
      indicates the DEL (delete) key.)

      The notation for escape sequences is M- followed by a character.	For
      example, M-f (pronounced Meta f) is entered by depressing ESC (ASCII



 Hewlett-Packard Company	   - 32 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      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 only at the
      beginning).  Neither the Return nor the Line Feed key is entered after
      edit commands, except when noted.

      ^F	     Move cursor forward (right) one character.
      M-f	     Move cursor forward one word.  (The editor's idea of a
		     word is a string of characters consisting of only
		     letters, digits and underscores.)
      ^B	     Move cursor backward (left) one character.
      M-b	     Move cursor backward one word.
      ^A	     Move cursor to start of line.
      ^E	     Move cursor to end of line.
      ^]char	     Move cursor forward to character char on current line.
      M-^]char	     Move cursor backward to character char on current line.
      ^X^X	     Interchange the cursor and mark.
      erase	     (User defined erase character as defined by the stty(1)
		     command, usually ^H or #.) Delete previous character.
      ^D	     Delete current character.
      eof	     End-of-file character, normally ^D, terminates the
		     shell if the current line is null.
      M-d	     Delete current word.
      M-^H	     (Meta-backspace) Delete previous word.
      M-h	     Delete previous word.
      M-^?	     (Meta-DEL) Delete previous word (if interrupt character
		     is ^? (DEL, the default) this command does not work).
      ^T	     Transpose current character with next character in
		     emacs mode.  Transpose two previous characters in gmacs
		     mode.
      ^C	     Capitalize current character.
      M-c	     Capitalize current word.
      M-l	     Change the current word to lowercase.
      ^K	     Delete from the cursor to the end of the line.  If
		     preceded by a numerical parameter whose value is less
		     that the current cursor position, delete from the given
		     position up to the cursor.	 If preceded by a numerical
		     parameter whose value is greater than the current
		     cursor position, from the cursor up to the given
		     position.
      ^W	     Kill from the cursor to the mark.
      M-p	     Push the region from the cursor to the mark on the
		     stack.
      kill	     (User-defined kill character, as defined by the stty(1)
		     command, usually ^G or @.) Kill the entire current
		     line.  If two kill characters are entered in
		     succession, all subsequent consecutive kill characters
		     cause a line feed (useful when using paper terminals).
      ^Y	     Restore last item removed from line (yank item back to
		     the line).



 Hewlett-Packard Company	   - 33 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      ^L	     Line feed and print current line.
      ^@	     (Null character) Set mark.
      M-space	     (Meta space) Set mark.
      ^J	     (New line)	 Execute the current line.
      ^M	     (Return)  Execute the current line.
      ^P	     Fetch previous command.  Each time ^P is entered, the
		     next previous command in the history list is accessed.
      ^N	     Fetch next command.  Each time ^N is entered the next
		     command in the history list is accessed.
      M-<&lt&lt&lt;	     Fetch the least recent (oldest) history line.
      M->&gt&gt&gt;	     Fetch the most recent (youngest) history line.
      ^Rstring	     Reverse search history for a previous command 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, the
		     next command line containing the most recent string is
		     accessed.	In this case a parameter of zero reverses
		     the direction of the search.
      ^O	     Operate - Execute the current line and fetch from the
		     history file the next line relative to current line.
      M-digits	     (Escape) Define numeric parameter, the digits are taken
		     as a parameter to the next command.  The commands that
		     accept a parameter are ^F, ^B, erase, ^C, ^D, ^K, ^R,
		     ^P, ^N, ^], M-., M-_, M-b, M-c, M-d, M-f, M-h, M-l and
		     M-^H.
      M-letter	     Softkey. User's 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.
		     This letter must not be one of the above meta-
		     functions.
      M-.	     The last word of the previous command is inserted on
		     the line.	If preceded by a numeric parameter, the
		     value of this parameter determines which word to insert
		     rather than the last word.
      M-_	     Same as M-..
      M-*	     Attempt file-name generation on the current word.
      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 as if an
		     asterisk were appended.
      ^U	     Multiply parameter of next command by 4.
      \		     Escape next character.  Editing characters, the user's
		     erase, kill and interrupt (normally ^?) characters can
		     be entered in a command line or in a search string if
		     preceded by a \.  The \ removes the next character's
		     editing features (if any).




 Hewlett-Packard Company	   - 34 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      ^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.  Entering a command puts you into input
      mode.  To edit, the user enters control mode by pressing ESC and moves
      the cursor to the point needing correction, then inserts or deletes
      characters or words.  Most control commands accept an optional repeat
      count prior to the command.

      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 contains any control characters, or if less than one second has
      elapsed since the prompt was printed.  The ESC character terminates
      canonical processing for the remainder of the command and the user can
      then modify the command line.  This scheme has the advantages of
      canonical processing with the type-ahead echoing of raw mode.

      Setting the viraw option always disables canonical processing on the
      terminal.	 This mode is implicit for systems that do not support two
      alternate end-of-line delimiters, and can be helpful for certain
      terminals.

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

      erase	     Delete previous character.	 (erase is a user-defined
		     erase character, as defined by the stty(1) command,
		     usually ^H or #.)
      ^W	     Delete the previous blank separated word.
      ^D	     Terminate the shell.
      ^V	     Escape next character.  Editing characters, erase or
		     kill characters can be entered in a command line or in
		     a search string if preceded by a ^V.  ^V removes the
		     next character's editing features (if any).
      \		     Escape the next erase or kill character.

    Motion Edit Commands
      These commands move the cursor.  The designation [count] causes a
      repetition of the command the cited number of times.

	   [count]l	  Cursor forward (right) one character.
	   [count]w	  Cursor forward one alphanumeric word.
	   [count]W	  Cursor to the beginning of the next word that
			  follows a blank.
	   [count]e	  Cursor to end of word.
	   [count]E	  Cursor to end of the current blank-delimited word.
	   [count]h	  Cursor backward (left) one character.




 Hewlett-Packard Company	   - 35 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




	   [count]b	  Cursor backward one word.
	   [count]B	  Cursor to preceding blank separated word.
	   [count]|	  Cursor to column count.  Default is 1.
	   [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 the last single character find command, f,
			  F, t, or T.
	   [count],	  Reverses the last single character find command.
	   0		  Cursor to start of line.
	   ^		  Cursor to first nonblank character in line.
	   $		  Cursor to end of line.
    Search Edit Commands
      These commands access your command history.
	   [count]k	     Fetch previous command.  Each time k is
			     pressed, the next earlier command in the
			     history list is accessed.
	   [count]-	     Equivalent to k.
	   [count]j	     Fetch next command.  Each time j is entered,
			     the next later command in the history list is
			     accessed.
	   [count]+	     Equivalent to j.
	   [count]G	     The command number count is fetched.  The
			     default is the first command in the history
			     list.
	   /string	     Search backward through history for a previous
			     command containing string.	 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 null, the
			     previous string is used.
	   ?string	     Same as / but search in the forward 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 previous /
			     command.
    Text Modification Edit Commands
      These commands modify 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
	   c[count]motion    Move cursor to the character position specified
			     by motion, deleting all characters between the
			     original cursor position and new position, and
			     enter input mode.	If motion is c, the entire
			     line is deleted and input mode entered.



 Hewlett-Packard Company	   - 36 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




	   C		     Delete the current character through the end of
			     line and enter input mode.	 Equivalent to c$.
	   S		     Equivalent to cc.
	   D		     Delete the current character through end of
			     line.  Equivalent to d$.
	   [count]dmotion
	   d[count]motion    Move cursor to the character position specified
			     by motion, deleting all characters between the
			     original cursor position and new position.	 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 the two-character sequence 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 characters on the
			     screen with characters you type in overlay
			     fashion.
	   [count]rc	     Replace the current character with c.
	   [count]x	     Delete current character.
	   [count]X	     Delete preceding character.
	   [count].	     Repeat the previous text modification command.
	   [count]~	     Invert the case of the current character and
			     advance the cursor.
	   [count]_	     Causes the count word of the previous command
			     to be appended at the current cursor location
			     and places the editor in input mode at the end
			     of the appended text.  The last word is used if
			     count is omitted.
	   *		     Appends an * to the current word and attempts
			     file name generation.  If no match is found,
			     the bell rings.  If a match is found, the word
			     is replaced by the matching string and the
			     command places the editor in input mode.
	   ESC
	   \		     Attempt file name completion on the current
			     word.  Replaces the current word with the
			     longest common prefix of all filenames matching
			     the current word with an asterisk appended.  If
			     the match is unique, a / is appended if the
			     file is a directory and a space is appended if
			     the file is not a directory.
    Other Edit Commands
	   [count]ymotion
	   y[count]motion    Yank current character through character that
			     motion would move the cursor to and puts them
			     into the delete buffer.  The text and cursor
			     are unchanged.



 Hewlett-Packard Company	   - 37 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




	   Y		     Yanks from current position to end of line.
			     Equivalent to y$.
	   u		     Undo the last text modifying command.
	   U		     Undo all the text modifying commands performed
			     on the line.
	   [count]v	     Returns the command fc -e ${VISUAL:-${EDITOR:-
			     vi}} count in the input buffer.  If count is
			     omitted, the current line is used.
	   ^L		     Line feed and print current line.	Has effect
			     only in control mode.
	   ^J		     (New line)	 Execute the current line,
			     regardless of mode.
	   ^M		     (Return)  Execute the current line, regardless
			     of mode.
	   #		     Equivalent to I# followed by Return.  Sends the
			     line after inserting a # in front of the line
			     and after each new-line.  Useful for inserting
			     the current command line in the history list
			     without executing it.
	   =		     List the filenames that match the current word
			     if an asterisk were appended to it.
	   @letter	     The user's alias list is searched for an alias
			     by the name _letter and if an alias of this
			     name is defined, its value is inserted on the
			     input queue for processing.

 EXTERNAL INFLUENCES
    Environment Variables
      LC_COLLATE determines the collating sequence used in evaluating
      pattern matching notation for file name generation.

      LC_CTYPE determines the classification of characters as letters, and
      the characters matched by character class expressions in pattern
      matching notation.

      If LC_COLLATE or LC_CTYPE is not specified in the environment or is
      set to the empty string, the value of LANG is used as a default for
      each unspecified or empty variable.  If LANG is not specified or is
      set to the empty string, a default of "C" (see lang(5)) is used
      instead of LANG.	If any internationalization variable contains an
      invalid setting, ksh behaves as if all internationalization variables
      are set to "C".  See environ(5).

    International Code Set Support
      Single-byte character code sets are supported.

 RETURN VALUE
      Errors detected by the shell, such as syntax errors, cause the shell
      to return a non-zero exit status.	 Otherwise, the shell returns the
      exit status of the last command executed (also see the exit command
      above).  If the shell is being used non-interactively, execution of



 Hewlett-Packard Company	   - 38 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




      the shell file is abandoned.  Runtime errors detected by the shell are
      reported by printing the command or function name and the error
      condition.  If the line number on which the error occurred is greater
      than one, the line number is also printed in brackets ([]) after the
      command or function name.

 WARNINGS
      File descriptors 10 and 54 through 60 are used internally by the Korn
      Shell.  Applications using these and forking a subshell should not
      depend upon them surviving in the subshell or its descendants.

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

      If you move the current directory or one above it, pwd may not give
      the correct response.  Use the cd command with a full path name to
      correct this situation.

      Some very old shell scripts contain a caret (^) as a synonym for the
      pipe character (|).  Note however, ksh does not recognize the caret as
      a pipe character.

      If a command is piped into a shell command, all variables set in the
      shell command are lost when the command completes.

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

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

      Traps are not processed while the shell is waiting for a foreground
      job.  Thus, a trap on CHLD is not executed until the foreground job
      terminates.

      The export built-in command does not handle arrays properly.  Only the
      first element of an array is exported to the environment.

      Background processes started from a non-interactive shell cannot be
      accessed by using job control commands.

      In an international environment, character ordering is determined by
      the setting of LC_COLLATE, rather than by the binary ordering of
      character values in the machine collating sequence.  This brings with
      it certain attendant dangers, particularly when using range
      expressions in file name generation patterns.  For example, the
      command,



 Hewlett-Packard Company	   - 39 -   HP-UX Release 11i: November 2000






 ksh(1)								      ksh(1)




	   rm [a-z]*

      might be expected to match all file names beginning with a lowercase
      alphabetic character.  However, if dictionary ordering is specified by
      LC_COLLATE, it would also match file names beginning with an uppercase
      character (as well as those beginning with accented letters).
      Conversely, it would fail to match letters collated after z in
      languages such as Danish or Norwegian.

      The correct (and safe) way to match specific character classes in an
      international environment is to use a pattern of the form:

	   rm [[:lower:]]*

      This uses LC_CTYPE to determine character classes and works
      predictably for all supported languages and codesets.  For shell
      scripts produced on non-internationalized systems (or without
      consideration for the above dangers), it is recommended that they be
      executed in a non-NLS environment.  This requires that LANG,
      LC_COLLATE, etc., be set to "C" or not set at all.

      Be aware that the value of the IFS variable in the user's environment
      affects the behavior of scripts.

      ksh implements command substitution by creating a pipe between itself
      and the command.	If the root file system is full, the substituted
      command cannot write to the pipe.	 As a result, the shell receives no
      input from the command, and the result of the substitution is null.
      In particular, using command substitution for variable assignment
      under such circumstances results in the variable being silently
      assigned a NULL value.

 AUTHOR
      ksh was developed by AT&T.

 FILES
      /etc/passwd		    to find home directories
      /etc/profile		    read to set up system environment
      /etc/suid_profile		    security profile
      $HOME/.profile		    read to set up user's custom environment
      /tmp/sh*			    for here-documents

 SEE ALSO
      cat(1), cd(1), echo(1), env(1), getopts(1), kill(1), pwd(1), read(1),
      test(1), time(1), umask(1), vi(1), dup(2), exec(2), fork(2), gtty(2),
      pipe(2), stty(2), signal(5), umask(2), ulimit(2), wait(2), rand(3C),
      a.out(4), profile(4), environ(5), lang(5), regexp(5).







 Hewlett-Packard Company	   - 40 -   HP-UX Release 11i: November 2000