KSH-93 is the most recent version of the KornShell Language described in
The KornShell Command and Programming Language,
by Morris Bolsky and David Korn of AT&T Research (nee Bell Laboratories).
The KornShell is a shell programming language,
which is upward compatible with
(the Bourne Shell),
and is intended to conform to the IEEE P1003.2/ISO 9945.2 Shell and
KSH-93 provides an enhanced programming environment in
addition to the major command-entry features of the BSD
With KSH-93, medium-sized programming tasks can be
performed at shell-level without a significant loss in performance.
scripts can be run on KSH-93 without modification.
The code should conform to the IEEE POSIX 1003.1 standard and to the
proposed ANSI-C standard so that it should be portable to all
Like the previous version, KSH-88,
it is designed to accept eight bit character sets
transparently, thereby making it internationally compatible.
It can support multi-byte characters sets with some characteristics
of the character set given at run time.
KSH-93 provides the following features, many of which were also inherent
The KSH-93 history
function records commands entered at any shell level and stores
them, up to a user-specified limit, even after you log off.
This allows you to re-enter long commands with a few keystrokes
- even those commands you entered yesterday.
The history file allows for eight bit characters in
commands and supports essentially unlimited size histories.
the only way to fix mistyped
commands is to backspace or retype the line.
KSH-93 allows you
to edit a command line using a choice of EMACS-TC or
You can use the in-line editors to complete filenames as
you type them.
You may also use this editing feature when entering
command lines from your history file.
A user can capture keystrokes and rebind keys to customize the
KSH-93 provides several I/O
capabilities not available in
including the ability to:
specify a file descriptor for input and output
start up and run co-processes
produce a prompt at the terminal before a read
easily format and interpret responses to a menu
echo lines exactly as output without escape processing
format output using printf formats.
read and echo lines ending in "\e".
KSH-93 executes many scripts faster
than the System V Bourne shell.
A major reason for this is
that many of the standard utilities are built-in.
To reduce the time to initiate a command, KSH-93 allows
commands to be added as built-ins at run time
on systems that support dynamic loading such as System V Release 4.
KSH-93 allows you to do integer arithmetic in any
base from two to sixty-four.
You can also do double
precision floating point arithmetic.
Almost the complete set of C language operators are available
with the same syntax and precedence.
Arithmetic expressions can be used to as an argument expansion
or as a separate command.
In addition there is an arithmetic for command that works
like the for statement in C.
KSH-93 supports both indexed and associative arrays.
The subscript for an indexed array is an arithmetic expression,
whereas, the subscript for an associative array is a string.
Two mechanisms - functions and
aliases - can be used to assign a user-selected identifier to
an existing command or shell script.
Functions allow local variables and provide scoping
for exception handling.
Functions can be searched for and loaded on first reference the
way scripts are.
KSH-93 allows you to create a
substring of any given string either by specifying the starting
offset and length, or by stripping off leading
or trailing substrings during parameter substitution.
You can also specify attributes, such as upper and lower case,
field width, and justification to shell variables.
KSH-93 allows you to specify
regular expressions for file and string matches.
KSH-93 can generate line numbers on execution traces.
Also, I/O redirections are now traced.
There is a DEBUG trap that gets evaluated after each command
so that errors can be localized.
On systems that support job control, including
System V Release 4, KSH-93
provides a job-control mechanism almost identical to that of
the BSD "csh", version 4.1.
This feature allows you
to stop and restart programs, and to move programs between the
foreground and the background.
KSH-93 can execute scripts which do not have read permission
and scripts which have the setuid and/or setgid set when
invoked by name, rather than as an argument to the shell.
It is possible to log or control the execution of setuid and/or
The noclobber option prevents you from accidentally erasing
a file by redirecting to an existing file.
Documentation for KSH-93 consists of an
Introduction to KSH-93,
Compatibility with the Bourne Shell,
a manual page and a
In addition, the
New KornShell Command and Programming Language
book is available from Prentice Hall.