Imported from ../bash-4.0-rc1.tar.gz.
[platform/upstream/bash.git] / doc / FAQ
1 This is the Bash FAQ, version 3.36, for Bash version 3.2.
2
3 This document contains a set of frequently-asked questions concerning
4 Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
5 interpreter with advanced features for both interactive use and shell
6 programming.
7
8 Another good source of basic information about shells is the collection
9 of FAQ articles periodically posted to comp.unix.shell.
10
11 Questions and comments concerning this document should be sent to
12 chet.ramey@case.edu.
13
14 This document is available for anonymous FTP with the URL
15
16 ftp://ftp.cwru.edu/pub/bash/FAQ
17
18 The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
19
20 ----------
21 Contents:
22
23 Section A:  The Basics
24
25 A1) What is it?
26 A2) What's the latest version?
27 A3) Where can I get it?
28 A4) On what machines will bash run?
29 A5) Will bash run on operating systems other than Unix?
30 A6) How can I build bash with gcc?
31 A7) How can I make bash my login shell?
32 A8) I just changed my login shell to bash, and now I can't FTP into my
33     machine.  Why not?
34 A9) What's the `POSIX Shell and Utilities standard'?
35 A10) What is the bash `posix mode'?
36
37 Section B:  The latest version
38
39 B1) What's new in version 3.2?
40 B2) Are there any user-visible incompatibilities between bash-3.2 and
41     bash-2.05b?
42
43 Section C:  Differences from other Unix shells
44
45 C1) How does bash differ from sh, the Bourne shell?
46 C2) How does bash differ from the Korn shell, version ksh88?
47 C3) Which new features in ksh-93 are not in bash, and which are?
48
49 Section D:  Why does bash do some things differently than other Unix shells?
50
51 D1) Why does bash run a different version of `command' than
52     `which command' says it will?
53 D2) Why doesn't bash treat brace expansions exactly like csh?
54 D3) Why doesn't bash have csh variable modifiers?
55 D4) How can I make my csh aliases work when I convert to bash?
56 D5) How can I pipe standard output and standard error from one command to
57     another, like csh does with `|&'?
58 D6) Now that I've converted from ksh to bash, are there equivalents to
59     ksh features like autoloaded functions and the `whence' command?
60
61 Section E:  Why does bash do certain things the way it does?
62
63 E1) Why is the bash builtin `test' slightly different from /bin/test?
64 E2) Why does bash sometimes say `Broken pipe'?
65 E3) When I have terminal escape sequences in my prompt, why does bash
66     wrap lines at the wrong column?
67 E4) If I pipe the output of a command into `read variable', why doesn't
68     the output show up in $variable when the read command finishes?
69 E5) I have a bunch of shell scripts that use backslash-escaped characters
70     in arguments to `echo'.  Bash doesn't interpret these characters.  Why
71     not, and how can I make it understand them?
72 E6) Why doesn't a while or for loop get suspended when I type ^Z?
73 E7) What about empty for loops in Makefiles?
74 E8) Why does the arithmetic evaluation code complain about `08'?
75 E9) Why does the pattern matching expression [A-Z]* match files beginning
76     with every letter except `z'?
77 E10) Why does `cd //' leave $PWD as `//'?
78 E11) If I resize my xterm while another program is running, why doesn't bash
79      notice the change?
80 E12) Why don't negative offsets in substring expansion work like I expect?
81 E13) Why does filename completion misbehave if a colon appears in the filename?
82 E14) Why does quoting the pattern argument to the regular expression matching
83      conditional operator (=~) cause matching to stop working?
84
85 Section F:  Things to watch out for on certain Unix versions
86
87 F1) Why can't I use command line editing in my `cmdtool'?
88 F2) I built bash on Solaris 2.  Why do globbing expansions and filename
89     completion chop off the first few characters of each filename?
90 F3) Why does bash dump core after I interrupt username completion or
91     `~user' tilde expansion on a machine running NIS?
92 F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
93 F5) Why does bash report syntax errors when my C News scripts use a
94     redirection before a subshell command?
95 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
96 F7) Why do bash-2.05a and  bash-2.05b fail to compile `printf.def' on
97     HP/UX 11.x?
98
99 Section G:  How can I get bash to do certain common things?
100
101 G1) How can I get bash to read and display eight-bit characters?
102 G2) How do I write a function `x' to replace builtin command `x', but
103     still invoke the command from within the function?
104 G3) How can I find the value of a shell variable whose name is the value
105     of another shell variable?
106 G4) How can I make the bash `time' reserved word print timing output that
107     looks like the output from my system's /usr/bin/time?
108 G5) How do I get the current directory into my prompt?
109 G6) How can I rename "*.foo" to "*.bar"?
110 G7) How can I translate a filename from uppercase to lowercase?
111 G8) How can I write a filename expansion (globbing) pattern that will match
112     all files in the current directory except "." and ".."?
113
114 Section H:  Where do I go from here?
115
116 H1) How do I report bugs in bash, and where should I look for fixes and
117     advice?
118 H2) What kind of bash documentation is there?
119 H3) What's coming in future versions?
120 H4) What's on the bash `wish list'?
121 H5) When will the next release appear?
122
123 ----------
124 Section A:  The Basics
125
126 A1)  What is it?
127
128 Bash is a Unix command interpreter (shell).  It is an implementation of
129 the Posix 1003.2 shell standard, and resembles the Korn and System V
130 shells.
131
132 Bash contains a number of enhancements over those shells, both
133 for interactive use and shell programming.  Features geared
134 toward interactive use include command line editing, command
135 history, job control, aliases, and prompt expansion.  Programming
136 features include additional variable expansions, shell
137 arithmetic, and a number of variables and options to control
138 shell behavior.
139
140 Bash was originally written by Brian Fox of the Free Software
141 Foundation.  The current developer and maintainer is Chet Ramey
142 of Case Western Reserve University.
143
144 A2)  What's the latest version?
145
146 The latest version is 3.2, first made available on 12 October, 2006.
147
148 A3)  Where can I get it?
149
150 Bash is the GNU project's shell, and so is available from the
151 master GNU archive site, ftp.gnu.org, and its mirrors.  The
152 latest version is also available for FTP from ftp.cwru.edu.
153 The following URLs tell how to get version 3.2:
154
155 ftp://ftp.gnu.org/pub/gnu/bash/bash-3.2.tar.gz
156 ftp://ftp.cwru.edu/pub/bash/bash-3.2.tar.gz
157
158 Formatted versions of the documentation are available with the URLs:
159
160 ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-3.2.tar.gz
161 ftp://ftp.cwru.edu/pub/bash/bash-doc-3.2.tar.gz
162
163 Any patches for the current version are available with the URL:
164
165 ftp://ftp.cwru.edu/pub/bash/bash-3.2-patches/
166
167 A4)  On what machines will bash run?
168
169 Bash has been ported to nearly every version of Unix.  All you
170 should have to do to build it on a machine for which a port
171 exists is to type `configure' and then `make'.  The build process
172 will attempt to discover the version of Unix you have and tailor
173 itself accordingly, using a script created by GNU autoconf.
174
175 More information appears in the file `INSTALL' in the distribution.
176
177 The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
178 explains how to obtain binary versions of bash for most of the major
179 commercial Unix systems.
180
181 A5) Will bash run on operating systems other than Unix?
182
183 Configuration specifics for Unix-like systems such as QNX and
184 LynxOS are included in the distribution.  Bash-2.05 and later
185 versions should compile and run on Minix 2.0 (patches were
186 contributed), but I don't believe anyone has built bash-2.x on
187 earlier Minix versions yet. 
188
189 Bash has been ported to versions of Windows implementing the Win32
190 programming interface.  This includes Windows 95 and Windows NT.
191 The port was done by Cygnus Solutions (now part of Red Hat) as part
192 of their CYGWIN project.  For more information about the project, see
193 http://www.cygwin.com/.
194
195 Cygnus originally ported bash-1.14.7, and that port was part of their
196 early GNU-Win32 (the original name) releases.  Cygnus has also done
197 ports of bash-2.05b and bash-3.0 to the CYGWIN environment, and both
198 are available as part of their current release.  Bash-3.2 is currently
199 being tested and should be available soon.
200
201 Bash-2.05b and later versions should require no local Cygnus changes to
202 build and run under CYGWIN.
203
204 DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
205 of the DJGPP project.  For more information on the project, see
206
207 http://www.delorie.com/djgpp/
208
209 I have been told that the original DJGPP port was done by Daisuke Aoyama.
210
211 Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
212 is available for DJGPP V2.  The files are available as:
213
214 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip  binary
215 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip  documentation
216 ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip  source
217
218 Mark began to work with bash-2.05, but I don't know the current status.
219
220 Bash-3.0 compiles and runs with no modifications under Microsoft's Services
221 for Unix (SFU), once known as Interix.  I do not anticipate any problems
222 with building bash-3.1 or bash-3.2.
223
224 A6) How can I build bash with gcc? 
225
226 Bash configures to use gcc by default if it is available.  Read the
227 file INSTALL in the distribution for more information.
228
229 A7)  How can I make bash my login shell?
230
231 Some machines let you use `chsh' to change your login shell.  Other
232 systems use `passwd -s' or `passwd -e'.  If one of these works for
233 you, that's all you need.  Note that many systems require the full
234 pathname to a shell to appear in /etc/shells before you can make it
235 your login shell.  For this, you may need the assistance of your
236 friendly local system administrator. 
237
238 If you cannot do this, you can still use bash as your login shell, but
239 you need to perform some tricks.  The basic idea is to add a command
240 to your login shell's startup file to replace your login shell with
241 bash.
242
243 For example, if your login shell is csh or tcsh, and you have installed
244 bash in /usr/gnu/bin/bash, add the following line to ~/.login:
245
246         if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
247
248 (the `--login' tells bash that it is a login shell).
249
250 It's not a good idea to put this command into ~/.cshrc, because every
251 csh you run without the `-f' option, even ones started to run csh scripts,
252 reads that file.  If you must put the command in ~/.cshrc, use something
253 like
254
255         if ( $?prompt ) exec /usr/gnu/bin/bash --login
256
257 to ensure that bash is exec'd only when the csh is interactive.
258
259 If your login shell is sh or ksh, you have to do two things.
260
261 First, create an empty file in your home directory named `.bash_profile'.
262 The existence of this file will prevent the exec'd bash from trying to
263 read ~/.profile, and re-execing itself over and over again.  ~/.bash_profile
264 is the first file bash tries to read initialization commands from when
265 it is invoked as a login shell.
266
267 Next, add a line similar to the above to ~/.profile:
268
269         [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
270                 exec /usr/gnu/bin/bash --login
271
272 This will cause login shells to replace themselves with bash running as
273 a login shell.  Once you have this working, you can copy your initialization
274 code from ~/.profile to ~/.bash_profile.
275
276 I have received word that the recipe supplied above is insufficient for
277 machines running CDE.  CDE has a maze of twisty little startup files, all
278 slightly different.
279
280 If you cannot change your login shell in the password file to bash, you
281 will have to (apparently) live with CDE using the shell in the password
282 file to run its startup scripts.  If you have changed your shell to bash,
283 there is code in the CDE startup files (on Solaris, at least) that attempts
284 to do the right thing.  It is, however, often broken, and may require that
285 you use the $BASH_ENV trick described below.
286
287 `dtterm' claims to use $SHELL as the default program to start, so if you
288 can change $SHELL in the CDE startup files, you should be able to use bash
289 in your terminal windows.
290
291 Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
292 to read your login shell's startup files.  You may be able to use bash for
293 the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
294 well, but I have not tried this.
295
296 You can use the above `exec' recipe to start bash when not logging in with
297 CDE by testing the value of the DT variable:
298
299         if [ -n "$DT" ]; then
300                 [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
301         fi
302
303 If CDE starts its shells non-interactively during login, the login shell
304 startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
305 To get around this problem, append a line similar to the following to your
306 ~/.dtprofile:
307
308         BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
309
310 and add the following line to the beginning of ~/.bash_profile:
311
312         unset BASH_ENV
313
314 A8) I just changed my login shell to bash, and now I can't FTP into my
315    machine.  Why not?
316
317 You must add the full pathname to bash to the file /etc/shells.  As
318 noted in the answer to the previous question, many systems require
319 this before you can make bash your login shell. 
320
321 Most versions of ftpd use this file to prohibit `special' users
322 such as `uucp' and `news' from using FTP. 
323
324 A9)  What's the `POSIX Shell and Utilities standard'?
325
326 POSIX is a name originally coined by Richard Stallman for a
327 family of open system standards based on UNIX.  There are a
328 number of aspects of UNIX under consideration for
329 standardization, from the basic system services at the system
330 call and C library level to applications and tools to system
331 administration and management.  Each area of standardization is
332 assigned to a working group in the 1003 series. 
333
334 The POSIX Shell and Utilities standard was originally developed by
335 IEEE Working Group 1003.2 (POSIX.2).  Today it has been merged with
336 the original 1003.1 Working Group and is maintained by the Austin
337 Group (a joint working group of the IEEE, The Open Group and
338 ISO/IEC SC22/WG15).  Today the Shell and Utilities are a volume
339 within the set of documents that make up IEEE Std 1003.1-2001, and
340 thus now the former POSIX.2 (from 1992) is now part of the current
341 POSIX.1 standard (POSIX 1003.1-2001). 
342
343 The Shell and Utilities volume concentrates on the command
344 interpreter interface and utility programs commonly executed from
345 the command line or by other programs.  The standard is freely
346 available on the web at http://www.UNIX-systems.org/version3/ . 
347 Work continues at the Austin Group on maintenance issues; see
348 http://www.opengroup.org/austin/ to join the discussions. 
349
350 Bash is concerned with the aspects of the shell's behavior defined
351 by the POSIX Shell and Utilities volume.  The shell command
352 language has of course been standardized, including the basic flow
353 control and program execution constructs, I/O redirection and
354 pipelining, argument handling, variable expansion, and quoting. 
355
356 The `special' builtins, which must be implemented as part of the
357 shell to provide the desired functionality, are specified as
358 being part of the shell; examples of these are `eval' and
359 `export'.  Other utilities appear in the sections of POSIX not
360 devoted to the shell which are commonly (and in some cases must
361 be) implemented as builtin commands, such as `read' and `test'. 
362 POSIX also specifies aspects of the shell's interactive
363 behavior as part of the UPE, including job control and command
364 line editing.  Only vi-style line editing commands have been
365 standardized; emacs editing commands were left out due to
366 objections.
367
368 The latest version of the POSIX Shell and Utilities standard is
369 available (now updated to the 2004 Edition) as part of the Single
370 UNIX Specification Version 3 at
371
372 http://www.UNIX-systems.org/version3/
373
374 A10)  What is the bash `posix mode'?
375
376 Although bash is an implementation of the POSIX shell
377 specification, there are areas where the bash default behavior
378 differs from that spec.  The bash `posix mode' changes the bash
379 behavior in these areas so that it obeys the spec more closely. 
380
381 Posix mode is entered by starting bash with the --posix or
382 '-o posix' option or executing `set -o posix' after bash is running.
383
384 The specific aspects of bash which change when posix mode is
385 active are listed in the file POSIX in the bash distribution.
386 They are also listed in a section in the Bash Reference Manual
387 (from which that file is generated).
388
389 Section B:  The latest version
390
391 B1) What's new in version 3.2?
392
393 Bash-3.2 is the second maintenance release of the third major release of
394 bash.  It contains the following significant new features (see the manual
395 page for complete descriptions and the CHANGES and NEWS files in the
396 bash-3.2 distribution).
397
398 o Bash-3.2 now checks shell scripts for NUL characters rather than non-printing
399   characters when deciding whether or not a script is a binary file.
400
401 o Quoting the string argument to the [[ command's  =~ (regexp) operator now
402   forces string matching, as with the other pattern-matching operators.
403
404 A short feature history dating from Bash-2.0:
405
406 Bash-3.1 contained the following new features:
407
408 o Bash-3.1 may now be configured and built in a mode that enforces strict
409   POSIX compliance.
410
411 o The `+=' assignment operator, which appends to the value of a string or
412   array variable, has been implemented.
413
414 o It is now possible to ignore case when matching in contexts other than
415   filename generation using the new `nocasematch' shell option.
416
417 Bash-3.0 contained the following new features:
418
419 o Features to support the bash debugger have been implemented, and there
420   is a new `extdebug' option to turn the non-default options on
421
422 o HISTCONTROL is now a colon-separated list of options and has been
423   extended with a new `erasedups' option that will result in only one
424   copy of a command being kept in the history list
425
426 o Brace expansion has been extended with a new {x..y} form, producing
427   sequences of digits or characters
428
429 o Timestamps are now kept with history entries, with an option to save
430   and restore them from the history file; there is a new HISTTIMEFORMAT
431   variable describing how to display the timestamps when listing history
432   entries
433
434 o The `[[' command can now perform extended regular expression (egrep-like)
435   matching, with matched subexpressions placed in the BASH_REMATCH array
436   variable
437
438 o A new `pipefail' option causes a pipeline to return a failure status if
439   any command in it fails
440
441 o The `jobs', `kill', and `wait' builtins now accept job control notation
442   in their arguments even if job control is not enabled
443
444 o The `gettext' package and libintl have been integrated, and the shell
445   messages may be translated into other languages
446
447 Bash-2.05b introduced the following new features:
448
449 o support for multibyte characters has been added to both bash and readline
450
451 o the DEBUG trap is now run *before* simple commands, ((...)) commands,
452   [[...]] conditional commands, and for ((...)) loops
453
454 o the shell now performs arithmetic in the largest integer size the machine
455   supports (intmax_t)
456
457 o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
458   and inserts the result into the expanded prompt
459
460 o there is a new `here-string' redirection operator:  <<< word
461
462 o when displaying variables, function attributes and definitions are shown
463   separately, allowing them to be re-used as input (attempting to re-use
464   the old output would result in syntax errors).
465
466 o `read' has a new `-u fd' option to read from a specified file descriptor
467
468 o the bash debugger in examples/bashdb has been modified to work with the
469   new DEBUG trap semantics, the command set has been made more gdb-like,
470   and the changes to $LINENO make debugging functions work better
471
472 o the expansion of $LINENO inside a shell function is only relative to the
473   function start if the shell is interactive -- if the shell is running a
474   script, $LINENO expands to the line number in the script.  This is as
475   POSIX-2001 requires
476
477 Bash-2.05a introduced the following new features:
478
479 o The `printf' builtin has undergone major work
480
481 o There is a new read-only `shopt' option: login_shell, which is set by
482   login shells and unset otherwise
483
484 o New `\A' prompt string escape sequence; expanding to time in 24-hour
485   HH:MM format
486
487 o New `-A group/-g' option to complete and compgen; goes group name
488   completion
489
490 o New [+-]O invocation option to set and unset `shopt' options at startup
491
492 o ksh-like `ERR' trap
493
494 o `for' loops now allow empty word lists after the `in' reserved word
495
496 o new `hard' and `soft' arguments for the `ulimit' builtin
497
498 o Readline can be configured to place the user at the same point on the line
499   when retrieving commands from the history list
500
501 o Readline can be configured to skip `hidden' files (filenames with a leading
502   `.' on Unix) when performing completion
503
504 Bash-2.05 introduced the following new features:
505
506 o This version has once again reverted to using locales and strcoll(3) when
507   processing pattern matching bracket expressions, as POSIX requires. 
508 o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
509   per the new GNU coding standards.
510 o The /dev/tcp and /dev/udp redirections now accept service names as well as
511   port numbers.
512 o `complete' and `compgen' now take a `-o value' option, which controls some
513    of the aspects of that compspec.  Valid values are:
514
515         default - perform bash default completion if programmable
516                   completion produces no matches
517         dirnames - perform directory name completion if programmable
518                    completion produces no matches
519         filenames - tell readline that the compspec produces filenames,
520                     so it can do things like append slashes to
521                     directory names and suppress trailing spaces
522 o A new loadable builtin, realpath, which canonicalizes and expands symlinks
523   in pathname arguments.
524 o When `set' is called without options, it prints function defintions in a
525   way that allows them to be reused as input.  This affects `declare' and 
526   `declare -p' as well.  This only happens when the shell is not in POSIX
527    mode, since POSIX.2 forbids this behavior.
528
529 Bash-2.04 introduced the following new features:
530
531 o Programmable word completion with the new `complete' and `compgen' builtins;
532   examples are provided in examples/complete/complete-examples
533 o `history' has a new `-d' option to delete a history entry
534 o `bind' has a new `-x' option to bind key sequences to shell commands
535 o The prompt expansion code has new `\j' and `\l' escape sequences
536 o The `no_empty_cmd_completion' shell option, if enabled, inhibits
537   command completion when TAB is typed on an empty line
538 o `help' has a new `-s' option to print a usage synopsis
539 o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
540 o New ksh93-style arithmetic for command:
541         for ((expr1 ; expr2; expr3 )); do list; done
542 o `read' has new options: `-t', `-n', `-d', `-s'
543 o The redirection code handles several filenames specially:  /dev/fd/N,
544   /dev/stdin, /dev/stdout, /dev/stderr
545 o The redirection code now recognizes /dev/tcp/HOST/PORT and
546   /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
547   to the specified port on the specified host
548 o The ${!prefix*} expansion has been implemented
549 o A new FUNCNAME variable, which expands to the name of a currently-executing
550   function
551 o The GROUPS variable is no longer readonly
552 o A new shopt `xpg_echo' variable, to control the behavior of echo with
553   respect to backslash-escape sequences at runtime
554 o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
555
556 The version of Readline released with Bash-2.04, Readline-4.1, had several
557 new features as well:
558
559 o Parentheses matching is always compiled into readline, and controllable
560   with the new `blink-matching-paren' variable
561 o The history-search-forward and history-search-backward functions now leave
562   point at the end of the line when the search string is empty, like
563   reverse-search-history, and forward-search-history
564 o A new function for applications:  rl_on_new_line_with_prompt()
565 o New variables for applications:  rl_already_prompted, and rl_gnu_readline_p
566
567
568 Bash-2.03 had very few new features, in keeping with the convention
569 that odd-numbered releases provide mainly bug fixes.  A number of new
570 features were added to Readline, mostly at the request of the Cygnus
571 folks.
572
573 A new shopt option, `restricted_shell', so that startup files can test
574         whether or not the shell was started in restricted mode
575 Filename generation is now performed on the words between ( and ) in
576         compound array assignments (this is really a bug fix)
577 OLDPWD is now auto-exported, as POSIX.2 requires
578 ENV and BASH_ENV are read-only variables in a restricted shell
579 Bash may now be linked against an already-installed Readline library,
580         as long as the Readline library is version 4 or newer
581 All shells begun with the `--login' option will source the login shell
582         startup files, even if the shell is not interactive
583
584 There were lots of changes to the version of the Readline library released
585 along with Bash-2.03.  For a complete list of the changes, read the file
586 CHANGES in the Bash-2.03 distribution.
587
588 Bash-2.02 contained the following new features:
589
590 a new version of malloc (based on the old GNU malloc code in previous
591         bash versions) that is more page-oriented, more conservative
592         with memory usage, does not `orphan' large blocks when they
593         are freed, is usable on 64-bit machines, and has allocation
594         checking turned on unconditionally
595 POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
596 POSIX.2-style globbing equivalence classes
597 POSIX.2-style globbing collating symbols
598 the ksh [[...]] extended conditional command
599 the ksh egrep-style extended pattern matching operators
600 a new `printf' builtin
601 the ksh-like $(<filename) command substitution, which is equivalent to
602         $(cat filename)
603 new tilde prefixes that expand to directories from the directory stack
604 new `**' arithmetic operator to do exponentiation
605 case-insensitive globbing (filename expansion)
606 menu completion a la tcsh
607 `magic-space' history expansion function like tcsh
608 the readline inputrc `language' has a new file inclusion directive ($include)
609
610 Bash-2.01 contained only a few new features:
611
612 new `GROUPS' builtin array variable containing the user's group list
613 new bindable readline commands: history-and-alias-expand-line and
614         alias-expand-line
615
616 Bash-2.0 contained extensive changes and new features from bash-1.14.7.
617 Here's a short list:
618
619 new `time' reserved word to time pipelines, shell builtins, and
620         shell functions
621 one-dimensional arrays with a new compound assignment statement,
622         appropriate expansion constructs and modifications to some
623         of the builtins (read, declare, etc.) to use them
624 new quoting syntaxes for ANSI-C string expansion and locale-specific
625         string translation
626 new expansions to do substring extraction, pattern replacement, and
627         indirect variable expansion
628 new builtins: `disown' and `shopt'
629 new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
630                MACHTYPE, BASH_VERSINFO
631 special handling of many unused or redundant variables removed
632         (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
633 dynamic loading of new builtin commands; many loadable examples provided
634 new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
635 history and aliases available in shell scripts
636 new readline variables: enable-keypad, mark-directories, input-meta,
637         visible-stats, disable-completion, comment-begin
638 new readline commands to manipulate the mark and operate on the region
639 new readline emacs mode commands and bindings for ksh-88 compatibility
640 updated and extended builtins
641 new DEBUG trap
642 expanded (and now documented) restricted shell mode
643
644 implementation stuff:   
645 autoconf-based configuration
646 nearly all of the bugs reported since version 1.14 have been fixed
647 most builtins converted to use builtin `getopt' for consistency
648 most builtins use -p option to display output in a reusable form
649         (for consistency)
650 grammar tighter and smaller (66 reduce-reduce conflicts gone)
651 lots of code now smaller and faster
652 test suite greatly expanded
653
654 B2) Are there any user-visible incompatibilities between bash-3.2 and
655     bash-2.05b?
656
657 There are a few incompatibilities between version 2.05b and version 3.2.
658 They are detailed in the file COMPAT in the bash distribution.  That file
659 is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
660 if if you find something that's not mentioned there.
661
662 Section C:  Differences from other Unix shells
663
664 C1) How does bash differ from sh, the Bourne shell?
665
666 This is a non-comprehensive list of features that differentiate bash
667 from the SVR4.2 shell.  The bash manual page explains these more
668 completely.
669
670 Things bash has that sh does not:
671         long invocation options
672         [+-]O invocation option
673         -l invocation option
674         `!' reserved word to invert pipeline return value
675         `time' reserved word to time pipelines and shell builtins
676         the `function' reserved word
677         the `select' compound command and reserved word
678         arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
679         new $'...' and $"..." quoting
680         the $(...) form of command substitution
681         the $(<filename) form of command substitution, equivalent to
682                 $(cat filename)
683         the ${#param} parameter value length operator
684         the ${!param} indirect parameter expansion operator
685         the ${!param*} prefix expansion operator
686         the ${param:offset[:length]} parameter substring operator
687         the ${param/pat[/string]} parameter pattern substitution operator
688         expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
689         expansion of positional parameters beyond $9 with ${num}
690         variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
691                    TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
692                    LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
693                    ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
694                    HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
695                    PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
696                    SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
697                    auto_resume
698         DEBUG trap
699         ERR trap
700         variable arrays with new compound assignment syntax
701         redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
702         prompt string special char translation and variable expansion
703         auto-export of variables in initial environment
704         command search finds functions before builtins
705         bash return builtin will exit a file sourced with `.'
706         builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
707                   export -n/-f/-p/name=value, pwd -L/-P,
708                   read -e/-p/-a/-t/-n/-d/-s/-u,
709                   readonly -a/-f/name=value, trap -l, set +o,
710                   set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
711                   unset -f/-v, ulimit -i/-m/-p/-q/-u/-x,
712                   type -a/-p/-t/-f/-P, suspend -f, kill -n,
713                   test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
714         bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
715         bash restricted shell mode is more extensive
716         bash allows functions and variables with the same name
717         brace expansion
718         tilde expansion
719         arithmetic expansion with $((...)) and `let' builtin
720         the `[[...]]' extended conditional command
721         process substitution
722         aliases and alias/unalias builtins
723         local variables in functions and `local' builtin
724         readline and command-line editing with programmable completion
725         command history and history/fc builtins
726         csh-like history expansion
727         other new bash builtins: bind, command, compgen, complete, builtin,
728                                  declare/typeset, dirs, enable, fc, help,
729                                  history, logout, popd, pushd, disown, shopt,
730                                  printf
731         exported functions
732         filename generation when using output redirection (command >a*)
733         POSIX.2-style globbing character classes
734         POSIX.2-style globbing equivalence classes
735         POSIX.2-style globbing collating symbols
736         egrep-like extended pattern matching operators
737         case-insensitive pattern matching and globbing
738         variable assignments preceding commands affect only that command,
739                 even for builtins and functions
740         posix mode and strict posix conformance
741         redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
742                 /dev/tcp/host/port, /dev/udp/host/port
743         debugger support, including `caller' builtin and new variables
744         RETURN trap
745         the `+=' assignment operator
746
747
748 Things sh has that bash does not:
749         uses variable SHACCT to do shell accounting
750         includes `stop' builtin (bash can use alias stop='kill -s STOP')
751         `newgrp' builtin
752         turns on job control if called as `jsh'
753         $TIMEOUT (like bash $TMOUT)
754         `^' is a synonym for `|'
755         new SVR4.2 sh builtins: mldmode, priv
756
757 Implementation differences:
758         redirection to/from compound commands causes sh to create a subshell
759         bash does not allow unbalanced quotes; sh silently inserts them at EOF
760         bash does not mess with signal 11
761         sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
762         bash splits only the results of expansions on IFS, using POSIX.2
763                 field splitting rules; sh splits all words on IFS
764         sh does not allow MAILCHECK to be unset (?)
765         sh does not allow traps on SIGALRM or SIGCHLD
766         bash allows multiple option arguments when invoked (e.g. -x -v);
767                 sh allows only a single option argument (`sh -x -v' attempts
768                 to open a file named `-v', and, on SunOS 4.1.4, dumps core.
769                 On Solaris 2.4 and earlier versions, sh goes into an infinite
770                 loop.)
771         sh exits a script if any builtin fails; bash exits only if one of
772                 the POSIX.2 `special' builtins fails
773
774 C2)  How does bash differ from the Korn shell, version ksh88?
775
776 Things bash has or uses that ksh88 does not:
777         long invocation options
778         [-+]O invocation option
779         -l invocation option
780         `!' reserved word
781         arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
782         arithmetic in largest machine-supported size (intmax_t)
783         posix mode and posix conformance
784         command hashing
785         tilde expansion for assignment statements that look like $PATH
786         process substitution with named pipes if /dev/fd is not available
787         the ${!param} indirect parameter expansion operator
788         the ${!param*} prefix expansion operator
789         the ${param:offset[:length]} parameter substring operator
790         the ${param/pat[/string]} parameter pattern substitution operator
791         variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
792                    TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
793                    HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
794                    IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
795                    PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
796                    GROUPS, FUNCNAME, histchars, auto_resume
797         prompt expansion with backslash escapes and command substitution
798         redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
799         more extensive and extensible editing and programmable completion
800         builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
801                   exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
802                   jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
803                   read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
804                   set -o braceexpand/-o histexpand/-o interactive-comments/
805                   -o notify/-o physical/-o posix/-o hashall/-o onecmd/
806                   -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
807                   typeset -a/-F/-p, ulimit -i/-q/-u/-x, umask -S, alias -p,
808                   shopt, disown, printf, complete, compgen
809         `!' csh-style history expansion
810         POSIX.2-style globbing character classes
811         POSIX.2-style globbing equivalence classes
812         POSIX.2-style globbing collating symbols
813         egrep-like extended pattern matching operators
814         case-insensitive pattern matching and globbing
815         `**' arithmetic operator to do exponentiation
816         redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
817         arrays of unlimited size
818         TMOUT is default timeout for `read' and `select'
819         debugger support, including the `caller' builtin
820         RETURN trap
821         Timestamps in history entries
822         {x..y} brace expansion
823         The `+=' assignment operator
824
825 Things ksh88 has or uses that bash does not:
826         tracked aliases (alias -t)
827         variables: ERRNO, FPATH, EDITOR, VISUAL
828         co-processes (|&, >&p, <&p)
829         weirdly-scoped functions
830         typeset +f to list all function names without definitions
831         text of command history kept in a file, not memory
832         builtins: alias -x, cd old new, newgrp, print,
833                   read -p/-s/var?prompt, set -A/-o gmacs/
834                   -o bgnice/-o markdirs/-o trackall/-o viraw/-s,
835                   typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
836         using environment to pass attributes of exported variables
837         arithmetic evaluation done on arguments to some builtins
838         reads .profile from $PWD when invoked as login shell
839
840 Implementation differences:
841         ksh runs last command of a pipeline in parent shell context
842         bash has brace expansion by default (ksh88 compile-time option)
843         bash has fixed startup file for all interactive shells; ksh reads $ENV
844         bash has exported functions
845         bash command search finds functions before builtins
846         bash waits for all commands in pipeline to exit before returning status
847         emacs-mode editing has some slightly different key bindings
848
849 C3)  Which new features in ksh-93 are not in bash, and which are?
850
851 New things in ksh-93 not in bash-3.2:
852         associative arrays
853         floating point arithmetic and variables
854         math library functions
855         ${!name[sub]} name of subscript for associative array
856         `.' is allowed in variable names to create a hierarchical namespace
857         more extensive compound assignment syntax
858         discipline functions
859         `sleep' and `getconf' builtins (bash has loadable versions)
860         typeset -n and `nameref' variables
861         KEYBD trap
862         variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
863                    .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
864         backreferences in pattern matching (\N)
865         `&' operator in pattern lists for matching
866         print -f (bash uses printf)
867         `fc' has been renamed to `hist'
868         `.' can execute shell functions
869         exit statuses between 0 and 255
870         FPATH and PATH mixing
871         getopts -a
872         -I invocation option
873         printf %H, %P, %T, %Z modifiers, output base for %d
874         lexical scoping for local variables in `ksh' functions
875         no scoping for local variables in `POSIX' functions
876
877 New things in ksh-93 present in bash-3.2:
878         [n]<&word- and [n]>&word- redirections (combination dup and close)
879         for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
880         ?:, ++, --, `expr1 , expr2' arithmetic operators
881         expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
882                     ${!param*}
883         compound array assignment
884         the `!' reserved word
885         loadable builtins -- but ksh uses `builtin' while bash uses `enable'
886         `command', `builtin', `disown' builtins
887         new $'...' and $"..." quoting
888         FIGNORE (but bash uses GLOBIGNORE), HISTCMD
889         set -o notify/-C
890         changes to kill builtin
891         read -A (bash uses read -a)
892         read -t/-d
893         trap -p
894         exec -c/-a
895         `.' restores the positional parameters when it completes
896         POSIX.2 `test'
897         umask -S
898         unalias -a
899         command and arithmetic substitution performed on PS1, PS4, and ENV
900         command name completion
901         ENV processed only for interactive shells
902         set -o pipefail
903         The `+=' assignment operator
904
905 Section D:  Why does bash do some things differently than other Unix shells?
906
907 D1) Why does bash run a different version of `command' than
908     `which command' says it will?
909
910 On many systems, `which' is actually a csh script that assumes
911 you're running csh.  In tcsh, `which' and its cousin `where'
912 are builtins.  On other Unix systems, `which' is a perl script
913 that uses the PATH environment variable.  Many Linux distributions
914 use GNU `which', which is a C program that can understand shell
915 aliases.
916
917 The csh script version reads the csh startup files from your
918 home directory and uses those to determine which `command' will
919 be invoked.  Since bash doesn't use any of those startup files,
920 there's a good chance that your bash environment differs from
921 your csh environment.  The bash `type' builtin does everything
922 `which' does, and will report correct results for the running
923 shell.  If you're really wedded to the name `which', try adding
924 the following function definition to your .bashrc:
925
926         which()
927         {
928                 builtin type "$@"
929         }
930
931 If you're moving from tcsh and would like to bring `where' along
932 as well, use this function:
933
934         where()
935         {
936                 builtin type -a "$@"
937         }
938
939 D2) Why doesn't bash treat brace expansions exactly like csh?
940
941 The only difference between bash and csh brace expansion is that
942 bash requires a brace expression to contain at least one unquoted
943 comma if it is to be expanded.  Any brace-surrounded word not
944 containing an unquoted comma is left unchanged by the brace
945 expansion code.  This affords the greatest degree of sh
946 compatibility. 
947
948 Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. 
949
950 D3) Why doesn't bash have csh variable modifiers?
951
952 Posix has specified a more powerful, albeit somewhat more cryptic,
953 mechanism cribbed from ksh, and bash implements it.
954
955 ${parameter%word}
956         Remove smallest suffix pattern.  The WORD is expanded to produce
957         a pattern.  It then expands to the value of PARAMETER, with the
958         smallest portion of the suffix matched by the pattern deleted.
959
960         x=file.c
961         echo ${x%.c}.o
962         -->file.o
963
964 ${parameter%%word}
965
966         Remove largest suffix pattern.  The WORD is expanded to produce
967         a pattern.  It then expands to the value of PARAMETER, with the
968         largest portion of the suffix matched by the pattern deleted.
969
970         x=posix/src/std
971         echo ${x%%/*}
972         -->posix
973
974 ${parameter#word}
975         Remove smallest prefix pattern.  The WORD is expanded to produce
976         a pattern.  It then expands to the value of PARAMETER, with the
977         smallest portion of the prefix matched by the pattern deleted.
978
979         x=$HOME/src/cmd
980         echo ${x#$HOME}
981         -->/src/cmd
982
983 ${parameter##word}
984         Remove largest prefix pattern.  The WORD is expanded to produce
985         a pattern.  It then expands to the value of PARAMETER, with the
986         largest portion of the prefix matched by the pattern deleted.
987
988         x=/one/two/three
989         echo ${x##*/}
990         -->three
991
992
993 Given
994         a=/a/b/c/d
995         b=b.xxx
996
997         csh                     bash            result
998         ---                     ----            ------
999         $a:h                    ${a%/*}            /a/b/c
1000         $a:t                    ${a##*/}           d
1001         $b:r                    ${b%.*}            b
1002         $b:e                    ${b##*.}           xxx
1003
1004
1005 D4) How can I make my csh aliases work when I convert to bash?
1006
1007 Bash uses a different syntax to support aliases than csh does. 
1008 The details can be found in the documentation.  We have provided
1009 a shell script which does most of the work of conversion for you;
1010 this script can be found in ./examples/misc/aliasconv.sh.  Here is
1011 how you use it:
1012   
1013 Start csh in the normal way for you.  (e.g., `csh')
1014   
1015 Pipe the output of `alias' through `aliasconv.sh', saving the
1016 results into `bash_aliases':
1017   
1018         alias | bash aliasconv.sh >bash_aliases
1019   
1020 Edit `bash_aliases', carefully reading through any created
1021 functions.  You will need to change the names of some csh specific
1022 variables to the bash equivalents.  The script converts $cwd to
1023 $PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
1024 to $PS1.  You may also have to add quotes to avoid unwanted
1025 expansion.
1026
1027 For example, the csh alias:
1028   
1029         alias cd 'cd \!*; echo $cwd'
1030   
1031 is converted to the bash function:
1032
1033         cd () { command cd "$@"; echo $PWD ; }
1034
1035 The only thing that needs to be done is to quote $PWD:
1036   
1037         cd () { command cd "$@"; echo "$PWD" ; }
1038   
1039 Merge the edited file into your ~/.bashrc.
1040
1041 There is an additional, more ambitious, script in
1042 examples/misc/cshtobash that attempts to convert your entire csh
1043 environment to its bash equivalent.  This script can be run as
1044 simply `cshtobash' to convert your normal interactive
1045 environment, or as `cshtobash ~/.login' to convert your login
1046 environment. 
1047
1048 D5) How can I pipe standard output and standard error from one command to
1049     another, like csh does with `|&'?
1050
1051 Use
1052         command 2>&1 | command2
1053
1054 The key is to remember that piping is performed before redirection, so
1055 file descriptor 1 points to the pipe when it is duplicated onto file
1056 descriptor 2.
1057
1058 D6) Now that I've converted from ksh to bash, are there equivalents to
1059     ksh features like autoloaded functions and the `whence' command?
1060
1061 There are features in ksh-88 and ksh-93 that do not have direct bash
1062 equivalents.  Most, however, can be emulated with very little trouble.
1063
1064 ksh-88 feature          Bash equivalent
1065 --------------          ---------------
1066 compiled-in aliases     set up aliases in .bashrc; some ksh aliases are
1067                         bash builtins (hash, history, type)
1068 coprocesses             named pipe pairs (one for read, one for write)
1069 typeset +f              declare -F
1070 cd, print, whence       function substitutes in examples/functions/kshenv
1071 autoloaded functions    examples/functions/autoload is the same as typeset -fu
1072 read var?prompt         read -p prompt var
1073
1074 ksh-93 feature          Bash equivalent
1075 --------------          ---------------
1076 sleep, getconf          Bash has loadable versions in examples/loadables
1077 ${.sh.version}          $BASH_VERSION
1078 print -f                printf
1079 hist                    alias hist=fc
1080 $HISTEDIT               $FCEDIT
1081
1082 Section E:  How can I get bash to do certain things, and why does bash do
1083             things the way it does?
1084
1085 E1) Why is the bash builtin `test' slightly different from /bin/test?
1086
1087 The specific example used here is [ ! x -o x ], which is false.
1088
1089 Bash's builtin `test' implements the Posix.2 spec, which can be
1090 summarized as follows (the wording is due to David Korn):
1091    
1092 Here is the set of rules for processing test arguments.
1093   
1094     0 Args: False
1095     1 Arg:  True iff argument is not null.
1096     2 Args: If first arg is !, True iff second argument is null.
1097             If first argument is unary, then true if unary test is true
1098             Otherwise error.
1099     3 Args: If second argument is a binary operator, do binary test of $1 $3
1100             If first argument is !, negate two argument test of $2 $3
1101             If first argument is `(' and third argument is `)', do the
1102             one-argument test of the second argument.
1103             Otherwise error.
1104     4 Args: If first argument is !, negate three argument test of $2 $3 $4.
1105             Otherwise unspecified
1106     5 or more Args: unspecified.  (Historical shells would use their
1107     current algorithm).
1108    
1109 The operators -a and -o are considered binary operators for the purpose
1110 of the 3 Arg case.
1111    
1112 As you can see, the test becomes (not (x or x)), which is false.
1113
1114 E2) Why does bash sometimes say `Broken pipe'?
1115
1116 If a sequence of commands appears in a pipeline, and one of the
1117 reading commands finishes before the writer has finished, the
1118 writer receives a SIGPIPE signal.  Many other shells special-case
1119 SIGPIPE as an exit status in the pipeline and do not report it. 
1120 For example, in:
1121   
1122       ps -aux | head
1123   
1124 `head' can finish before `ps' writes all of its output, and ps
1125 will try to write on a pipe without a reader.  In that case, bash
1126 will print `Broken pipe' to stderr when ps is killed by a
1127 SIGPIPE. 
1128
1129 As of bash-3.1, bash does not report SIGPIPE errors by default.  You
1130 can build a version of bash that will report such errors.
1131
1132 E3) When I have terminal escape sequences in my prompt, why does bash
1133     wrap lines at the wrong column?
1134
1135 Readline, the line editing library that bash uses, does not know
1136 that the terminal escape sequences do not take up space on the
1137 screen.  The redisplay code assumes, unless told otherwise, that
1138 each character in the prompt is a `printable' character that
1139 takes up one character position on the screen. 
1140
1141 You can use the bash prompt expansion facility (see the PROMPTING
1142 section in the manual page) to tell readline that sequences of
1143 characters in the prompt strings take up no screen space. 
1144
1145 Use the \[ escape to begin a sequence of non-printing characters,
1146 and the \] escape to signal the end of such a sequence. 
1147
1148 E4) If I pipe the output of a command into `read variable', why doesn't
1149     the output show up in $variable when the read command finishes?
1150
1151 This has to do with the parent-child relationship between Unix
1152 processes.  It affects all commands run in pipelines, not just
1153 simple calls to `read'.  For example, piping a command's output
1154 into a `while' loop that repeatedly calls `read' will result in
1155 the same behavior.
1156
1157 Each element of a pipeline, even a builtin or shell function,
1158 runs in a separate process, a child of the shell running the
1159 pipeline.  A subprocess cannot affect its parent's environment. 
1160 When the `read' command sets the variable to the input, that
1161 variable is set only in the subshell, not the parent shell.  When
1162 the subshell exits, the value of the variable is lost. 
1163
1164 Many pipelines that end with `read variable' can be converted
1165 into command substitutions, which will capture the output of
1166 a specified command.  The output can then be assigned to a
1167 variable:
1168
1169         grep ^gnu /usr/lib/news/active | wc -l | read ngroup
1170
1171 can be converted into
1172
1173         ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
1174
1175 This does not, unfortunately, work to split the text among
1176 multiple variables, as read does when given multiple variable
1177 arguments.  If you need to do this, you can either use the
1178 command substitution above to read the output into a variable
1179 and chop up the variable using the bash pattern removal
1180 expansion operators or use some variant of the following
1181 approach.
1182
1183 Say /usr/local/bin/ipaddr is the following shell script:
1184
1185 #! /bin/sh
1186 host `hostname` | awk '/address/ {print $NF}'
1187
1188 Instead of using
1189
1190         /usr/local/bin/ipaddr | read A B C D
1191
1192 to break the local machine's IP address into separate octets, use
1193
1194         OIFS="$IFS"
1195         IFS=.
1196         set -- $(/usr/local/bin/ipaddr)
1197         IFS="$OIFS"
1198         A="$1" B="$2" C="$3" D="$4"
1199
1200 Beware, however, that this will change the shell's positional
1201 parameters.  If you need them, you should save them before doing
1202 this.
1203
1204 This is the general approach -- in most cases you will not need to
1205 set $IFS to a different value.
1206
1207 Some other user-supplied alternatives include:
1208
1209 read A B C D << HERE
1210     $(IFS=.; echo $(/usr/local/bin/ipaddr))
1211 HERE
1212
1213 and, where process substitution is available,
1214
1215 read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
1216
1217 E5) I have a bunch of shell scripts that use backslash-escaped characters
1218     in arguments to `echo'.  Bash doesn't interpret these characters.  Why
1219     not, and how can I make it understand them?
1220
1221 This is the behavior of echo on most Unix System V machines.
1222
1223 The bash builtin `echo' is modeled after the 9th Edition
1224 Research Unix version of `echo'.  It does not interpret
1225 backslash-escaped characters in its argument strings by default;
1226 it requires the use of the -e option to enable the
1227 interpretation.  The System V echo provides no way to disable the
1228 special characters; the bash echo has a -E option to disable
1229 them. 
1230
1231 There is a configuration option that will make bash behave like
1232 the System V echo and interpret things like `\t' by default.  Run
1233 configure with the --enable-xpg-echo-default option to turn this
1234 on.  Be aware that this will cause some of the tests run when you
1235 type `make tests' to fail.
1236
1237 There is a shell option, `xpg_echo', settable with `shopt', that will
1238 change the behavior of echo at runtime.  Enabling this option turns
1239 on expansion of backslash-escape sequences.
1240
1241 E6) Why doesn't a while or for loop get suspended when I type ^Z?
1242
1243 This is a consequence of how job control works on Unix.  The only
1244 thing that can be suspended is the process group.  This is a single
1245 command or pipeline of commands that the shell forks and executes.
1246
1247 When you run a while or for loop, the only thing that the shell forks
1248 and executes are any commands in the while loop test and commands in
1249 the loop bodies.  These, therefore, are the only things that can be
1250 suspended when you type ^Z.
1251
1252 If you want to be able to stop the entire loop, you need to put it
1253 within parentheses, which will force the loop into a subshell that
1254 may be stopped (and subsequently restarted) as a single unit.
1255
1256 E7) What about empty for loops in Makefiles?
1257
1258 It's fairly common to see constructs like this in automatically-generated
1259 Makefiles:
1260
1261 SUBDIRS = @SUBDIRS@
1262
1263         ...
1264
1265 subdirs-clean:
1266         for d in ${SUBDIRS}; do \
1267                 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1268         done
1269
1270 When SUBDIRS is empty, this results in a command like this being passed to
1271 bash:
1272
1273         for d in ; do
1274                 ( cd $d && ${MAKE} ${MFLAGS} clean )
1275         done
1276
1277 In versions of bash before bash-2.05a, this was a syntax error.  If the
1278 reserved word `in' was present, a word must follow it before the semicolon
1279 or newline.  The language in the manual page referring to the list of words
1280 being empty referred to the list after it is expanded.  These versions of
1281 bash required that there be at least one word following the `in' when the
1282 construct was parsed.
1283
1284 The idiomatic Makefile solution is something like:
1285
1286 SUBDIRS = @SUBDIRS@
1287
1288 subdirs-clean:
1289         subdirs=$SUBDIRS ; for d in $$subdirs; do \
1290                 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1291         done
1292
1293 The latest updated POSIX standard has changed this:  the word list
1294 is no longer required.  Bash versions 2.05a and later accept the
1295 new syntax.
1296
1297 E8) Why does the arithmetic evaluation code complain about `08'?
1298
1299 The bash arithmetic evaluation code (used for `let', $(()), (()), and in
1300 other places), interprets a leading `0' in numeric constants as denoting
1301 an octal number, and a leading `0x' as denoting hexadecimal.  This is
1302 in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
1303 arithmetic constants should be handled as signed long integers as defined
1304 by the ANSI/ISO C standard.
1305
1306 The POSIX.2 interpretation committee has confirmed this:
1307
1308 http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
1309
1310 E9) Why does the pattern matching expression [A-Z]* match files beginning
1311     with every letter except `z'?
1312
1313 Bash-2.03, Bash-2.05 and later versions honor the current locale setting
1314 when processing ranges within pattern matching bracket expressions ([A-Z]). 
1315 This is what POSIX.2 and SUSv3/XPG6 specify. 
1316
1317 The behavior of the matcher in bash-2.05 and later versions depends on the
1318 current LC_COLLATE setting.  Setting this variable to `C' or `POSIX' will
1319 result in the traditional behavior ([A-Z] matches all uppercase ASCII
1320 characters).  Many other locales, including the en_US locale (the default
1321 on many US versions of Linux) collate the upper and lower case letters like
1322 this:
1323
1324         AaBb...Zz
1325
1326 which means that [A-Z] matches every letter except `z'.  Others collate like
1327
1328         aAbBcC...zZ
1329
1330 which means that [A-Z] matches every letter except `a'.
1331
1332 The portable way to specify upper case letters is [:upper:] instead of
1333 A-Z; lower case may be specified as [:lower:] instead of a-z.
1334
1335 Look at the manual pages for setlocale(3), strcoll(3), and, if it is
1336 present, locale(1).  If you have locale(1), you can use it to find
1337 your current locale information even if you do not have any of the
1338 LC_ variables set.
1339
1340 My advice is to put
1341
1342         export LC_COLLATE=C
1343
1344 into /etc/profile and inspect any shell scripts run from cron for
1345 constructs like [A-Z].  This will prevent things like
1346
1347         rm [A-Z]*
1348
1349 from removing every file in the current directory except those beginning
1350 with `z' and still allow individual users to change the collation order.
1351 Users may put the above command into their own profiles as well, of course.
1352
1353 E10) Why does `cd //' leave $PWD as `//'?
1354
1355 POSIX.2, in its description of `cd', says that *three* or more leading
1356 slashes may be replaced with a single slash when canonicalizing the
1357 current working directory.
1358
1359 This is, I presume, for historical compatibility.  Certain versions of
1360 Unix, and early network file systems, used paths of the form
1361 //hostname/path to access `path' on server `hostname'.
1362
1363 E11) If I resize my xterm while another program is running, why doesn't bash
1364      notice the change?
1365
1366 This is another issue that deals with job control.
1367
1368 The kernel maintains a notion of a current terminal process group.  Members
1369 of this process group (processes whose process group ID is equal to the
1370 current terminal process group ID) receive terminal-generated signals like
1371 SIGWINCH.  (For more details, see the JOB CONTROL section of the bash
1372 man page.)
1373
1374 If a terminal is resized, the kernel sends SIGWINCH to each member of
1375 the terminal's current process group (the `foreground' process group).
1376
1377 When bash is running with job control enabled, each pipeline (which may be
1378 a single command) is run in its own process group, different from bash's
1379 process group.  This foreground process group receives the SIGWINCH; bash
1380 does not.  Bash has no way of knowing that the terminal has been resized.
1381
1382 There is a `checkwinsize' option, settable with the `shopt' builtin, that
1383 will cause bash to check the window size and adjust its idea of the
1384 terminal's dimensions each time a process stops or exits and returns control
1385 of the terminal to bash.  Enable it with `shopt -s checkwinsize'.
1386
1387 E12) Why don't negative offsets in substring expansion work like I expect?
1388
1389 When substring expansion of the form ${param:offset[:length} is used,
1390 an `offset' that evaluates to a number less than zero counts back from
1391 the end of the expanded value of $param.
1392
1393 When a negative `offset' begins with a minus sign, however, unexpected things
1394 can happen.  Consider
1395
1396         a=12345678
1397         echo ${a:-4}
1398
1399 intending to print the last four characters of $a.  The problem is that
1400 ${param:-word} already has a well-defined meaning: expand to word if the
1401 expanded value of param is unset or null, and $param otherwise.
1402
1403 To use negative offsets that begin with a minus sign, separate the
1404 minus sign and the colon with a space.
1405
1406 E13) Why does filename completion misbehave if a colon appears in the filename?
1407
1408 Filename completion (and word completion in general) may appear to behave
1409 improperly if there is a colon in the word to be completed.
1410
1411 The colon is special to readline's word completion code:  it is one of the
1412 characters that breaks words for the completer.  Readline uses these characters
1413 in sort of the same way that bash uses $IFS: they break or separate the words
1414 the completion code hands to the application-specific or default word
1415 completion functions.  The original intent was to make it easy to edit
1416 colon-separated lists (such as $PATH in bash) in various applications using
1417 readline for input.
1418
1419 This is complicated by the fact that some versions of the popular
1420 `bash-completion' programmable completion package have problems with the
1421 default completion behavior in the presence of colons.  
1422
1423 The current set of completion word break characters is available in bash as
1424 the value of the COMP_WORDBREAKS variable.  Removing `:' from that value is
1425 enough to make the colon not special to completion:
1426
1427 COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
1428
1429 You can also quote the colon with a backslash to achieve the same result
1430 temporarily.
1431
1432 E14) Why does quoting the pattern argument to the regular expression matching
1433      conditional operator (=~) cause regexp matching to stop working?
1434
1435 In versions of bash prior to bash-3.2, the effect of quoting the regular
1436 expression argument to the [[ command's =~ operator was not specified.
1437 The practical effect was that double-quoting the pattern argument required
1438 backslashes to quote special pattern characters, which interfered with the
1439 backslash processing performed by double-quoted word expansion and was
1440 inconsistent with how the == shell pattern matching operator treated
1441 quoted characters.
1442
1443 In bash-3.2, the shell was changed to internally quote characters in single-
1444 and double-quoted string arguments to the =~ operator, which suppresses the
1445 special meaning of the characters special to regular expression processing
1446 (`.', `[', `\', `(', `), `*', `+', `?', `{', `|', `^', and `$') and forces
1447 them to be matched literally.  This is consistent with how the `==' pattern
1448 matching operator treats quoted portions of its pattern argument.
1449
1450 Since the treatment of quoted string arguments was changed, several issues
1451 have arisen, chief among them the problem of white space in pattern arguments
1452 and the differing treatment of quoted strings between bash-3.1 and bash-3.2.
1453 Both problems may be solved by using a shell variable to hold the pattern.
1454 Since word splitting is not performed when expanding shell variables in all
1455 operands of the [[ command, this allows users to quote patterns as they wish
1456 when assigning the variable, then expand the values to a single string that
1457 may contain whitespace.  The first problem may be solved by using backslashes
1458 or any other quoting mechanism to escape the white space in the patterns.
1459
1460 Section F:  Things to watch out for on certain Unix versions
1461
1462 F1) Why can't I use command line editing in my `cmdtool'?
1463
1464 The problem is `cmdtool' and bash fighting over the input.  When
1465 scrolling is enabled in a cmdtool window, cmdtool puts the tty in
1466 `raw mode' to permit command-line editing using the mouse for
1467 applications that cannot do it themselves.  As a result, bash and
1468 cmdtool each try to read keyboard input immediately, with neither
1469 getting enough of it to be useful.
1470
1471 This mode also causes cmdtool to not implement many of the
1472 terminal functions and control sequences appearing in the
1473 `sun-cmd' termcap entry.  For a more complete explanation, see
1474 that file examples/suncmd.termcap in the bash distribution. 
1475
1476 `xterm' is a better choice, and gets along with bash much more
1477 smoothly.
1478
1479 If you must use cmdtool, you can use the termcap description in
1480 examples/suncmd.termcap.  Set the TERMCAP variable to the terminal
1481 description contained in that file, i.e.
1482
1483 TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
1484
1485 Then export TERMCAP and start a new cmdtool window from that shell.
1486 The bash command-line editing should behave better in the new
1487 cmdtool.  If this works, you can put the assignment to TERMCAP
1488 in your bashrc file.
1489
1490 F2) I built bash on Solaris 2.  Why do globbing expansions and filename
1491     completion chop off the first few characters of each filename?
1492
1493 This is the consequence of building bash on SunOS 5 and linking
1494 with the libraries in /usr/ucblib, but using the definitions
1495 and structures from files in /usr/include. 
1496
1497 The actual conflict is between the dirent structure in
1498 /usr/include/dirent.h and the struct returned by the version of
1499 `readdir' in libucb.a (a 4.3-BSD style `struct direct'). 
1500
1501 Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
1502 when configuring and building bash.  This will ensure that you
1503 use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
1504 link with libc before libucb. 
1505
1506 If you have installed the Sun C compiler, you may also need to
1507 put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
1508 /usr/ucb.
1509
1510 F3) Why does bash dump core after I interrupt username completion or
1511     `~user' tilde expansion on a machine running NIS?
1512
1513 This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
1514 client library, which is part of libc.
1515
1516 The YP library code keeps static state -- a pointer into the data
1517 returned from the server.  When YP initializes itself (setpwent),
1518 it looks at this pointer and calls free on it if it's non-null. 
1519 So far, so good. 
1520
1521 If one of the YP functions is interrupted during getpwent (the
1522 exact function is interpretwithsave()), and returns NULL, the
1523 pointer is freed without being reset to NULL, and the function
1524 returns.  The next time getpwent is called, it sees that this
1525 pointer is non-null, calls free, and the bash free() blows up
1526 because it's being asked to free freed memory. 
1527
1528 The traditional Unix mallocs allow memory to be freed multiple
1529 times; that's probably why this has never been fixed.  You can
1530 run configure with the `--without-gnu-malloc' option to use
1531 the C library malloc and avoid the problem.
1532
1533 F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
1534
1535 The `@' character is the default `line kill' character in most
1536 versions of System V, including SVR4.2.  You can change this
1537 character to whatever you want using `stty'.  For example, to
1538 change the line kill character to control-u, type
1539
1540         stty kill ^U
1541
1542 where the `^' and `U' can be two separate characters.
1543
1544 F5) Why does bash report syntax errors when my C News scripts use a
1545     redirection before a subshell command?
1546
1547 The actual command in question is something like
1548
1549         < file ( command )
1550
1551 According to the grammar given in the POSIX.2 standard, this construct
1552 is, in fact, a syntax error.  Redirections may only precede `simple
1553 commands'.  A subshell construct such as the above is one of the shell's
1554 `compound commands'.  A redirection may only follow a compound command.
1555
1556 This affects the mechanical transformation of commands that use `cat'
1557 to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
1558 comp.unix.shell).  While most commands of the form
1559
1560         cat file | command
1561
1562 can be converted to `< file command', shell control structures such as
1563 loops and subshells require `command < file'.
1564
1565 The file CWRU/sh-redir-hack in the bash distribution is an
1566 (unofficial) patch to parse.y that will modify the grammar to
1567 support this construct.  It will not apply with `patch'; you must
1568 modify parse.y by hand.  Note that if you apply this, you must
1569 recompile with -DREDIRECTION_HACK.  This introduces a large
1570 number of reduce/reduce conflicts into the shell grammar. 
1571
1572 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
1573
1574 The short answer is that Red Hat screwed up.
1575
1576 The long answer is that they shipped an /etc/inputrc that only works
1577 for emacs mode editing, and then screwed all the vi users by setting
1578 INPUTRC to /etc/inputrc in /etc/profile.
1579
1580 The short fix is to do one of the following: remove or rename
1581 /etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
1582 but make sure you export it if you do), remove the assignment to
1583 INPUTRC from /etc/profile, add
1584
1585         set keymap emacs
1586
1587 to the beginning of /etc/inputrc, or bracket the key bindings in
1588 /etc/inputrc with these lines
1589
1590         $if mode=emacs
1591                 [...]
1592         $endif
1593
1594 F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
1595     HP/UX 11.x?
1596
1597 HP/UX's support for long double is imperfect at best.
1598
1599 GCC will support it without problems, but the HP C library functions
1600 like strtold(3) and printf(3) don't actually work with long doubles.
1601 HP implemented a `long_double' type as a 4-element array of 32-bit
1602 ints, and that is what the library functions use.  The ANSI C
1603 `long double' type is a 128-bit floating point scalar.
1604
1605 The easiest fix, until HP fixes things up, is to edit the generated
1606 config.h and #undef the HAVE_LONG_DOUBLE line.  After doing that,
1607 the compilation should complete successfully.
1608
1609 Section G:  How can I get bash to do certain common things?
1610
1611 G1) How can I get bash to read and display eight-bit characters?
1612
1613 This is a process requiring several steps.
1614
1615 First, you must ensure that the `physical' data path is a full eight
1616 bits.  For xterms, for example, the `vt100' resources `eightBitInput'
1617 and `eightBitOutput' should be set to `true'.
1618
1619 Once you have set up an eight-bit path, you must tell the kernel and
1620 tty driver to leave the eighth bit of characters alone when processing
1621 keyboard input.  Use `stty' to do this:
1622
1623         stty cs8 -istrip -parenb
1624
1625 For old BSD-style systems, you can use
1626
1627         stty pass8
1628
1629 You may also need
1630
1631         stty even odd
1632
1633 Finally, you need to tell readline that you will be inputting and
1634 displaying eight-bit characters.  You use readline variables to do
1635 this.  These variables can be set in your .inputrc or using the bash
1636 `bind' builtin.  Here's an example using `bind':
1637
1638         bash$ bind 'set convert-meta off'
1639         bash$ bind 'set meta-flag on'
1640         bash$ bind 'set output-meta on'
1641
1642 The `set' commands between the single quotes may also be placed
1643 in ~/.inputrc.
1644
1645 The script examples/scripts.noah/meta.bash encapsulates the bind
1646 commands in a shell function.
1647
1648 G2) How do I write a function `x' to replace builtin command `x', but
1649     still invoke the command from within the function?
1650
1651 This is why the `command' and `builtin' builtins exist.  The
1652 `command' builtin executes the command supplied as its first
1653 argument, skipping over any function defined with that name.  The
1654 `builtin' builtin executes the builtin command given as its first
1655 argument directly. 
1656
1657 For example, to write a function to replace `cd' that writes the
1658 hostname and current directory to an xterm title bar, use
1659 something like the following:
1660
1661         cd()
1662         {
1663                 builtin cd "$@" && xtitle "$HOST: $PWD"
1664         }
1665
1666 This could also be written using `command' instead of `builtin';
1667 the version above is marginally more efficient. 
1668
1669 G3) How can I find the value of a shell variable whose name is the value
1670     of another shell variable?
1671
1672 Versions of Bash newer than Bash-2.0 support this directly.  You can use 
1673
1674         ${!var}
1675
1676 For example, the following sequence of commands will echo `z':
1677
1678         var1=var2
1679         var2=z
1680         echo ${!var1}
1681
1682 For sh compatibility, use the `eval' builtin.  The important
1683 thing to remember is that `eval' expands the arguments you give
1684 it again, so you need to quote the parts of the arguments that
1685 you want `eval' to act on. 
1686
1687 For example, this expression prints the value of the last positional
1688 parameter:
1689
1690         eval echo \"\$\{$#\}\"
1691
1692 The expansion of the quoted portions of this expression will be
1693 deferred until `eval' runs, while the `$#' will be expanded
1694 before `eval' is executed.  In versions of bash later than bash-2.0,
1695
1696         echo ${!#}
1697
1698 does the same thing.
1699
1700 This is not the same thing as ksh93 `nameref' variables, though the syntax
1701 is similar.  I may add namerefs in a future bash version.
1702
1703 G4) How can I make the bash `time' reserved word print timing output that
1704      looks like the output from my system's /usr/bin/time?
1705
1706 The bash command timing code looks for a variable `TIMEFORMAT' and
1707 uses its value as a format string to decide how to display the
1708 timing statistics.
1709
1710 The value of TIMEFORMAT is a string with `%' escapes expanded in a
1711 fashion similar in spirit to printf(3).  The manual page explains
1712 the meanings of the escape sequences in the format string.
1713
1714 If TIMEFORMAT is not set, bash acts as if the following assignment had
1715 been performed:
1716
1717         TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
1718
1719 The POSIX.2 default time format (used by `time -p command') is
1720
1721         TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
1722
1723 The BSD /usr/bin/time format can be emulated with:
1724
1725         TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
1726
1727 The System V /usr/bin/time format can be emulated with:
1728
1729         TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
1730
1731 The ksh format can be emulated with:
1732
1733         TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
1734
1735 G5) How do I get the current directory into my prompt?
1736
1737 Bash provides a number of backslash-escape sequences which are expanded
1738 when the prompt string (PS1 or PS2) is displayed.  The full list is in
1739 the manual page.
1740
1741 The \w expansion gives the full pathname of the current directory, with
1742 a tilde (`~') substituted for the current value of $HOME.  The \W
1743 expansion gives the basename of the current directory.  To put the full
1744 pathname of the current directory into the path without any tilde
1745 subsitution, use $PWD.  Here are some examples:
1746
1747         PS1='\w$ '      # current directory with tilde
1748         PS1='\W$ '      # basename of current directory
1749         PS1='$PWD$ '    # full pathname of current directory
1750
1751 The single quotes are important in the final example to prevent $PWD from
1752 being expanded when the assignment to PS1 is performed.
1753
1754 G6) How can I rename "*.foo" to "*.bar"?
1755
1756 Use the pattern removal functionality described in D3.  The following `for'
1757 loop will do the trick:
1758
1759         for f in *.foo; do
1760                 mv $f ${f%foo}bar
1761         done
1762
1763 G7) How can I translate a filename from uppercase to lowercase?
1764
1765 The script examples/functions/lowercase, originally written by John DuBois,
1766 will do the trick.  The converse is left as an exercise.
1767
1768 G8) How can I write a filename expansion (globbing) pattern that will match
1769     all files in the current directory except "." and ".."?
1770
1771 You must have set the `extglob' shell option using `shopt -s extglob' to use
1772 this:
1773
1774         echo .!(.|) *
1775
1776 A solution that works without extended globbing is given in the Unix Shell
1777 FAQ, posted periodically to comp.unix.shell.  It's a variant of
1778
1779         echo .[!.]* ..?* *
1780
1781 (The ..?* catches files with names of three or more characters beginning
1782 with `..')
1783
1784 Section H:  Where do I go from here?
1785
1786 H1) How do I report bugs in bash, and where should I look for fixes and
1787     advice?
1788
1789 Use the `bashbug' script to report bugs.  It is built and
1790 installed at the same time as bash.  It provides a standard
1791 template for reporting a problem and automatically includes
1792 information about your configuration and build environment. 
1793
1794 `bashbug' sends its reports to bug-bash@gnu.org, which
1795 is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. 
1796
1797 Bug fixes, answers to questions, and announcements of new releases
1798 are all posted to gnu.bash.bug.  Discussions concerning bash features
1799 and problems also take place there.
1800
1801 To reach the bash maintainers directly, send mail to
1802 bash-maintainers@gnu.org.
1803
1804 H2) What kind of bash documentation is there?
1805
1806 First, look in the doc directory in the bash distribution.  It should
1807 contain at least the following files:
1808
1809 bash.1          an extensive, thorough Unix-style manual page
1810 builtins.1      a manual page covering just bash builtin commands
1811 bashref.texi    a reference manual in GNU tex`info format
1812 bashref.info    an info version of the reference manual
1813 FAQ             this file
1814 article.ms      text of an article written for The Linux Journal
1815 readline.3      a man page describing readline
1816
1817 Postscript, HTML, and ASCII files created from the above source are
1818 available in the documentation distribution.
1819
1820 There is additional documentation available for anonymous FTP from host
1821 ftp.cwru.edu in the `pub/bash' directory.
1822
1823 Cameron Newham and Bill Rosenblatt have written a book on bash, published
1824 by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn
1825 Shell book.  The title is ``Learning the Bash Shell'', and the ISBN number
1826 of the third edition, published in March, 2005, is 0-596-00965-8.  Look for
1827 it in fine bookstores near you.  This edition of the book has been updated
1828 to cover bash-3.0.
1829
1830 The GNU Bash Reference Manual has been published as a printed book by
1831 Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Nov. 2006).  It covers
1832 bash-3.2 and is available from most online bookstores (see
1833 http://www.network-theory.co.uk/bash/manual/ for details).  The publisher
1834 will donate $1 to the Free Software Foundation for each copy sold. 
1835
1836 Arnold Robbins and Nelson Beebe have written ``Classic Shell Scripting'',
1837 published by O'Reilly.  The first edition, with ISBN number 0-596-00595-4,
1838 was published in May, 2005.
1839
1840 Chris F. A. Johnson, a frequent contributor to comp.unix.shell and
1841 gnu.bash.bug, has written ``Shell Scripting Recipes: A Problem-Solution
1842 Approach,'' a new book on shell scripting, concentrating on features of
1843 the POSIX standard helpful to shell script writers.  The first edition from
1844 Apress, with ISBN number 1-59059-471-1, was published in May, 2005.
1845
1846 H3) What's coming in future versions?
1847
1848 These are features I hope to include in a future version of bash.
1849
1850 Rocky Bernstein's bash debugger (support is included with bash-3.0)
1851 associative arrays
1852 co-processes, but with a new-style syntax that looks like function declaration
1853
1854 H4) What's on the bash `wish list' for future versions?
1855
1856 These are features that may or may not appear in a future version of bash.
1857
1858 breaking some of the shell functionality into embeddable libraries
1859 a module system like zsh's, using dynamic loading like builtins
1860 a bash programmer's guide with a chapter on creating loadable builtins
1861 a better loadable interface to perl with access to the shell builtins and
1862         variables (contributions gratefully accepted)
1863 ksh93-like `nameref' variables
1864 ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
1865         associated disipline functions
1866 Some of the new ksh93 pattern matching operators, like backreferencing
1867
1868 H5) When will the next release appear?
1869
1870 The next version will appear sometime in 2007.  Never make predictions. 
1871
1872 This document is Copyright 1995-2006 by Chester Ramey.
1873
1874 Permission is hereby granted, without written agreement and
1875 without license or royalty fees, to use, copy, and distribute
1876 this document for any purpose, provided that the above copyright
1877 notice appears in all copies of this document and that the
1878 contents of this document remain unaltered.