Bash-4.1 distribution source
[platform/upstream/bash.git] / doc / FAQ
1 This is the Bash FAQ, version 4.11, for Bash version 4.1.
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 4.1?
40 B2) Are there any user-visible incompatibilities between bash-4.1 and
41     previous bash versions?
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 E15) Tell me more about the shell compatibility level.
85
86 Section F:  Things to watch out for on certain Unix versions
87
88 F1) Why can't I use command line editing in my `cmdtool'?
89 F2) I built bash on Solaris 2.  Why do globbing expansions and filename
90     completion chop off the first few characters of each filename?
91 F3) Why does bash dump core after I interrupt username completion or
92     `~user' tilde expansion on a machine running NIS?
93 F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
94 F5) Why does bash report syntax errors when my C News scripts use a
95     redirection before a subshell command?
96 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
97 F7) Why do bash-2.05a and  bash-2.05b fail to compile `printf.def' on
98     HP/UX 11.x?
99
100 Section G:  How can I get bash to do certain common things?
101
102 G1) How can I get bash to read and display eight-bit characters?
103 G2) How do I write a function `x' to replace builtin command `x', but
104     still invoke the command from within the function?
105 G3) How can I find the value of a shell variable whose name is the value
106     of another shell variable?
107 G4) How can I make the bash `time' reserved word print timing output that
108     looks like the output from my system's /usr/bin/time?
109 G5) How do I get the current directory into my prompt?
110 G6) How can I rename "*.foo" to "*.bar"?
111 G7) How can I translate a filename from uppercase to lowercase?
112 G8) How can I write a filename expansion (globbing) pattern that will match
113     all files in the current directory except "." and ".."?
114
115 Section H:  Where do I go from here?
116
117 H1) How do I report bugs in bash, and where should I look for fixes and
118     advice?
119 H2) What kind of bash documentation is there?
120 H3) What's coming in future versions?
121 H4) What's on the bash `wish list'?
122 H5) When will the next release appear?
123
124 ----------
125 Section A:  The Basics
126
127 A1)  What is it?
128
129 Bash is a Unix command interpreter (shell).  It is an implementation of
130 the Posix 1003.2 shell standard, and resembles the Korn and System V
131 shells.
132
133 Bash contains a number of enhancements over those shells, both
134 for interactive use and shell programming.  Features geared
135 toward interactive use include command line editing, command
136 history, job control, aliases, and prompt expansion.  Programming
137 features include additional variable expansions, shell
138 arithmetic, and a number of variables and options to control
139 shell behavior.
140
141 Bash was originally written by Brian Fox of the Free Software
142 Foundation.  The current developer and maintainer is Chet Ramey
143 of Case Western Reserve University.
144
145 A2)  What's the latest version?
146
147 The latest version is 4.1, first made available on 31 December, 2009.
148
149 A3)  Where can I get it?
150
151 Bash is the GNU project's shell, and so is available from the
152 master GNU archive site, ftp.gnu.org, and its mirrors.  The
153 latest version is also available for FTP from ftp.cwru.edu.
154 The following URLs tell how to get version 4.1:
155
156 ftp://ftp.gnu.org/pub/gnu/bash/bash-4.1.tar.gz
157 ftp://ftp.cwru.edu/pub/bash/bash-4.1.tar.gz
158
159 Formatted versions of the documentation are available with the URLs:
160
161 ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-4.1.tar.gz
162 ftp://ftp.cwru.edu/pub/bash/bash-doc-4.1.tar.gz
163
164 Any patches for the current version are available with the URL:
165
166 ftp://ftp.cwru.edu/pub/bash/bash-4.1-patches/
167
168 A4)  On what machines will bash run?
169
170 Bash has been ported to nearly every version of Unix.  All you
171 should have to do to build it on a machine for which a port
172 exists is to type `configure' and then `make'.  The build process
173 will attempt to discover the version of Unix you have and tailor
174 itself accordingly, using a script created by GNU autoconf.
175
176 More information appears in the file `INSTALL' in the distribution.
177
178 The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
179 explains how to obtain binary versions of bash for most of the major
180 commercial Unix systems.
181
182 A5) Will bash run on operating systems other than Unix?
183
184 Configuration specifics for Unix-like systems such as QNX and
185 LynxOS are included in the distribution.  Bash-2.05 and later
186 versions should compile and run on Minix 2.0 (patches were
187 contributed), but I don't believe anyone has built bash-2.x on
188 earlier Minix versions yet. 
189
190 Bash has been ported to versions of Windows implementing the Win32
191 programming interface.  This includes Windows 95 and Windows NT.
192 The port was done by Cygnus Solutions (now part of Red Hat) as part
193 of their CYGWIN project.  For more information about the project, see
194 http://www.cygwin.com/.
195
196 Cygnus originally ported bash-1.14.7, and that port was part of their
197 early GNU-Win32 (the original name) releases.  Cygnus has also done
198 ports of bash-3.2 and bash-4.0 to the CYGWIN environment, and both
199 are available as part of their current release.
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-4.1, but will gladly accept any patches that are needed.
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 4.1?
392
393 Bash-4.1 is the first revision to the fourth major release of bash.
394
395 Bash-4.1 contains the following new features (see the manual page for
396 complete descriptions and the CHANGES and NEWS files in the bash-4.1
397 distribution):
398
399 o   Here-documents within $(...) command substitutions may once more be
400     delimited by the closing right paren, instead of requiring a newline.
401
402 o   Bash's file status checks (executable, readable, etc.) now take file
403     system ACLs into account on file systems that support them.
404
405 o   Bash now passes environment variables with names that are not valid
406     shell variable names through into the environment passed to child
407     processes.
408
409 o   The `execute-unix-command' readline function now attempts to clear and
410     reuse the current line rather than move to a new one after the command
411     executes.
412
413 o   `printf -v' can now assign values to array indices.
414
415 o   New `complete -E' and `compopt -E' options that work on the "empty"
416     completion: completion attempted on an empty command line.
417
418 o   New complete/compgen/compopt -D option to define a `default' completion:
419     a completion to be invoked on command for which no completion has been
420     defined.  If this function returns 124, programmable completion is
421     attempted again, allowing a user to dynamically build a set of completions
422     as completion is attempted by having the default completion function
423     install individual completion functions each time it is invoked.
424
425 o   When displaying associative arrays, subscripts are now quoted.
426
427 o   Changes to dabbrev-expand to make it more `emacs-like': no space appended
428     after matches, completions are not sorted, and most recent history entries
429     are presented first.
430
431 o   The [[ and (( commands are now subject to the setting of `set -e' and the
432     ERR trap.
433
434 o   The source/. builtin now removes NUL bytes from the file before attempting
435     to parse commands.
436
437 o   There is a new configuration option (in config-top.h) that forces bash to
438     forward all history entries to syslog.
439
440 o   A new variable $BASHOPTS to export shell options settable using `shopt' to
441     child processes.
442
443 o   There is a new confgure option that forces the extglob option to be
444     enabled by default.
445
446 o   New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
447     output to that file descriptor.
448
449 o   If the optional left-hand-side of a redirection is of the form {var}, the
450     shell assigns the file descriptor used to $var or uses $var as the file
451     descriptor to move or close, depending on the redirection operator.
452
453 o   The < and > operators to the [[ conditional command now do string
454     comparison according to the current locale.
455
456 o   Programmable completion now uses the completion for `b' instead of `a'
457     when completion is attempted on a line like: a $(b c.
458
459 o   Force extglob on temporarily when parsing the pattern argument to
460     the == and != operators to the [[ command, for compatibility.
461
462 o   Changed the behavior of interrupting the wait builtin when a SIGCHLD is
463     received and a trap on SIGCHLD is set to be Posix-mode only.
464
465 o   The read builtin has a new `-N nchars' option, which reads exactly NCHARS
466     characters, ignoring delimiters like newline.
467
468 o   The mapfile/readarray builtin no longer stores the commands it invokes via
469     callbacks in the history list.
470
471 o   There is a new `compat40' shopt option.
472
473 o   The < and > operators to [[ do string comparisons using the current locale
474     only if the compatibility level is greater than 40 (set to 41 by default).
475
476 o   New bindable readline function: menu-complete-backward.
477
478 o   In the readline vi-mode insertion keymap, C-n is now bound to menu-complete
479     by default, and C-p to menu-complete-backward.
480
481 o   When in readline vi command mode, repeatedly hitting ESC now does nothing,
482     even when ESC introduces a bound key sequence.  This is closer to how
483     historical vi behaves.
484
485 o   New bindable readline function: skip-csi-sequence.  Can be used as a
486     default to consume key sequences generated by keys like Home and End
487     without having to bind all keys.
488
489 o   New bindable readline variable: skip-completed-text, active when
490     completing in the middle of a word.  If enabled, it means that characters
491     in the completion that match characters in the remainder of the word are
492     "skipped" rather than inserted into the line.
493
494 o   The pre-readline-6.0 version of menu completion is available as
495     "old-menu-complete" for users who do not like the readline-6.0 version.
496
497 o   New bindable readline variable: echo-control-characters.  If enabled, and
498     the tty ECHOCTL bit is set, controls the echoing of characters
499     corresponding to keyboard-generated signals.
500
501 o   New bindable readline variable: enable-meta-key.  Controls whether or not
502     readline sends the smm/rmm sequences if the terminal indicates it has a
503     meta key that enables eight-bit characters.
504
505 A short feature history dating from Bash-2.0:
506
507 Bash-4.0 contained the following new features:
508
509 o   When using substring expansion on the positional parameters, a starting
510     index of 0 now causes $0 to be prefixed to the list.
511
512 o   There is a new variable, $BASHPID, which always returns the process id of
513     the current shell.
514
515 o   There is a new `autocd' option that, when enabled, causes bash to attempt
516     to `cd' to a directory name that is supplied as the first word of a
517     simple command.
518
519 o   There is a new `checkjobs' option that causes the shell to check for and
520     report any running or stopped jobs at exit.
521
522 o   The programmable completion code exports a new COMP_TYPE variable, set to
523     a character describing the type of completion being attempted.
524
525 o   The programmable completion code exports a new COMP_KEY variable, set to
526     the character that caused the completion to be invoked (e.g., TAB).
527
528 o   The programmable completion code now uses the same set of characters as
529     readline when breaking the command line into a list of words.
530
531 o   The block multiplier for the ulimit -c and -f options is now 512 when in
532     Posix mode, as Posix specifies.
533
534 o   Changed the behavior of the read builtin to save any partial input received
535     in the specified variable when the read builtin times out.  This also
536     results in variables specified as arguments to read to be set to the empty
537     string when there is no input available.  When the read builtin times out,
538     it returns an exit status greater than 128.
539
540 o   The shell now has the notion of a `compatibility level', controlled by
541     new variables settable by `shopt'.  Setting this variable currently
542     restores the bash-3.1 behavior when processing quoted strings on the rhs
543     of the `=~' operator to the `[[' command.
544
545 o   The `ulimit' builtin now has new -b (socket buffer size) and -T (number
546     of threads) options.
547
548 o   There is a new `compopt' builtin that allows completion functions to modify
549     completion options for existing completions or the completion currently
550     being executed.
551
552 o   The `read' builtin has a new -i option which inserts text into the reply
553     buffer when using readline.
554
555 o   A new `-E' option to the complete builtin allows control of the default
556     behavior for completion on an empty line.
557
558 o   There is now limited support for completing command name words containing
559     globbing characters.
560
561 o   The `help' builtin now has a new -d option, to display a short description,
562     and a -m option, to print help information in a man page-like format.
563
564 o   There is a new `mapfile' builtin to populate an array with lines from a
565     given file.
566
567 o   If a command is not found, the shell attempts to execute a shell function
568     named `command_not_found_handle', supplying the command words as the
569     function arguments.
570
571 o   There is a new shell option: `globstar'.  When enabled, the globbing code
572     treats `**' specially -- it matches all directories (and files within
573     them, when appropriate) recursively.
574
575 o   There is a new shell option: `dirspell'.  When enabled, the filename
576     completion code performs spelling correction on directory names during
577     completion.
578
579 o   The `-t' option to the `read' builtin now supports fractional timeout
580     values.
581
582 o   Brace expansion now allows zero-padding of expanded numeric values and
583     will add the proper number of zeroes to make sure all values contain the
584     same number of digits.
585
586 o   There is a new bash-specific bindable readline function: `dabbrev-expand'.
587     It uses menu completion on a set of words taken from the history list.
588
589 o   The command assigned to a key sequence with `bind -x' now sets two new
590     variables in the environment of the executed command:  READLINE_LINE_BUFFER
591     and READLINE_POINT.  The command can change the current readline line
592     and cursor position by modifying READLINE_LINE_BUFFER and READLINE_POINT,
593     respectively.
594
595 o   There is a new >>& redirection operator, which appends the standard output
596     and standard error to the named file.
597
598 o   The parser now understands `|&' as a synonym for `2>&1 |', which redirects
599     the standard error for a command through a pipe.
600
601 o   The new `;&' case statement action list terminator causes execution to
602     continue with the action associated with the next pattern in the
603     statement rather than terminating the command.
604
605 o   The new `;;&' case statement action list terminator causes the shell to
606     test the next set of patterns after completing execution of the current
607     action, rather than terminating the command.
608
609 o   The shell understands a new variable: PROMPT_DIRTRIM.  When set to an
610     integer value greater than zero, prompt expansion of \w and \W  will
611     retain only that number of trailing pathname components and replace
612     the intervening characters with `...'.
613
614 o   There are new case-modifying word expansions: uppercase (^[^]) and
615     lowercase (,[,]).  They can work on either the first character or
616     array element, or globally.  They accept an optional shell pattern
617     that determines which characters to modify.  There is an optionally-
618     configured feature to include capitalization operators.
619
620 o   The shell provides associative array variables, with the appropriate
621     support to create, delete, assign values to, and expand them.
622
623 o   The `declare' builtin now has new -l (convert value to lowercase upon
624     assignment) and -u (convert value to uppercase upon assignment) options.
625     There is an optionally-configurable -c option to capitalize a value at
626     assignment.
627
628 o   There is a new `coproc' reserved word that specifies a coprocess: an
629     asynchronous command run with two pipes connected to the creating shell.
630     Coprocs can be named.  The input and output file descriptors and the
631     PID of the coprocess are available to the calling shell in variables
632     with coproc-specific names.
633
634 o   A value of 0 for the -t option to `read' now returns success if there is
635     input available to be read from the specified file descriptor.
636
637 o   CDPATH and GLOBIGNORE are ignored when the shell is running in privileged
638     mode.
639
640 o   New bindable readline functions shell-forward-word and shell-backward-word,
641     which move forward and backward words delimited by shell metacharacters
642     and honor shell quoting.
643
644 o   New bindable readline functions shell-backward-kill-word and shell-kill-word
645     which kill words backward and forward, but use the same word boundaries
646     as shell-forward-word and shell-backward-word.
647
648 Bash-3.2 contained the following new features:
649
650 o Bash-3.2 now checks shell scripts for NUL characters rather than non-printing
651   characters when deciding whether or not a script is a binary file.
652
653 o Quoting the string argument to the [[ command's  =~ (regexp) operator now
654   forces string matching, as with the other pattern-matching operators.
655
656 Bash-3.1 contained the following new features:
657
658 o Bash-3.1 may now be configured and built in a mode that enforces strict
659   POSIX compliance.
660
661 o The `+=' assignment operator, which appends to the value of a string or
662   array variable, has been implemented.
663
664 o It is now possible to ignore case when matching in contexts other than
665   filename generation using the new `nocasematch' shell option.
666
667 Bash-3.0 contained the following new features:
668
669 o Features to support the bash debugger have been implemented, and there
670   is a new `extdebug' option to turn the non-default options on
671
672 o HISTCONTROL is now a colon-separated list of options and has been
673   extended with a new `erasedups' option that will result in only one
674   copy of a command being kept in the history list
675
676 o Brace expansion has been extended with a new {x..y} form, producing
677   sequences of digits or characters
678
679 o Timestamps are now kept with history entries, with an option to save
680   and restore them from the history file; there is a new HISTTIMEFORMAT
681   variable describing how to display the timestamps when listing history
682   entries
683
684 o The `[[' command can now perform extended regular expression (egrep-like)
685   matching, with matched subexpressions placed in the BASH_REMATCH array
686   variable
687
688 o A new `pipefail' option causes a pipeline to return a failure status if
689   any command in it fails
690
691 o The `jobs', `kill', and `wait' builtins now accept job control notation
692   in their arguments even if job control is not enabled
693
694 o The `gettext' package and libintl have been integrated, and the shell
695   messages may be translated into other languages
696
697 Bash-2.05b introduced the following new features:
698
699 o support for multibyte characters has been added to both bash and readline
700
701 o the DEBUG trap is now run *before* simple commands, ((...)) commands,
702   [[...]] conditional commands, and for ((...)) loops
703
704 o the shell now performs arithmetic in the largest integer size the machine
705   supports (intmax_t)
706
707 o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
708   and inserts the result into the expanded prompt
709
710 o there is a new `here-string' redirection operator:  <<< word
711
712 o when displaying variables, function attributes and definitions are shown
713   separately, allowing them to be re-used as input (attempting to re-use
714   the old output would result in syntax errors).
715
716 o `read' has a new `-u fd' option to read from a specified file descriptor
717
718 o the bash debugger in examples/bashdb has been modified to work with the
719   new DEBUG trap semantics, the command set has been made more gdb-like,
720   and the changes to $LINENO make debugging functions work better
721
722 o the expansion of $LINENO inside a shell function is only relative to the
723   function start if the shell is interactive -- if the shell is running a
724   script, $LINENO expands to the line number in the script.  This is as
725   POSIX-2001 requires
726
727 Bash-2.05a introduced the following new features:
728
729 o The `printf' builtin has undergone major work
730
731 o There is a new read-only `shopt' option: login_shell, which is set by
732   login shells and unset otherwise
733
734 o New `\A' prompt string escape sequence; expanding to time in 24-hour
735   HH:MM format
736
737 o New `-A group/-g' option to complete and compgen; goes group name
738   completion
739
740 o New [+-]O invocation option to set and unset `shopt' options at startup
741
742 o ksh-like `ERR' trap
743
744 o `for' loops now allow empty word lists after the `in' reserved word
745
746 o new `hard' and `soft' arguments for the `ulimit' builtin
747
748 o Readline can be configured to place the user at the same point on the line
749   when retrieving commands from the history list
750
751 o Readline can be configured to skip `hidden' files (filenames with a leading
752   `.' on Unix) when performing completion
753
754 Bash-2.05 introduced the following new features:
755
756 o This version has once again reverted to using locales and strcoll(3) when
757   processing pattern matching bracket expressions, as POSIX requires. 
758 o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
759   per the new GNU coding standards.
760 o The /dev/tcp and /dev/udp redirections now accept service names as well as
761   port numbers.
762 o `complete' and `compgen' now take a `-o value' option, which controls some
763    of the aspects of that compspec.  Valid values are:
764
765         default - perform bash default completion if programmable
766                   completion produces no matches
767         dirnames - perform directory name completion if programmable
768                    completion produces no matches
769         filenames - tell readline that the compspec produces filenames,
770                     so it can do things like append slashes to
771                     directory names and suppress trailing spaces
772 o A new loadable builtin, realpath, which canonicalizes and expands symlinks
773   in pathname arguments.
774 o When `set' is called without options, it prints function defintions in a
775   way that allows them to be reused as input.  This affects `declare' and 
776   `declare -p' as well.  This only happens when the shell is not in POSIX
777    mode, since POSIX.2 forbids this behavior.
778
779 Bash-2.04 introduced the following new features:
780
781 o Programmable word completion with the new `complete' and `compgen' builtins;
782   examples are provided in examples/complete/complete-examples
783 o `history' has a new `-d' option to delete a history entry
784 o `bind' has a new `-x' option to bind key sequences to shell commands
785 o The prompt expansion code has new `\j' and `\l' escape sequences
786 o The `no_empty_cmd_completion' shell option, if enabled, inhibits
787   command completion when TAB is typed on an empty line
788 o `help' has a new `-s' option to print a usage synopsis
789 o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
790 o New ksh93-style arithmetic for command:
791         for ((expr1 ; expr2; expr3 )); do list; done
792 o `read' has new options: `-t', `-n', `-d', `-s'
793 o The redirection code handles several filenames specially:  /dev/fd/N,
794   /dev/stdin, /dev/stdout, /dev/stderr
795 o The redirection code now recognizes /dev/tcp/HOST/PORT and
796   /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
797   to the specified port on the specified host
798 o The ${!prefix*} expansion has been implemented
799 o A new FUNCNAME variable, which expands to the name of a currently-executing
800   function
801 o The GROUPS variable is no longer readonly
802 o A new shopt `xpg_echo' variable, to control the behavior of echo with
803   respect to backslash-escape sequences at runtime
804 o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
805
806 The version of Readline released with Bash-2.04, Readline-4.1, had several
807 new features as well:
808
809 o Parentheses matching is always compiled into readline, and controllable
810   with the new `blink-matching-paren' variable
811 o The history-search-forward and history-search-backward functions now leave
812   point at the end of the line when the search string is empty, like
813   reverse-search-history, and forward-search-history
814 o A new function for applications:  rl_on_new_line_with_prompt()
815 o New variables for applications:  rl_already_prompted, and rl_gnu_readline_p
816
817
818 Bash-2.03 had very few new features, in keeping with the convention
819 that odd-numbered releases provide mainly bug fixes.  A number of new
820 features were added to Readline, mostly at the request of the Cygnus
821 folks.
822
823 A new shopt option, `restricted_shell', so that startup files can test
824         whether or not the shell was started in restricted mode
825 Filename generation is now performed on the words between ( and ) in
826         compound array assignments (this is really a bug fix)
827 OLDPWD is now auto-exported, as POSIX.2 requires
828 ENV and BASH_ENV are read-only variables in a restricted shell
829 Bash may now be linked against an already-installed Readline library,
830         as long as the Readline library is version 4 or newer
831 All shells begun with the `--login' option will source the login shell
832         startup files, even if the shell is not interactive
833
834 There were lots of changes to the version of the Readline library released
835 along with Bash-2.03.  For a complete list of the changes, read the file
836 CHANGES in the Bash-2.03 distribution.
837
838 Bash-2.02 contained the following new features:
839
840 a new version of malloc (based on the old GNU malloc code in previous
841         bash versions) that is more page-oriented, more conservative
842         with memory usage, does not `orphan' large blocks when they
843         are freed, is usable on 64-bit machines, and has allocation
844         checking turned on unconditionally
845 POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
846 POSIX.2-style globbing equivalence classes
847 POSIX.2-style globbing collating symbols
848 the ksh [[...]] extended conditional command
849 the ksh egrep-style extended pattern matching operators
850 a new `printf' builtin
851 the ksh-like $(<filename) command substitution, which is equivalent to
852         $(cat filename)
853 new tilde prefixes that expand to directories from the directory stack
854 new `**' arithmetic operator to do exponentiation
855 case-insensitive globbing (filename expansion)
856 menu completion a la tcsh
857 `magic-space' history expansion function like tcsh
858 the readline inputrc `language' has a new file inclusion directive ($include)
859
860 Bash-2.01 contained only a few new features:
861
862 new `GROUPS' builtin array variable containing the user's group list
863 new bindable readline commands: history-and-alias-expand-line and
864         alias-expand-line
865
866 Bash-2.0 contained extensive changes and new features from bash-1.14.7.
867 Here's a short list:
868
869 new `time' reserved word to time pipelines, shell builtins, and
870         shell functions
871 one-dimensional arrays with a new compound assignment statement,
872         appropriate expansion constructs and modifications to some
873         of the builtins (read, declare, etc.) to use them
874 new quoting syntaxes for ANSI-C string expansion and locale-specific
875         string translation
876 new expansions to do substring extraction, pattern replacement, and
877         indirect variable expansion
878 new builtins: `disown' and `shopt'
879 new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
880                MACHTYPE, BASH_VERSINFO
881 special handling of many unused or redundant variables removed
882         (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
883 dynamic loading of new builtin commands; many loadable examples provided
884 new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
885 history and aliases available in shell scripts
886 new readline variables: enable-keypad, mark-directories, input-meta,
887         visible-stats, disable-completion, comment-begin
888 new readline commands to manipulate the mark and operate on the region
889 new readline emacs mode commands and bindings for ksh-88 compatibility
890 updated and extended builtins
891 new DEBUG trap
892 expanded (and now documented) restricted shell mode
893
894 implementation stuff:   
895 autoconf-based configuration
896 nearly all of the bugs reported since version 1.14 have been fixed
897 most builtins converted to use builtin `getopt' for consistency
898 most builtins use -p option to display output in a reusable form
899         (for consistency)
900 grammar tighter and smaller (66 reduce-reduce conflicts gone)
901 lots of code now smaller and faster
902 test suite greatly expanded
903
904 B2) Are there any user-visible incompatibilities between bash-4.1 and
905     previous bash versions?
906
907 There are a few incompatibilities between version 4.1 and previous
908 versions.  They are detailed in the file COMPAT in the bash distribution.
909 That file is not meant to be all-encompassing; send mail to
910 bash-maintainers@gnu.org (or bug-bash@gnu.org if you would like
911 community discussion) if if you find something that's not mentioned there.
912
913 Section C:  Differences from other Unix shells
914
915 C1) How does bash differ from sh, the Bourne shell?
916
917 This is a non-comprehensive list of features that differentiate bash
918 from the SVR4.2 shell.  The bash manual page explains these more
919 completely.
920
921 Things bash has that sh does not:
922         long invocation options
923         [+-]O invocation option
924         -l invocation option
925         `!' reserved word to invert pipeline return value
926         `time' reserved word to time pipelines and shell builtins
927         the `function' reserved word
928         the `select' compound command and reserved word
929         arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
930         new $'...' and $"..." quoting
931         the $(...) form of command substitution
932         the $(<filename) form of command substitution, equivalent to
933                 $(cat filename)
934         the ${#param} parameter value length operator
935         the ${!param} indirect parameter expansion operator
936         the ${!param*} prefix expansion operator
937         the ${param:offset[:length]} parameter substring operator
938         the ${param/pat[/string]} parameter pattern substitution operator
939         expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
940         expansion of positional parameters beyond $9 with ${num}
941         variables: BASH, BASHPID, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
942                    TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
943                    LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
944                    ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
945                    HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
946                    PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
947                    SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
948                    auto_resume, PROMPT_DIRTRIM, BASHOPTS, BASH_XTRACEFD
949         DEBUG trap
950         ERR trap
951         variable arrays with new compound assignment syntax
952         redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-, >>&
953         prompt string special char translation and variable expansion
954         auto-export of variables in initial environment
955         command search finds functions before builtins
956         bash return builtin will exit a file sourced with `.'
957         builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
958                   export -n/-f/-p/name=value, pwd -L/-P,
959                   read -e/-p/-a/-t/-n/-d/-s/-u/-i/-N,
960                   readonly -a/-f/name=value, trap -l, set +o,
961                   set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
962                   unset -f/-v, ulimit -i/-m/-p/-q/-u/-x,
963                   type -a/-p/-t/-f/-P, suspend -f, kill -n,
964                   test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
965         bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
966         bash restricted shell mode is more extensive
967         bash allows functions and variables with the same name
968         brace expansion
969         tilde expansion
970         arithmetic expansion with $((...)) and `let' builtin
971         the `[[...]]' extended conditional command
972         process substitution
973         aliases and alias/unalias builtins
974         local variables in functions and `local' builtin
975         readline and command-line editing with programmable completion
976         command history and history/fc builtins
977         csh-like history expansion
978         other new bash builtins: bind, command, compgen, complete, builtin,
979                                  declare/typeset, dirs, enable, fc, help,
980                                  history, logout, popd, pushd, disown, shopt,
981                                  printf, compopt, mapfile
982         exported functions
983         filename generation when using output redirection (command >a*)
984         POSIX.2-style globbing character classes
985         POSIX.2-style globbing equivalence classes
986         POSIX.2-style globbing collating symbols
987         egrep-like extended pattern matching operators
988         case-insensitive pattern matching and globbing
989         variable assignments preceding commands affect only that command,
990                 even for builtins and functions
991         posix mode and strict posix conformance
992         redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
993                 /dev/tcp/host/port, /dev/udp/host/port
994         debugger support, including `caller' builtin and new variables
995         RETURN trap
996         the `+=' assignment operator
997         autocd shell option and behavior
998         command-not-found hook with command_not_found_handle shell function
999         globstar shell option and `**' globbing behavior
1000         |& synonym for `2>&1 |'
1001         ;& and ;;& case action list terminators
1002         case-modifying word expansions and variable attributes
1003         associative arrays
1004         coprocesses using the `coproc' reserved word and variables
1005         shell assignment of a file descriptor used in a redirection to a variable
1006
1007 Things sh has that bash does not:
1008         uses variable SHACCT to do shell accounting
1009         includes `stop' builtin (bash can use alias stop='kill -s STOP')
1010         `newgrp' builtin
1011         turns on job control if called as `jsh'
1012         $TIMEOUT (like bash $TMOUT)
1013         `^' is a synonym for `|'
1014         new SVR4.2 sh builtins: mldmode, priv
1015
1016 Implementation differences:
1017         redirection to/from compound commands causes sh to create a subshell
1018         bash does not allow unbalanced quotes; sh silently inserts them at EOF
1019         bash does not mess with signal 11
1020         sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
1021         bash splits only the results of expansions on IFS, using POSIX.2
1022                 field splitting rules; sh splits all words on IFS
1023         sh does not allow MAILCHECK to be unset (?)
1024         sh does not allow traps on SIGALRM or SIGCHLD
1025         bash allows multiple option arguments when invoked (e.g. -x -v);
1026                 sh allows only a single option argument (`sh -x -v' attempts
1027                 to open a file named `-v', and, on SunOS 4.1.4, dumps core.
1028                 On Solaris 2.4 and earlier versions, sh goes into an infinite
1029                 loop.)
1030         sh exits a script if any builtin fails; bash exits only if one of
1031                 the POSIX.2 `special' builtins fails
1032
1033 C2)  How does bash differ from the Korn shell, version ksh88?
1034
1035 Things bash has or uses that ksh88 does not:
1036         long invocation options
1037         [-+]O invocation option
1038         -l invocation option
1039         `!' reserved word
1040         arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
1041         arithmetic in largest machine-supported size (intmax_t)
1042         posix mode and posix conformance
1043         command hashing
1044         tilde expansion for assignment statements that look like $PATH
1045         process substitution with named pipes if /dev/fd is not available
1046         the ${!param} indirect parameter expansion operator
1047         the ${!param*} prefix expansion operator
1048         the ${param:offset[:length]} parameter substring operator
1049         the ${param/pat[/string]} parameter pattern substitution operator
1050         variables: BASH, BASH_VERSION, BASH_VERSINFO, BASHPID, UID, EUID, SHLVL,
1051                    TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
1052                    HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
1053                    IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
1054                    PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
1055                    GROUPS, FUNCNAME, histchars, auto_resume, PROMPT_DIRTRIM
1056         prompt expansion with backslash escapes and command substitution
1057         redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-, >>&
1058         more extensive and extensible editing and programmable completion
1059         builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
1060                   exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
1061                   jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
1062                   read -e/-p/-a/-t/-n/-d/-s/-N, readonly -a/-n/-f/-p,
1063                   set -o braceexpand/-o histexpand/-o interactive-comments/
1064                   -o notify/-o physical/-o posix/-o hashall/-o onecmd/
1065                   -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
1066                   typeset -a/-F/-p, ulimit -i/-q/-u/-x, umask -S, alias -p,
1067                   shopt, disown, printf, complete, compgen, compopt, mapfile
1068         `!' csh-style history expansion
1069         POSIX.2-style globbing character classes
1070         POSIX.2-style globbing equivalence classes
1071         POSIX.2-style globbing collating symbols
1072         egrep-like extended pattern matching operators
1073         case-insensitive pattern matching and globbing
1074         `**' arithmetic operator to do exponentiation
1075         redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
1076         arrays of unlimited size
1077         TMOUT is default timeout for `read' and `select'
1078         debugger support, including the `caller' builtin
1079         RETURN trap
1080         Timestamps in history entries
1081         {x..y} brace expansion
1082         The `+=' assignment operator
1083         autocd shell option and behavior
1084         command-not-found hook with command_not_found_handle shell function
1085         globstar shell option and `**' globbing behavior
1086         |& synonym for `2>&1 |'
1087         ;& and ;;& case action list terminators
1088         case-modifying word expansions and variable attributes
1089         associative arrays
1090         coprocesses using the `coproc' reserved word and variables
1091         shell assignment of a file descriptor used in a redirection to a variable
1092
1093 Things ksh88 has or uses that bash does not:
1094         tracked aliases (alias -t)
1095         variables: ERRNO, FPATH, EDITOR, VISUAL
1096         co-processes (bash uses different syntax)
1097         weirdly-scoped functions
1098         typeset +f to list all function names without definitions
1099         text of command history kept in a file, not memory
1100         builtins: alias -x, cd old new, newgrp, print,
1101                   read -p/-s/var?prompt, set -A/-o gmacs/
1102                   -o bgnice/-o markdirs/-o trackall/-o viraw/-s,
1103                   typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-t, whence
1104         using environment to pass attributes of exported variables
1105         arithmetic evaluation done on arguments to some builtins
1106         reads .profile from $PWD when invoked as login shell
1107
1108 Implementation differences:
1109         ksh runs last command of a pipeline in parent shell context
1110         bash has brace expansion by default (ksh88 compile-time option)
1111         bash has fixed startup file for all interactive shells; ksh reads $ENV
1112         bash has exported functions
1113         bash command search finds functions before builtins
1114         bash waits for all commands in pipeline to exit before returning status
1115         emacs-mode editing has some slightly different key bindings
1116
1117 C3)  Which new features in ksh-93 are not in bash, and which are?
1118
1119 This list is current through ksh93t+ (05/05/2009)
1120
1121 New things in ksh-93 not in bash-4.1:
1122         floating point arithmetic and variables
1123         math library functions
1124         ${!name[sub]} name of subscript for associative array
1125         `.' is allowed in variable names to create a hierarchical namespace
1126         more extensive compound assignment syntax
1127         discipline functions
1128         KEYBD trap
1129         variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
1130                    .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
1131         backreferences in pattern matching (\N)
1132         `&' operator in pattern lists for matching (match all instead of any)
1133         exit statuses between 0 and 255
1134         FPATH and PATH mixing
1135         lexical scoping for local variables in `ksh' functions
1136         no scoping for local variables in `POSIX' functions
1137         $''  \C[.collating-element.] escape sequence
1138         -C/-I invocation options
1139         print -f (bash uses printf)
1140         `fc' has been renamed to `hist'
1141         `.' can execute shell functions
1142         getopts -a
1143         printf %B, %H, %P, %R, %T, %Z modifiers, output base for %d, `=' flag
1144         read -n/-N differ/-v
1145         set -o showme/-o multiline (bash default)
1146         `sleep' and `getconf' builtins (bash has loadable versions)
1147         typeset -n and `nameref' variables
1148         [[ -R name ]] (checks whether or not name is a nameref)
1149         typeset -C/-S/-T/-X/-h/-s
1150         experimental `type' definitions (a la typedef) using typeset
1151         negative subscripts for indexed array variables
1152         array expansions ${array[sub1..sub2]} and ${!array[sub1..sub2]}
1153         associative array assignments using `;' as element separator
1154         command substitution $(n<#) expands to current byte offset for fd N
1155         new '${ ' form of command substitution, executed in current shell
1156         new >;/<>;/<#pat/<##pat/<#/># redirections
1157         brace expansion printf-like formats 
1158         [[ -v var ]] operators (checks whether or not var is set)
1159
1160 New things in ksh-93 present in bash-4.1:
1161         associative arrays
1162         [n]<&word- and [n]>&word- redirections (combination dup and close)
1163         for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
1164         ?:, ++, --, `expr1 , expr2' arithmetic operators
1165         expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
1166                     ${!param*}
1167         compound array assignment
1168         the `!' reserved word
1169         loadable builtins -- but ksh uses `builtin' while bash uses `enable'
1170         new $'...' and $"..." quoting
1171         FIGNORE (but bash uses GLOBIGNORE), HISTCMD
1172         brace expansion and set -B
1173         changes to kill builtin
1174         `command', `builtin', `disown' builtins
1175         echo -e
1176         exec -c/-a
1177         read -A (bash uses read -a)
1178         read -t/-d
1179         trap -p
1180         `.' restores the positional parameters when it completes
1181         set -o notify/-C
1182         set -o pipefail
1183         set -G (-o globstar) and **
1184         POSIX.2 `test'
1185         umask -S
1186         unalias -a
1187         command and arithmetic substitution performed on PS1, PS4, and ENV
1188         command name completion, TAB displaying possible completions
1189         ENV processed only for interactive shells
1190         The `+=' assignment operator
1191         the `;&' case statement "fallthrough" pattern list terminator
1192         csh-style history expansion and set -H
1193         negative offsets in ${param:offset:length}
1194         redirection operators preceded with {varname} to store fd number in varname
1195         DEBUG can force skipping following command
1196
1197 Section D:  Why does bash do some things differently than other Unix shells?
1198
1199 D1) Why does bash run a different version of `command' than
1200     `which command' says it will?
1201
1202 On many systems, `which' is actually a csh script that assumes
1203 you're running csh.  In tcsh, `which' and its cousin `where'
1204 are builtins.  On other Unix systems, `which' is a perl script
1205 that uses the PATH environment variable.  Many Linux distributions
1206 use GNU `which', which is a C program that can understand shell
1207 aliases.
1208
1209 The csh script version reads the csh startup files from your
1210 home directory and uses those to determine which `command' will
1211 be invoked.  Since bash doesn't use any of those startup files,
1212 there's a good chance that your bash environment differs from
1213 your csh environment.  The bash `type' builtin does everything
1214 `which' does, and will report correct results for the running
1215 shell.  If you're really wedded to the name `which', try adding
1216 the following function definition to your .bashrc:
1217
1218         which()
1219         {
1220                 builtin type "$@"
1221         }
1222
1223 If you're moving from tcsh and would like to bring `where' along
1224 as well, use this function:
1225
1226         where()
1227         {
1228                 builtin type -a "$@"
1229         }
1230
1231 D2) Why doesn't bash treat brace expansions exactly like csh?
1232
1233 The only difference between bash and csh brace expansion is that
1234 bash requires a brace expression to contain at least one unquoted
1235 comma if it is to be expanded.  Any brace-surrounded word not
1236 containing an unquoted comma is left unchanged by the brace
1237 expansion code.  This affords the greatest degree of sh
1238 compatibility. 
1239
1240 Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. 
1241
1242 D3) Why doesn't bash have csh variable modifiers?
1243
1244 Posix has specified a more powerful, albeit somewhat more cryptic,
1245 mechanism cribbed from ksh, and bash implements it.
1246
1247 ${parameter%word}
1248         Remove smallest suffix pattern.  The WORD is expanded to produce
1249         a pattern.  It then expands to the value of PARAMETER, with the
1250         smallest portion of the suffix matched by the pattern deleted.
1251
1252         x=file.c
1253         echo ${x%.c}.o
1254         -->file.o
1255
1256 ${parameter%%word}
1257
1258         Remove largest suffix pattern.  The WORD is expanded to produce
1259         a pattern.  It then expands to the value of PARAMETER, with the
1260         largest portion of the suffix matched by the pattern deleted.
1261
1262         x=posix/src/std
1263         echo ${x%%/*}
1264         -->posix
1265
1266 ${parameter#word}
1267         Remove smallest prefix pattern.  The WORD is expanded to produce
1268         a pattern.  It then expands to the value of PARAMETER, with the
1269         smallest portion of the prefix matched by the pattern deleted.
1270
1271         x=$HOME/src/cmd
1272         echo ${x#$HOME}
1273         -->/src/cmd
1274
1275 ${parameter##word}
1276         Remove largest prefix pattern.  The WORD is expanded to produce
1277         a pattern.  It then expands to the value of PARAMETER, with the
1278         largest portion of the prefix matched by the pattern deleted.
1279
1280         x=/one/two/three
1281         echo ${x##*/}
1282         -->three
1283
1284
1285 Given
1286         a=/a/b/c/d
1287         b=b.xxx
1288
1289         csh                     bash            result
1290         ---                     ----            ------
1291         $a:h                    ${a%/*}            /a/b/c
1292         $a:t                    ${a##*/}           d
1293         $b:r                    ${b%.*}            b
1294         $b:e                    ${b##*.}           xxx
1295
1296
1297 D4) How can I make my csh aliases work when I convert to bash?
1298
1299 Bash uses a different syntax to support aliases than csh does. 
1300 The details can be found in the documentation.  We have provided
1301 a shell script which does most of the work of conversion for you;
1302 this script can be found in ./examples/misc/aliasconv.sh.  Here is
1303 how you use it:
1304   
1305 Start csh in the normal way for you.  (e.g., `csh')
1306   
1307 Pipe the output of `alias' through `aliasconv.sh', saving the
1308 results into `bash_aliases':
1309   
1310         alias | bash aliasconv.sh >bash_aliases
1311   
1312 Edit `bash_aliases', carefully reading through any created
1313 functions.  You will need to change the names of some csh specific
1314 variables to the bash equivalents.  The script converts $cwd to
1315 $PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
1316 to $PS1.  You may also have to add quotes to avoid unwanted
1317 expansion.
1318
1319 For example, the csh alias:
1320   
1321         alias cd 'cd \!*; echo $cwd'
1322   
1323 is converted to the bash function:
1324
1325         cd () { command cd "$@"; echo $PWD ; }
1326
1327 The only thing that needs to be done is to quote $PWD:
1328   
1329         cd () { command cd "$@"; echo "$PWD" ; }
1330   
1331 Merge the edited file into your ~/.bashrc.
1332
1333 There is an additional, more ambitious, script in
1334 examples/misc/cshtobash that attempts to convert your entire csh
1335 environment to its bash equivalent.  This script can be run as
1336 simply `cshtobash' to convert your normal interactive
1337 environment, or as `cshtobash ~/.login' to convert your login
1338 environment. 
1339
1340 D5) How can I pipe standard output and standard error from one command to
1341     another, like csh does with `|&'?
1342
1343 Use
1344         command 2>&1 | command2
1345
1346 The key is to remember that piping is performed before redirection, so
1347 file descriptor 1 points to the pipe when it is duplicated onto file
1348 descriptor 2.
1349
1350 D6) Now that I've converted from ksh to bash, are there equivalents to
1351     ksh features like autoloaded functions and the `whence' command?
1352
1353 There are features in ksh-88 and ksh-93 that do not have direct bash
1354 equivalents.  Most, however, can be emulated with very little trouble.
1355
1356 ksh-88 feature          Bash equivalent
1357 --------------          ---------------
1358 compiled-in aliases     set up aliases in .bashrc; some ksh aliases are
1359                         bash builtins (hash, history, type)
1360 coprocesses             named pipe pairs (one for read, one for write)
1361 typeset +f              declare -F
1362 cd, print, whence       function substitutes in examples/functions/kshenv
1363 autoloaded functions    examples/functions/autoload is the same as typeset -fu
1364 read var?prompt         read -p prompt var
1365
1366 ksh-93 feature          Bash equivalent
1367 --------------          ---------------
1368 sleep, getconf          Bash has loadable versions in examples/loadables
1369 ${.sh.version}          $BASH_VERSION
1370 print -f                printf
1371 hist                    alias hist=fc
1372 $HISTEDIT               $FCEDIT
1373
1374 Section E:  How can I get bash to do certain things, and why does bash do
1375             things the way it does?
1376
1377 E1) Why is the bash builtin `test' slightly different from /bin/test?
1378
1379 The specific example used here is [ ! x -o x ], which is false.
1380
1381 Bash's builtin `test' implements the Posix.2 spec, which can be
1382 summarized as follows (the wording is due to David Korn):
1383    
1384 Here is the set of rules for processing test arguments.
1385   
1386     0 Args: False
1387     1 Arg:  True iff argument is not null.
1388     2 Args: If first arg is !, True iff second argument is null.
1389             If first argument is unary, then true if unary test is true
1390             Otherwise error.
1391     3 Args: If second argument is a binary operator, do binary test of $1 $3
1392             If first argument is !, negate two argument test of $2 $3
1393             If first argument is `(' and third argument is `)', do the
1394             one-argument test of the second argument.
1395             Otherwise error.
1396     4 Args: If first argument is !, negate three argument test of $2 $3 $4.
1397             Otherwise unspecified
1398     5 or more Args: unspecified.  (Historical shells would use their
1399     current algorithm).
1400    
1401 The operators -a and -o are considered binary operators for the purpose
1402 of the 3 Arg case.
1403    
1404 As you can see, the test becomes (not (x or x)), which is false.
1405
1406 E2) Why does bash sometimes say `Broken pipe'?
1407
1408 If a sequence of commands appears in a pipeline, and one of the
1409 reading commands finishes before the writer has finished, the
1410 writer receives a SIGPIPE signal.  Many other shells special-case
1411 SIGPIPE as an exit status in the pipeline and do not report it. 
1412 For example, in:
1413   
1414       ps -aux | head
1415   
1416 `head' can finish before `ps' writes all of its output, and ps
1417 will try to write on a pipe without a reader.  In that case, bash
1418 will print `Broken pipe' to stderr when ps is killed by a
1419 SIGPIPE. 
1420
1421 As of bash-3.1, bash does not report SIGPIPE errors by default.  You
1422 can build a version of bash that will report such errors.
1423
1424 E3) When I have terminal escape sequences in my prompt, why does bash
1425     wrap lines at the wrong column?
1426
1427 Readline, the line editing library that bash uses, does not know
1428 that the terminal escape sequences do not take up space on the
1429 screen.  The redisplay code assumes, unless told otherwise, that
1430 each character in the prompt is a `printable' character that
1431 takes up one character position on the screen. 
1432
1433 You can use the bash prompt expansion facility (see the PROMPTING
1434 section in the manual page) to tell readline that sequences of
1435 characters in the prompt strings take up no screen space. 
1436
1437 Use the \[ escape to begin a sequence of non-printing characters,
1438 and the \] escape to signal the end of such a sequence. 
1439
1440 E4) If I pipe the output of a command into `read variable', why doesn't
1441     the output show up in $variable when the read command finishes?
1442
1443 This has to do with the parent-child relationship between Unix
1444 processes.  It affects all commands run in pipelines, not just
1445 simple calls to `read'.  For example, piping a command's output
1446 into a `while' loop that repeatedly calls `read' will result in
1447 the same behavior.
1448
1449 Each element of a pipeline, even a builtin or shell function,
1450 runs in a separate process, a child of the shell running the
1451 pipeline.  A subprocess cannot affect its parent's environment. 
1452 When the `read' command sets the variable to the input, that
1453 variable is set only in the subshell, not the parent shell.  When
1454 the subshell exits, the value of the variable is lost. 
1455
1456 Many pipelines that end with `read variable' can be converted
1457 into command substitutions, which will capture the output of
1458 a specified command.  The output can then be assigned to a
1459 variable:
1460
1461         grep ^gnu /usr/lib/news/active | wc -l | read ngroup
1462
1463 can be converted into
1464
1465         ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
1466
1467 This does not, unfortunately, work to split the text among
1468 multiple variables, as read does when given multiple variable
1469 arguments.  If you need to do this, you can either use the
1470 command substitution above to read the output into a variable
1471 and chop up the variable using the bash pattern removal
1472 expansion operators or use some variant of the following
1473 approach.
1474
1475 Say /usr/local/bin/ipaddr is the following shell script:
1476
1477 #! /bin/sh
1478 host `hostname` | awk '/address/ {print $NF}'
1479
1480 Instead of using
1481
1482         /usr/local/bin/ipaddr | read A B C D
1483
1484 to break the local machine's IP address into separate octets, use
1485
1486         OIFS="$IFS"
1487         IFS=.
1488         set -- $(/usr/local/bin/ipaddr)
1489         IFS="$OIFS"
1490         A="$1" B="$2" C="$3" D="$4"
1491
1492 Beware, however, that this will change the shell's positional
1493 parameters.  If you need them, you should save them before doing
1494 this.
1495
1496 This is the general approach -- in most cases you will not need to
1497 set $IFS to a different value.
1498
1499 Some other user-supplied alternatives include:
1500
1501 read A B C D << HERE
1502     $(IFS=.; echo $(/usr/local/bin/ipaddr))
1503 HERE
1504
1505 and, where process substitution is available,
1506
1507 read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
1508
1509 E5) I have a bunch of shell scripts that use backslash-escaped characters
1510     in arguments to `echo'.  Bash doesn't interpret these characters.  Why
1511     not, and how can I make it understand them?
1512
1513 This is the behavior of echo on most Unix System V machines.
1514
1515 The bash builtin `echo' is modeled after the 9th Edition
1516 Research Unix version of `echo'.  It does not interpret
1517 backslash-escaped characters in its argument strings by default;
1518 it requires the use of the -e option to enable the
1519 interpretation.  The System V echo provides no way to disable the
1520 special characters; the bash echo has a -E option to disable
1521 them. 
1522
1523 There is a configuration option that will make bash behave like
1524 the System V echo and interpret things like `\t' by default.  Run
1525 configure with the --enable-xpg-echo-default option to turn this
1526 on.  Be aware that this will cause some of the tests run when you
1527 type `make tests' to fail.
1528
1529 There is a shell option, `xpg_echo', settable with `shopt', that will
1530 change the behavior of echo at runtime.  Enabling this option turns
1531 on expansion of backslash-escape sequences.
1532
1533 E6) Why doesn't a while or for loop get suspended when I type ^Z?
1534
1535 This is a consequence of how job control works on Unix.  The only
1536 thing that can be suspended is the process group.  This is a single
1537 command or pipeline of commands that the shell forks and executes.
1538
1539 When you run a while or for loop, the only thing that the shell forks
1540 and executes are any commands in the while loop test and commands in
1541 the loop bodies.  These, therefore, are the only things that can be
1542 suspended when you type ^Z.
1543
1544 If you want to be able to stop the entire loop, you need to put it
1545 within parentheses, which will force the loop into a subshell that
1546 may be stopped (and subsequently restarted) as a single unit.
1547
1548 E7) What about empty for loops in Makefiles?
1549
1550 It's fairly common to see constructs like this in automatically-generated
1551 Makefiles:
1552
1553 SUBDIRS = @SUBDIRS@
1554
1555         ...
1556
1557 subdirs-clean:
1558         for d in ${SUBDIRS}; do \
1559                 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1560         done
1561
1562 When SUBDIRS is empty, this results in a command like this being passed to
1563 bash:
1564
1565         for d in ; do
1566                 ( cd $d && ${MAKE} ${MFLAGS} clean )
1567         done
1568
1569 In versions of bash before bash-2.05a, this was a syntax error.  If the
1570 reserved word `in' was present, a word must follow it before the semicolon
1571 or newline.  The language in the manual page referring to the list of words
1572 being empty referred to the list after it is expanded.  These versions of
1573 bash required that there be at least one word following the `in' when the
1574 construct was parsed.
1575
1576 The idiomatic Makefile solution is something like:
1577
1578 SUBDIRS = @SUBDIRS@
1579
1580 subdirs-clean:
1581         subdirs=$SUBDIRS ; for d in $$subdirs; do \
1582                 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1583         done
1584
1585 The latest updated POSIX standard has changed this:  the word list
1586 is no longer required.  Bash versions 2.05a and later accept the
1587 new syntax.
1588
1589 E8) Why does the arithmetic evaluation code complain about `08'?
1590
1591 The bash arithmetic evaluation code (used for `let', $(()), (()), and in
1592 other places), interprets a leading `0' in numeric constants as denoting
1593 an octal number, and a leading `0x' as denoting hexadecimal.  This is
1594 in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
1595 arithmetic constants should be handled as signed long integers as defined
1596 by the ANSI/ISO C standard.
1597
1598 The POSIX.2 interpretation committee has confirmed this:
1599
1600 http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
1601
1602 E9) Why does the pattern matching expression [A-Z]* match files beginning
1603     with every letter except `z'?
1604
1605 Bash-2.03, Bash-2.05 and later versions honor the current locale setting
1606 when processing ranges within pattern matching bracket expressions ([A-Z]). 
1607 This is what POSIX.2 and SUSv3/XPG6 specify. 
1608
1609 The behavior of the matcher in bash-2.05 and later versions depends on the
1610 current LC_COLLATE setting.  Setting this variable to `C' or `POSIX' will
1611 result in the traditional behavior ([A-Z] matches all uppercase ASCII
1612 characters).  Many other locales, including the en_US locale (the default
1613 on many US versions of Linux) collate the upper and lower case letters like
1614 this:
1615
1616         AaBb...Zz
1617
1618 which means that [A-Z] matches every letter except `z'.  Others collate like
1619
1620         aAbBcC...zZ
1621
1622 which means that [A-Z] matches every letter except `a'.
1623
1624 The portable way to specify upper case letters is [:upper:] instead of
1625 A-Z; lower case may be specified as [:lower:] instead of a-z.
1626
1627 Look at the manual pages for setlocale(3), strcoll(3), and, if it is
1628 present, locale(1).  If you have locale(1), you can use it to find
1629 your current locale information even if you do not have any of the
1630 LC_ variables set.
1631
1632 My advice is to put
1633
1634         export LC_COLLATE=C
1635
1636 into /etc/profile and inspect any shell scripts run from cron for
1637 constructs like [A-Z].  This will prevent things like
1638
1639         rm [A-Z]*
1640
1641 from removing every file in the current directory except those beginning
1642 with `z' and still allow individual users to change the collation order.
1643 Users may put the above command into their own profiles as well, of course.
1644
1645 E10) Why does `cd //' leave $PWD as `//'?
1646
1647 POSIX.2, in its description of `cd', says that *three* or more leading
1648 slashes may be replaced with a single slash when canonicalizing the
1649 current working directory.
1650
1651 This is, I presume, for historical compatibility.  Certain versions of
1652 Unix, and early network file systems, used paths of the form
1653 //hostname/path to access `path' on server `hostname'.
1654
1655 E11) If I resize my xterm while another program is running, why doesn't bash
1656      notice the change?
1657
1658 This is another issue that deals with job control.
1659
1660 The kernel maintains a notion of a current terminal process group.  Members
1661 of this process group (processes whose process group ID is equal to the
1662 current terminal process group ID) receive terminal-generated signals like
1663 SIGWINCH.  (For more details, see the JOB CONTROL section of the bash
1664 man page.)
1665
1666 If a terminal is resized, the kernel sends SIGWINCH to each member of
1667 the terminal's current process group (the `foreground' process group).
1668
1669 When bash is running with job control enabled, each pipeline (which may be
1670 a single command) is run in its own process group, different from bash's
1671 process group.  This foreground process group receives the SIGWINCH; bash
1672 does not.  Bash has no way of knowing that the terminal has been resized.
1673
1674 There is a `checkwinsize' option, settable with the `shopt' builtin, that
1675 will cause bash to check the window size and adjust its idea of the
1676 terminal's dimensions each time a process stops or exits and returns control
1677 of the terminal to bash.  Enable it with `shopt -s checkwinsize'.
1678
1679 E12) Why don't negative offsets in substring expansion work like I expect?
1680
1681 When substring expansion of the form ${param:offset[:length} is used,
1682 an `offset' that evaluates to a number less than zero counts back from
1683 the end of the expanded value of $param.
1684
1685 When a negative `offset' begins with a minus sign, however, unexpected things
1686 can happen.  Consider
1687
1688         a=12345678
1689         echo ${a:-4}
1690
1691 intending to print the last four characters of $a.  The problem is that
1692 ${param:-word} already has a well-defined meaning: expand to word if the
1693 expanded value of param is unset or null, and $param otherwise.
1694
1695 To use negative offsets that begin with a minus sign, separate the
1696 minus sign and the colon with a space.
1697
1698 E13) Why does filename completion misbehave if a colon appears in the filename?
1699
1700 Filename completion (and word completion in general) may appear to behave
1701 improperly if there is a colon in the word to be completed.
1702
1703 The colon is special to readline's word completion code:  it is one of the
1704 characters that breaks words for the completer.  Readline uses these characters
1705 in sort of the same way that bash uses $IFS: they break or separate the words
1706 the completion code hands to the application-specific or default word
1707 completion functions.  The original intent was to make it easy to edit
1708 colon-separated lists (such as $PATH in bash) in various applications using
1709 readline for input.
1710
1711 This is complicated by the fact that some versions of the popular
1712 `bash-completion' programmable completion package have problems with the
1713 default completion behavior in the presence of colons.  
1714
1715 The current set of completion word break characters is available in bash as
1716 the value of the COMP_WORDBREAKS variable.  Removing `:' from that value is
1717 enough to make the colon not special to completion:
1718
1719 COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
1720
1721 You can also quote the colon with a backslash to achieve the same result
1722 temporarily.
1723
1724 E14) Why does quoting the pattern argument to the regular expression matching
1725      conditional operator (=~) cause regexp matching to stop working?
1726
1727 In versions of bash prior to bash-3.2, the effect of quoting the regular
1728 expression argument to the [[ command's =~ operator was not specified.
1729 The practical effect was that double-quoting the pattern argument required
1730 backslashes to quote special pattern characters, which interfered with the
1731 backslash processing performed by double-quoted word expansion and was
1732 inconsistent with how the == shell pattern matching operator treated
1733 quoted characters.
1734
1735 In bash-3.2, the shell was changed to internally quote characters in single-
1736 and double-quoted string arguments to the =~ operator, which suppresses the
1737 special meaning of the characters special to regular expression processing
1738 (`.', `[', `\', `(', `), `*', `+', `?', `{', `|', `^', and `$') and forces
1739 them to be matched literally.  This is consistent with how the `==' pattern
1740 matching operator treats quoted portions of its pattern argument.
1741
1742 Since the treatment of quoted string arguments was changed, several issues
1743 have arisen, chief among them the problem of white space in pattern arguments
1744 and the differing treatment of quoted strings between bash-3.1 and bash-3.2.
1745 Both problems may be solved by using a shell variable to hold the pattern.
1746 Since word splitting is not performed when expanding shell variables in all
1747 operands of the [[ command, this allows users to quote patterns as they wish
1748 when assigning the variable, then expand the values to a single string that
1749 may contain whitespace.  The first problem may be solved by using backslashes
1750 or any other quoting mechanism to escape the white space in the patterns.
1751
1752 Bash-4.0 introduces the concept of a `compatibility level', controlled by
1753 several options to the `shopt' builtin.  If the `compat31' option is enabled,
1754 bash reverts to the bash-3.1 behavior with respect to quoting the rhs of
1755 the =~ operator.
1756
1757 E15) Tell me more about the shell compatibility level.
1758
1759 Bash-4.0 introduced the concept of a `shell compatibility level', specified
1760 as a set of options to the shopt builtin (compat31, compat32, compat40 at
1761 this writing).  There is only one current compatibility level -- each
1762 option is mutually exclusive.  This list does not mention behavior that is
1763 standard for a particular version (e.g., setting compat32 means that quoting
1764 the rhs of the regexp matching operator quotes special regexp characters in
1765 the word, which is default behavior in bash-3.2 and above).
1766
1767 compat31 set
1768         - the < and > operators to the [[ command do not consider the current
1769           locale when comparing strings
1770         - quoting the rhs of the regexp matching operator (=~) has no
1771           special effect
1772
1773 compat32 set
1774         - the < and > operators to the [[ command do not consider the current
1775           locale when comparing strings
1776
1777 compat40 set
1778         - the < and > operators to the [[ command do not consider the current
1779           locale when comparing strings
1780         - interrupting a command list such as "a ; b ; c" causes the execution
1781           of the entire list to be aborted
1782
1783 Section F:  Things to watch out for on certain Unix versions
1784
1785 F1) Why can't I use command line editing in my `cmdtool'?
1786
1787 The problem is `cmdtool' and bash fighting over the input.  When
1788 scrolling is enabled in a cmdtool window, cmdtool puts the tty in
1789 `raw mode' to permit command-line editing using the mouse for
1790 applications that cannot do it themselves.  As a result, bash and
1791 cmdtool each try to read keyboard input immediately, with neither
1792 getting enough of it to be useful.
1793
1794 This mode also causes cmdtool to not implement many of the
1795 terminal functions and control sequences appearing in the
1796 `sun-cmd' termcap entry.  For a more complete explanation, see
1797 that file examples/suncmd.termcap in the bash distribution. 
1798
1799 `xterm' is a better choice, and gets along with bash much more
1800 smoothly.
1801
1802 If you must use cmdtool, you can use the termcap description in
1803 examples/suncmd.termcap.  Set the TERMCAP variable to the terminal
1804 description contained in that file, i.e.
1805
1806 TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
1807
1808 Then export TERMCAP and start a new cmdtool window from that shell.
1809 The bash command-line editing should behave better in the new
1810 cmdtool.  If this works, you can put the assignment to TERMCAP
1811 in your bashrc file.
1812
1813 F2) I built bash on Solaris 2.  Why do globbing expansions and filename
1814     completion chop off the first few characters of each filename?
1815
1816 This is the consequence of building bash on SunOS 5 and linking
1817 with the libraries in /usr/ucblib, but using the definitions
1818 and structures from files in /usr/include. 
1819
1820 The actual conflict is between the dirent structure in
1821 /usr/include/dirent.h and the struct returned by the version of
1822 `readdir' in libucb.a (a 4.3-BSD style `struct direct'). 
1823
1824 Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
1825 when configuring and building bash.  This will ensure that you
1826 use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
1827 link with libc before libucb. 
1828
1829 If you have installed the Sun C compiler, you may also need to
1830 put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
1831 /usr/ucb.
1832
1833 F3) Why does bash dump core after I interrupt username completion or
1834     `~user' tilde expansion on a machine running NIS?
1835
1836 This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
1837 client library, which is part of libc.
1838
1839 The YP library code keeps static state -- a pointer into the data
1840 returned from the server.  When YP initializes itself (setpwent),
1841 it looks at this pointer and calls free on it if it's non-null. 
1842 So far, so good. 
1843
1844 If one of the YP functions is interrupted during getpwent (the
1845 exact function is interpretwithsave()), and returns NULL, the
1846 pointer is freed without being reset to NULL, and the function
1847 returns.  The next time getpwent is called, it sees that this
1848 pointer is non-null, calls free, and the bash free() blows up
1849 because it's being asked to free freed memory. 
1850
1851 The traditional Unix mallocs allow memory to be freed multiple
1852 times; that's probably why this has never been fixed.  You can
1853 run configure with the `--without-gnu-malloc' option to use
1854 the C library malloc and avoid the problem.
1855
1856 F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
1857
1858 The `@' character is the default `line kill' character in most
1859 versions of System V, including SVR4.2.  You can change this
1860 character to whatever you want using `stty'.  For example, to
1861 change the line kill character to control-u, type
1862
1863         stty kill ^U
1864
1865 where the `^' and `U' can be two separate characters.
1866
1867 F5) Why does bash report syntax errors when my C News scripts use a
1868     redirection before a subshell command?
1869
1870 The actual command in question is something like
1871
1872         < file ( command )
1873
1874 According to the grammar given in the POSIX.2 standard, this construct
1875 is, in fact, a syntax error.  Redirections may only precede `simple
1876 commands'.  A subshell construct such as the above is one of the shell's
1877 `compound commands'.  A redirection may only follow a compound command.
1878
1879 This affects the mechanical transformation of commands that use `cat'
1880 to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
1881 comp.unix.shell).  While most commands of the form
1882
1883         cat file | command
1884
1885 can be converted to `< file command', shell control structures such as
1886 loops and subshells require `command < file'.
1887
1888 The file CWRU/sh-redir-hack in the bash distribution is an
1889 (unofficial) patch to parse.y that will modify the grammar to
1890 support this construct.  It will not apply with `patch'; you must
1891 modify parse.y by hand.  Note that if you apply this, you must
1892 recompile with -DREDIRECTION_HACK.  This introduces a large
1893 number of reduce/reduce conflicts into the shell grammar. 
1894
1895 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
1896
1897 The short answer is that Red Hat screwed up.
1898
1899 The long answer is that they shipped an /etc/inputrc that only works
1900 for emacs mode editing, and then screwed all the vi users by setting
1901 INPUTRC to /etc/inputrc in /etc/profile.
1902
1903 The short fix is to do one of the following: remove or rename
1904 /etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
1905 but make sure you export it if you do), remove the assignment to
1906 INPUTRC from /etc/profile, add
1907
1908         set keymap emacs
1909
1910 to the beginning of /etc/inputrc, or bracket the key bindings in
1911 /etc/inputrc with these lines
1912
1913         $if mode=emacs
1914                 [...]
1915         $endif
1916
1917 F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
1918     HP/UX 11.x?
1919
1920 HP/UX's support for long double is imperfect at best.
1921
1922 GCC will support it without problems, but the HP C library functions
1923 like strtold(3) and printf(3) don't actually work with long doubles.
1924 HP implemented a `long_double' type as a 4-element array of 32-bit
1925 ints, and that is what the library functions use.  The ANSI C
1926 `long double' type is a 128-bit floating point scalar.
1927
1928 The easiest fix, until HP fixes things up, is to edit the generated
1929 config.h and #undef the HAVE_LONG_DOUBLE line.  After doing that,
1930 the compilation should complete successfully.
1931
1932 Section G:  How can I get bash to do certain common things?
1933
1934 G1) How can I get bash to read and display eight-bit characters?
1935
1936 This is a process requiring several steps.
1937
1938 First, you must ensure that the `physical' data path is a full eight
1939 bits.  For xterms, for example, the `vt100' resources `eightBitInput'
1940 and `eightBitOutput' should be set to `true'.
1941
1942 Once you have set up an eight-bit path, you must tell the kernel and
1943 tty driver to leave the eighth bit of characters alone when processing
1944 keyboard input.  Use `stty' to do this:
1945
1946         stty cs8 -istrip -parenb
1947
1948 For old BSD-style systems, you can use
1949
1950         stty pass8
1951
1952 You may also need
1953
1954         stty even odd
1955
1956 Finally, you need to tell readline that you will be inputting and
1957 displaying eight-bit characters.  You use readline variables to do
1958 this.  These variables can be set in your .inputrc or using the bash
1959 `bind' builtin.  Here's an example using `bind':
1960
1961         bash$ bind 'set convert-meta off'
1962         bash$ bind 'set meta-flag on'
1963         bash$ bind 'set output-meta on'
1964
1965 The `set' commands between the single quotes may also be placed
1966 in ~/.inputrc.
1967
1968 The script examples/scripts.noah/meta.bash encapsulates the bind
1969 commands in a shell function.
1970
1971 G2) How do I write a function `x' to replace builtin command `x', but
1972     still invoke the command from within the function?
1973
1974 This is why the `command' and `builtin' builtins exist.  The
1975 `command' builtin executes the command supplied as its first
1976 argument, skipping over any function defined with that name.  The
1977 `builtin' builtin executes the builtin command given as its first
1978 argument directly. 
1979
1980 For example, to write a function to replace `cd' that writes the
1981 hostname and current directory to an xterm title bar, use
1982 something like the following:
1983
1984         cd()
1985         {
1986                 builtin cd "$@" && xtitle "$HOST: $PWD"
1987         }
1988
1989 This could also be written using `command' instead of `builtin';
1990 the version above is marginally more efficient. 
1991
1992 G3) How can I find the value of a shell variable whose name is the value
1993     of another shell variable?
1994
1995 Versions of Bash newer than Bash-2.0 support this directly.  You can use 
1996
1997         ${!var}
1998
1999 For example, the following sequence of commands will echo `z':
2000
2001         var1=var2
2002         var2=z
2003         echo ${!var1}
2004
2005 For sh compatibility, use the `eval' builtin.  The important
2006 thing to remember is that `eval' expands the arguments you give
2007 it again, so you need to quote the parts of the arguments that
2008 you want `eval' to act on. 
2009
2010 For example, this expression prints the value of the last positional
2011 parameter:
2012
2013         eval echo \"\$\{$#\}\"
2014
2015 The expansion of the quoted portions of this expression will be
2016 deferred until `eval' runs, while the `$#' will be expanded
2017 before `eval' is executed.  In versions of bash later than bash-2.0,
2018
2019         echo ${!#}
2020
2021 does the same thing.
2022
2023 This is not the same thing as ksh93 `nameref' variables, though the syntax
2024 is similar.  I may add namerefs in a future bash version.
2025
2026 G4) How can I make the bash `time' reserved word print timing output that
2027      looks like the output from my system's /usr/bin/time?
2028
2029 The bash command timing code looks for a variable `TIMEFORMAT' and
2030 uses its value as a format string to decide how to display the
2031 timing statistics.
2032
2033 The value of TIMEFORMAT is a string with `%' escapes expanded in a
2034 fashion similar in spirit to printf(3).  The manual page explains
2035 the meanings of the escape sequences in the format string.
2036
2037 If TIMEFORMAT is not set, bash acts as if the following assignment had
2038 been performed:
2039
2040         TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
2041
2042 The POSIX.2 default time format (used by `time -p command') is
2043
2044         TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
2045
2046 The BSD /usr/bin/time format can be emulated with:
2047
2048         TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
2049
2050 The System V /usr/bin/time format can be emulated with:
2051
2052         TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
2053
2054 The ksh format can be emulated with:
2055
2056         TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
2057
2058 G5) How do I get the current directory into my prompt?
2059
2060 Bash provides a number of backslash-escape sequences which are expanded
2061 when the prompt string (PS1 or PS2) is displayed.  The full list is in
2062 the manual page.
2063
2064 The \w expansion gives the full pathname of the current directory, with
2065 a tilde (`~') substituted for the current value of $HOME.  The \W
2066 expansion gives the basename of the current directory.  To put the full
2067 pathname of the current directory into the path without any tilde
2068 subsitution, use $PWD.  Here are some examples:
2069
2070         PS1='\w$ '      # current directory with tilde
2071         PS1='\W$ '      # basename of current directory
2072         PS1='$PWD$ '    # full pathname of current directory
2073
2074 The single quotes are important in the final example to prevent $PWD from
2075 being expanded when the assignment to PS1 is performed.
2076
2077 G6) How can I rename "*.foo" to "*.bar"?
2078
2079 Use the pattern removal functionality described in D3.  The following `for'
2080 loop will do the trick:
2081
2082         for f in *.foo; do
2083                 mv $f ${f%foo}bar
2084         done
2085
2086 G7) How can I translate a filename from uppercase to lowercase?
2087
2088 The script examples/functions/lowercase, originally written by John DuBois,
2089 will do the trick.  The converse is left as an exercise.
2090
2091 G8) How can I write a filename expansion (globbing) pattern that will match
2092     all files in the current directory except "." and ".."?
2093
2094 You must have set the `extglob' shell option using `shopt -s extglob' to use
2095 this:
2096
2097         echo .!(.|) *
2098
2099 A solution that works without extended globbing is given in the Unix Shell
2100 FAQ, posted periodically to comp.unix.shell.  It's a variant of
2101
2102         echo .[!.]* ..?* *
2103
2104 (The ..?* catches files with names of three or more characters beginning
2105 with `..')
2106
2107 Section H:  Where do I go from here?
2108
2109 H1) How do I report bugs in bash, and where should I look for fixes and
2110     advice?
2111
2112 Use the `bashbug' script to report bugs.  It is built and
2113 installed at the same time as bash.  It provides a standard
2114 template for reporting a problem and automatically includes
2115 information about your configuration and build environment. 
2116
2117 `bashbug' sends its reports to bug-bash@gnu.org, which
2118 is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. 
2119
2120 Bug fixes, answers to questions, and announcements of new releases
2121 are all posted to gnu.bash.bug.  Discussions concerning bash features
2122 and problems also take place there.
2123
2124 To reach the bash maintainers directly, send mail to
2125 bash-maintainers@gnu.org.
2126
2127 H2) What kind of bash documentation is there?
2128
2129 First, look in the doc directory in the bash distribution.  It should
2130 contain at least the following files:
2131
2132 bash.1          an extensive, thorough Unix-style manual page
2133 builtins.1      a manual page covering just bash builtin commands
2134 bashref.texi    a reference manual in GNU tex`info format
2135 bashref.info    an info version of the reference manual
2136 FAQ             this file
2137 article.ms      text of an article written for The Linux Journal
2138 readline.3      a man page describing readline
2139
2140 Postscript, HTML, and ASCII files created from the above source are
2141 available in the documentation distribution.
2142
2143 There is additional documentation available for anonymous FTP from host
2144 ftp.cwru.edu in the `pub/bash' directory.
2145
2146 Cameron Newham and Bill Rosenblatt have written a book on bash, published
2147 by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn
2148 Shell book.  The title is ``Learning the Bash Shell'', and the ISBN number
2149 of the third edition, published in March, 2005, is 0-596-00965-8.  Look for
2150 it in fine bookstores near you.  This edition of the book has been updated
2151 to cover bash-3.0.
2152
2153 The GNU Bash Reference Manual has been published as a printed book by
2154 Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Nov. 2006).  It covers
2155 bash-3.2 and is available from most online bookstores (see
2156 http://www.network-theory.co.uk/bash/manual/ for details).  The publisher
2157 will donate $1 to the Free Software Foundation for each copy sold. 
2158
2159 Arnold Robbins and Nelson Beebe have written ``Classic Shell Scripting'',
2160 published by O'Reilly.  The first edition, with ISBN number 0-596-00595-4,
2161 was published in May, 2005.
2162
2163 Chris F. A. Johnson, a frequent contributor to comp.unix.shell and
2164 gnu.bash.bug, has written ``Shell Scripting Recipes: A Problem-Solution
2165 Approach,'' a new book on shell scripting, concentrating on features of
2166 the POSIX standard helpful to shell script writers.  The first edition from
2167 Apress, with ISBN number 1-59059-471-1, was published in May, 2005.
2168
2169 H3) What's coming in future versions?
2170
2171 These are features I hope to include in a future version of bash.
2172
2173 Rocky Bernstein's bash debugger (support is included with bash-4.0)
2174
2175 H4) What's on the bash `wish list' for future versions?
2176
2177 These are features that may or may not appear in a future version of bash.
2178
2179 breaking some of the shell functionality into embeddable libraries
2180 a module system like zsh's, using dynamic loading like builtins
2181 a bash programmer's guide with a chapter on creating loadable builtins
2182 a better loadable interface to perl with access to the shell builtins and
2183         variables (contributions gratefully accepted)
2184 ksh93-like `nameref' variables
2185 ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
2186         associated disipline functions
2187 Some of the new ksh93 pattern matching operators, like backreferencing
2188
2189 H5) When will the next release appear?
2190
2191 The next version will appear sometime in 2010.  Never make predictions. 
2192
2193 This document is Copyright 1995-2010 by Chester Ramey.
2194
2195 Permission is hereby granted, without written agreement and
2196 without license or royalty fees, to use, copy, and distribute
2197 this document for any purpose, provided that the above copyright
2198 notice appears in all copies of this document and that the
2199 contents of this document remain unaltered.