-This is the Bash FAQ, version 3.7, for Bash version 2.04.
+This is the Bash FAQ, version 3.11, for Bash version 2.05.
This document contains a set of frequently-asked questions concerning
Bash, the GNU Bourne-Again Shell. Bash is a freely-available command
Section B: The latest version
-B1) What's new in version 2.04?
-B2) Are there any user-visible incompatibilities between bash-2.04 and
+B1) What's new in version 2.05?
+B2) Are there any user-visible incompatibilities between bash-2.05 and
bash-1.14.7?
Section C: Differences from other Unix shells
in arguments to `echo'. Bash doesn't interpret these characters. Why
not, and how can I make it understand them?
E6) Why doesn't a while or for loop get suspended when I type ^Z?
+E7) What about empty for loops in Makefiles?
+E8) Why does the arithmetic evaluation code complain about `08'?
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+ with every letter except `z'?
Section F: Things to watch out for on certain Unix versions
A2) What's the latest version?
-The latest version is 2.04, first made available on Friday, 17 March 2000.
+The latest version is 2.05, first made available on Monday, 9 April 2001.
A3) Where can I get it?
Bash is the GNU project's shell, and so is available from the
master GNU archive site, ftp.gnu.org, and its mirrors. The
latest version is also available for FTP from ftp.cwru.edu.
-The following URLs tell how to get version 2.04:
+The following URLs tell how to get version 2.05:
-ftp://ftp.gnu.org/pub/gnu/bash/bash-2.04.tar.gz
-ftp://ftp.cwru.edu/pub/bash/bash-2.04.tar.gz
+ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-2.05.tar.gz
Formatted versions of the documentation are available with the URLs:
-ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.04.tar.gz
-ftp://ftp.cwru.edu/pub/bash/bash-doc-2.04.tar.gz
+ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05.tar.gz
A4) On what machines will bash run?
A5) Will bash run on operating systems other than Unix?
Configuration specifics for Unix-like systems such as QNX and
-LynxOS are included in the distribution. Bash-2.04 should
+LynxOS are included in the distribution. Bash-2.05 should
compile and run on Minix 2.0 (patches were contributed), but I
don't believe anyone has built bash-2.x on earlier Minix versions
yet.
Bash has been ported to versions of Windows implementing the Win32
programming interface. This includes Windows 95 and Windows NT.
The port was done by Cygnus Solutions as part of their CYGWIN
-project. For more information about the project, look at the URL
+project. For more information about the project, look at the URLs
-http:/sourceware.cygnus.com/cygwin
+http://www.cygwin.com/
+http://sourceware.cygnus.com/cygwin
Cygnus originally ported bash-1.14.7, and that port was part of their
early GNU-Win32 (the original name) releases. Cygnus has also done a
-port of bash-2.02.1 to the CYGWIN environment, and it is available as
-part of their current release. (They may have upgraded by now.)
+port of bash-2.04 to the CYGWIN environment, and it is available as
+part of their current release.
-Bash-2.04 should require no local Cygnus changes to build and run under
+Bash-2.05 should require no local Cygnus changes to build and run under
CYGWIN.
The Cygnus port works only on Intel machines. There is a port of bash
ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
-Softway Systems has ported bash-2.01 to their Interix (nee OpenNT)
-system, a Unix subsystem for NT that replaces the Microsoft POSIX
-subsystem. Check out http://www.interix.com for more information.
-Some support for Interix has been incorporated into bash, beginning
-with Bash-2.03. It should be easier to build bash on Interix now,
-but Interix users should fetch
-
-ftp://ftp.interix.com/pub/tw/unsup/bash.diffs.tar.gz
-
-and read the README.OpenNT file in that archive. It will detail the
-arguments `configure' needs to build on Interix. A configure cache
-file for Interix is in the bash distribution in cross-build/opennt.cache;
-copy that to `config.cache' before starting configure.
-
-D. J. Delorie has ported bash-1.14.7 to run under MS-DOS, as part of
-the DJGPP project. For more information on the project, see
+DJ Delorie has a port of bash-1.14.7 which runs under MS-DOS, as part
+of the DJGPP project. For more information on the project, see
http://www.delorie.com/djgpp/
+I have been told that the original DJGPP port was done by Daisuke Aoyama.
+
I picked up a binary of bash-1.14.7 that is purported to work with
the DJGPP V2 environment from
Section B: The latest version
-B1) What's new in version 2.04?
+B1) What's new in version 2.05?
-Bash-2.04 contains the following new features (see the manual page for
-complete descriptions and the CHANGES and NEWS files in the bash-2.04
+Bash-2.05 contains the following new features (see the manual page for
+complete descriptions and the CHANGES and NEWS files in the bash-2.05
distribution):
+o This version has once again reverted to using locales and strcoll(3) when
+ processing pattern matching bracket expressions, as POSIX requires.
+o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
+ per the new GNU coding standards.
+o The /dev/tcp and /dev/udp redirections now accept service names as well as
+ port numbers.
+o `complete' and `compgen' now take a `-o value' option, which controls some
+ of the aspects of that compspec. Valid values are:
+
+ default - perform bash default completion if programmable
+ completion produces no matches
+ dirnames - perform directory name completion if programmable
+ completion produces no matches
+ filenames - tell readline that the compspec produces filenames,
+ so it can do things like append slashes to
+ directory names and suppress trailing spaces
+o A new loadable builtin, realpath, which canonicalizes and expands symlinks
+ in pathname arguments.
+o When `set' is called without options, it prints function defintions in a
+ way that allows them to be reused as input. This affects `declare' and
+ `declare -p' as well. This only happens when the shell is not in POSIX
+ mode, since POSIX.2 forbids this behavior.
+
+A short feature history dating from bash-2.0:
+
+Bash-2.04 introduced the following new features:
+
o Programmable word completion with the new `complete' and `compgen' builtins;
examples are provided in examples/complete/complete-examples
o `history' has a new `-d' option to delete a history entry
o `bind' has a new `-x' option to bind key sequences to shell commands
o The prompt expansion code has new `\j' and `\l' escape sequences
-o The `no_empty_command_completion' shell option, if enabled, inhibits
+o The `no_empty_cmd_completion' shell option, if enabled, inhibits
command completion when TAB is typed on an empty line
o `help' has a new `-s' option to print a usage synopsis
o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
respect to backslash-escape sequences at runtime
o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
-The version of Readline released with Bash-2.04, Readline-4.1, has several
+The version of Readline released with Bash-2.04, Readline-4.1, had several
new features as well:
o Parentheses matching is always compiled into readline, and controllable
o New variables for applications: rl_already_prompted, and rl_gnu_readline_p
-A short feature history dating from bash-2.0:
-
Bash-2.03 had very few new features, in keeping with the convention
that odd-numbered releases provide mainly bug fixes. A number of new
features were added to Readline, mostly at the request of the Cygnus
lots of code now smaller and faster
test suite greatly expanded
-B2) Are there any user-visible incompatibilities between bash-2.04 and
+B2) Are there any user-visible incompatibilities between bash-2.05 and
bash-1.14.7?
-There are a few incompatibilities between version 1.14.7 and version 2.04.
-They are detailed in the file COMPAT in the bash-2.04 distribution.
+There are a few incompatibilities between version 1.14.7 and version 2.05.
+They are detailed in the file COMPAT in the bash-2.05 distribution.
Section C: Differences from other Unix shells
Things ksh88 has or uses that bash does not:
tracked aliases
variables: ERRNO, FPATH, EDITOR, VISUAL
+ trap on ERR
co-processes (|&, >&p, <&p)
weirdly-scoped functions
typeset +f to list all function names without definitions
C3) Which new features in ksh-93 are not in bash, and which are?
-New things in ksh-93 not in bash-2.04:
+New things in ksh-93 not in bash-2.05:
associative arrays
floating point arithmetic
math library functions
Bash uses a different syntax to support aliases than csh does.
The details can be found in the documentation. We have provided
a shell script which does most of the work of conversion for you;
-this script can be found in ./examples/misc/alias-conv.sh. Here is
+this script can be found in ./examples/misc/aliasconv.sh. Here is
how you use it:
Start csh in the normal way for you. (e.g., `csh')
-Pipe the output of `alias' through `alias-conv.sh', saving the
+Pipe the output of `alias' through `aliasconv.sh', saving the
results into `bash_aliases':
- alias | alias-conv.sh >bash_aliases
+ alias | bash aliasconv.sh >bash_aliases
Edit `bash_aliases', carefully reading through any created
functions. You will need to change the names of some csh specific
the output show up in $variable when the read command finishes?
This has to do with the parent-child relationship between Unix
-processes.
+processes. It affects all commands run in pipelines, not just
+simple calls to `read'. For example, piping a command's output
+into a `while' loop that repeatedly calls `read' will result in
+the same behavior.
Each element of a pipeline runs in a separate process, a child of
the shell running the pipeline. A subprocess cannot affect its
within parentheses, which will force the loop into a subshell that
may be stopped (and subsequently restarted) as a single unit.
+E7) What about empty for loops in Makefiles?
+
+It's fairly common to see constructs like this in automatically-generated
+Makefiles:
+
+SUBDIRS = @SUBDIRS@
+
+ ...
+
+subdirs-clean:
+ for d in ${SUBDIRS}; do \
+ ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+ done
+
+When SUBDIRS is empty, this results in a command like this being passed to
+bash:
+
+ for d in ; do
+ ( cd $d && ${MAKE} ${MFLAGS} clean )
+ done
+
+This is a syntax error. If the reserved word `in' is present, a word must
+follow it before the semicolon or newline. The language in the manual page
+referring to the list of words being empty refers to the list after it is
+expanded. There must be at least one word following the `in' when the
+construct is parsed.
+
+The idiomatic Makefile solution is something like:
+
+SUBDIRS = @SUBDIRS@
+
+subdirs-clean:
+ subdirs=$SUBDIRS ; for d in $$subdirs; do \
+ ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+ done
+
+
+The POSIX.2 interpretation committee has considered this issue and declared
+that the bash implemenation is correct, according to the standard:
+
+http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-169.html
+
+E8) Why does the arithmetic evaluation code complain about `08'?
+
+The bash arithmetic evaluation code (used for `let', $(()), (()), and in
+other places), interprets a leading `0' in numeric constants as denoting
+an octal number, and a leading `0x' as denoting hexadecimal. This is
+in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
+arithmetic constants should be handled as signed long integers as defined
+by the ANSI/ISO C standard.
+
+The POSIX.2 interpretation committee has confirmed this:
+
+http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
+
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+ with every letter except `z'?
+
+Bash-2.05 and later versions have reverted to the bash-2.03 behavior of
+honoring the current locale setting when processing ranges within pattern
+matching bracket expressions ([A-Z]). This is what POSIX.2 and SUSv2/XPG5
+specify.
+
+The behavior of the matcher in bash-2.05 depends on the current LC_COLLATE
+setting. Setting this variable to `C' or `POSIX' will result in the
+traditional behavior ([A-Z] matches all uppercase ASCII characters).
+Many other locales, including the en_US locale (the default on many US
+versions of Linux) collate the upper and lower case letters like this:
+
+ AaBb...Zz
+
+which means that [A-Z] matches 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). If you have locale(1), you can use it to find
+your current locale information even if you do not have any of the
+LC_ variables set.
+
+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.
+
Section F: Things to watch out for on certain Unix versions
F1) Why can't I use command line editing in my `cmdtool'?
can be converted to `< file command', shell control structures such as
loops and subshells require `command < file'.
-The file CWRU/sh-redir-hack in the bash-2.04 distribution is an
+The file CWRU/sh-redir-hack in the bash-2.05 distribution is an
(unofficial) patch to parse.y that will modify the grammar to
support this construct. It will not apply with `patch'; you must
modify parse.y by hand. Note that if you apply this, you must
These are features I plan to include in a future version of bash.
-a bash debugger (a minimally-tested version is included with bash-2.04)
+a bash debugger (a minimally-tested version is included with bash-2.05)
associative arrays
+changes to the DEBUG trap to be compatible with ksh93 (which runs the
+trap before each simple command, instead of after each one like previous
+versions)
+an implementation of the ksh-like ERR trap
H4) What's on the bash `wish list' for future versions?
H5) When will the next release appear?
-The next version will appear sometime in 2000 or 2001. Never make
+The next version will appear sometime in 2001 or 2002. Never make
predictions.
-This document is Copyright 1995-2000 by Chester Ramey.
+This document is Copyright 1995-2001 by Chester Ramey.
Permission is hereby granted, without written agreement and
without license or royalty fees, to use, copy, and distribute