The independence of the shell from the UNIX operating system
per se has led to the development of dozens of
shells throughout UNIX history-although only a few
have achieved widespread use.

The first major shell
was the Bourne shell (named after its inventor, Steven Bourne);
it was included in the first popular version of UNIX,
Version 7, starting in 1979. The Bourne shell is known on
the system as sh.
Although UNIX has gone through many, many changes,
the Bourne shell is still popular and essentially unchanged.
Several UNIX utilities and administration features depend on it.

The first widely-used alternative shell was the C shell, or
csh.
This was written by Bill Joy at the University of
California at Berkeley as part of the Berkeley System
Distribution
(BSD) version of UNIX that came out a couple of
years after Version 7. It's included in most recent UNIX versions.

The C shell gets its name from the resemblance of its commands to statements in the C Programming Language, which makes the shell easier for programmers on UNIX systems to learn.
It supports a number of
operating system features (e.g., job control; see Chapter 8)
that were unique to BSD UNIX but by now have migrated
to most other modern versions. It also has a few important
features (e.g., aliases; see Chapter 3) that make it easier to
use in general.

The Korn shell, or ksh, was invented by David Korn of AT&T
Bell Laboratories in the mid-1980s. It is almost entirely
upwardly compatible with the Bourne shell,
[1]
which means that Bourne shell users can use it right away, and
all system utilities that use the Bourne shell
can use the Korn shell instead.
In fact, some systems have the Korn shell installed as if it
were the Bourne shell.

The Korn shell began its public life in 1986 as part of
AT&T's "Experimental Toolchest," meaning that its source code was
available at very low cost to anyone who was willing to use
it without technical support and with the knowledge that it might
still have a few bugs.
Eventually, AT&T's UNIX System
Laboratories (USL) decided to give it full support as
a UNIX utility. As of USL's version of UNIX called
System V Release 4 (SVR4 for short, 1989), it
was distributed with all USL UNIX systems, all third-party
versions of UNIX derived from SVR4, and many other versions.

USL's distributed version of the Korn shell, dated
November 16, 1988, is what this book describes.
Other versions are summarized briefly in Appendix A.

Although the Bourne shell is still known as the "standard"
shell, the Korn shell is becoming increasingly popular and
is destined to replace it. In addition to its Bourne shell
compatibility, it includes the best features
of the C shell as well as several advantages of its own.
It also runs more efficiently than any previous shell.

The Korn shell's command-line editing modes are the features
that tend to attract people to it at first.
With command-line editing, it's much
easier to go back and fix mistakes than it is with the C
shell's history mechanism-and the Bourne shell doesn't let
you do this at all.

The other major Korn shell feature that is intended mostly for
interactive users is job control. As Chapter 8 explains,
job control gives you the ability to stop, start, and pause
any number of commands at the same time. This feature was
borrowed almost verbatim from the C shell.

The rest of the Korn shell's important advantages are mainly
meant for shell customizers and programmers. It has
many new options and variables for customization, and its
programming features have been significantly expanded to
include function definition, more control structures,
built-in regular expressions and integer arithmetic,
advanced I/O control, and more.