]> git.ipfire.org Git - thirdparty/bash.git/blobdiff - COMPAT
Imported from ../bash-2.05.tar.gz.
[thirdparty/bash.git] / COMPAT
diff --git a/COMPAT b/COMPAT
index a01035a2afc08ebe65ca94b1e9dd6611c13ca5d1..1395548752cc533c16487539a8490384c966d435 100644 (file)
--- a/COMPAT
+++ b/COMPAT
@@ -1,5 +1,5 @@
 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.05, 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.
 
@@ -131,3 +131,70 @@ 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. There was a bug in bash-1.14 and previous versions that caused it to
+    accept as valid syntax for loops of the form
+
+       for f in ; do ... ; done
+
+    This should be a syntax error, and bash-2.x treats it as such.
+
+14. 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.
+
+15.  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.