History of shells

A shell is a command-line interpreter and like for the editors: Everyone has his favourite.
Several version, each with its own features got introduced in the last 50 years. In this section
we are going to briefly explain the history of the UNIX shell and to highlight the key
differences between the main ones, but don't forget: the core ideas about shells are
the same in everyone.

In 1971, Ken Thompson (of Bell Labs) developed the V6 shell (/bin/sh), the first shell for
UNIX. This independent user program was inspired by Multics (an operating system developed
by the American software engineer Glenda Schroeder, in 1965) and introduced a compact syntax
for piping (concept of a sequence of chained processes where the output of a process feeds as
input to the next one) and for redirection (stays for the deviation of outputs to user-specified
locations), that has survived into all modern shells. This shell was only capable of acting as an
interactive shell (command interpreter), to invoke commands and view results, it was not able
to script.

After this first shell, the next one was the PWD shell created in 1975 by John Mashey.
This upward-compatible version of the Thompson shell focused on making shell programming practical.
Comparing it to his predecessor, new features were added such as variables, user-executable shell
scripts, interrupt-handling and an extension of control structures (that were integrated to the shell
itself, in fact in the older versions they were "outside" the shell).

A couple of years later the development of new and more capable shells got at its maximum
and several shells, all with different characteristics, were introduced. In the next section
the most influential ones are briefly presented.

The Bourne shell (sh), introduced in 1977 by Stephen Bourne (also at Bell Labs),
is a complete redesign of the "original" shell. It was backward compatible since it shared
with its predecessor all the basics functions, but it introduced a more functional language capable
of better interacting with the operating system. Its language was influenced by ALGOL 68
(Algorithmic Language 1968), an imperative computer programming language.
This shell is known by users because of its characteristic default command line prompt character
and the use of the dollar sign. It still remains a useful and popular shell today.
There are many alternatives to this shell, here are listened only some of them: Almquist
shell (ash), Debian Almquist shell (dash), Z shell (zsh), Bourne-Again shell (bash) and
Korn shell (ksh). To the last two we come back later.

Another important shell that was developed in this period is the C shell (csh).
It was developed by Bill Joy at the University of California around 1978. This shell,
that has strong resemblances to C commands, introduced for the first time a large number of
features for interactive work, job control (the ability to stop, start, and pause commands)
and command history. It was upgraded 5 years later by the Tenex C shell (tcsh), which is
an improved version of the original C shell which includes many functions from the Tenex system.

The Korn shell, that was mentioned above, designed by David Korn, is a commercial product
that incorporates the best features of the Bourne and the C shells. One of its most distinguishing
feature is its predisposition to be used as scripting language. Besides it is
also backward-compatible with the original Bourne shell.

The Bourne-Again shell is very similar to the Korn shell, with the key difference that
it is free. It was developed for the GNU project, by Brian Fox around
1988, with the idea to replace all the commercial UNIX utilities on the market with
free ones. Over the years, this shell has become the most popular Bourne shell derivate,
because of two main reasons: it is backward-compatible for scripting and it was heavily
supported by the developer team that performed several improvements and bug fixes over the years
(a second version - bash 2.0 - was released in 1996, which shows many new features like the
command-line editing modes, which let you fix mistakes or modify previous commands).

Throughout the last 50 years, the independence of the shell from the UNIX operating system has led
to the development of several shells, each with different features, but not all achieved the same success
and distribution. Bourne shell derivatives continue to be the primary
shells in use, in fact the Bourne shell is still known as the "standard" shell, and also the
Bourne-Again shell is becoming increasingly popular, because it includes the best features of
the C and Korn shells as well as several advantages of its own. Even though, several shells were
introduced in the last few decades the main concepts and ideas of the early shells remain the same
even several years later, showing that the shell has been improved but not substantially changed.