bash misc helps 

FIXME: this section needs clean up those duplicated info.

DIRSTACK
     An array variable (see  Arrays  below)  containing  the
     current  contents  of the directory stack.  Directories
     appear in the stack in the order they are displayed  by
     the  dirs  builtin.  Assigning to members of this array
     variable may be used to modify directories  already  in
     the stack, but the pushd and popd builtins must be used
     to add and  remove  directories.   Assignment  to  this
     variable  will  not  change  the current directory.  If
     DIRSTACK is unset, it  loses  its  special  properties,
     even if it is subsequently reset.
Arrays
   Bash provides one-dimensional array variables.  Any variable
   may be used as an array; the declare builtin will explicitly
   declare an array.  There is no maximum limit on the size  of
   an  array,  nor  any  requirement that members be indexed or
   assigned contiguously.  Arrays are  indexed  using  integers
   and are zero-based.
An  array  is  created  automatically  if  any  variable  is
assigned  to  using  the  syntax name[subscript]=value.  The
subscript is treated as an arithmetic expression  that  must
evaluate  to  a  number  greater  than or equal to zero.  To
explicitly declare an array, use declare -a name (see  SHELL
BUILTIN COMMANDS below).  declare -a name[subscript] is also
accepted; the  subscript  is  ignored.   Attributes  may  be
specified  for  an  array  variable  using  the  declare and
readonly builtins.  Each attribute applies to all members of
an array.
Arrays are assigned to using  compound  assignments  of  the
form  name=(value1  ...  valuen), where each value is of the
form [subscript]=string.  Only string is required.   If  the
optional  brackets and subscript are supplied, that index is
assigned to; otherwise the index of the element assigned  is
the  last  index  assigned  to  by  the  statement plus one.
Indexing starts at zero.  This syntax is  also  accepted  by
the  declare  builtin.   Individual  array  elements  may be
assigned to using the  name[subscript]=value  syntax  intro-
duced above.
Any  element  of  an   array   may   be   referenced   using
${name[subscript]}.   The  braces are required to avoid con-
flicts with pathname expansion.  If subscript is @ or *, the
word  expands  to  all  members  of  name.  These subscripts
differ only when the word appears within double quotes.   If
the  word  is  double-quoted, ${name[*]} expands to a single
word with the value of each array member  separated  by  the
first  character of the IFS special variable, and ${name[@]}
expands each element of name to a separate word.  When there
are  no  array members, ${name[@]} expands to nothing.  This
is analogous to the expansion of the  special  parameters  *
and  @  (see Special Parameters above).  ${#name[subscript]}
expands to the length of ${name[subscript]}.   If  subscript
is  *  or  @, the expansion is the number of elements in the
array.  Referencing an array variable without a subscript is
equivalent to referencing element zero.
HISTCONTROL
     If set to a value of  ignorespace,  lines  which  begin
     with  a  space character are not entered on the history
     list.  If set to a value of ignoredups, lines  matching
     the  last  history  line  are  not entered.  A value of
     ignoreboth combines the two options.
Brace Expansion
   For example, a{d,c,b}e expands into `ade ace  abe'.
     and,
        mkdir /usr/local/src/bash/{old,new,dist,bugs}
   or
        chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
Tilde Expansion
   If the tilde-prefix is a `~+', the value of the shell  vari-
   able  PWD replaces the tilde-prefix.  If the tilde-prefix is
   a `~-', the value of the shell variable  OLDPWD,  if  it  is
   set,  is substituted.  If the characters following the tilde
   in the tilde-prefix consist of a number N,  optionally  pre-
   fixed  by  a `+' or a `-', the tilde-prefix is replaced with
   the corresponding element from the directory  stack,  as  it
   would  be  displayed  by  the  dirs builtin invoked with the
   tilde-prefix as an argument.  If  the  characters  following
   the  tilde in the tilde-prefix consist of a number without a
   leading `+' or `-', `+' is assumed.
Arithmetic Expansion
   Arithmetic  expansion allows the evaluation of an arithmetic
   expression and the substitution of the result.   The  format
   for arithmetic expansion is:
        $((expression))
Readline Initialization
   Readline is customized by putting commands in an initializa-
   tion  file  (the  inputrc  file).   The name of this file is
   taken from the value of the INPUTRC variable.  If that vari-
   able  is  unset,  the default is ~/.inputrc.  When a program
   which uses the readline library starts up,  the  initializa-
   tion  file  is  read, and the key bindings and variables are
   set.  There are only a few basic constructs allowed  in  the
   readline  initialization  file.   Blank  lines  are ignored.
   Lines beginning with a # are comments.  Lines beginning with
   a $ indicate conditional constructs.  Other lines denote key
   bindings and variable settings.
The default key-bindings may  be  changed  with  an  inputrc
file.   Other  programs  that use this library may add their
own commands and bindings.
Readline Variables
   Readline has variables that can be used to further customize
   its  behavior.   A  variable  may be set in the inputrc file
   with a statement of the form
set variable-name value
Except where noted, readline variables can take  the  values
On or Off.  The variables and their default values are:
completion-ignore-case (Off)
     If set to On, readline performs filename  matching  and
     completion in a case-insensitive fashion.
completion-query-items (100)
     This determines when the user is queried about  viewing
     the  number  of  possible  completions generated by the
     possible-completions command.  It may  be  set  to  any
     integer  value  greater  than or equal to zero.  If the
     number of possible completions is greater than or equal
     to  the  value  of  this  variable,  the  user is asked
     whether or not he wishes to view them;  otherwise  they
     are simply listed on the terminal.
possible-command-completions (C-x !)
     List the possible completions of the text before point,
     treating it as a command name.
dynamic-complete-history (M-TAB)
     Attempt completion on the text before point,  comparing
     the text against lines from the history list for possi-
     ble completion matches.
show-all-if-ambiguous (Off)
     This alters the  default  behavior  of  the  completion
     functions.   If  set  to on, words which have more than
     one possible completion cause the matches to be  listed
     immediately instead of ringing the bell.
visible-stats (Off)
     If  set  to  On,  a character denoting a file's type as
     reported by stat(2) is appended to  the  filename  when
     listing possible completions.

bash invocation 

The following paragraphs describe how bash executes its startup files. If any of the files exist but cannot be read, bash reports an error.

When bash is invoked as an interactive login shell, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The —noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists.

When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

but the value of the PATH variable is not used to search for the file name.

If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well. When invoked as an interactive login shell, it first attempts to read and execute commands from /etc/profile and ~/.profile, in that order. The —noprofile option may be used to inhibit this behavior. When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the —rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any startup files. When invoked as sh, bash enters posix mode after the startup files are read.

documented on: Tue 02-23-99 20:41:42