Imported from ../bash-2.05a.tar.gz.
[platform/upstream/bash.git] / COMPAT
diff --git a/COMPAT b/COMPAT
index a01035a..cb6681e 100644 (file)
--- a/COMPAT
+++ b/COMPAT
@@ -1,7 +1,9 @@
 This document details the incompatibilites between this version of bash,
-bash-2.04, and the previous widely-available version, bash-1.14 (which
+bash-2.05a, and the previous widely-available version, bash-1.14 (which
 is still the `standard' version for many Linux distributions).  These
 were discovered by users of bash-2.x, so this list is not comprehensive.
+Some of these incompatibilities occur between the current version and
+versions 2.0 and above.
 
 1.  Bash now uses a new quoting syntax, $"...", to do locale-specific
     string translation.  Users who have relied on the (undocumented)
@@ -131,3 +133,73 @@ were discovered by users of bash-2.x, so this list is not comprehensive.
     that declares them:
 
        alias -x='chmod a-x' --> alias -- -x='chmod a-x'
+
+13. The behavior of range specificiers within bracket matching expressions
+    in the pattern matcher (e.g., [A-Z]) depends on the current locale,
+    specifically the value of the LC_COLLATE environment variable.  Setting
+    this variable to C or POSIX will result in the traditional ASCII behavior
+    for range comparisons.  If the locale is set to something else, e.g.,
+    en_US (specified by the LANG or LC_ALL variables), collation order is
+    locale-dependent.  For example, the en_US locale sorts the upper and
+    lower case letters like this:
+
+       AaBb...Zz
+
+    so a range specification like [A-Z] will match every letter except `z'.
+
+    The portable way to specify upper case letters is [:upper:] instead of
+    A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+    Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+    present, locale(1).
+
+    You can find your current locale information by running locale(1):
+
+       caleb.ins.cwru.edu(2)$ locale
+       LANG=en_US
+       LC_CTYPE="en_US"
+       LC_NUMERIC="en_US"
+       LC_TIME="en_US"
+       LC_COLLATE="en_US"
+       LC_MONETARY="en_US"
+       LC_MESSAGES="en_US"
+       LC_ALL=en_US
+
+    My advice is to put
+
+       export LC_COLLATE=C
+
+    into /etc/profile and inspect any shell scripts run from cron for
+    constructs like [A-Z].  This will prevent things like
+
+       rm [A-Z]*
+
+    from removing every file in the current directory except those beginning
+    with `z' and still allow individual users to change the collation order.
+    Users may put the above command into their own profiles as well, of course.
+
+14.  Bash versions up to 1.14.7 included an undocumented `-l' operator to
+     the `test/[' builtin.  It was a unary operator that expanded to the
+     length of its string argument.  This let you do things like
+
+       test -l $variable -lt 20
+
+     for example.
+
+     This was included for backwards compatibility with old versions of the
+     Bourne shell, which did not provide an easy way to obtain the length of
+     the value of a shell variable.
+
+     This operator is not part of the POSIX standard, because one can (and
+     should) use ${#variable} to get the length of a variable's value.
+     Bash-2.x does not support it.
+
+15.  Bash no longer auto-exports the HOME, PATH, SHELL, TERM, HOSTNAME,
+     HOSTTYPE, MACHTYPE, or OSTYPE variables.
+
+16.  Bash no longer initializes the FUNCNAME, GROUPS, or DIRSTACK variables
+     to have special behavior if they appear in the initial environment.
+
+17.  Bash no longer removes the export attribute from the SSH_CLIENT or
+     SSH2_CLIENT variables, and no longer attempts to discover whether or
+     not it has been invoked by sshd in order to run the startup files.