B.1 Implementation Differences From The SVR4.2 Shell
Since Bash is a completely new implementation, it does not suffer from
many of the limitations of the SVR4.2 shell. For instance:
-
Bash does not fork a subshell when redirecting into or out of
a shell control structure such as an
if
or while
statement.
-
Bash does not allow unbalanced quotes. The SVR4.2 shell will silently
insert a needed closing quote at
EOF
under certain circumstances.
This can be the cause of some hard-to-find errors.
-
The SVR4.2 shell uses a baroque memory management scheme based on
trapping
SIGSEGV
. If the shell is started from a process with
SIGSEGV
blocked (e.g., by using the system()
C library
function call), it misbehaves badly.
-
In a questionable attempt at security, the SVR4.2 shell,
when invoked without the `-p' option, will alter its real
and effective UID and GID if they are less than some
magic threshold value, commonly 100.
This can lead to unexpected results.
-
The SVR4.2 shell does not allow users to trap
SIGSEGV
,
SIGALRM
, or SIGCHLD
.
-
The SVR4.2 shell does not allow the
IFS
, MAILCHECK
,
PATH
, PS1
, or PS2
variables to be unset.
-
The SVR4.2 shell treats `^' as the undocumented equivalent of
`|'.
-
Bash allows multiple option arguments when it is invoked (
-x -v
);
the SVR4.2 shell allows only one option argument (-xv
). In
fact, some versions of the shell dump core if the second argument begins
with a `-'.
-
The SVR4.2 shell exits a script if any builtin fails; Bash exits
a script only if one of the POSIX 1003.2 special builtins fails, and
only for certain failures, as enumerated in the POSIX 1003.2 standard.
-
The SVR4.2 shell behaves differently when invoked as
jsh
(it turns on job control).
This document was generated
on May 3, 2002
using texi2html