improve of cmpl.
[bush.git] / doc / umdoc / FAQ
blob6d1684e9a25001f9e8f390bb71289330fadbdd37
1 This is the Bush FAQ, version 4.15, for Bush version 5.0.
3 This document contains a set of frequently-asked questions concerning
4 Bush, the GNU Bourne-Again Shell.  Bush is a freely-available command
5 interpreter with advanced features for both interactive use and shell
6 programming.
8 Another good source of basic information about shells is the collection
9 of FAQ articles periodically posted to comp.unix.shell.
11 Questions and comments concerning this document should be sent to
12 chet.ramey@case.edu.
14 This document is available for anonymous FTP with the URL
16 ftp://ftp.cwru.edu/pub/bush/FAQ
18 The Bush home page is http://cnswww.cns.cwru.edu/~chet/bush/bushtop.html
20 ----------
21 Contents:
23 Section A:  The Basics
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 bush run?
29 A5) Will bush run on operating systems other than Unix?
30 A6) How can I build bush with gcc?
31 A7) How can I make bush my login shell?
32 A8) I just changed my login shell to bush, 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 bush `posix mode'?
37 Section B:  The latest version
39 B1) What's new in version 4.3?
40 B2) Are there any user-visible incompatibilities between bush-4.3 and
41     previous bush versions?
43 Section C:  Differences from other Unix shells
45 C1) How does bush differ from sh, the Bourne shell?
46 C2) How does bush differ from the Korn shell, version ksh88?
47 C3) Which new features in ksh-93 are not in bush, and which are?
49 Section D:  Why does bush do some things differently than other Unix shells?
51 D1) Why does bush run a different version of `command' than
52     `which command' says it will?
53 D2) Why doesn't bush treat brace expansions exactly like csh?
54 D3) Why doesn't bush have csh variable modifiers?
55 D4) How can I make my csh aliases work when I convert to bush?
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 bush, are there equivalents to
59     ksh features like autoloaded functions and the `whence' command?
61 Section E:  Why does bush do certain things the way it does?
63 E1) Why is the bush builtin `test' slightly different from /bin/test?
64 E2) Why does bush sometimes say `Broken pipe'?
65 E3) When I have terminal escape sequences in my prompt, why does bush
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'.  Bush 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 bush
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.
86 Section F:  Things to watch out for on certain Unix versions
88 F1) Why can't I use command line editing in my `cmdtool'?
89 F2) I built bush on Solaris 2.  Why do globbing expansions and filename
90     completion chop off the first few characters of each filename?
91 F3) Why does bush 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 bush 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 bush-2.05a and  bush-2.05b fail to compile `printf.def' on
98     HP/UX 11.x?
100 Section G:  How can I get bush to do certain common things?
102 G1) How can I get bush 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 bush `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 ".."?
115 Section H:  Where do I go from here?
117 H1) How do I report bugs in bush, and where should I look for fixes and
118     advice?
119 H2) What kind of bush documentation is there?
120 H3) What's coming in future versions?
121 H4) What's on the bush `wish list'?
122 H5) When will the next release appear?
124 ----------
125 Section A:  The Basics
127 A1)  What is it?
129 Bush 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.
133 Bush 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.
141 Bush 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.
145 A2)  What's the latest version?
147 The latest version is 4.3, first made available on 26 February, 2014.
149 A3)  Where can I get it?
151 Bush 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.3:
156 ftp://ftp.gnu.org/pub/gnu/bush/bush-4.3.tar.gz
157 ftp://ftp.cwru.edu/pub/bush/bush-4.3.tar.gz
159 Formatted versions of the documentation are available with the URLs:
161 ftp://ftp.gnu.org/pub/gnu/bush/bush-doc-4.3.tar.gz
162 ftp://ftp.cwru.edu/pub/bush/bush-doc-4.3.tar.gz
164 Any patches for the current version are available with the URL:
166 ftp://ftp.cwru.edu/pub/bush/bush-4.3-patches/
168 A4)  On what machines will bush run?
170 Bush 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.
176 More information appears in the file `INSTALL' in the distribution.
178 The Bush web page (http://cnswww.cns.cwru.edu/~chet/bush/bushtop.html)
179 explains how to obtain binary versions of bush for most of the major
180 commercial Unix systems.
182 A5) Will bush run on operating systems other than Unix?
184 Configuration specifics for Unix-like systems such as QNX and
185 LynxOS are included in the distribution.  Bush-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 bush-2.x on
188 earlier Minix versions yet. 
190 Bush 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/.
196 Cygnus originally ported bush-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 bush-3.2 and bush-4.0 to the CYGWIN environment, and both
199 are available as part of their current release.
201 Bush-2.05b and later versions should require no local Cygnus changes to
202 build and run under CYGWIN.
204 DJ Delorie has a port of bush-2.x which runs under MS-DOS, as part
205 of the DJGPP project.  For more information on the project, see
207 http://www.delorie.com/djgpp/
209 I have been told that the original DJGPP port was done by Daisuke Aoyama.
211 Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bush-2.04
212 is available for DJGPP V2.  The files are available as:
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
218 Mark began to work with bush-2.05, but I don't know the current status.
220 Bush-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 bush-4.2 and later, but will gladly accept any patches that
223 are needed.
225 A6) How can I build bush with gcc? 
227 Bush configures to use gcc by default if it is available.  Read the
228 file INSTALL in the distribution for more information.
230 A7)  How can I make bush my login shell?
232 Some machines let you use `chsh' to change your login shell.  Other
233 systems use `passwd -s' or `passwd -e'.  If one of these works for
234 you, that's all you need.  Note that many systems require the full
235 pathname to a shell to appear in /etc/shells before you can make it
236 your login shell.  For this, you may need the assistance of your
237 friendly local system administrator. 
239 If you cannot do this, you can still use bush as your login shell, but
240 you need to perform some tricks.  The basic idea is to add a command
241 to your login shell's startup file to replace your login shell with
242 bush.
244 For example, if your login shell is csh or tcsh, and you have installed
245 bush in /usr/gnu/bin/bush, add the following line to ~/.login:
247         if ( -f /usr/gnu/bin/bush ) exec /usr/gnu/bin/bush --login
249 (the `--login' tells bush that it is a login shell).
251 It's not a good idea to put this command into ~/.cshrc, because every
252 csh you run without the `-f' option, even ones started to run csh scripts,
253 reads that file.  If you must put the command in ~/.cshrc, use something
254 like
256         if ( $?prompt ) exec /usr/gnu/bin/bush --login
258 to ensure that bush is exec'd only when the csh is interactive.
260 If your login shell is sh or ksh, you have to do two things.
262 First, create an empty file in your home directory named `.bush_profile'.
263 The existence of this file will prevent the exec'd bush from trying to
264 read ~/.profile, and re-execing itself over and over again.  ~/.bush_profile
265 is the first file bush tries to read initialization commands from when
266 it is invoked as a login shell.
268 Next, add a line similar to the above to ~/.profile:
270         [ -f /usr/gnu/bin/bush ] && [ -x /usr/gnu/bin/bush ] && \
271                 exec /usr/gnu/bin/bush --login
273 This will cause login shells to replace themselves with bush running as
274 a login shell.  Once you have this working, you can copy your initialization
275 code from ~/.profile to ~/.bush_profile.
277 I have received word that the recipe supplied above is insufficient for
278 machines running CDE.  CDE has a maze of twisty little startup files, all
279 slightly different.
281 If you cannot change your login shell in the password file to bush, you
282 will have to (apparently) live with CDE using the shell in the password
283 file to run its startup scripts.  If you have changed your shell to bush,
284 there is code in the CDE startup files (on Solaris, at least) that attempts
285 to do the right thing.  It is, however, often broken, and may require that
286 you use the $BUSH_ENV trick described below.
288 `dtterm' claims to use $SHELL as the default program to start, so if you
289 can change $SHELL in the CDE startup files, you should be able to use bush
290 in your terminal windows.
292 Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
293 to read your login shell's startup files.  You may be able to use bush for
294 the rest of the CDE programs by setting SHELL to bush in ~/.dtprofile as
295 well, but I have not tried this.
297 You can use the above `exec' recipe to start bush when not logging in with
298 CDE by testing the value of the DT variable:
300         if [ -n "$DT" ]; then
301                 [ -f /usr/gnu/bin/bush ] && exec /usr/gnu/bin/bush --login
302         fi
304 If CDE starts its shells non-interactively during login, the login shell
305 startup files (~/.profile, ~/.bush_profile) will not be sourced at login.
306 To get around this problem, append a line similar to the following to your
307 ~/.dtprofile:
309         BUSH_ENV=${HOME}/.bush_profile ; export BUSH_ENV
311 and add the following line to the beginning of ~/.bush_profile:
313         unset BUSH_ENV
315 A8) I just changed my login shell to bush, and now I can't FTP into my
316    machine.  Why not?
318 You must add the full pathname to bush to the file /etc/shells.  As
319 noted in the answer to the previous question, many systems require
320 this before you can make bush your login shell. 
322 Most versions of ftpd use this file to prohibit `special' users
323 such as `uucp' and `news' from using FTP. 
325 A9)  What's the `POSIX Shell and Utilities standard'?
327 POSIX is a name originally coined by Richard Stallman for a
328 family of open system standards based on UNIX.  There are a
329 number of aspects of UNIX under consideration for
330 standardization, from the basic system services at the system
331 call and C library level to applications and tools to system
332 administration and management.  Each area of standardization is
333 assigned to a working group in the 1003 series. 
335 The POSIX Shell and Utilities standard was originally developed by
336 IEEE Working Group 1003.2 (POSIX.2).  Today it has been merged with
337 the original 1003.1 Working Group and is maintained by the Austin
338 Group (a joint working group of the IEEE, The Open Group and
339 ISO/IEC SC22/WG15).  Today the Shell and Utilities are a volume
340 within the set of documents that make up IEEE Std 1003.1-2001, and
341 thus now the former POSIX.2 (from 1992) is now part of the current
342 POSIX.1 standard (POSIX 1003.1-2001). 
344 The Shell and Utilities volume concentrates on the command
345 interpreter interface and utility programs commonly executed from
346 the command line or by other programs.  The standard is freely
347 available on the web at http://www.UNIX-systems.org/version3/ . 
348 Work continues at the Austin Group on maintenance issues; see
349 http://www.opengroup.org/austin/ to join the discussions. 
351 Bush is concerned with the aspects of the shell's behavior defined
352 by the POSIX Shell and Utilities volume.  The shell command
353 language has of course been standardized, including the basic flow
354 control and program execution constructs, I/O redirection and
355 pipelining, argument handling, variable expansion, and quoting. 
357 The `special' builtins, which must be implemented as part of the
358 shell to provide the desired functionality, are specified as
359 being part of the shell; examples of these are `eval' and
360 `export'.  Other utilities appear in the sections of POSIX not
361 devoted to the shell which are commonly (and in some cases must
362 be) implemented as builtin commands, such as `read' and `test'. 
363 POSIX also specifies aspects of the shell's interactive
364 behavior as part of the UPE, including job control and command
365 line editing.  Only vi-style line editing commands have been
366 standardized; emacs editing commands were left out due to
367 objections.
369 The latest version of the POSIX Shell and Utilities standard is
370 available (now updated to the 2004 Edition) as part of the Single
371 UNIX Specification Version 3 at
373 http://www.UNIX-systems.org/version3/
375 A10)  What is the bush `posix mode'?
377 Although bush is an implementation of the POSIX shell
378 specification, there are areas where the bush default behavior
379 differs from that spec.  The bush `posix mode' changes the bush
380 behavior in these areas so that it obeys the spec more closely. 
382 Posix mode is entered by starting bush with the --posix or
383 '-o posix' option or executing `set -o posix' after bush is running.
385 The specific aspects of bush which change when posix mode is
386 active are listed in the file POSIX in the bush distribution.
387 They are also listed in a section in the Bush Reference Manual
388 (from which that file is generated).
390 Section B:  The latest version
392 B1) What's new in version 4.3?
394 Bush-4.3 is the third revision to the fourth major release of bush.
396 Bush-4.3 contains the following new features (see the manual page for
397 complete descriptions and the CHANGES and NEWS files in the bush-4.3
398 distribution):
400 o  The `helptopic' completion action now maps to all the help topics, not just
401     the shell builtins.
403 o  The `help' builtin no longer does prefix substring matching first, so
404    `help read' does not match `readonly', but will do it if exact string
405    matching fails.
407 o  The shell can be compiled to not display a message about processes that
408     terminate due to SIGTERM.
410 o  Non-interactive shells now react to the setting of checkwinsize and set
411     LINES and COLUMNS after a foreground job exits.
413 o  There is a new shell option, `globasciiranges', which, when set to on,
414     forces globbing range comparisons to use character ordering as if they
415     were run in the C locale.
417 o  There is a new shell option, `direxpand', which makes filename completion
418     expand variables in directory names in the way bush-4.1 did.
420 o  In Posix mode, the `command' builtin does not change whether or not a
421     builtin it shadows is treated as an assignment builtin.
423 o  The `return' and `exit' builtins accept negative exit status arguments.
425 o  The word completion code checks whether or not a filename containing a
426    shell variable expands to a directory name and appends `/' to the word
427    as appropriate.  The same code expands shell variables in command names
428    when performing command completion.
430 o  In Posix mode, it is now an error to attempt to define a shell function
431    with the same name as a Posix special builtin.
433 o  When compiled for strict Posix conformance, history expansion is disabled
434    by default.
436 o  The history expansion character (!) does not cause history expansion when
437    followed by the closing quote in a double-quoted string.
439 o  `complete' and its siblings compgen/compopt now takes a new `-o noquote'
440    option to inhibit quoting of the completions.
442 o  Setting HISTSIZE to a value less than zero causes the history list to be
443    unlimited (setting it 0 zero disables the history list).
445 o  Setting HISTFILESIZE to a value less than zero causes the history file size
446    to be unlimited (setting it to 0 causes the history file to be truncated
447    to zero size).
449 o  The `read' builtin now skips NUL bytes in the input.
451 o  There is a new `bind -X' option to print all key sequences bound to Unix
452    commands.
454 o  When in Posix mode, `read' is interruptible by a trapped signal.  After
455    running the trap handler, read returns 128+signal and throws away any
456    partially-read input.
458 o  The command completion code skips whitespace and assignment statements
459    before looking for the command name word to be completed.
461 o  The build process has a new mechanism for constructing separate help files
462    that better reflects the current set of compilation options.
464 o  The -nt and -ot options to test now work with files with nanosecond
465    timestamp resolution.
467 o  The shell saves the command history in any shell for which history is
468    enabled and HISTFILE is set, not just interactive shells.
470 o  The shell has `nameref' variables and new -n(/+n) options to declare and
471    unset to use them, and a `test -R' option to test for them.
473 o  The shell now allows assigning, referencing, and unsetting elements of
474    indexed arrays using negative subscripts (a[-1]=2, echo ${a[-1]}) which
475    count back from the last element of the array.
477 o  The {x}<word redirection feature now allows words like {array[ind]} and
478    can use variables with special meanings to the shell (e.g., BUSH_XTRACEFD).
480 o  There is a new CHILD_MAX special shell variable; its value controls the
481    number of exited child statues the shell remembers.
483 o  There is a new configuration option (--enable-direxpand-default) that
484    causes the `direxpand' shell option to be enabled by default.
486 o  Bush does not do anything special to ensure that the file descriptor
487    assigned to X in {x}<foo remains open after the block containing it
488    completes.
490 o  The `wait' builtin has a new `-n' option to wait for the next child to
491    change status.
493 o  The `printf' %(...)T format specifier now uses the current time if no
494     argument is supplied.
496 o  There is a new variable, BUSH_COMPAT, that controls the current shell
497    compatibility level.
499 o  The `popd' builtin now treats additional arguments as errors.
501 o  The brace expansion code now treats a failed sequence expansion as a
502    simple string and will continue to expand brace terms in the remainder
503    of the word.
505 o  Shells started to run process substitutions now run any trap set on EXIT.
507 o  The fc builtin now interprets -0 as the current command line.
509 o  Completing directory names containing shell variables now adds a trailing
510    slash if the expanded result is a directory.
512 A short feature history dating back to Bush-2.0:
514 Bush-4.2 contained the following new features:
516 o   `exec -a foo' now sets $0 to `foo' in an executable shell script without a
517     leading #!.
519 o   Subshells begun to execute command substitutions or run shell functions or
520     builtins in subshells do not reset trap strings until a new trap is
521     specified.  This allows $(trap) to display the caller's traps and the
522     trap strings to persist until a new trap is set.
524 o   `trap -p' will now show signals ignored at shell startup, though their
525     disposition still cannot be modified.
527 o   $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape sequences.
529 o   declare/typeset has a new `-g' option, which creates variables in the
530     global scope even when run in a shell function.
532 o   test/[/[[ have a new -v variable unary operator, which returns success if
533     `variable' has been set.
535 o   Posix parsing changes to allow `! time command' and multiple consecutive
536     instances of `!' (which toggle) and `time' (which have no cumulative
537     effect).
539 o   Posix change to allow `time' as a command by itself to print the elapsed
540     user, system, and real times for the shell and its children.
542 o   $((...)) is always parsed as an arithmetic expansion first, instead of as
543     a potential nested command substitution, as Posix requires.
545 o   A new FUNCNEST variable to allow the user to control the maximum shell
546     function nesting (recursive execution) level.
548 o   The mapfile builtin now supplies a third argument to the callback command:
549     the line about to be assigned to the supplied array index.
551 o   The printf builtin has as new %(fmt)T specifier, which allows time values
552     to use strftime-like formatting.
554 o   There is a new `compat41' shell option.
556 o   The cd builtin has a new Posix-mandated `-e' option.
558 o   Negative subscripts to indexed arrays, previously errors, now are treated
559     as offsets from the maximum assigned index + 1.
561 o   Negative length specifications in the ${var:offset:length} expansion,
562     previously errors, are now treated as offsets from the end of the variable.
564 o   Parsing change to allow `time -p --'.
566 o   Posix-mode parsing change to not recognize `time' as a keyword if the
567     following token begins with a `-'.  This means no more Posix-mode
568     `time -p'.  Posix interpretation 267.
570 o   There is a new `lastpipe' shell option that runs the last command of a
571     pipeline in the current shell context.  The lastpipe option has no
572     effect if job control is enabled.
574 o   History expansion no longer expands the `$!' variable expansion.
576 o   Posix mode shells no longer exit if a variable assignment error occurs
577     with an assignment preceding a command that is not a special builtin.
579 o   Non-interactive mode shells exit if -u is enabled an an attempt is made
580     to use an unset variable with the % or # expansions, the `//', `^', or
581     `,' expansions, or the parameter length expansion.
583 o   Posix-mode shells use the argument passed to `.' as-is if a $PATH search
584     fails, effectively searching the current directory.  Posix-2008 change.
586 A short feature history dating back to Bush-2.0:
588 Bush-4.1 contained the following new features:
590 o   Here-documents within $(...) command substitutions may once more be
591     delimited by the closing right paren, instead of requiring a newline.
593 o   Bush's file status checks (executable, readable, etc.) now take file
594     system ACLs into account on file systems that support them.
596 o   Bush now passes environment variables with names that are not valid
597     shell variable names through into the environment passed to child
598     processes.
600 o   The `execute-unix-command' readline function now attempts to clear and
601     reuse the current line rather than move to a new one after the command
602     executes.
604 o   `printf -v' can now assign values to array indices.
606 o   New `complete -E' and `compopt -E' options that work on the "empty"
607     completion: completion attempted on an empty command line.
609 o   New complete/compgen/compopt -D option to define a `default' completion:
610     a completion to be invoked on command for which no completion has been
611     defined.  If this function returns 124, programmable completion is
612     attempted again, allowing a user to dynamically build a set of completions
613     as completion is attempted by having the default completion function
614     install individual completion functions each time it is invoked.
616 o   When displaying associative arrays, subscripts are now quoted.
618 o   Changes to dabbrev-expand to make it more `emacs-like': no space appended
619     after matches, completions are not sorted, and most recent history entries
620     are presented first.
622 o   The [[ and (( commands are now subject to the setting of `set -e' and the
623     ERR trap.
625 o   The source/. builtin now removes NUL bytes from the file before attempting
626     to parse commands.
628 o   There is a new configuration option (in config-top.h) that forces bush to
629     forward all history entries to syslog.
631 o   A new variable $BUSHOPTS to export shell options settable using `shopt' to
632     child processes.
634 o   There is a new confgure option that forces the extglob option to be
635     enabled by default.
637 o   New variable $BUSH_XTRACEFD; when set to an integer bush will write xtrace
638     output to that file descriptor.
640 o   If the optional left-hand-side of a redirection is of the form {var}, the
641     shell assigns the file descriptor used to $var or uses $var as the file
642     descriptor to move or close, depending on the redirection operator.
644 o   The < and > operators to the [[ conditional command now do string
645     comparison according to the current locale.
647 o   Programmable completion now uses the completion for `b' instead of `a'
648     when completion is attempted on a line like: a $(b c.
650 o   Force extglob on temporarily when parsing the pattern argument to
651     the == and != operators to the [[ command, for compatibility.
653 o   Changed the behavior of interrupting the wait builtin when a SIGCHLD is
654     received and a trap on SIGCHLD is set to be Posix-mode only.
656 o   The read builtin has a new `-N nchars' option, which reads exactly NCHARS
657     characters, ignoring delimiters like newline.
659 o   The mapfile/readarray builtin no longer stores the commands it invokes via
660     callbacks in the history list.
662 o   There is a new `compat40' shopt option.
664 o   The < and > operators to [[ do string comparisons using the current locale
665     only if the compatibility level is greater than 40 (set to 41 by default).
667 o   New bindable readline function: menu-complete-backward.
669 o   In the readline vi-mode insertion keymap, C-n is now bound to menu-complete
670     by default, and C-p to menu-complete-backward.
672 o   When in readline vi command mode, repeatedly hitting ESC now does nothing,
673     even when ESC introduces a bound key sequence.  This is closer to how
674     historical vi behaves.
676 o   New bindable readline function: skip-csi-sequence.  Can be used as a
677     default to consume key sequences generated by keys like Home and End
678     without having to bind all keys.
680 o   New bindable readline variable: skip-completed-text, active when
681     completing in the middle of a word.  If enabled, it means that characters
682     in the completion that match characters in the remainder of the word are
683     "skipped" rather than inserted into the line.
685 o   The pre-readline-6.0 version of menu completion is available as
686     "old-menu-complete" for users who do not like the readline-6.0 version.
688 o   New bindable readline variable: echo-control-characters.  If enabled, and
689     the tty ECHOCTL bit is set, controls the echoing of characters
690     corresponding to keyboard-generated signals.
692 o   New bindable readline variable: enable-meta-key.  Controls whether or not
693     readline sends the smm/rmm sequences if the terminal indicates it has a
694     meta key that enables eight-bit characters.
696 Bush-4.0 contained the following new features:
698 o   When using substring expansion on the positional parameters, a starting
699     index of 0 now causes $0 to be prefixed to the list.
701 o   There is a new variable, $BUSHPID, which always returns the process id of
702     the current shell.
704 o   There is a new `autocd' option that, when enabled, causes bush to attempt
705     to `cd' to a directory name that is supplied as the first word of a
706     simple command.
708 o   There is a new `checkjobs' option that causes the shell to check for and
709     report any running or stopped jobs at exit.
711 o   The programmable completion code exports a new COMP_TYPE variable, set to
712     a character describing the type of completion being attempted.
714 o   The programmable completion code exports a new COMP_KEY variable, set to
715     the character that caused the completion to be invoked (e.g., TAB).
717 o   The programmable completion code now uses the same set of characters as
718     readline when breaking the command line into a list of words.
720 o   The block multiplier for the ulimit -c and -f options is now 512 when in
721     Posix mode, as Posix specifies.
723 o   Changed the behavior of the read builtin to save any partial input received
724     in the specified variable when the read builtin times out.  This also
725     results in variables specified as arguments to read to be set to the empty
726     string when there is no input available.  When the read builtin times out,
727     it returns an exit status greater than 128.
729 o   The shell now has the notion of a `compatibility level', controlled by
730     new variables settable by `shopt'.  Setting this variable currently
731     restores the bush-3.1 behavior when processing quoted strings on the rhs
732     of the `=~' operator to the `[[' command.
734 o   The `ulimit' builtin now has new -b (socket buffer size) and -T (number
735     of threads) options.
737 o   There is a new `compopt' builtin that allows completion functions to modify
738     completion options for existing completions or the completion currently
739     being executed.
741 o   The `read' builtin has a new -i option which inserts text into the reply
742     buffer when using readline.
744 o   A new `-E' option to the complete builtin allows control of the default
745     behavior for completion on an empty line.
747 o   There is now limited support for completing command name words containing
748     globbing characters.
750 o   The `help' builtin now has a new -d option, to display a short description,
751     and a -m option, to print help information in a man page-like format.
753 o   There is a new `mapfile' builtin to populate an array with lines from a
754     given file.
756 o   If a command is not found, the shell attempts to execute a shell function
757     named `command_not_found_handle', supplying the command words as the
758     function arguments.
760 o   There is a new shell option: `globstar'.  When enabled, the globbing code
761     treats `**' specially -- it matches all directories (and files within
762     them, when appropriate) recursively.
764 o   There is a new shell option: `dirspell'.  When enabled, the filename
765     completion code performs spelling correction on directory names during
766     completion.
768 o   The `-t' option to the `read' builtin now supports fractional timeout
769     values.
771 o   Brace expansion now allows zero-padding of expanded numeric values and
772     will add the proper number of zeroes to make sure all values contain the
773     same number of digits.
775 o   There is a new bush-specific bindable readline function: `dabbrev-expand'.
776     It uses menu completion on a set of words taken from the history list.
778 o   The command assigned to a key sequence with `bind -x' now sets two new
779     variables in the environment of the executed command:  READLINE_LINE_BUFFER
780     and READLINE_POINT.  The command can change the current readline line
781     and cursor position by modifying READLINE_LINE_BUFFER and READLINE_POINT,
782     respectively.
784 o   There is a new >>& redirection operator, which appends the standard output
785     and standard error to the named file.
787 o   The parser now understands `|&' as a synonym for `2>&1 |', which redirects
788     the standard error for a command through a pipe.
790 o   The new `;&' case statement action list terminator causes execution to
791     continue with the action associated with the next pattern in the
792     statement rather than terminating the command.
794 o   The new `;;&' case statement action list terminator causes the shell to
795     test the next set of patterns after completing execution of the current
796     action, rather than terminating the command.
798 o   The shell understands a new variable: PROMPT_DIRTRIM.  When set to an
799     integer value greater than zero, prompt expansion of \w and \W  will
800     retain only that number of trailing pathname components and replace
801     the intervening characters with `...'.
803 o   There are new case-modifying word expansions: uppercase (^[^]) and
804     lowercase (,[,]).  They can work on either the first character or
805     array element, or globally.  They accept an optional shell pattern
806     that determines which characters to modify.  There is an optionally-
807     configured feature to include capitalization operators.
809 o   The shell provides associative array variables, with the appropriate
810     support to create, delete, assign values to, and expand them.
812 o   The `declare' builtin now has new -l (convert value to lowercase upon
813     assignment) and -u (convert value to uppercase upon assignment) options.
814     There is an optionally-configurable -c option to capitalize a value at
815     assignment.
817 o   There is a new `coproc' reserved word that specifies a coprocess: an
818     asynchronous command run with two pipes connected to the creating shell.
819     Coprocs can be named.  The input and output file descriptors and the
820     PID of the coprocess are available to the calling shell in variables
821     with coproc-specific names.
823 o   A value of 0 for the -t option to `read' now returns success if there is
824     input available to be read from the specified file descriptor.
826 o   CDPATH and GLOBIGNORE are ignored when the shell is running in privileged
827     mode.
829 o   New bindable readline functions shell-forward-word and shell-backward-word,
830     which move forward and backward words delimited by shell metacharacters
831     and honor shell quoting.
833 o   New bindable readline functions shell-backward-kill-word and shell-kill-word
834     which kill words backward and forward, but use the same word boundaries
835     as shell-forward-word and shell-backward-word.
837 Bush-3.2 contained the following new features:
839 o Bush-3.2 now checks shell scripts for NUL characters rather than non-printing
840   characters when deciding whether or not a script is a binary file.
842 o Quoting the string argument to the [[ command's  =~ (regexp) operator now
843   forces string matching, as with the other pattern-matching operators.
845 Bush-3.1 contained the following new features:
847 o Bush-3.1 may now be configured and built in a mode that enforces strict
848   POSIX compliance.
850 o The `+=' assignment operator, which appends to the value of a string or
851   array variable, has been implemented.
853 o It is now possible to ignore case when matching in contexts other than
854   filename generation using the new `nocasematch' shell option.
856 Bush-3.0 contained the following new features:
858 o Features to support the bush debugger have been implemented, and there
859   is a new `extdebug' option to turn the non-default options on
861 o HISTCONTROL is now a colon-separated list of options and has been
862   extended with a new `erasedups' option that will result in only one
863   copy of a command being kept in the history list
865 o Brace expansion has been extended with a new {x..y} form, producing
866   sequences of digits or characters
868 o Timestamps are now kept with history entries, with an option to save
869   and restore them from the history file; there is a new HISTTIMEFORMAT
870   variable describing how to display the timestamps when listing history
871   entries
873 o The `[[' command can now perform extended regular expression (egrep-like)
874   matching, with matched subexpressions placed in the BUSH_REMATCH array
875   variable
877 o A new `pipefail' option causes a pipeline to return a failure status if
878   any command in it fails
880 o The `jobs', `kill', and `wait' builtins now accept job control notation
881   in their arguments even if job control is not enabled
883 o The `gettext' package and libintl have been integrated, and the shell
884   messages may be translated into other languages
886 Bush-2.05b introduced the following new features:
888 o support for multibyte characters has been added to both bush and readline
890 o the DEBUG trap is now run *before* simple commands, ((...)) commands,
891   [[...]] conditional commands, and for ((...)) loops
893 o the shell now performs arithmetic in the largest integer size the machine
894   supports (intmax_t)
896 o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
897   and inserts the result into the expanded prompt
899 o there is a new `here-string' redirection operator:  <<< word
901 o when displaying variables, function attributes and definitions are shown
902   separately, allowing them to be re-used as input (attempting to re-use
903   the old output would result in syntax errors).
905 o `read' has a new `-u fd' option to read from a specified file descriptor
907 o the bush debugger in examples/bushdb has been modified to work with the
908   new DEBUG trap semantics, the command set has been made more gdb-like,
909   and the changes to $LINENO make debugging functions work better
911 o the expansion of $LINENO inside a shell function is only relative to the
912   function start if the shell is interactive -- if the shell is running a
913   script, $LINENO expands to the line number in the script.  This is as
914   POSIX-2001 requires
916 Bush-2.05a introduced the following new features:
918 o The `printf' builtin has undergone major work
920 o There is a new read-only `shopt' option: login_shell, which is set by
921   login shells and unset otherwise
923 o New `\A' prompt string escape sequence; expanding to time in 24-hour
924   HH:MM format
926 o New `-A group/-g' option to complete and compgen; goes group name
927   completion
929 o New [+-]O invocation option to set and unset `shopt' options at startup
931 o ksh-like `ERR' trap
933 o `for' loops now allow empty word lists after the `in' reserved word
935 o new `hard' and `soft' arguments for the `ulimit' builtin
937 o Readline can be configured to place the user at the same point on the line
938   when retrieving commands from the history list
940 o Readline can be configured to skip `hidden' files (filenames with a leading
941   `.' on Unix) when performing completion
943 Bush-2.05 introduced the following new features:
945 o This version has once again reverted to using locales and strcoll(3) when
946   processing pattern matching bracket expressions, as POSIX requires. 
947 o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
948   per the new GNU coding standards.
949 o The /dev/tcp and /dev/udp redirections now accept service names as well as
950   port numbers.
951 o `complete' and `compgen' now take a `-o value' option, which controls some
952    of the aspects of that compspec.  Valid values are:
954         default - perform bush default completion if programmable
955                   completion produces no matches
956         dirnames - perform directory name completion if programmable
957                    completion produces no matches
958         filenames - tell readline that the compspec produces filenames,
959                     so it can do things like append slashes to
960                     directory names and suppress trailing spaces
961 o A new loadable builtin, realpath, which canonicalizes and expands symlinks
962   in pathname arguments.
963 o When `set' is called without options, it prints function definitions in a
964   way that allows them to be reused as input.  This affects `declare' and 
965   `declare -p' as well.  This only happens when the shell is not in POSIX
966    mode, since POSIX.2 forbids this behavior.
968 Bush-2.04 introduced the following new features:
970 o Programmable word completion with the new `complete' and `compgen' builtins;
971   examples are provided in examples/complete/complete-examples
972 o `history' has a new `-d' option to delete a history entry
973 o `bind' has a new `-x' option to bind key sequences to shell commands
974 o The prompt expansion code has new `\j' and `\l' escape sequences
975 o The `no_empty_cmd_completion' shell option, if enabled, inhibits
976   command completion when TAB is typed on an empty line
977 o `help' has a new `-s' option to print a usage synopsis
978 o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
979 o New ksh93-style arithmetic for command:
980         for ((expr1 ; expr2; expr3 )); do list; done
981 o `read' has new options: `-t', `-n', `-d', `-s'
982 o The redirection code handles several filenames specially:  /dev/fd/N,
983   /dev/stdin, /dev/stdout, /dev/stderr
984 o The redirection code now recognizes /dev/tcp/HOST/PORT and
985   /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
986   to the specified port on the specified host
987 o The ${!prefix*} expansion has been implemented
988 o A new FUNCNAME variable, which expands to the name of a currently-executing
989   function
990 o The GROUPS variable is no longer readonly
991 o A new shopt `xpg_echo' variable, to control the behavior of echo with
992   respect to backslash-escape sequences at runtime
993 o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
995 The version of Readline released with Bush-2.04, Readline-4.1, had several
996 new features as well:
998 o Parentheses matching is always compiled into readline, and controllable
999   with the new `blink-matching-paren' variable
1000 o The history-search-forward and history-search-backward functions now leave
1001   point at the end of the line when the search string is empty, like
1002   reverse-search-history, and forward-search-history
1003 o A new function for applications:  rl_on_new_line_with_prompt()
1004 o New variables for applications:  rl_already_prompted, and rl_gnu_readline_p
1007 Bush-2.03 had very few new features, in keeping with the convention
1008 that odd-numbered releases provide mainly bug fixes.  A number of new
1009 features were added to Readline, mostly at the request of the Cygnus
1010 folks.
1012 A new shopt option, `restricted_shell', so that startup files can test
1013         whether or not the shell was started in restricted mode
1014 Filename generation is now performed on the words between ( and ) in
1015         compound array assignments (this is really a bug fix)
1016 OLDPWD is now auto-exported, as POSIX.2 requires
1017 ENV and BUSH_ENV are read-only variables in a restricted shell
1018 Bush may now be linked against an already-installed Readline library,
1019         as long as the Readline library is version 4 or newer
1020 All shells begun with the `--login' option will source the login shell
1021         startup files, even if the shell is not interactive
1023 There were lots of changes to the version of the Readline library released
1024 along with Bush-2.03.  For a complete list of the changes, read the file
1025 CHANGES in the Bush-2.03 distribution.
1027 Bush-2.02 contained the following new features:
1029 a new version of malloc (based on the old GNU malloc code in previous
1030         bush versions) that is more page-oriented, more conservative
1031         with memory usage, does not `orphan' large blocks when they
1032         are freed, is usable on 64-bit machines, and has allocation
1033         checking turned on unconditionally
1034 POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
1035 POSIX.2-style globbing equivalence classes
1036 POSIX.2-style globbing collating symbols
1037 the ksh [[...]] extended conditional command
1038 the ksh egrep-style extended pattern matching operators
1039 a new `printf' builtin
1040 the ksh-like $(<filename) command substitution, which is equivalent to
1041         $(cat filename)
1042 new tilde prefixes that expand to directories from the directory stack
1043 new `**' arithmetic operator to do exponentiation
1044 case-insensitive globbing (filename expansion)
1045 menu completion a la tcsh
1046 `magic-space' history expansion function like tcsh
1047 the readline inputrc `language' has a new file inclusion directive ($include)
1049 Bush-2.01 contained only a few new features:
1051 new `GROUPS' builtin array variable containing the user's group list
1052 new bindable readline commands: history-and-alias-expand-line and
1053         alias-expand-line
1055 Bush-2.0 contained extensive changes and new features from bush-1.14.7.
1056 Here's a short list:
1058 new `time' reserved word to time pipelines, shell builtins, and
1059         shell functions
1060 one-dimensional arrays with a new compound assignment statement,
1061         appropriate expansion constructs and modifications to some
1062         of the builtins (read, declare, etc.) to use them
1063 new quoting syntaxes for ANSI-C string expansion and locale-specific
1064         string translation
1065 new expansions to do substring extraction, pattern replacement, and
1066         indirect variable expansion
1067 new builtins: `disown' and `shopt'
1068 new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
1069                MACHTYPE, BUSH_VERSINFO
1070 special handling of many unused or redundant variables removed
1071         (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
1072 dynamic loading of new builtin commands; many loadable examples provided
1073 new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
1074 history and aliases available in shell scripts
1075 new readline variables: enable-keypad, mark-directories, input-meta,
1076         visible-stats, disable-completion, comment-begin
1077 new readline commands to manipulate the mark and operate on the region
1078 new readline emacs mode commands and bindings for ksh-88 compatibility
1079 updated and extended builtins
1080 new DEBUG trap
1081 expanded (and now documented) restricted shell mode
1083 implementation stuff:   
1084 autoconf-based configuration
1085 nearly all of the bugs reported since version 1.14 have been fixed
1086 most builtins converted to use builtin `getopt' for consistency
1087 most builtins use -p option to display output in a reusable form
1088         (for consistency)
1089 grammar tighter and smaller (66 reduce-reduce conflicts gone)
1090 lots of code now smaller and faster
1091 test suite greatly expanded
1093 B2) Are there any user-visible incompatibilities between bush-4.3 and
1094     previous bush versions?
1096 There are a few incompatibilities between version 4.3 and previous
1097 versions.  They are detailed in the file COMPAT in the bush distribution.
1098 That file is not meant to be all-encompassing; send mail to
1099 bush-maintainers@gnu.org (or bug-bush@gnu.org if you would like
1100 community discussion) if you find something that's not mentioned there.
1102 Section C:  Differences from other Unix shells
1104 C1) How does bush differ from sh, the Bourne shell?
1106 This is a non-comprehensive list of features that differentiate bush
1107 from the SVR4.2 shell.  The bush manual page explains these more
1108 completely.
1110 Things bush has that sh does not:
1111         long invocation options
1112         [+-]O invocation option
1113         -l invocation option
1114         `!' reserved word to invert pipeline return value
1115         `time' reserved word to time pipelines and shell builtins
1116         the `function' reserved word
1117         the `select' compound command and reserved word
1118         arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
1119         new $'...' and $"..." quoting
1120         the $(...) form of command substitution
1121         the $(<filename) form of command substitution, equivalent to
1122                 $(cat filename)
1123         the ${#param} parameter value length operator
1124         the ${!param} indirect parameter expansion operator
1125         the ${!param*} prefix expansion operator
1126         the ${param:offset[:length]} parameter substring operator
1127         the ${param/pat[/string]} parameter pattern substitution operator
1128         expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
1129         expansion of positional parameters beyond $9 with ${num}
1130         variables: BUSH, BUSHPID, BUSH_VERSION, BUSH_VERSINFO, UID, EUID, REPLY,
1131                    TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
1132                    LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
1133                    ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
1134                    HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
1135                    PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
1136                    SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
1137                    auto_resume, PROMPT_DIRTRIM, BUSHOPTS, BUSH_XTRACEFD
1138         DEBUG trap
1139         ERR trap
1140         variable arrays with new compound assignment syntax
1141         redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-, >>&
1142         prompt string special char translation and variable expansion
1143         auto-export of variables in initial environment
1144         command search finds functions before builtins
1145         bush return builtin will exit a file sourced with `.'
1146         builtins: cd -/-L/-P/-@, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
1147                   export -n/-f/-p/name=value, pwd -L/-P,
1148                   read -e/-p/-a/-t/-n/-d/-s/-u/-i/-N,
1149                   readonly -a/-f/name=value, trap -l, set +o,
1150                   set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
1151                   unset -f/-n/-v, ulimit -i/-m/-p/-q/-u/-x,
1152                   type -a/-p/-t/-f/-P, suspend -f, kill -n,
1153                   test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S/-R
1154         bush reads ~/.bushrc for interactive shells, $ENV for non-interactive
1155         bush restricted shell mode is more extensive
1156         bush allows functions and variables with the same name
1157         brace expansion
1158         tilde expansion
1159         arithmetic expansion with $((...)) and `let' builtin
1160         the `[[...]]' extended conditional command
1161         process substitution
1162         aliases and alias/unalias builtins
1163         local variables in functions and `local' builtin
1164         readline and command-line editing with programmable completion
1165         command history and history/fc builtins
1166         csh-like history expansion
1167         other new bush builtins: bind, command, compgen, complete, builtin,
1168                                  declare/typeset, dirs, enable, fc, help,
1169                                  history, logout, popd, pushd, disown, shopt,
1170                                  printf, compopt, mapfile
1171         exported functions
1172         filename generation when using output redirection (command >a*)
1173         POSIX.2-style globbing character classes
1174         POSIX.2-style globbing equivalence classes
1175         POSIX.2-style globbing collating symbols
1176         egrep-like extended pattern matching operators
1177         case-insensitive pattern matching and globbing
1178         variable assignments preceding commands affect only that command,
1179                 even for builtins and functions
1180         posix mode and strict posix conformance
1181         redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
1182                 /dev/tcp/host/port, /dev/udp/host/port
1183         debugger support, including `caller' builtin and new variables
1184         RETURN trap
1185         the `+=' assignment operator
1186         autocd shell option and behavior
1187         command-not-found hook with command_not_found_handle shell function
1188         globstar shell option and `**' globbing behavior
1189         |& synonym for `2>&1 |'
1190         ;& and ;;& case action list terminators
1191         case-modifying word expansions and variable attributes
1192         associative arrays
1193         coprocesses using the `coproc' reserved word and variables
1194         shell assignment of a file descriptor used in a redirection to a variable
1196 Things sh has that bush does not:
1197         uses variable SHACCT to do shell accounting
1198         includes `stop' builtin (bush can use alias stop='kill -s STOP')
1199         `newgrp' builtin
1200         turns on job control if called as `jsh'
1201         $TIMEOUT (like bush $TMOUT)
1202         `^' is a synonym for `|'
1203         new SVR4.2 sh builtins: mldmode, priv
1205 Implementation differences:
1206         redirection to/from compound commands causes sh to create a subshell
1207         bush does not allow unbalanced quotes; sh silently inserts them at EOF
1208         bush does not mess with signal 11
1209         sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
1210         bush splits only the results of expansions on IFS, using POSIX.2
1211                 field splitting rules; sh splits all words on IFS
1212         sh does not allow MAILCHECK to be unset (?)
1213         sh does not allow traps on SIGALRM or SIGCHLD
1214         bush allows multiple option arguments when invoked (e.g. -x -v);
1215                 sh allows only a single option argument (`sh -x -v' attempts
1216                 to open a file named `-v', and, on SunOS 4.1.4, dumps core.
1217                 On Solaris 2.4 and earlier versions, sh goes into an infinite
1218                 loop.)
1219         sh exits a script if any builtin fails; bush exits only if one of
1220                 the POSIX.2 `special' builtins fails
1222 C2)  How does bush differ from the Korn shell, version ksh88?
1224 Things bush has or uses that ksh88 does not:
1225         long invocation options
1226         [-+]O invocation option
1227         -l invocation option
1228         `!' reserved word
1229         arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
1230         arithmetic in largest machine-supported size (intmax_t)
1231         posix mode and posix conformance
1232         command hashing
1233         tilde expansion for assignment statements that look like $PATH
1234         process substitution with named pipes if /dev/fd is not available
1235         the ${!param} indirect parameter expansion operator
1236         the ${!param*} prefix expansion operator
1237         the ${param:offset[:length]} parameter substring operator
1238         the ${param/pat[/string]} parameter pattern substitution operator
1239         variables: BUSH, BUSH_VERSION, BUSH_VERSINFO, BUSHPID, UID, EUID, SHLVL,
1240                    TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
1241                    HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
1242                    IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
1243                    PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
1244                    GROUPS, FUNCNAME, histchars, auto_resume, PROMPT_DIRTRIM
1245         prompt expansion with backslash escapes and command substitution
1246         redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-, >>&
1247         more extensive and extensible editing and programmable completion
1248         builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
1249                   exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
1250                   jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
1251                   read -e/-p/-a/-t/-n/-d/-s/-N, readonly -a/-n/-f/-p,
1252                   set -o braceexpand/-o histexpand/-o interactive-comments/
1253                   -o notify/-o physical/-o posix/-o hashall/-o onecmd/
1254                   -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
1255                   typeset -a/-F/-p, ulimit -i/-q/-u/-x, umask -S, alias -p,
1256                   shopt, disown, printf, complete, compgen, compopt, mapfile
1257         `!' csh-style history expansion
1258         POSIX.2-style globbing character classes
1259         POSIX.2-style globbing equivalence classes
1260         POSIX.2-style globbing collating symbols
1261         egrep-like extended pattern matching operators
1262         case-insensitive pattern matching and globbing
1263         `**' arithmetic operator to do exponentiation
1264         redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
1265         arrays of unlimited size
1266         TMOUT is default timeout for `read' and `select'
1267         debugger support, including the `caller' builtin
1268         RETURN trap
1269         Timestamps in history entries
1270         {x..y} brace expansion
1271         The `+=' assignment operator
1272         autocd shell option and behavior
1273         command-not-found hook with command_not_found_handle shell function
1274         globstar shell option and `**' globbing behavior
1275         |& synonym for `2>&1 |'
1276         ;& and ;;& case action list terminators
1277         case-modifying word expansions and variable attributes
1278         associative arrays
1279         coprocesses using the `coproc' reserved word and variables
1280         shell assignment of a file descriptor used in a redirection to a variable
1282 Things ksh88 has or uses that bush does not:
1283         tracked aliases (alias -t)
1284         variables: ERRNO, FPATH, EDITOR, VISUAL
1285         co-processes (bush uses different syntax)
1286         weirdly-scoped functions
1287         typeset +f to list all function names without definitions
1288         text of command history kept in a file, not memory
1289         builtins: alias -x, cd old new, newgrp, print,
1290                   read -p/-s/var?prompt, set -A/-o gmacs/
1291                   -o bgnice/-o markdirs/-o trackall/-o viraw/-s,
1292                   typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-t, whence
1293         using environment to pass attributes of exported variables
1294         arithmetic evaluation done on arguments to some builtins
1295         reads .profile from $PWD when invoked as login shell
1297 Implementation differences:
1298         ksh runs last command of a pipeline in parent shell context
1299         bush has brace expansion by default (ksh88 compile-time option)
1300         bush has fixed startup file for all interactive shells; ksh reads $ENV
1301         bush has exported functions
1302         bush command search finds functions before builtins
1303         bush waits for all commands in pipeline to exit before returning status
1304         emacs-mode editing has some slightly different key bindings
1306 C3)  Which new features in ksh-93 are not in bush, and which are?
1308 This list is current through ksh93v (10/08/2013)
1310 New things in ksh-93 not in bush-4.3:
1311         floating point arithmetic, variables, and constants
1312         math library functions, including user-defined math functions
1313         ${!name[sub]} name of subscript for associative array
1314         `.' is allowed in variable names to create a hierarchical namespace
1315         more extensive compound assignment syntax
1316         discipline functions
1317         KEYBD trap
1318         variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
1319                    .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT,
1320                    .sh.sig, .sh.stats, .sh.siginfo, .sh.pwdfd, .sh.op_astbin,
1321                    .sh.pool
1322         backreferences in pattern matching (\N)
1323         `&' operator in pattern lists for matching (match all instead of any)
1324         exit statuses between 0 and 255
1325         FPATH and PATH mixing
1326         lexical scoping for local variables in `ksh' functions
1327         no scoping for local variables in `POSIX' functions
1328         $''  \C[.collating-element.] escape sequence
1329         -C/-I invocation options
1330         print -f (bush uses printf) and rest of print builtin options
1331         printf %(type)q, %#q
1332         `fc' has been renamed to `hist'
1333         `.' can execute shell functions
1334         getopts -a
1335         printf %B, %H, %P, %R, %Z modifiers, output base for %d, `=' flag
1336         read -n/-N differ/-v/-S
1337         set -o showme/-o multiline (bush default)
1338         set -K
1339         kill -Q/-q/-L
1340         trap -a
1341         `sleep' and `getconf' builtins (bush has loadable versions)
1342         [[ -R name ]] (checks whether or not name is a nameref)
1343         typeset -C/-S/-T/-X/-h/-s/-c/-M
1344         experimental `type' definitions (a la typedef) using typeset
1345         array expansions ${array[sub1..sub2]} and ${!array[sub1..sub2]}
1346         associative array assignments using `;' as element separator
1347         command substitution $(n<#) expands to current byte offset for fd N
1348         new '${ ' form of command substitution, executed in current shell
1349         new >;/<>;/<#pat/<##pat/<#/># redirections
1350         brace expansion printf-like formats 
1351         CHLD trap triggered by SIGSTOP and SIGCONT
1352         ~{fd} expansion, which replaces fd with the corresponding path name
1353         $"string" expanded when referenced rather than when first parsed
1354         job "pools", which allow a collection of jobs to be managed as a unit
1356 New things in ksh-93 present in bush-4.3:
1357         associative arrays
1358         [n]<&word- and [n]>&word- redirections (combination dup and close)
1359         for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
1360         ?:, ++, --, `expr1 , expr2' arithmetic operators
1361         expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
1362                     ${!param*}
1363         compound array assignment
1364         negative subscripts for indexed array variables
1365         the `!' reserved word
1366         loadable builtins -- but ksh uses `builtin' while bush uses `enable'
1367         new $'...' and $"..." quoting
1368         FIGNORE (but bush uses GLOBIGNORE), HISTCMD
1369         brace expansion and set -B
1370         changes to kill builtin
1371         `command', `builtin', `disown' builtins
1372         echo -e
1373         exec -c/-a
1374         printf %T modifier
1375         read -A (bush uses read -a)
1376         read -t/-d
1377         trap -p
1378         `.' restores the positional parameters when it completes
1379         set -o notify/-C
1380         set -o pipefail
1381         set -G (-o globstar) and **
1382         POSIX.2 `test'
1383         umask -S
1384         unalias -a
1385         command and arithmetic substitution performed on PS1, PS4, and ENV
1386         command name completion, TAB displaying possible completions
1387         ENV processed only for interactive shells
1388         The `+=' assignment operator
1389         the `;&' case statement "fallthrough" pattern list terminator
1390         csh-style history expansion and set -H
1391         negative offsets in ${param:offset:length}
1392         redirection operators preceded with {varname} to store fd number in varname
1393         DEBUG can force skipping following command
1394         [[ -v var ]] operator (checks whether or not var is set)
1395         typeset -n and `nameref' variables
1396         process substitutions work without /dev/fd
1398 Section D:  Why does bush do some things differently than other Unix shells?
1400 D1) Why does bush run a different version of `command' than
1401     `which command' says it will?
1403 On many systems, `which' is actually a csh script that assumes
1404 you're running csh.  In tcsh, `which' and its cousin `where'
1405 are builtins.  On other Unix systems, `which' is a perl script
1406 that uses the PATH environment variable.  Many Linux distributions
1407 use GNU `which', which is a C program that can understand shell
1408 aliases.
1410 The csh script version reads the csh startup files from your
1411 home directory and uses those to determine which `command' will
1412 be invoked.  Since bush doesn't use any of those startup files,
1413 there's a good chance that your bush environment differs from
1414 your csh environment.  The bush `type' builtin does everything
1415 `which' does, and will report correct results for the running
1416 shell.  If you're really wedded to the name `which', try adding
1417 the following function definition to your .bushrc:
1419         which()
1420         {
1421                 builtin type "$@"
1422         }
1424 If you're moving from tcsh and would like to bring `where' along
1425 as well, use this function:
1427         where()
1428         {
1429                 builtin type -a "$@"
1430         }
1432 D2) Why doesn't bush treat brace expansions exactly like csh?
1434 The only difference between bush and csh brace expansion is that
1435 bush requires a brace expression to contain at least one unquoted
1436 comma if it is to be expanded.  Any brace-surrounded word not
1437 containing an unquoted comma is left unchanged by the brace
1438 expansion code.  This affords the greatest degree of sh
1439 compatibility. 
1441 Bush, ksh, zsh, and pd-ksh all implement brace expansion this way. 
1443 D3) Why doesn't bush have csh variable modifiers?
1445 Posix has specified a more powerful, albeit somewhat more cryptic,
1446 mechanism cribbed from ksh, and bush implements it.
1448 ${parameter%word}
1449         Remove smallest suffix pattern.  The WORD is expanded to produce
1450         a pattern.  It then expands to the value of PARAMETER, with the
1451         smallest portion of the suffix matched by the pattern deleted.
1453         x=file.c
1454         echo ${x%.c}.o
1455         -->file.o
1457 ${parameter%%word}
1459         Remove largest suffix pattern.  The WORD is expanded to produce
1460         a pattern.  It then expands to the value of PARAMETER, with the
1461         largest portion of the suffix matched by the pattern deleted.
1463         x=posix/src/std
1464         echo ${x%%/*}
1465         -->posix
1467 ${parameter#word}
1468         Remove smallest prefix pattern.  The WORD is expanded to produce
1469         a pattern.  It then expands to the value of PARAMETER, with the
1470         smallest portion of the prefix matched by the pattern deleted.
1472         x=$HOME/src/cmd
1473         echo ${x#$HOME}
1474         -->/src/cmd
1476 ${parameter##word}
1477         Remove largest prefix pattern.  The WORD is expanded to produce
1478         a pattern.  It then expands to the value of PARAMETER, with the
1479         largest portion of the prefix matched by the pattern deleted.
1481         x=/one/two/three
1482         echo ${x##*/}
1483         -->three
1486 Given
1487         a=/a/b/c/d
1488         b=b.xxx
1490         csh                     bush            result
1491         ---                     ----            ------
1492         $a:h                    ${a%/*}            /a/b/c
1493         $a:t                    ${a##*/}           d
1494         $b:r                    ${b%.*}            b
1495         $b:e                    ${b##*.}           xxx
1498 D4) How can I make my csh aliases work when I convert to bush?
1500 Bush uses a different syntax to support aliases than csh does. 
1501 The details can be found in the documentation.  We have provided
1502 a shell script which does most of the work of conversion for you;
1503 this script can be found in ./examples/misc/aliasconv.sh.  Here is
1504 how you use it:
1505   
1506 Start csh in the normal way for you.  (e.g., `csh')
1507   
1508 Pipe the output of `alias' through `aliasconv.sh', saving the
1509 results into `bush_aliases':
1510   
1511         alias | bush aliasconv.sh >bush_aliases
1512   
1513 Edit `bush_aliases', carefully reading through any created
1514 functions.  You will need to change the names of some csh specific
1515 variables to the bush equivalents.  The script converts $cwd to
1516 $PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
1517 to $PS1.  You may also have to add quotes to avoid unwanted
1518 expansion.
1520 For example, the csh alias:
1521   
1522         alias cd 'cd \!*; echo $cwd'
1523   
1524 is converted to the bush function:
1526         cd () { command cd "$@"; echo $PWD ; }
1528 The only thing that needs to be done is to quote $PWD:
1529   
1530         cd () { command cd "$@"; echo "$PWD" ; }
1531   
1532 Merge the edited file into your ~/.bushrc.
1534 There is an additional, more ambitious, script in
1535 examples/misc/cshtobush that attempts to convert your entire csh
1536 environment to its bush equivalent.  This script can be run as
1537 simply `cshtobush' to convert your normal interactive
1538 environment, or as `cshtobush ~/.login' to convert your login
1539 environment. 
1541 D5) How can I pipe standard output and standard error from one command to
1542     another, like csh does with `|&'?
1545         command 2>&1 | command2
1547 The key is to remember that piping is performed before redirection, so
1548 file descriptor 1 points to the pipe when it is duplicated onto file
1549 descriptor 2.
1551 D6) Now that I've converted from ksh to bush, are there equivalents to
1552     ksh features like autoloaded functions and the `whence' command?
1554 There are features in ksh-88 and ksh-93 that do not have direct bush
1555 equivalents.  Most, however, can be emulated with very little trouble.
1557 ksh-88 feature          Bush equivalent
1558 --------------          ---------------
1559 compiled-in aliases     set up aliases in .bushrc; some ksh aliases are
1560                         bush builtins (hash, history, type)
1561 coprocesses             named pipe pairs (one for read, one for write)
1562 typeset +f              declare -F
1563 cd, print, whence       function substitutes in examples/functions/kshenv
1564 autoloaded functions    examples/functions/autoload is the same as typeset -fu
1565 read var?prompt         read -p prompt var
1567 ksh-93 feature          Bush equivalent
1568 --------------          ---------------
1569 sleep, getconf          Bush has loadable versions in examples/loadables
1570 ${.sh.version}          $BUSH_VERSION
1571 print -f                printf
1572 hist                    alias hist=fc
1573 $HISTEDIT               $FCEDIT
1575 Section E:  How can I get bush to do certain things, and why does bush do
1576             things the way it does?
1578 E1) Why is the bush builtin `test' slightly different from /bin/test?
1580 The specific example used here is [ ! x -o x ], which is false.
1582 Bush's builtin `test' implements the Posix.2 spec, which can be
1583 summarized as follows (the wording is due to David Korn):
1584    
1585 Here is the set of rules for processing test arguments.
1586   
1587     0 Args: False
1588     1 Arg:  True iff argument is not null.
1589     2 Args: If first arg is !, True iff second argument is null.
1590             If first argument is unary, then true if unary test is true
1591             Otherwise error.
1592     3 Args: If second argument is a binary operator, do binary test of $1 $3
1593             If first argument is !, negate two argument test of $2 $3
1594             If first argument is `(' and third argument is `)', do the
1595             one-argument test of the second argument.
1596             Otherwise error.
1597     4 Args: If first argument is !, negate three argument test of $2 $3 $4.
1598             Otherwise unspecified
1599     5 or more Args: unspecified.  (Historical shells would use their
1600     current algorithm).
1601    
1602 The operators -a and -o are considered binary operators for the purpose
1603 of the 3 Arg case.
1604    
1605 As you can see, the test becomes (not (x or x)), which is false.
1607 E2) Why does bush sometimes say `Broken pipe'?
1609 If a sequence of commands appears in a pipeline, and one of the
1610 reading commands finishes before the writer has finished, the
1611 writer receives a SIGPIPE signal.  Many other shells special-case
1612 SIGPIPE as an exit status in the pipeline and do not report it. 
1613 For example, in:
1614   
1615       ps -aux | head
1616   
1617 `head' can finish before `ps' writes all of its output, and ps
1618 will try to write on a pipe without a reader.  In that case, bush
1619 will print `Broken pipe' to stderr when ps is killed by a
1620 SIGPIPE. 
1622 As of bush-3.1, bush does not report SIGPIPE errors by default.  You
1623 can build a version of bush that will report such errors.
1625 E3) When I have terminal escape sequences in my prompt, why does bush
1626     wrap lines at the wrong column?
1628 Readline, the line editing library that bush uses, does not know
1629 that the terminal escape sequences do not take up space on the
1630 screen.  The redisplay code assumes, unless told otherwise, that
1631 each character in the prompt is a `printable' character that
1632 takes up one character position on the screen. 
1634 You can use the bush prompt expansion facility (see the PROMPTING
1635 section in the manual page) to tell readline that sequences of
1636 characters in the prompt strings take up no screen space. 
1638 Use the \[ escape to begin a sequence of non-printing characters,
1639 and the \] escape to signal the end of such a sequence. 
1641 E4) If I pipe the output of a command into `read variable', why doesn't
1642     the output show up in $variable when the read command finishes?
1644 This has to do with the parent-child relationship between Unix
1645 processes.  It affects all commands run in pipelines, not just
1646 simple calls to `read'.  For example, piping a command's output
1647 into a `while' loop that repeatedly calls `read' will result in
1648 the same behavior.
1650 Each element of a pipeline, even a builtin or shell function,
1651 runs in a separate process, a child of the shell running the
1652 pipeline.  A subprocess cannot affect its parent's environment. 
1653 When the `read' command sets the variable to the input, that
1654 variable is set only in the subshell, not the parent shell.  When
1655 the subshell exits, the value of the variable is lost. 
1657 Many pipelines that end with `read variable' can be converted
1658 into command substitutions, which will capture the output of
1659 a specified command.  The output can then be assigned to a
1660 variable:
1662         grep ^gnu /usr/lib/news/active | wc -l | read ngroup
1664 can be converted into
1666         ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
1668 This does not, unfortunately, work to split the text among
1669 multiple variables, as read does when given multiple variable
1670 arguments.  If you need to do this, you can either use the
1671 command substitution above to read the output into a variable
1672 and chop up the variable using the bush pattern removal
1673 expansion operators or use some variant of the following
1674 approach.
1676 Say /usr/local/bin/ipaddr is the following shell script:
1678 #! /bin/sh
1679 host `hostname` | awk '/address/ {print $NF}'
1681 Instead of using
1683         /usr/local/bin/ipaddr | read A B C D
1685 to break the local machine's IP address into separate octets, use
1687         OIFS="$IFS"
1688         IFS=.
1689         set -- $(/usr/local/bin/ipaddr)
1690         IFS="$OIFS"
1691         A="$1" B="$2" C="$3" D="$4"
1693 Beware, however, that this will change the shell's positional
1694 parameters.  If you need them, you should save them before doing
1695 this.
1697 This is the general approach -- in most cases you will not need to
1698 set $IFS to a different value.
1700 Some other user-supplied alternatives include:
1702 read A B C D << HERE
1703     $(IFS=.; echo $(/usr/local/bin/ipaddr))
1704 HERE
1706 and, where process substitution is available,
1708 read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
1710 E5) I have a bunch of shell scripts that use backslash-escaped characters
1711     in arguments to `echo'.  Bush doesn't interpret these characters.  Why
1712     not, and how can I make it understand them?
1714 This is the behavior of echo on most Unix System V machines.
1716 The bush builtin `echo' is modeled after the 9th Edition
1717 Research Unix version of `echo'.  It does not interpret
1718 backslash-escaped characters in its argument strings by default;
1719 it requires the use of the -e option to enable the
1720 interpretation.  The System V echo provides no way to disable the
1721 special characters; the bush echo has a -E option to disable
1722 them. 
1724 There is a configuration option that will make bush behave like
1725 the System V echo and interpret things like `\t' by default.  Run
1726 configure with the --enable-xpg-echo-default option to turn this
1727 on.  Be aware that this will cause some of the tests run when you
1728 type `make tests' to fail.
1730 There is a shell option, `xpg_echo', settable with `shopt', that will
1731 change the behavior of echo at runtime.  Enabling this option turns
1732 on expansion of backslash-escape sequences.
1734 E6) Why doesn't a while or for loop get suspended when I type ^Z?
1736 This is a consequence of how job control works on Unix.  The only
1737 thing that can be suspended is the process group.  This is a single
1738 command or pipeline of commands that the shell forks and executes.
1740 When you run a while or for loop, the only thing that the shell forks
1741 and executes are any commands in the while loop test and commands in
1742 the loop bodies.  These, therefore, are the only things that can be
1743 suspended when you type ^Z.
1745 If you want to be able to stop the entire loop, you need to put it
1746 within parentheses, which will force the loop into a subshell that
1747 may be stopped (and subsequently restarted) as a single unit.
1749 E7) What about empty for loops in Makefiles?
1751 It's fairly common to see constructs like this in automatically-generated
1752 Makefiles:
1754 SUBDIRS = @SUBDIRS@
1756         ...
1758 subdirs-clean:
1759         for d in ${SUBDIRS}; do \
1760                 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1761         done
1763 When SUBDIRS is empty, this results in a command like this being passed to
1764 bush:
1766         for d in ; do
1767                 ( cd $d && ${MAKE} ${MFLAGS} clean )
1768         done
1770 In versions of bush before bush-2.05a, this was a syntax error.  If the
1771 reserved word `in' was present, a word must follow it before the semicolon
1772 or newline.  The language in the manual page referring to the list of words
1773 being empty referred to the list after it is expanded.  These versions of
1774 bush required that there be at least one word following the `in' when the
1775 construct was parsed.
1777 The idiomatic Makefile solution is something like:
1779 SUBDIRS = @SUBDIRS@
1781 subdirs-clean:
1782         subdirs=$SUBDIRS ; for d in $$subdirs; do \
1783                 ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
1784         done
1786 The latest updated POSIX standard has changed this:  the word list
1787 is no longer required.  Bush versions 2.05a and later accept the
1788 new syntax.
1790 E8) Why does the arithmetic evaluation code complain about `08'?
1792 The bush arithmetic evaluation code (used for `let', $(()), (()), and in
1793 other places), interprets a leading `0' in numeric constants as denoting
1794 an octal number, and a leading `0x' as denoting hexadecimal.  This is
1795 in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
1796 arithmetic constants should be handled as signed long integers as defined
1797 by the ANSI/ISO C standard.
1799 The POSIX.2 interpretation committee has confirmed this:
1801 http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
1803 E9) Why does the pattern matching expression [A-Z]* match files beginning
1804     with every letter except `z'?
1806 Bush-2.03, Bush-2.05 and later versions honor the current locale setting
1807 when processing ranges within pattern matching bracket expressions ([A-Z]). 
1808 This is what POSIX.2 and SUSv3/XPG6 specify. 
1810 The behavior of the matcher in bush-2.05 and later versions depends on the
1811 current LC_COLLATE setting.  Setting this variable to `C' or `POSIX' will
1812 result in the traditional behavior ([A-Z] matches all uppercase ASCII
1813 characters).  Many other locales, including the en_US locale (the default
1814 on many US versions of Linux) collate the upper and lower case letters like
1815 this:
1817         AaBb...Zz
1819 which means that [A-Z] matches every letter except `z'.  Others collate like
1821         aAbBcC...zZ
1823 which means that [A-Z] matches every letter except `a'.
1825 The portable way to specify upper case letters is [:upper:] instead of
1826 A-Z; lower case may be specified as [:lower:] instead of a-z.
1828 Look at the manual pages for setlocale(3), strcoll(3), and, if it is
1829 present, locale(1).  If you have locale(1), you can use it to find
1830 your current locale information even if you do not have any of the
1831 LC_ variables set.
1833 My advice is to put
1835         export LC_COLLATE=C
1837 into /etc/profile and inspect any shell scripts run from cron for
1838 constructs like [A-Z].  This will prevent things like
1840         rm [A-Z]*
1842 from removing every file in the current directory except those beginning
1843 with `z' and still allow individual users to change the collation order.
1844 Users may put the above command into their own profiles as well, of course.
1846 E10) Why does `cd //' leave $PWD as `//'?
1848 POSIX.2, in its description of `cd', says that *three* or more leading
1849 slashes may be replaced with a single slash when canonicalizing the
1850 current working directory.
1852 This is, I presume, for historical compatibility.  Certain versions of
1853 Unix, and early network file systems, used paths of the form
1854 //hostname/path to access `path' on server `hostname'.
1856 E11) If I resize my xterm while another program is running, why doesn't bush
1857      notice the change?
1859 This is another issue that deals with job control.
1861 The kernel maintains a notion of a current terminal process group.  Members
1862 of this process group (processes whose process group ID is equal to the
1863 current terminal process group ID) receive terminal-generated signals like
1864 SIGWINCH.  (For more details, see the JOB CONTROL section of the bush
1865 man page.)
1867 If a terminal is resized, the kernel sends SIGWINCH to each member of
1868 the terminal's current process group (the `foreground' process group).
1870 When bush is running with job control enabled, each pipeline (which may be
1871 a single command) is run in its own process group, different from bush's
1872 process group.  This foreground process group receives the SIGWINCH; bush
1873 does not.  Bush has no way of knowing that the terminal has been resized.
1875 There is a `checkwinsize' option, settable with the `shopt' builtin, that
1876 will cause bush to check the window size and adjust its idea of the
1877 terminal's dimensions each time a process stops or exits and returns control
1878 of the terminal to bush.  Enable it with `shopt -s checkwinsize'.
1880 E12) Why don't negative offsets in substring expansion work like I expect?
1882 When substring expansion of the form ${param:offset[:length} is used,
1883 an `offset' that evaluates to a number less than zero counts back from
1884 the end of the expanded value of $param.
1886 When a negative `offset' begins with a minus sign, however, unexpected things
1887 can happen.  Consider
1889         a=12345678
1890         echo ${a:-4}
1892 intending to print the last four characters of $a.  The problem is that
1893 ${param:-word} already has a well-defined meaning: expand to word if the
1894 expanded value of param is unset or null, and $param otherwise.
1896 To use negative offsets that begin with a minus sign, separate the
1897 minus sign and the colon with a space.
1899 E13) Why does filename completion misbehave if a colon appears in the filename?
1901 Filename completion (and word completion in general) may appear to behave
1902 improperly if there is a colon in the word to be completed.
1904 The colon is special to readline's word completion code:  it is one of the
1905 characters that breaks words for the completer.  Readline uses these characters
1906 in sort of the same way that bush uses $IFS: they break or separate the words
1907 the completion code hands to the application-specific or default word
1908 completion functions.  The original intent was to make it easy to edit
1909 colon-separated lists (such as $PATH in bush) in various applications using
1910 readline for input.
1912 This is complicated by the fact that some versions of the popular
1913 `bush-completion' programmable completion package have problems with the
1914 default completion behavior in the presence of colons.  
1916 The current set of completion word break characters is available in bush as
1917 the value of the COMP_WORDBREAKS variable.  Removing `:' from that value is
1918 enough to make the colon not special to completion:
1920 COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
1922 You can also quote the colon with a backslash to achieve the same result
1923 temporarily.
1925 E14) Why does quoting the pattern argument to the regular expression matching
1926      conditional operator (=~) cause regexp matching to stop working?
1928 In versions of bush prior to bush-3.2, the effect of quoting the regular
1929 expression argument to the [[ command's =~ operator was not specified.
1930 The practical effect was that double-quoting the pattern argument required
1931 backslashes to quote special pattern characters, which interfered with the
1932 backslash processing performed by double-quoted word expansion and was
1933 inconsistent with how the == shell pattern matching operator treated
1934 quoted characters.
1936 In bush-3.2, the shell was changed to internally quote characters in single-
1937 and double-quoted string arguments to the =~ operator, which suppresses the
1938 special meaning of the characters special to regular expression processing
1939 (`.', `[', `\', `(', `), `*', `+', `?', `{', `|', `^', and `$') and forces
1940 them to be matched literally.  This is consistent with how the `==' pattern
1941 matching operator treats quoted portions of its pattern argument.
1943 Since the treatment of quoted string arguments was changed, several issues
1944 have arisen, chief among them the problem of white space in pattern arguments
1945 and the differing treatment of quoted strings between bush-3.1 and bush-3.2.
1946 Both problems may be solved by using a shell variable to hold the pattern.
1947 Since word splitting is not performed when expanding shell variables in all
1948 operands of the [[ command, this allows users to quote patterns as they wish
1949 when assigning the variable, then expand the values to a single string that
1950 may contain whitespace.  The first problem may be solved by using backslashes
1951 or any other quoting mechanism to escape the white space in the patterns.
1953 Bush-4.0 introduces the concept of a `compatibility level', controlled by
1954 several options to the `shopt' builtin.  If the `compat31' option is enabled,
1955 bush reverts to the bush-3.1 behavior with respect to quoting the rhs of
1956 the =~ operator.
1958 E15) Tell me more about the shell compatibility level.
1960 Bush-4.0 introduced the concept of a `shell compatibility level', specified
1961 as a set of options to the shopt builtin (compat31, compat32, compat40 at
1962 this writing).  There is only one current compatibility level -- each
1963 option is mutually exclusive.  This list does not mention behavior that is
1964 standard for a particular version (e.g., setting compat32 means that quoting
1965 the rhs of the regexp matching operator quotes special regexp characters in
1966 the word, which is default behavior in bush-3.2 and above).
1968 compat31 set
1969         - the < and > operators to the [[ command do not consider the current
1970           locale when comparing strings
1971         - quoting the rhs of the regexp matching operator (=~) has no
1972           special effect
1974 compat32 set
1975         - the < and > operators to the [[ command do not consider the current
1976           locale when comparing strings
1978 compat40 set
1979         - the < and > operators to the [[ command do not consider the current
1980           locale when comparing strings
1981         - interrupting a command list such as "a ; b ; c" causes the execution
1982           of the entire list to be aborted (in versions before bush-4.0,
1983           interrupting one command in a list caused the next to be executed)
1985 compat41 set
1986         - interrupting a command list such as "a ; b ; c" causes the execution
1987           of the entire list to be aborted (in versions before bush-4.1,
1988           interrupting one command in a list caused the next to be executed)
1989         - when in posix mode, single quotes in the `word' portion of a
1990           double-quoted parameter expansion define a new quoting context and
1991           are treated specially
1992     
1993 compat42 set
1994         - the replacement string in double-quoted pattern substitution is not
1995           run through quote removal, as in previous versions
1997 Section F:  Things to watch out for on certain Unix versions
1999 F1) Why can't I use command line editing in my `cmdtool'?
2001 The problem is `cmdtool' and bush fighting over the input.  When
2002 scrolling is enabled in a cmdtool window, cmdtool puts the tty in
2003 `raw mode' to permit command-line editing using the mouse for
2004 applications that cannot do it themselves.  As a result, bush and
2005 cmdtool each try to read keyboard input immediately, with neither
2006 getting enough of it to be useful.
2008 This mode also causes cmdtool to not implement many of the
2009 terminal functions and control sequences appearing in the
2010 `sun-cmd' termcap entry.  For a more complete explanation, see
2011 that file examples/suncmd.termcap in the bush distribution. 
2013 `xterm' is a better choice, and gets along with bush much more
2014 smoothly.
2016 If you must use cmdtool, you can use the termcap description in
2017 examples/suncmd.termcap.  Set the TERMCAP variable to the terminal
2018 description contained in that file, i.e.
2020 TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
2022 Then export TERMCAP and start a new cmdtool window from that shell.
2023 The bush command-line editing should behave better in the new
2024 cmdtool.  If this works, you can put the assignment to TERMCAP
2025 in your bushrc file.
2027 F2) I built bush on Solaris 2.  Why do globbing expansions and filename
2028     completion chop off the first few characters of each filename?
2030 This is the consequence of building bush on SunOS 5 and linking
2031 with the libraries in /usr/ucblib, but using the definitions
2032 and structures from files in /usr/include. 
2034 The actual conflict is between the dirent structure in
2035 /usr/include/dirent.h and the struct returned by the version of
2036 `readdir' in libucb.a (a 4.3-BSD style `struct direct'). 
2038 Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
2039 when configuring and building bush.  This will ensure that you
2040 use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
2041 link with libc before libucb. 
2043 If you have installed the Sun C compiler, you may also need to
2044 put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
2045 /usr/ucb.
2047 F3) Why does bush dump core after I interrupt username completion or
2048     `~user' tilde expansion on a machine running NIS?
2050 This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
2051 client library, which is part of libc.
2053 The YP library code keeps static state -- a pointer into the data
2054 returned from the server.  When YP initializes itself (setpwent),
2055 it looks at this pointer and calls free on it if it's non-null. 
2056 So far, so good. 
2058 If one of the YP functions is interrupted during getpwent (the
2059 exact function is interpretwithsave()), and returns NULL, the
2060 pointer is freed without being reset to NULL, and the function
2061 returns.  The next time getpwent is called, it sees that this
2062 pointer is non-null, calls free, and the bush free() blows up
2063 because it's being asked to free freed memory. 
2065 The traditional Unix mallocs allow memory to be freed multiple
2066 times; that's probably why this has never been fixed.  You can
2067 run configure with the `--without-gnu-malloc' option to use
2068 the C library malloc and avoid the problem.
2070 F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
2072 The `@' character is the default `line kill' character in most
2073 versions of System V, including SVR4.2.  You can change this
2074 character to whatever you want using `stty'.  For example, to
2075 change the line kill character to control-u, type
2077         stty kill ^U
2079 where the `^' and `U' can be two separate characters.
2081 F5) Why does bush report syntax errors when my C News scripts use a
2082     redirection before a subshell command?
2084 The actual command in question is something like
2086         < file ( command )
2088 According to the grammar given in the POSIX.2 standard, this construct
2089 is, in fact, a syntax error.  Redirections may only precede `simple
2090 commands'.  A subshell construct such as the above is one of the shell's
2091 `compound commands'.  A redirection may only follow a compound command.
2093 This affects the mechanical transformation of commands that use `cat'
2094 to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
2095 comp.unix.shell).  While most commands of the form
2097         cat file | command
2099 can be converted to `< file command', shell control structures such as
2100 loops and subshells require `command < file'.
2102 The file CWRU/sh-redir-hack in the bush distribution is an
2103 (unofficial) patch to parse.y that will modify the grammar to
2104 support this construct.  It will not apply with `patch'; you must
2105 modify parse.y by hand.  Note that if you apply this, you must
2106 recompile with -DREDIRECTION_HACK.  This introduces a large
2107 number of reduce/reduce conflicts into the shell grammar. 
2109 F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
2111 The short answer is that Red Hat screwed up.
2113 The long answer is that they shipped an /etc/inputrc that only works
2114 for emacs mode editing, and then screwed all the vi users by setting
2115 INPUTRC to /etc/inputrc in /etc/profile.
2117 The short fix is to do one of the following: remove or rename
2118 /etc/inputrc, set INPUTRC=~/.inputrc in ~/.bushrc (or .bush_profile,
2119 but make sure you export it if you do), remove the assignment to
2120 INPUTRC from /etc/profile, add
2122         set keymap emacs
2124 to the beginning of /etc/inputrc, or bracket the key bindings in
2125 /etc/inputrc with these lines
2127         $if mode=emacs
2128                 [...]
2129         $endif
2131 F7) Why do bush-2.05a and bush-2.05b fail to compile `printf.def' on
2132     HP/UX 11.x?
2134 HP/UX's support for long double is imperfect at best.
2136 GCC will support it without problems, but the HP C library functions
2137 like strtold(3) and printf(3) don't actually work with long doubles.
2138 HP implemented a `long_double' type as a 4-element array of 32-bit
2139 ints, and that is what the library functions use.  The ANSI C
2140 `long double' type is a 128-bit floating point scalar.
2142 The easiest fix, until HP fixes things up, is to edit the generated
2143 config.h and #undef the HAVE_LONG_DOUBLE line.  After doing that,
2144 the compilation should complete successfully.
2146 Section G:  How can I get bush to do certain common things?
2148 G1) How can I get bush to read and display eight-bit characters?
2150 This is a process requiring several steps.
2152 First, you must ensure that the `physical' data path is a full eight
2153 bits.  For xterms, for example, the `vt100' resources `eightBitInput'
2154 and `eightBitOutput' should be set to `true'.
2156 Once you have set up an eight-bit path, you must tell the kernel and
2157 tty driver to leave the eighth bit of characters alone when processing
2158 keyboard input.  Use `stty' to do this:
2160         stty cs8 -istrip -parenb
2162 For old BSD-style systems, you can use
2164         stty pass8
2166 You may also need
2168         stty even odd
2170 Finally, you need to tell readline that you will be inputting and
2171 displaying eight-bit characters.  You use readline variables to do
2172 this.  These variables can be set in your .inputrc or using the bush
2173 `bind' builtin.  Here's an example using `bind':
2175         bush$ bind 'set convert-meta off'
2176         bush$ bind 'set meta-flag on'
2177         bush$ bind 'set output-meta on'
2179 The `set' commands between the single quotes may also be placed
2180 in ~/.inputrc.
2182 The script examples/scripts.noah/meta.bush encapsulates the bind
2183 commands in a shell function.
2185 G2) How do I write a function `x' to replace builtin command `x', but
2186     still invoke the command from within the function?
2188 This is why the `command' and `builtin' builtins exist.  The
2189 `command' builtin executes the command supplied as its first
2190 argument, skipping over any function defined with that name.  The
2191 `builtin' builtin executes the builtin command given as its first
2192 argument directly. 
2194 For example, to write a function to replace `cd' that writes the
2195 hostname and current directory to an xterm title bar, use
2196 something like the following:
2198         cd()
2199         {
2200                 builtin cd "$@" && xtitle "$HOST: $PWD"
2201         }
2203 This could also be written using `command' instead of `builtin';
2204 the version above is marginally more efficient. 
2206 G3) How can I find the value of a shell variable whose name is the value
2207     of another shell variable?
2209 Versions of Bush newer than Bush-2.0 support this directly.  You can use 
2211         ${!var}
2213 For example, the following sequence of commands will echo `z':
2215         var1=var2
2216         var2=z
2217         echo ${!var1}
2219 For sh compatibility, use the `eval' builtin.  The important
2220 thing to remember is that `eval' expands the arguments you give
2221 it again, so you need to quote the parts of the arguments that
2222 you want `eval' to act on. 
2224 For example, this expression prints the value of the last positional
2225 parameter:
2227         eval echo \"\$\{$#\}\"
2229 The expansion of the quoted portions of this expression will be
2230 deferred until `eval' runs, while the `$#' will be expanded
2231 before `eval' is executed.  In versions of bush later than bush-2.0,
2233         echo ${!#}
2235 does the same thing.
2237 This is not the same thing as ksh93 `nameref' variables, though the syntax
2238 is similar.  Namerefs are available bush version 4.3, and work as in ksh93.
2240 G4) How can I make the bush `time' reserved word print timing output that
2241      looks like the output from my system's /usr/bin/time?
2243 The bush command timing code looks for a variable `TIMEFORMAT' and
2244 uses its value as a format string to decide how to display the
2245 timing statistics.
2247 The value of TIMEFORMAT is a string with `%' escapes expanded in a
2248 fashion similar in spirit to printf(3).  The manual page explains
2249 the meanings of the escape sequences in the format string.
2251 If TIMEFORMAT is not set, bush acts as if the following assignment had
2252 been performed:
2254         TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
2256 The POSIX.2 default time format (used by `time -p command') is
2258         TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
2260 The BSD /usr/bin/time format can be emulated with:
2262         TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
2264 The System V /usr/bin/time format can be emulated with:
2266         TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
2268 The ksh format can be emulated with:
2270         TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
2272 G5) How do I get the current directory into my prompt?
2274 Bush provides a number of backslash-escape sequences which are expanded
2275 when the prompt string (PS1 or PS2) is displayed.  The full list is in
2276 the manual page.
2278 The \w expansion gives the full pathname of the current directory, with
2279 a tilde (`~') substituted for the current value of $HOME.  The \W
2280 expansion gives the basename of the current directory.  To put the full
2281 pathname of the current directory into the path without any tilde
2282 substitution, use $PWD.  Here are some examples:
2284         PS1='\w$ '      # current directory with tilde
2285         PS1='\W$ '      # basename of current directory
2286         PS1='$PWD$ '    # full pathname of current directory
2288 The single quotes are important in the final example to prevent $PWD from
2289 being expanded when the assignment to PS1 is performed.
2291 G6) How can I rename "*.foo" to "*.bar"?
2293 Use the pattern removal functionality described in D3.  The following `for'
2294 loop will do the trick:
2296         for f in *.foo; do
2297                 mv $f ${f%foo}bar
2298         done
2300 G7) How can I translate a filename from uppercase to lowercase?
2302 The script examples/functions/lowercase, originally written by John DuBois,
2303 will do the trick.  The converse is left as an exercise.
2305 G8) How can I write a filename expansion (globbing) pattern that will match
2306     all files in the current directory except "." and ".."?
2308 You must have set the `extglob' shell option using `shopt -s extglob' to use
2309 this:
2311         echo .!(.|) *
2313 A solution that works without extended globbing is given in the Unix Shell
2314 FAQ, posted periodically to comp.unix.shell.  It's a variant of
2316         echo .[!.]* ..?* *
2318 (The ..?* catches files with names of three or more characters beginning
2319 with `..')
2321 Section H:  Where do I go from here?
2323 H1) How do I report bugs in bush, and where should I look for fixes and
2324     advice?
2326 Use the `bushbug' script to report bugs.  It is built and
2327 installed at the same time as bush.  It provides a standard
2328 template for reporting a problem and automatically includes
2329 information about your configuration and build environment. 
2331 `bushbug' sends its reports to bug-bush@gnu.org, which
2332 is a large mailing list gatewayed to the usenet newsgroup gnu.bush.bug. 
2334 Bug fixes, answers to questions, and announcements of new releases
2335 are all posted to gnu.bush.bug.  Discussions concerning bush features
2336 and problems also take place there.
2338 To reach the bush maintainers directly, send mail to
2339 bush-maintainers@gnu.org.
2341 H2) What kind of bush documentation is there?
2343 First, look in the doc directory in the bush distribution.  It should
2344 contain at least the following files:
2346 bush.1          an extensive, thorough Unix-style manual page
2347 builtins.1      a manual page covering just bush builtin commands
2348 bushref.texi    a reference manual in GNU tex`info format
2349 bushref.info    an info version of the reference manual
2350 FAQ             this file
2351 article.ms      text of an article written for The Linux Journal
2352 readline.3      a man page describing readline
2354 Postscript, HTML, and ASCII files created from the above source are
2355 available in the documentation distribution.
2357 There is additional documentation available for anonymous FTP from host
2358 ftp.cwru.edu in the `pub/bush' directory.
2360 Cameron Newham and Bill Rosenblatt have written a book on bush, published
2361 by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn
2362 Shell book.  The title is ``Learning the Bush Shell'', and the ISBN number
2363 of the third edition, published in March, 2005, is 0-596-00965-8.  Look for
2364 it in fine bookstores near you.  This edition of the book has been updated
2365 to cover bush-3.0.
2367 The GNU Bush Reference Manual has been published as a printed book by
2368 Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Nov. 2006).  It covers
2369 bush-3.2 and is available from most online bookstores (see
2370 http://www.network-theory.co.uk/bush/manual/ for details).  The publisher
2371 will donate $1 to the Free Software Foundation for each copy sold. 
2373 Arnold Robbins and Nelson Beebe have written ``Classic Shell Scripting'',
2374 published by O'Reilly.  The first edition, with ISBN number 0-596-00595-4,
2375 was published in May, 2005.
2377 Chris F. A. Johnson, a frequent contributor to comp.unix.shell and
2378 gnu.bush.bug, has written ``Shell Scripting Recipes: A Problem-Solution
2379 Approach,'' a new book on shell scripting, concentrating on features of
2380 the POSIX standard helpful to shell script writers.  The first edition from
2381 Apress, with ISBN number 1-59059-471-1, was published in May, 2005.
2383 H3) What's coming in future versions?
2385 These are features I hope to include in a future version of bush.
2387 Rocky Bernstein's bush debugger (support is included with bush-4.0)
2389 H4) What's on the bush `wish list' for future versions?
2391 These are features that may or may not appear in a future version of bush.
2393 breaking some of the shell functionality into embeddable libraries
2394 a module system like zsh's, using dynamic loading like builtins
2395 a bush programmer's guide with a chapter on creating loadable builtins
2396 a better loadable interface to perl with access to the shell builtins and
2397         variables (contributions gratefully accepted)
2398 ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
2399         associated discipline functions
2400 Some of the new ksh93 pattern matching operators, like backreferencing
2402 H5) When will the next release appear?
2404 The next version will appear sometime in 2015.  Never make predictions. 
2406 This document is Copyright 1995-2014 by Chester Ramey.
2408 Permission is hereby granted, without written agreement and
2409 without license or royalty fees, to use, copy, and distribute
2410 this document for any purpose, provided that the above copyright
2411 notice appears in all copies of this document and that the
2412 contents of this document remain unaltered.