There are many different shells that can be used in the Unix environment. Each shell has its own features, strengths, and weaknesses. The C Shell is very useful and powerful in its own right, but there are other Shells that add functionality that can make working in the Unix environment more enjoyable. In this section, we will discuss two popular Unix Shells briefly, and highlight a few of the differences between them.

The TENEX C Shell After the C Shell was introduced, there was an effort to fix many of the bugs in it. This effort grew as people began to add extra features to the C Shell, such as command line editing, TENEX-style filename completion and various other features. The end result was a new shell called tcsh, which stands for the TENEX C Shell. Despite being superior to csh the TENEX C Shell was never adopted by major Unix system vendors. As an example, Sun's Solaris Operating Environment 6 ships with csh as the default shell.

The Bourne Again Shell

With the birth of the GNU project came the beginning of bash. The GNU project was created to develop a complete Unix-like operating system out of free software. Thus, a freely available POSIX compliant shell was needed. The Bourne Again Shell was written to fill the void. It was based on the Bourne Shell language, but also "borrowed" features found in the C and TC Shells. Bash was adopted for the Linux operating system and is now one of the most popular shells in use today.

Here is a short list of useful features that can be found in the various Unix shells:

A Summary of Shell Feature Support

Feature sh csh bash tcsh
Job Control: the jobs command No Yes Yes Yes
Aliasing: renaming complex commands with simple names No Yes Yes Yes
Command History: re-execute frequently used commands quickly No Yes Yes Yes
Command line editing: correct a mis-spelled command name in a complicated command by using the arrow keys and backspace No No Yes Yes
Filename Completion: complete long filenames with a single keystroke No Yes Yes Yes
List Variables: the shell has a built-in list data type, useful when scripting No Yes No Yes
Fully programmable completion: complete command names, hostnames, usernames, etc. with a single keystroke No No No Yes
Can follow symbolic links invisibly No No Yes No
Custom Prompt (easily): for example, change the prompt to display the current working directory No No Yes Yes
Underlying syntax (when writing scripts) sh csh sh csh
Can cope with large argument lists Yes No Yes Yes
Freely available: download the shell and possibly the source code, for free! No No Yes Yes

There are many other shells that have not been mentioned. If you are interested, use your favourite search engine to find information about the Korn Shell (ksh), the Z Shell (zsh), rc, and es.