Where does the Bourne shell live?
The Bourne Shell was introduced in 1979 with Version 7 Unix. It was the first properly programmable shell. On some commercial Unix flavours, a more recent variant continues to exist as the system shell (/bin/sh). Important flavours at the time of this writing are
- Sun Solaris (version 10 and older)
- Digital/Compaq/HP OSF1 aka Tru64
On almost all other commercial systems the shell is still available at a different path or name.
Until recently the source was licensed in such a way that this shell was not freely available. But meanwhile Sun released their OpenSolaris variant and a port based on it has been made available by the Heirloom project, which is a valuable step from the viewpoint of portable programming and historic interest.
The Bourne shell was never versioned
Thus the different variants are only distinguishable by their features. A certain variant is usually called by the respective AT&T Unix version it was released with. Some examples for important shell variants are: Version7, SVR2, SVR3 and SVR4. Berkeley published its BSD variant of the Version7 shell until they substituted it with the Almquist Shell due to the license wars. Commercial vendors often added some small modifications of their own to an AT&T variant they had licensed. A detailed overview about the various versions is available here: The traditional Bourne Shell family.
The Bourne shell never experienced a complete rewrite
Originally it was quite a good piece of engineering and even today it is a very small and powerful program. Despite the various deficiencies of this language, most important Unix shells have remained Bourne-compatible until today. The drawback of this is the complicated source (as with the rest of Unix, Bourne was originally written for systems with 64k overall memory) and the lack of various improvements which would have made it much more interesting nowadays.
By far the most important features missing are "command line editing" and a "history". Perhaps both were not added in the hope that this functionality would move into the terminal driver and thus be consistently available to all interactive programs (quite a fascinating idea, isn't it?).By the time it was clear that this would not happen, the Bourne shell had become generally only used for scripting, because successors like the KornShell and BashShell were already established.
How to recognize a Bourne shell?
A simple way to identify a Bourne shell is testing for the following feature: The caret (^) has the same meaning like the pipe symbol (|). This was taken over from the predecessor, the Thompson shell, which is the reason why modern shells certainly never implemented it.