Appendix A. Related Shells
The fragmentation of the Unix marketplace has had its advantages and
disadvantages. The advantages came mostly in the early days:
lack of standardization and proliferation among technically
savvy academics and professionals
contributed to a healthy "free market" for Unix software, in which
several programs of the same type (e.g., shells, text editors,
system administration tools) would often compete for popularity.
The best programs would usually become the most widespread,
while inferior software tended to fade away.
But often there was no single "best" program in a given category,
so several would prevail.
This led to the current situation, where multiplicity of similar
software has led to confusion, lack of compatibility, and -- most
unfortunate of all -- Unix's inability to capture as big a share of
the market as other operating platforms.
In particular, Unix has been relegated to its current position as a very
popular operating system for servers, but it's a rarity on desktop machines.
The "shell" category has probably suffered in this way more than
any other type of software. As we said in
the preface and Chapter 1,
it is one of the strengths of Unix that the shell is replaceable, and thus
a number of shells are currently available; the differences
between them are often not all that great. We believe that the Korn
shell is one of the best of the most widely used shells, but other shells
certainly have their staunch adherents, so they aren't likely to
fade into obscurity.
In fact, it seems that shells, Bourne-compatible or not, continue to proliferate.
Therefore we felt it necessary to include information on
shells similar to the Korn shell. This Appendix
summarizes the differences between the Korn shell and the following shells:
The System V Release 4 Bourne shell, as a kind of baseline
The 1988 version of the Korn shell
The IEEE POSIX 1003.2 Shell Standard, to which the Korn
shell and other shells adhere
The Desk Top Korn shell (dtksh), a Korn shell with
enhancements for X Window System programming, as part of the Common Desktop
Environment (CDE)
The tksh shell, an interesting blend
of ksh93 with Tcl/Tk
pdksh, a widely used public domain version of the Korn shell
The bash shell, another enhanced Bourne shell
with some C shell and Korn shell features
The Z shell, zsh, yet another enhanced Bourne shell
with some C shell and Korn shell features and many, many more of its own
Korn shell workalikes on desktop PC platforms
A.1. The Bourne Shell
The Korn shell is almost completely backward-compatible
with the Bourne shell.
The only significant feature of the latter that
the Korn shell doesn't support is ^ (caret) as a synonym
for the pipe (|) character.[145]
This is an archaic feature that
the Bourne shell includes for its own backward compatibility
with earlier shells. No modern Unix version has any shell code
that uses ^ as a pipe.
To describe the differences between the Bourne shell
and the Korn shell, we'll go through each chapter of this book
and enumerate the features discussed in the chapter that the Bourne
shell does not support.
- Chapter 1
-
The cd old new
and cd - forms of the cd command.
Tilde (~) expansion.
The Bourne shell always follows the physical file layout, which affects
what happens when you cd .. out of somewhere that
was a symbolic link.
The built-in commands don't have online help.
Some older versions of the Bourne shell don't support
the jobs command and job control,
or they may require being invoked as jsh in order
to enable job control features.
- Chapter 2
-
All (i.e., the Bourne shell doesn't support any of
the history and editing features discussed in Chapter 2).
- Chapter 3
-
Aliases are not supported.
set -o options don't work. The Bourne shell
supports the abbreviations listed in the "Options" table in
Appendix B, except
-A,
-b,
-C,
-m,
-p,
and -s.
Environment files aren't supported; neither is the print
command (use echo instead).
The following built-in variables aren't supported:
.sh.edchar |
.sh.version |
HISTEDIT |
LINENO |
PS4 |
.sh.edcol |
COLUMNS |
HISTFILE |
LINES |
PWD |
.sh.edmode |
EDITOR |
HISTSIZE |
OLDPWD |
RANDOM |
.sh.edtext |
ENV |
LANG |
OPTARG |
REPLY |
.sh.match |
FCEDIT |
LC_ALL |
OPTIND |
SECONDS |
.sh.name |
FIGNORE |
LC_COLLATE |
PPID |
TMOUT |
.sh.subscript |
FPATH |
LC_CTYPE |
PS3 |
VISUAL |
.sh.value |
HISTCMD |
LC_NUMERIC |
|
|
Some of these variables (e.g., EDITOR and VISUAL)
are still used by other programs, like mail and news readers.
- Chapter 4
-
Extended variable names (those with a dot in them), as well as compound
variable assignment are not available, nor is string concatenation
with the += operator.
Indirect variables (namerefs) are not available.
The whence command is not available; use
type instead.
The pattern-matching variable operators
(%, %%, #, ##, etc.)
and advanced (regular expression) wildcards are not available; use
the external command expr instead.
Autoloaded functions are not available, and
only POSIX-style functions (those defined using the name()
syntax) may be used.
Command substitution syntax is different: use the older
`command`
instead of
$(command).
(Some vendors have enhanced their Bourne shells to support the
$(command)
notation, since it's defined by the POSIX standard.)
- Chapter 5
-
return may only be used from within a function.
Conditional tests use older syntax:
[ condition ] or
test condition
instead of [[ condition ]].
These are actually two forms of the same command
(see the test(1) manual page).
The logical operators
&& and ||
are -a and -o instead.
Supported test operators differ from system to system.[146]
The ! keyword
to reverse the exit status of a command
was not in the SVR4 Bourne shell,
although it may be available on your system, since it is
required by POSIX.
The select construct isn't supported.
Neither is the arithmetic for loop,
and there is no way to fall through from one case to another
inside a case statement.
There is no equivalent for TMOUT.
- Chapter 6
-
The SVR4 Bourne shell getopts command is similar, but
not identical to, that in ksh.
It does not allow options that begin with a plus sign,
nor any of the advanced features described in
Appendix B.
Arithmetic isn't supported: use the external command
expr instead of
the $((...)) syntax.
For numeric conditionals, use the old condition test syntax
and relational operators -lt, -eq, etc., instead of
((...)).
let isn't supported.
Array variables and the typeset command are not supported.
- Chapter 7
-
The following I/O redirectors are not supported:[147]
>| |
<> |
<<< |
<&p |
>&p |
<&n- |
>&n- |
|& |
print isn't supported (use echo instead).
printf is generally available as an external command.
None of the options to read are supported,
nor is the ability to supply a prompt with the first variable's name.
The Bourne shell does not do special interpretations of pathnames,
such as /dev/fd/2 or
/dev/tcp/ftp.oreilly.com/ftp.
The $"..."
and $'...'
quoting mechanisms are not available.
- Chapter 8
-
Job control is supported, but only if the shell is invoked with
the -j option or as jsh.
The - option to trap (reset trap to
the default for that signal) is not available.
Instead, a missing trap indicates that the supplied traps should
be reset.
trap accepts only signal
numbers, not logical names.
Coroutines aren't supported.
The wait command only accepts process IDs.
- Chapter 9
-
The ERR and DEBUG fake signals are not available. The EXIT fake signal
is supported, as signal 0.
set -n takes effect even in interactive shells.
The output from tracing with set -x is
not customizable (no PS4 variable).
Discipline functions are not available.
- Chapter 10
-
Privileged mode isn't supported.
(Some Bourne shells do have it.)
The ulimit and umask commands are not as capable.
The KEYBD trap is not available.
| | | 10.4. System Security Features | | A.2. The 1988 Korn Shell |
Copyright © 2003 O'Reilly & Associates. All rights reserved.
|
|