aboutsummaryrefslogtreecommitdiffstats
path: root/documentation/FAQ
diff options
context:
space:
mode:
authorJari Aalto <jari.aalto@cante.net>1996-08-26 18:22:31 +0000
committerJari Aalto <jari.aalto@cante.net>2009-09-12 16:46:49 +0000
commit726f63884db0132f01745f1fb4465e6621088ccf (patch)
tree6c2f7765a890a97e0e513cb539df43283a8f7c4d /documentation/FAQ
downloadandroid_external_bash-726f63884db0132f01745f1fb4465e6621088ccf.tar.gz
android_external_bash-726f63884db0132f01745f1fb4465e6621088ccf.tar.bz2
android_external_bash-726f63884db0132f01745f1fb4465e6621088ccf.zip
Imported from ../bash-1.14.7.tar.gz.
Diffstat (limited to 'documentation/FAQ')
-rw-r--r--documentation/FAQ795
1 files changed, 795 insertions, 0 deletions
diff --git a/documentation/FAQ b/documentation/FAQ
new file mode 100644
index 0000000..c44bc47
--- /dev/null
+++ b/documentation/FAQ
@@ -0,0 +1,795 @@
+This is the Bash FAQ, version 1.2, for Bash version 1.14.6.
+
+This document contains a set of frequently-asked questions concerning
+Bash, the GNU Bourne-Again Shell. Bash is a freely-available command
+interpreter with advanced features for both interactive use and shell
+programming.
+
+Another good source of basic information about shells is the collection
+of FAQ articles periodically posted to comp.unix.shell.
+
+Questions and comments concerning this document should be set to
+chet@po.cwru.edu.
+
+Contents:
+1) What is it?
+2) What's the latest version?
+3) Where can I get it?
+4) What's the `Posix 1003.2 standard'?
+5) On what machines will bash run?
+6) How does bash differ from sh, the Bourne shell?
+7) How does bash differ from the Korn shell?
+8) What is the bash `posix mode'?
+9) How can I build bash with gcc?
+10) Why does bash run a different version of `command' than
+ `which command' says it will?
+11) How can I make my csh aliases work when I convert to bash?
+12) Now that I've converted from ksh to bash, are there equivalents to
+ ksh features like autoloaded functions and the `whence' command?
+13) Why is the bash builtin `test' slightly different from /bin/test?
+14) Why does bash sometimes say `Broken pipe'?
+15) How can I get bash to read and display eight-bit characters?
+16) Why can't I use command line editing in my `cmdtool'?
+17) How do I write a function `x' to replace builtin command `x', but
+ still invoke the command from within the function?
+18) When I have terminal escape sequences in my prompt, why does bash
+ wrap lines at the wrong column?
+19) I built bash on Solaris 2. Why do globbing expansions and filename
+ completion chop off the first few characters of each filename?
+20) Why doesn't bash treat brace expansions exactly like csh?
+21) Why does bash dump core after I interrupt username completion?
+22) I'm running SVR4.2. Why is the line erased every time I type `@'?
+23) How can I find the value of a shell variable whose name is the value
+ of another shell variable?
+24) If I pipe the output of a command into `read variable', why doesn't
+ the output show up in $variable when the read command finishes?
+25) I just changed my shell to bash, and now I can't FTP into my machine.
+ Why not?
+26) I have a bunch of shell scripts that use backslash-escaped characters
+ in arguments to `echo'. Bash doesn't interpret these characters. Why
+ not, and how can I make it understand them?
+27) Why doesn't bash have csh variable modifiers?
+28) Why does bash report syntax errors when my C News scripts use a
+ redirection before a subshell command?
+29) How do I report bugs in bash, and where should I look for fixes and
+ advice?
+30) What kind of bash documentation is there?
+31) What's coming in future versions?
+32) What's on the bash `wish list'?
+33) When will the next release appear?
+
+1) What is it?
+
+Bash is a Unix command interpreter (shell). It is an implementation of
+the Posix 1003.2 shell standard, and resembles the Korn and System V
+shells.
+
+Bash contains a number of enhancements over those shells, both
+for interactive use and shell programming. Features geared
+toward interactive use include command line editing, command
+history, job control, aliases, and prompt expansion. Programming
+features include additional variable expansions, shell
+arithmetic, and a number of variables and options to control
+shell behavior.
+
+Bash was originally written by Brian Fox of the Free Software
+Foundation. The current developer and maintainer is Chet Ramey
+of Case Western Reserve University.
+
+2) What's the latest version?
+
+The latest version is 1.14.6, first made available on December 19, 1995.
+
+3) Where can I get it?
+
+Bash is the GNU project's shell, and so is available from the
+master GNU archive site, prep.ai.mit.edu, and its mirrors. The
+latest version is also available for FTP from slc2.ins.cwru.edu,
+the maintainer's machine. The following URLs tell how to get
+version 1.14.6:
+
+ftp://prep.ai.mit.edu/pub/gnu/bash-1.14.6.tar.gz
+ftp://slc2.ins.cwru.edu/pub/dist/bash-1.14.6.tar.gz
+
+4) What's the `Posix 1003.2 standard'?
+
+POSIX is a name originally coined by Richard Stallman for a
+family of open system standards based on UNIX. There are a
+number of aspects of UNIX under consideration for
+standardization, from the basic system services at the system
+call and C library level to applications and tools to system
+administration and management. Each area of standardization is
+assigned to a working group in the 1003 series.
+
+The POSIX Shell and Utilities standard has been developed by IEEE
+Working Group 1003.2 (POSIX.2). It concentrates on the command
+interpreter interface and utility programs commonly executed from
+the command line or by other programs. An initial version of the
+standard has been approved and published by the IEEE, and work is
+currently underway to update it.
+
+Bash is concerned with the aspects of the shell's behavior
+defined by POSIX.2. The shell command language has of course
+been standardized, including the basic flow control and program
+execution constructs, I/O redirection and pipelining, argument
+handling, variable expansion, and quoting.
+
+The `special' builtins, which must be implemented as part of the
+shell to provide the desired functionality, are specified as
+being part of the shell; examples of these are `eval' and
+`export'. Other utilities appear in the sections of POSIX.2 not
+devoted to the shell which are commonly (and in some cases must
+be) implemented as builtin commands, such as `read' and `test'.
+POSIX.2 also specifies aspects of the shell's interactive
+behavior as part of the UPE, including job control and command
+line editing. Only vi-style line editing commands have been
+standardized; emacs editing commands were left out due to
+objections.
+
+5) On what machines will bash run?
+
+Bash has been ported to nearly every version of UNIX. All you
+should have to do to build it on a machine for which a port
+exists is to type `make'. The build process will attempt to
+discover the version of UNIX you have and tailor itself
+accordingly, using a combination of saved definitions in the file
+`machines.h' and a file `sysdefs.h' created by inspecting the
+environment for various things.
+
+More information appears in the file `INSTALL' in the distribution.
+
+6) How does bash differ from sh, the Bourne shell?
+
+This is a non-comprehensive list of features that differentiate bash
+from the SVR4 shell. The bash manual page explains these completely.
+
+Things bash has that sh does not:
+ long invocation options
+ `!' reserved word to invert pipeline return value
+ the select compound command
+ the $(...) form of command substitution
+ the ${#param} parameter value length operator
+ expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
+ variables: BASH, BASH_VERSION, UID, EUID, REPLY, PPID, PWD,
+ OLDPWD, SHLVL, RANDOM, SECONDS, LINENO, HISTCMD,
+ HOSTTYPE, OSTYPE, ENV, MAIL_WARNING, PS3, PS4,
+ HISTSIZE, HISTFILE, HISTFILESIZE, PROMPT_COMMAND,
+ FCEDIT, FIGNORE, IGNOREEOF, INPUTRC, HISTCONTROL,
+ command_oriented_history, allow_null_glob_expansion,
+ glob_dot_filenames, histchars, nolinks, auto_resume,
+ HOSTFILE, noclobber, TMOUT, no_exit_on_failed_exec,
+ cdable_vars
+ redirections: <>, &>, >|
+ prompt string special char translation and variable expansion
+ auto-export of modified values of variables in initial environment
+ command search finds functions before builtins
+ bash return builtin will exit a file sourced with `.'
+ builtins: cd -, exec -, echo -e/-E, export -n/-f/-p/name=value,
+ pwd -P, read -r, readonly -f, trap -l, ulimit -n/-p/-u,
+ set -b/-m/-o option/-p/-l/-d/-C/-H/-P, unset -f/-v,
+ umask -S, type -all/-path/-type, suspend -f, kill -s
+ bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
+ bash restricted shell mode is more extensive
+ bash allows functions and variables with the same name
+ brace expansion
+ tilde expansion
+ arithmetic expansion and `let' builtin
+ process substitution
+ aliases and alias/unalias builtins
+ local variables in functions and `local' builtin
+ readline and command-line editing
+ history and history/fc builtins
+ csh-like history expansion
+ other new bash builtins: bind, command, builtin, declare/typeset,
+ dirs, enable, fc, help, history, logout,
+ popd, pushd
+ exported functions
+ filename generation when using output redirection (command >a*)
+
+Things sh has that bash does not:
+ uses variable SHACCT to do shell accounting
+ includes `stop' builtin (bash can use alias stop='kill -s STOP')
+ `newgrp' builtin
+ turns on job control if called as `jsh'
+ ulimit attempts to set both soft & hard limits if -S/-H not given
+
+New things in the SVR4.2 sh:
+ internationalization: $LANG, $LC_CTYPE, $LC_MESSAGES, setlocale, etc.
+ $TIMEOUT (like bash $TMOUT)
+ new builtins: mldmode, priv
+ `read' builtin has -r
+ cannot trap SIGALRM or SIGCHLD
+ kill -s is present
+
+Implementation differences:
+ redirection to/from compound commands causes sh to create a subshell
+ bash does not allow unbalanced quotes; sh silently inserts them at EOF
+ bash does not mess with signal 11
+ sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
+ bash splits only the results of expansions on IFS
+ sh does not allow MAILCHECK to be unset (?)
+
+7) How does bash differ from the Korn shell?
+
+Things bash has or uses that ksh does not:
+ long invocation options
+ `!' reserved word
+ posix mode and posix conformance
+ command hashing
+ tilde expansion for assignment statements that look like $PATH
+ process substitution with named pipes if /dev/fd is not available
+ variables: BASH, BASH_VERSION, UID, EUID, SHLVL, HISTCMD, HOSTTYPE,
+ OSTYPE, MAIL_WARNING, HISTFILESIZE, OPTERR,
+ PROMPT_COMMAND, IGNOREEOF, FIGNORE, INPUTRC, HISTCONTROL,
+ notify, command_oriented_history, glob_dot_filenames,
+ allow_null_glob_expansion, histchars, nolinks, HOSTFILE,
+ noclobber, auto_resume, no_exit_on_failed_exec, cdable_vars
+ prompt expansion with backslash escapes and command substitution
+ redirection: &> (stdout and stderr)
+ more extensive and extensible editing and completion
+ builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
+ exec -, fc -s, export -n/-f/-p, hash, help, history,
+ jobs -x, kill -s, local, logout, popd, pushd,
+ readonly -n/-f/-p, set -o braceexpand/-o histexpand/
+ -o interactive-comments/-o notify/-o physical/-o posix/
+ -l/-d/-C/-b/-H/-P, suspend, trap -l, type, ulimit -u,
+ umask -S
+ $[...] synonym for $((...))
+ `!' csh-style history expansion
+
+Things ksh has or uses that bash does not:
+ new version of test: [[...]]
+ ((...)) equivalent to let "..."
+ time keyword to let pipelines be timed
+ tracked aliases
+ $(<file)
+ one-dimensional arrays and appropriate expansions
+ variables: ERRNO, FPATH, COLUMNS, LINES, EDITOR, VISUAL
+ extended pattern matching with egrep-style pattern lists
+ co-processes (|&, >&p, <&p)
+ weirdly-scoped functions
+ typeset +f to list all function names without definitions
+ text of command history kept in a file, not memory
+ builtins: alias -x, cd old new, fc -e -, newgrp, print,
+ read -p/-s/u/var?prompt, set -A/-o gmacs/-o keyword/
+ -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
+ typeset -H/-L/-R/-A/-ft/-fu/-fx/-l/-u/-t, whence
+
+Implementation differences:
+ ksh runs last command of a pipeline in parent shell context
+ ksh ulimit sets hard and soft limits by default
+ bash has brace expansion by default
+ bash has fixed startup file for all interactive shells; ksh reads $ENV
+ bash has exported functions
+ bash command search finds functions before builtins
+
+8) What is the bash `posix mode'?
+
+Although bash is an implementation of the Posix.2 shell
+specification, there are areas where the bash default behavior
+differs from that spec. The bash `posix mode' changes the bash
+behavior in these areas so that it obeys the spec more closely.
+
+Posix mode is entered by starting bash with the -posix option or
+executing `set -o posix' after bash is running.
+
+The specific aspects of bash which change when posix mode is
+active are listed in the file CWRU/POSIX.NOTES in the bash
+distribution.
+
+9) How can I build bash with gcc?
+
+Type
+ make CC=gcc CPPNAME='$(CC) -E'
+
+10) Why does bash run a different version of `command' than
+ `which command' says it will?
+
+`which' is actually a csh script that assumes you're running csh.
+It reads the csh startup files from your home directory and uses
+those to determine which `command' will be invoked. Since bash
+doesn't use any of those startup files, there's a good chance
+that your bash environment differs from your csh environment.
+
+11) How can I make my csh aliases work when I convert to bash?
+
+Bash uses a different syntax to support aliases than csh does.
+The details can be found in the documentation. We have provided
+a shell script which does most of the work of conversion for you;
+this script can be found in ./examples/alias-conv.sh. Here is
+how you use it:
+
+Start csh in the normal way for you. (e.g., `csh')
+
+Pipe the output of `alias' through `alias-conv.sh', saving the
+results into `bash_aliases':
+
+ alias | alias-conv.sh >bash_aliases
+
+Edit `bash_aliases', carefully reading through any created
+functions. You will need to change the names of csh specific
+variables (like $cwd) to the bash equivalents (like $PWD). You
+will also need to remove recursive references to commands which
+are defined as functions. For example, the csh alias:
+
+ alias cd 'cd \!*;echo $cwd'
+
+is converted to the bash function:
+
+ cd ()
+ {
+ cd $*;
+ echo $cwd
+ }
+
+This function contains a self-pointing reference to `cd', which
+should be changed to use the `builtin' version. It also uses
+the csh variable `$cwd' which has an equivalent in bash.
+Precede the recursive reference with the word `builtin', and
+change the name of the variable:
+
+ cd () { builtin cd $*; echo $PWD; }
+
+Merge the edited file into your ~/.bashrc.
+
+12) Now that I've converted from ksh to bash, are there equivalents to
+ ksh features like autoloaded functions and the `whence' command?
+
+There are features in ksh-88 that do not have direct bash equivalents.
+Most, however, can be emulated with very little trouble.
+
+ksh-88 feature Bash equivalent
+-------------- ---------------
+[[...]] can usually use [...]; minor differences
+compiled-in aliases set up aliases in .bashrc; some ksh aliases are
+ bash builtins (hash, history, type)
+$(<file) $(cat file)
+arrays no good subsitute yet
+((...)) let "..."
+time use external command; GNU time is particularly useful
+ use time bash -c '...' for complicated constructs
+extended patterns no good substitute
+coprocesses named pipe pairs (one for read, one for write)
+typeset +f declare -f |
+ sed -n 's:^declare -[a-z]* \([^ ]*\).*$:\1:p'
+cd, print, whence function subsitutes in examples/functions/kshenv
+autoloaded functions examples/functions/autoload is the same as typeset -fu
+read var?prompt [ -t 0 ] && echo -n prompt >&2; read var
+
+13) Why is the bash builtin `test' slightly different from /bin/test?
+
+The specific example used here is [ ! x -o x ], which is false.
+
+Bash's builtin `test' implements the Posix.2 spec, which can be
+summarized as follows (the wording is due to David Korn):
+
+Here is the set of rules for processing test arguments.
+
+ 0 Args: False
+ 1 Arg: True iff argument is not null.
+ 2 Args: If first arg is !, True iff second argument is null.
+ If first argument is unary, then true if unary test is true
+ Otherwise error.
+ 3 Args: If second argument is a binary operator, do binary test of $1 $3
+ If first argument is !, negate two argument test of $2 $3
+ Otherwise error.
+ 4 Args: If first argument is !, negate three argument test of $2 $3 $4.
+ Otherwise unspecified
+ 5 or more Args: unspecified. (Historical shells would use their
+ current algorithm).
+
+The operators -a and -o are considered binary operators for the purpose
+of the 3 Arg case.
+
+As you can see, the test becomes (not (x or x)), which is false.
+
+14) Why does bash sometimes say `Broken pipe'?
+
+If a sequence of commands appear in a pipeline, and one of the
+reading commands finishes before the writer has finished, the
+writer receives a SIGPIPE signal. Many other shells special-case
+SIGPIPE as an exit status in the pipeline and do not report it.
+For example, in:
+
+ ps -aux | head
+
+`head' can finish before `ps' writes all of its output, and ps
+will try to write on a pipe without a reader. In that case, bash
+will print `Broken pipe' to stderr when ps is killed by a
+SIGPIPE.
+
+15) How can I get bash to read and display eight-bit characters?
+
+This is a process requiring several steps.
+
+First, you must ensure that the `physical' data path is a full eight
+bits. For xterms, for example, the `vt100' resources `eightBitInput'
+and `eightBitOutput' should be set to `true'.
+
+Once you have set up an eight-bit path, you must tell the kernel and
+tty driver to leave the eigth bit of characters alone when processing
+keyboard input. Use `stty' to do this:
+
+ stty cs8 -istrip -parenb
+
+For old BSD-style systems, you can use
+
+ stty pass8
+
+You may also need
+
+ stty even odd
+
+Finally, you need to tell readline that you will be inputting and
+displaying eight-bit characters. You use readline variables to do
+this. These variables can be set in your .inputrc or using the bash
+`bind' builtin. Here's an example using `bind':
+
+ bash$ bind 'set convert-meta off'
+ bash$ bind 'set meta-flag on'
+ bash$ bind 'set output-meta on'
+
+The `set' commands between the single quotes may also be placed
+in ~/.inputrc.
+
+16) Why can't I use command line editing in my `cmdtool'?
+
+The problem is `cmdtool' and bash fighting over the input. When
+scrolling is enabled in a cmdtool window, cmdtool puts the tty in
+`raw mode' to permit command-line editing using the mouse for
+applications that cannot do it themselves. As a result, bash and
+cmdtool each try to read keyboard input immediately, with neither
+getting enough of it to be useful.
+
+This mode also causes cmdtool to not implement many of the
+terminal functions and control sequences appearing in the
+`sun-cmd' termcap entry. For a more complete explanation, see
+that file examples/suncmd.termcap in the bash distribution.
+
+`xterm' is a better choice, and gets along with bash much more
+smoothly.
+
+17) How do I write a function `x' to replace builtin command `x', but
+ still invoke the command from within the function?
+
+This is what the `command' and `builtin' builtins are for. The
+`command' builtin executes the command supplied as its first
+argument, skipping over any function defined with that name. The
+`builtin' builtin executes the builtin command given as its first
+argument directly.
+
+For example, to write a function to replace `cd' that writes the
+hostname and current directory to an xterm title bar, use
+something like the following:
+
+ cd()
+ {
+ builtin cd "$@" && xtitle $HOST: $PWD
+ }
+
+This could also be written using `command' instead of `builtin';
+the version above is marginally more efficient.
+
+18) When I have terminal escape sequences in my prompt, why does bash
+ wrap lines at the wrong column?
+
+Bash does not know that the terminal escape sequences do not take
+up space on the screen. The redisplay code assumes, unless told
+otherwise, that each character in the prompt is a `printable'
+character that takes up one character position on the screen.
+
+You can use the bash prompt expansion facility (see the PROMPTING
+section in the manual page) to tell readline that sequences of
+characters in the prompt strings take up no screen space.
+
+Use the \[ escape to begin a sequence of non-printing characters,
+and the \] escape to signal the end of such a sequence.
+
+19) I built bash on Solaris 2. Why do globbing expansions and filename
+ completion chop off the first few characters of each filename?
+
+This is the consequence of building bash on SunOS 5 and linking
+with the libraries in /usr/ucblib, but using the definitions
+and strutures from files in /usr/include.
+
+The actual conflict is between the dirent structure in
+/usr/include/dirent.h and the struct returned by the version of
+`readdir' in libucb.a (a 4.3-BSD style `struct direct').
+
+Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
+when building bash. This will ensure that you use /usr/ccs/bin/cc
+or acc instead of /usr/ucb/cc and that you link with libc before
+libucb.
+
+If you have installed the Sun C compiler, you may also need to
+put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
+/usr/ucb.
+
+20) Why doesn't bash treat brace expansions exactly like csh?
+
+The only difference between bash and csh brace expansion is that
+bash requires a brace expression to contain at least on unquoted
+comma if it is to be expanded. Any brace-surrounded word not
+containing an unquoted comma is left unchanged by the brace
+expansion code. This affords the greatest degree of sh
+compatibility.
+
+Bash, ksh, zsh, and pd-ksh all implement brace expansion this way.
+
+21) Why does bash dump core after I interrupt username completion on a
+ machine running NIS?
+
+This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
+client library, which is part of libc.
+
+The YP library code keeps static state -- a pointer into the data
+returned from the server. When YP initializes itself (setpwent),
+it looks at this pointer and calls free on it if it's non-null.
+So far, so good.
+
+If one of the YP functions is interrupted during getpwent (the
+exact function is interpretwithsave()), and returns NULL, the
+pointer is freed without being reset to NULL, and the function
+returns. The next time getpwent is called, it sees that this
+pointer is non-null, calls free, and the bash free() blows up
+because it's being asked to free freed memory.
+
+The traditional Unix mallocs allow memory to be freed multiple
+times; that's probably why this has never been fixed. You can
+probably stop it by adding an #undef USE_GNU_MALLOC to the
+appropriate machine description in machines.h.
+
+22) I'm running SVR4.2. Why is the line erased every time I type `@'?
+
+The `@' character is the default `line kill' character in most
+versions of System V, including SVR4.2. You can change this
+character to whatever you want using `stty'. For example, to
+change the line kill character to control-u, type
+
+ stty kill ^U
+
+where the `^' and `U' can be two separate characters.
+
+23) How can I find the value of a shell variable whose name is the value
+ of another shell variable?
+
+Use the `eval' builtin. The important thing to remember is that
+`eval' expands the arguments you give it again, so you need to
+quote the parts of the arguments that you want `eval' to act on.
+
+For example, this expression prints the value of the last positional
+parameter:
+
+ eval echo \$\{$#\}
+
+The expansion of the quoted portions of this expression will be
+deferred until `eval' runs, while the `$#' will be expanded
+before `eval' is executed.
+
+24) If I pipe the output of a command into `read variable', why doesn't
+ the output show up in $variable when the read command finishes?
+
+This has to do with the parent-child relationship between Unix
+processes.
+
+Each element of a pipeline runs in a separate process, a child of
+the shell running the pipeline. A subprocess cannot affect its
+parent's environment. When the `read' command sets the variable
+to the input, that variable is set only in the subshell, not the
+parent shell. When the subshell exits, the value of the variable
+is lost.
+
+Many pipelines that end with `read variable' can be converted
+into command substitutions, which will capture the output into a
+variable:
+
+ grep ^gnu /usr/lib/news/active | wc -l | read ngroup
+
+can be converted into
+
+ ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
+
+This does not, unfortunately, work to split the text among
+multiple variables, as read does when given multiple variable
+arguments.
+
+25) I just changed my shell to bash, and now I can't FTP into my machine.
+ Why not?
+
+You must add the full pathname to bash to the file /etc/shells.
+Many versions of ftpd use this file to prohibit `special' users
+such as `uucp' and `news' from using FTP.
+
+26) I have a bunch of shell scripts that use backslash-escaped characters
+ in arguments to `echo'. Bash doesn't interpret these characters. Why
+ not, and how can I make it understand them?
+
+This is the behavior of echo on most Unix System V machines.
+
+The bash builtin `echo' is modelled after the 9th Edition
+Research Unix version of `echo'. It does not interpret
+backslash-escaped characters in its argument strings by default,
+but requires the use of the -e option to enable the
+interpretation. The System V echo provides no way to disable the
+special characters; the bash echo has a -E option to disable
+them.
+
+There is a compile-time option that will make bash behave like
+the System V echo and interpret things like \t by default.
+Change config.h so that DEFAULT_ECHO_TO_USG is defined, remove
+builtins/libbuiltins.a and builtins/echo.o, and rebuild.
+
+27) Why doesn't bash have csh variable modifiers?
+
+Posix has specified a more powerful, albeit somewhat more confusing,
+mechanism cribbed from ksh, and bash implements it.
+
+${parameter%word}
+ Remove smallest suffix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ smallest portion of the suffix matched by the pattern deleted.
+
+ x=file.c
+ echo ${x%.c}.o
+ -->file.o
+
+${parameter%%word}
+
+ Remove largest suffix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ largest portion of the suffix matched by the pattern deleted.
+
+ x=posix/src/std
+ echo ${x%%/*}
+ -->posix
+
+${parameter#word}
+ Remove smallest prefix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ smallest portion of the prefix matched by the pattern deleted.
+
+ x=$HOME/src/cmd
+ echo ${x#$HOME}
+ -->/src/cmd
+
+${parameter##word}
+ Remove largest prefix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ largest portion of the prefix matched by the pattern deleted.
+
+ x=/one/two/three
+ echo ${x##*/}
+ -->three
+
+
+Given
+ a=/a/b/c/d
+ b=b.xxx
+
+ csh bash result
+ --- ---- ------
+ $a:h ${a%/*} /a/b/c
+ $a:t ${a##*/} d
+ $b:r ${b%.*} b
+ $b:e ${b##*.} xxx
+
+
+28) Why does bash report syntax errors when my C News scripts use a
+ redirection before a subshell command?
+
+The actual command in question is something like
+
+ < file ( command )
+
+According to the grammar given in the Posix.2 standard, this construct
+is, in fact, a syntax error. Redirections may only precede `simple
+commands'. A subshell construct such as the above is one of the shell's
+`compound commands'. A redirection may only follow a compound command.
+
+The file CWRU/sh-redir-hack in the 1.14.6 distribution is an (unofficial)
+patch to parse.y that will modify the grammar to support this construct.
+Note that if you apply this, you must recompile with -DREDIRECTION_HACK.
+This introduces a large number of reduce/reduce conflicts into the shell
+grammar.
+
+29) How do I report bugs in bash, and where should I look for fixes and
+ advice?
+
+Use the `bashbug' script to report bugs. It is built and
+installed at the same time as bash. It provides a standard
+template for reporting a problem and automatically includes
+information about your configuration and build environment.
+
+`bashbug' sends its reports to bug-bash@prep.ai.mit.edu, which
+is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug.
+
+Bug fixes, answers to questions, and announcements of new releases
+are all posted to gnu.bash.bug. Discussions concerning bash features
+and problems also take place there.
+
+To reach the bash maintainers directly, send mail to
+bash-maintainers@prep.ai.mit.edu.
+
+30) What kind of bash documentation is there?
+
+First, look in the documentation directory in the bash distribution.
+It should contain the following files:
+
+bash.1 an extensive, thorough Unix-style manual page
+builtins.1 a manual page covering just bash builtin commands
+features.texi a Gnu-style info file overview
+FAQ this file
+article.ms text of an article written for The Linux Journal
+readline.3 a man page describing readline
+
+Postscript files created from the above source are also present in
+the distribution.
+
+There is additional documentation available for anonymous FTP from host
+slc2.ins.cwru.edu in the `pub/bash' directory.
+
+Cameron Newham is in the midst of writing a book on bash, to be
+published by O'Reilly and Associates. Look for it sometime this
+year.
+
+31) What's coming in future versions?
+
+There will be no new features in future releases of version 1.14.
+
+The next major release, bash-2.0, will contain extensive changes and new
+features. Here's a short list:
+
+one-dimensional arrays with a new compound assignment statement,
+ appropriate expansion constructs and modifications to some
+ of the builtins (read, declare, etc.) to use them
+new expansions to do ANSI-C string expansion, substring extraction,
+ pattern replacement, and indirect variable expansion
+new builtins: `disown' and `shopt'
+new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK
+special handling of many unused or redundant variables removed
+dynamic loading of new builtin commands; many loadable examples provided
+new prompt expansions: \e, \n, \H, \T
+new readline variables: enable-keypad, mark-directories, input-meta
+new readline commands to manipulate the mark and operate on the region
+new readline emacs mode commands and bindings for ksh-88 compatibility
+updated and extended builtins
+new DEBUG trap
+expanded (and now documented) restricted shell mode
+
+implementation stuff:
+autoconf-based configuration
+nearly all of the bugs reported since version 1.14 have been fixed
+most builtins converted to use builtin `getopt' for consistency
+most builtins use -p option to display output in a reusable form
+ (for consistency)
+grammar tighter and smaller (66 reduce-reduce conflicts gone)
+lots of code now smaller and faster
+test suite greatly expanded
+
+32) What's on the bash `wish list'?
+
+internationalization with a variable expansion to translate a string
+ according to a particular message catalog
+Programmable completion a la zsh
+menu completion a la tcsh
+the ksh egrep-style extended pattern matching operators
+associative arrays (not really all that hard)
+breaking some of the shell functionality into embeddable libraries
+a bash debugger
+
+Much of this will not be in bash-2.0.
+
+33) When will the next release appear?
+
+Version 1.14.6 will probably be the last release for version 1.14.
+
+The next version will appear sometime in 1996. Never make predictions.
+
+
+This document is copyright Chester Ramey, 1995.
+
+Permission is hereby granted, without written agreement and
+without license or royalty fees, to use, copy, and distribute
+this document for any purpose, provided that the above copyright
+notice appears in all copies of this document and that the
+contents of this document remain unaltered.