summaryrefslogtreecommitdiff
path: root/COMPAT
diff options
context:
space:
mode:
Diffstat (limited to 'COMPAT')
-rw-r--r--COMPAT104
1 files changed, 98 insertions, 6 deletions
diff --git a/COMPAT b/COMPAT
index c591ede..3210cca 100644
--- a/COMPAT
+++ b/COMPAT
@@ -1,10 +1,12 @@
+Compatibility with previous versions
+====================================
+
This document details the incompatibilities between this version of bash,
-bash-3.2, and the previous widely-available versions, bash-1.14 (which is
-still the `standard' version for a few Linux distributions) and bash-2.x.
+bash-4.1, and the previous widely-available versions, bash-2.x (which is
+still the `standard' version for a few Linux distributions) and bash-3.x.
These were discovered by users of bash-2.x and 3.x, so this list is not
comprehensive. Some of these incompatibilities occur between the current
-version and versions 2.0 and above. (The differences between bash-1.14 and
-bash-2.0 were significant.)
+version and versions 2.0 and above.
1. Bash uses a new quoting syntax, $"...", to do locale-specific
string translation. Users who have relied on the (undocumented)
@@ -271,5 +273,95 @@ bash-2.0 were significant.)
file permission bits obtained with stat(2). This obeys restrictions of
the file system (e.g., read-only or noexec mounts) not available via stat.
-33. Beginning with bash-3.1/readline-5.1, the readline key binding code obeys
- the current setting of the `convert-meta' variable.
+33. Bash-3.2 adopts the convention used by other string and pattern matching
+ operators for the `[[' compound command, and matches any quoted portion
+ of the right-hand-side argument to the =~ operator as a string rather
+ than a regular expression.
+
+34. Bash-4.0 allows the behavior in the previous item to be modified using
+ the notion of a shell `compatibility level'. If the compat31 shopt
+ option is set, quoting the pattern has no special effect.
+
+35. Bash-3.2 (patched) and Bash-4.0 fix a bug that leaves the shell in an
+ inconsistent internal state following an assignment error. One of the
+ changes means that compound commands or { ... } grouping commands are
+ aborted under some circumstances in which they previously were not.
+ This is what Posix specifies.
+
+36. Bash-4.0 now allows process substitution constructs to pass unchanged
+ through brace expansion, so any expansion of the contents will have to be
+ separately specified, and each process subsitution will have to be
+ separately entered.
+
+37. Bash-4.0 now allows SIGCHLD to interrupt the wait builtin, as Posix
+ specifies, so the SIGCHLD trap is no longer always invoked once per
+ exiting child if you are using `wait' to wait for all children.
+
+38. Since bash-4.0 now follows Posix rules for finding the closing delimiter
+ of a $() command substitution, it will not behave as previous versions
+ did, but will catch more syntax and parsing errors before spawning a
+ subshell to evaluate the command substitution.
+
+39. The programmable completion code uses the same set of delimiting characters
+ as readline when breaking the command line into words, rather than the
+ set of shell metacharacters, so programmable completion and readline
+ should be more consistent.
+
+40. When the read builtin times out, it attempts to assign any input read to
+ specified variables, which also causes variables to be set to the empty
+ string if there is not enough input. Previous versions discarded the
+ characters read.
+
+41. Beginning with bash-4.0, when one of the commands in a pipeline is killed
+ by a SIGINT while executing a command list, the shell acts as if it
+ received the interrupt. This can be disabled by setting the compat31 or
+ compat32 shell options.
+
+42. Bash-4.0 changes the handling of the set -e option so that the shell exits
+ if a pipeline fails (and not just if the last command in the failing
+ pipeline is a simple command). This is not as Posix specifies. There is
+ work underway to update this portion of the standard; the bash-4.0
+ behavior attempts to capture the consensus at the time of release.
+
+43. Bash-4.0 fixes a Posix mode bug that caused the . (source) builtin to
+ search the current directory for its filename argument, even if "." is
+ not in $PATH. Posix says that the shell shouldn't look in $PWD in this
+ case.
+
+44. Bash-4.1 uses the current locale when comparing strings using the < and
+ > operators to the `[[' command. This can be reverted to the previous
+ behavior by setting one of the `compatNN' shopt options.
+
+Shell Compatibility Level
+=========================
+
+Bash-4.0 introduced the concept of a `shell compatibility level', specified
+as a set of options to the shopt builtin (compat31, compat32, compat40 at
+this writing). There is only one current compatibility level -- each
+option is mutually exclusive. This list does not mention behavior that is
+standard for a particular version (e.g., setting compat32 means that quoting
+the rhs of the regexp matching operator quotes special regexp characters in
+the word, which is default behavior in bash-3.2 and above).
+
+compat31 set
+ - the < and > operators to the [[ command do not consider the current
+ locale when comparing strings
+ - quoting the rhs of the regexp matching operator (=~) has no
+ special effect
+
+compat32 set
+ - the < and > operators to the [[ command do not consider the current
+ locale when comparing strings
+
+compat40 set
+ - the < and > operators to the [[ command do not consider the current
+ locale when comparing strings
+ - interrupting a command list such as "a ; b ; c" causes the execution
+ of the entire list to be aborted
+
+-------------------------------------------------------------------------------
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without any warranty.