      <para>This index / glossary / quick-reference lists many of the
	important topics covered in the text. Terms are arranged in
	<emphasis>approximate</emphasis> sorting order, reshuffled as
	necessary for enhanced clarity.</para>

      <para>Note that <emphasis>commands</emphasis> are indexed
	in <link linkend="part4A">Part 4</link>.</para>

      <para>* * *</para>

<!-- Characters and symbols -->
      <para><command>^ </command> (caret)
         <link linkend="beglineref">Beginning-of-line</link>, in a <link
         linkend="regexref">Regular Expression</link></para>


      <para><command>~ </command> <firstterm>Tilde</firstterm>
         <itemizedlist>

	 <listitem><para>
	 <command>~ </command>
         <link linkend="tilderef">home directory</link>, corresponds
           to <link
           linkend="homedirref"><varname>$HOME</varname></link>
          </para></listitem>

<!-- ********************** -->

	 <listitem><para>
            <command>~/ </command>
	 <link linkend="tilderef"> <firstterm>Current user's</firstterm>
	   home directory</link>
          </para></listitem>

	 <listitem><para>
            <command>~+ </command>
         <link linkend="workingdirref"><emphasis>Current</emphasis>
         working directory</link>
          </para></listitem>

	 <listitem><para>
            <command>~- </command>
         <link linkend="prevworkingdir"><emphasis>Previous</emphasis>
         working directory</link>
          </para></listitem>

         </itemizedlist>
	 </para>

<!-- ********************** -->

      <para><command>= </command> <firstterm>Equals</firstterm> sign
         <itemizedlist>

	 <listitem><para>
            <command>= </command>
         <link linkend="eqref">Variable assignment</link> operator
          </para></listitem>

	 <listitem><para>
            <command>= </command>
         <link linkend="scomparison1">String comparison</link> operator
          </para>
	 <para>
            <command>== </command>
        <link linkend="scomparison2">String comparison</link> operator
          </para></listitem>

	 <listitem>
	   <para>
            <command>=~ </command>
            <firstterm>Regular Expression</firstterm>
	    <link linkend="regexmatchref">match</link> operator
          </para>
	   <para><link linkend="findsplit0"><firstterm>Example
	     script</firstterm></link></para>
	  </listitem>

         </itemizedlist>
	 </para>


<!-- ********************** -->


      <para><command>&lt; </command> Left angle bracket
         <itemizedlist>

	 <listitem><para>Is-less-than</para>
         <para><link linkend="ltref">String comparison</link></para>
	 <para>
         <link linkend="intlt">Integer comparison</link> within
	 <link linkend="dblparens">double parentheses</link>
          </para></listitem>


	 <listitem><para>Redirection</para>

	 <para>
            <command>&lt; </command>
         <link linkend="ioredirectionref2"><filename>stdin</filename></link>
          </para>
	 <para>
            <command>&lt;&lt; </command>
         <link linkend="heredocrrref"><firstterm>Here document</firstterm></link>
          </para>
	 <para>
            <command>&lt;&lt;&lt; </command>
         <link linkend="herestringref"><firstterm>Here string</firstterm></link>
          </para>
	 <para>
            <command>&lt;&gt; </command>
         <link linkend="redirrw">Opening a file</link> for
         <emphasis>both</emphasis> reading and writing
          </para></listitem>

         </itemizedlist>
	 </para>

<!-- ********************** -->

      <para><command>&gt; </command> Right angle bracket
         <itemizedlist>

	 <listitem><para>Is-greater-than</para>
         <para><link linkend="gtref">String comparison</link></para>
	 <para><link linkend="intgt">Integer comparison</link>,
            within <firstterm>double parentheses</firstterm>
          </para></listitem>

<!-- *** -->
	 <listitem><para>Redirection</para>

        <para><command>&gt; </command>
         <link linkend="ioredirectionref">Redirect
         <filename>stdout</filename></link> to a file
          </para>
	 <para>
            <command>&gt;&gt; </command>
         <link linkend="ioredirectionref">Redirect
         <filename>stdout</filename></link> to a file,
         but <firstterm>append</firstterm>
          </para>

	 <para><command>i&gt;&amp;j </command>
            <link linkend="ioredirectionref1">Redirect
	    <firstterm>file descriptor</firstterm>
	    <filename>i</filename></link> to
	    <firstterm>file descriptor</firstterm>
	    <filename>j</filename></para>
	 <para>
            <command>&gt;&amp;j </command>
            <link linkend="ioredirectionref1">Redirect
	    <filename>stdout</filename></link> to
	    <firstterm>file descriptor</firstterm>
	    <filename>j</filename></para>
	 <para>
            <command>&gt;&amp;2 </command>
         <link linkend="redirouterror2">Redirect
	    <filename>stdout</filename></link> of a command to
	    <filename>stderr</filename></para>
	 <para>
            <command>2&gt;&amp;1 </command>
         <link linkend="ioredirectionref1">Redirect
	    <filename>stderr</filename></link>
	    to <filename>stdout</filename></para>
	 <para>
            <command>&amp;&gt; </command>
         <link linkend="redirouterror">Redirect
	    <emphasis>both</emphasis> <filename>stdout</filename>
	    and <filename>stderr</filename></link> of a command to a
	    file</para>

	 <para><command>:&gt; <filename>file</filename></command>
         <link linkend="ioredirectionref">Truncate file</link>
          to zero length</para>
	  
	  </listitem>

         </itemizedlist>
	 </para>

<!-- ********************** -->

      <para><command>| </command>
         <link linkend="piperef">Pipe</link>, a device for passing the output
         of a command to another command or to the shell</para>
      <para><command>|| </command>
         <link linkend="orref">Logical OR test operator</link></para>

<!-- ********************** -->

      <para><command>- </command> (dash)
         <itemizedlist>

	 <listitem><para>
        <link linkend="defparam1">Prefix to <firstterm>default
	  parameter</firstterm></link>, in <firstterm>parameter
	  substitution</firstterm></para></listitem>
	 <listitem><para>
        <link linkend="dashref">Prefix to <firstterm>option
          flag</firstterm></link></para></listitem>

	 <listitem><para>
        <link linkend="dashref2">Indicating
        <firstterm>redirection</firstterm></link> from
        <filename>stdin</filename> or <filename>stdout</filename>
          </para></listitem>

	 <listitem>
	   <para><command>-- </command> (double-dash)</para>
           <para><link linkend="doubledashref">Prefix to
	     <firstterm>long</firstterm> command options</link></para>
	 <para>
         <link linkend="plusplusref"><firstterm>C-style</firstterm>
	 variable decrement</link> within <firstterm>double
	 parentheses</firstterm>
          </para></listitem>

         </itemizedlist>
	 </para>

<!-- ********************** -->

      <para><command>; </command> (semicolon)
	   <itemizedlist>
      <listitem><para><link linkend="semicolonref">As command
        separator</link></para></listitem>
      <listitem><para><command>\; </command>
         <link linkend="findref0"><firstterm>Escaped</firstterm> semicolon</link>,
	 terminates a <link linkend="findref">find</link>
	 command</para></listitem>
      <listitem><para><command>;; </command>
         <link linkend="doublesemicolon">Double-semicolon</link>, terminator in a
         <link linkend="caseesac1">case</link> option</para></listitem>

      <listitem>
        <para>Required when ...</para>
	<para><link linkend="needsemicolon"><firstterm>do</firstterm>
         keyword is on the first line of
	 <firstterm>loop</firstterm></link></para>
        <para><link linkend="omitsemicolon">
         terminating <firstterm>curly-bracketed</firstterm>
	 code block</link></para>
      </listitem>

	   </itemizedlist></para>

      <para><command>: </command>
         <link linkend="nullref">Colon</link>, <firstterm>null</firstterm>
	 command, equivalent to the
         <link linkend="trueref">true</link> Bash builtin
	   <itemizedlist>
	 <listitem><para>
            <command>:&gt; <filename>file</filename></command>
         <link linkend="ioredirectionref">Truncate file</link>
          to zero length</para></listitem>
	   </itemizedlist></para>

      <para><command>! </command>
         <link linkend="notref">Negation operator</link>, inverts <link
	 linkend="exitstatusref">exit status</link> of a test or command
           <itemizedlist>
      <listitem><para><command>!= </command>
         <link linkend="notequal">not-equal-to</link>
	 String comparison operator</para></listitem>
           </itemizedlist></para>

<!-- ********************** -->
      <para><command>? </command> (question mark)
         <itemizedlist>

      <listitem><para>
        <link linkend="quexregex">Match zero or one characters</link>,
	in an <link linkend="extregex"> Extended Regular
	Expression</link></para></listitem>
      <listitem><para><link linkend="quexwc">Single-character
	<firstterm>wild card</firstterm></link>,
	in <link linkend="globbingref">globbing</link></para></listitem>
        <listitem><para>In a
        <link linkend="cstrinary"><firstterm>C</firstterm>-style
        Trinary operator</link></para></listitem>

         </itemizedlist></para>
<!-- ********************** -->


      <para><command>// </command>
        <link linkend="doubleslashref">Double forward slash</link>,
          behavior of <link
          linkend="cdref">cd</link> command toward</para>

<!-- ********************** -->

      <para><command>. </command> (dot / period)
         <itemizedlist>

	 <listitem><para>
            <command>. </command>
         <link linkend="dotref">Load a file</link> (into a script),
         equivalent to <link
         linkend="sourceref">source</link> command
	 </para></listitem>

	 <listitem><para>
            <command>. </command>
         <link linkend="regexdot">Match single character</link>,
         in a <link linkend="regexref">Regular Expression</link>
	 </para></listitem>

	 <listitem><para>
            <command>. </command>
         <link linkend="dotdirectory">Current working
         directory</link>
	 </para>
	 <para>
            <command>./ </command>
         <link linkend="currentwdref">Current working
          directory</link>
	 </para></listitem>

	 <listitem><para>
            <command>.. </command>
         <link linkend="dotdirectory"><firstterm>Parent</firstterm>
         directory</link>
	 </para></listitem>

         </itemizedlist>
	 </para>

<!-- ********************** -->

      <para><command>' ... '</command>
	 (single quotes)
         <link linkend="snglquo"><firstterm>strong</firstterm>
         quoting</link></para>

      <para><command>" ... " </command>
         (double quotes)
         <link linkend="dblquo"><firstterm>weak</firstterm>
         quoting</link></para>


<!-- ********************** -->
      <para><command>() </command> Parentheses
         <itemizedlist>

      <listitem><para><command>( ... ) </command>
         <link linkend="parensref">Command group</link>;
	 starts a
	 <link linkend="subshellsref">subshell</link></para></listitem>
      <listitem><para><command>( ... ) </command>
         <link linkend="parengrps">Enclose group</link>
	 of <firstterm>Extended Regular
	 Expressions</firstterm></para></listitem>
    <listitem>
      <para><command>&gt;( ... )</command></para>
      <para><command>&lt;( ... ) </command>
      <link linkend="processsubref">Process substitution</link></para>
   </listitem>

      <listitem><para><command> ... ) </command>
         <link linkend="caseparen">Terminates test-condition</link>
	 in <firstterm>case</firstterm> construct</para></listitem>
      <listitem><para><command>(( ... )) </command>
         <link linkend="dblparensref">Double parentheses</link>,
         in arithmetic expansion</para></listitem>
         </itemizedlist></para>
<!-- ********************** -->

      <para><command>[ </command> <link linkend="leftbracket">Left bracket</link>,
        <firstterm>test</firstterm> construct</para>

      <para><command>[ ]</command>Brackets
         <itemizedlist>
      <listitem><para><link linkend="brackarray"><firstterm>Array</firstterm>
        element</link></para></listitem>
      <listitem><para><link linkend="bracketsref">Enclose character set
        to match</link> in a <firstterm>Regular
	Expression</firstterm></para></listitem>
      <listitem><para><link
        linkend="bracktest"><firstterm>Test</firstterm> construct</link></para>
      </listitem>
         </itemizedlist></para>


      <para><command>[[ ... ]]</command>
         <link linkend="dblbrackets">Double brackets</link>,
	 extended <firstterm>test</firstterm> construct</para>

      <para><command>$ </command>
        <link linkend="dollarsignref"><firstterm>Anchor</firstterm></link>,
          in a <link linkend="regexref">Regular Expression</link></para>
      <para><command>$ </command>
         <link linkend="varsubn">Prefix to a variable name</link></para>
      <para><command>$( ... ) </command>
         <link linkend="commandsubref0">Command substitution</link>,
	 setting a variable with output of a command,
	 using parentheses notation</para>
      <para><command>` ... ` </command>
         <link linkend="backquotesref">Command substitution</link>,
	 using <link linkend="backticksref">backquotes</link>
	 notation</para>

<!-- ********************** -->
      <para><command>${ ... }</command> Variable manipulation / evaluation

         <itemizedlist>
      <listitem><para><command>${var}</command>
      <link linkend="pssub1">Value of a variable</link></para></listitem>

      <listitem><para><command>${#var}</command>
      <link linkend="psorex1">Length of a variable</link></para></listitem>

      <listitem>
      <para><command>${#@}</command></para>
      <para><command>${#*}</command>
        <link linkend="numposparam">Number of
	 <firstterm>positional
	 parameters</firstterm></link></para></listitem>

      <listitem>
      <para><command>${parameter?err_msg}</command>
         <link linkend="qerrmsg">Parameter-unset
        message</link></para></listitem>

      <listitem>
      <para><command>${parameter-default}</command></para>
      <para><command>${parameter:-default}</command></para>
      <para><command>${parameter=default}</command></para>
      <para><command>${parameter:=default}</command>
      <link linkend="defparam1">Set default
      parameter</link></para></listitem>

      <listitem>
        <para><command>${parameter+alt_value}</command></para>
	<para><command>${parameter:+alt_value}</command></para>
        <para><link linkend="paramaltv">Alternate value</link>
          of parameter, if set</para>
      </listitem>

      <listitem>
	 <para><command>${!var}</command></para>
         <para><link linkend="ivr2">Indirect referencing of a variable</link>,
	   new notation</para>
      </listitem>

      <listitem>
        <para><command>${!varprefix*}</command></para>
        <para><command>${!varprefix@}</command></para>
      <para><link linkend="varprefixm">Match
        <emphasis>names</emphasis></link> of all previously declared
        variables beginning with <varname>varprefix</varname></para>
      </listitem>

      <listitem>
      <para><command>${string:position}</command></para>
      <para><command>${string:position:length}</command>
      <link linkend="substrextr01">Substring
      extraction</link></para></listitem>

      <listitem>
      <para><command>${var#Pattern}</command></para>
      <para><command>${var##Pattern}</command>
      <link linkend="psorex2">Substring
      removal</link></para></listitem>

      <listitem>
      <para><command>${var%Pattern}</command></para>
      <para><command>${var%%Pattern}</command>
      <link linkend="pctpatref">Substring
        removal</link></para></listitem>

      <listitem>
      <para><command>${string/substring/replacement}</command></para>
      <para><command>${string//substring/replacement}</command></para>
      <para><command>${string/#substring/replacement}</command></para>
      <para><command>${string/%substring/replacement}</command>
      <link linkend="substrrepl00">Substring
      replacement</link></para></listitem>

         </itemizedlist></para>
<!-- ********************** -->

      <para><command>\ </command>
         <link linkend="escp">Escape</link> the character following
	    <itemizedlist>
      <listitem><para><command>\&lt; ... \&gt; </command>
         <link linkend="anglebrac">Angle brackets</link>,
         <firstterm>escaped</firstterm>,
	 word boundary in a <link linkend="regexref">Regular
	 Expression</link></para></listitem>
      <listitem><para><command>\{ N \}</command>
         <link linkend="escpcb"><quote>Curly</quote> brackets</link>,
         <firstterm>escaped</firstterm>,
	 number of character sets to match in an <link
	 linkend="extregex">Extended RE</link></para></listitem>
      <listitem><para><command>\; </command>
         <link linkend="findref0"><firstterm>Semicolon</firstterm></link>,
         <firstterm>escaped</firstterm>,
	 terminates a <link linkend="findref">find</link>
	 command</para></listitem>
      <listitem><para><command>\$$ </command> <link linkend="ivrref">Indirect
        reverencing of a variable</link>, old-style notation</para></listitem>
      <listitem><para><link linkend="escnewline">Escaping
        a <firstterm>newline</firstterm></link>,
	to write a multi-line command</para></listitem>
	    </itemizedlist></para>

<!-- ********************** -->
      <para><command>&amp; </command>
         <itemizedlist>

	 <listitem><para>
            <command>&amp;&gt; </command>
         <link linkend="redirouterror">Redirect
	    <emphasis>both</emphasis> <filename>stdout</filename>
	    and <filename>stderr</filename></link> of a command to a
	    file</para></listitem>

	 <listitem><para>
            <command>&gt;&amp;j </command>
            <link linkend="ioredirectionref1">Redirect
	    <filename>stdout</filename></link> to
	    <firstterm>file descriptor</firstterm>
	    <firstterm>j</firstterm></para>
	 <para>
            <command>&gt;&amp;2 </command>
         <link linkend="redirouterror2">Redirect
	    <filename>stdout</filename></link> of a command to
	    <filename>stderr</filename></para></listitem>

	 <listitem><para>
            <command>i&gt;&amp;j </command>
            <link linkend="ioredirectionref1">Redirect
	    <firstterm>file descriptor</firstterm></link>
	    <firstterm>i</firstterm> to
	    <firstterm>file descriptor</firstterm>
	    <firstterm>j</firstterm></para>
	 <para>
            <command>2&gt;&amp;1 </command>
         <link linkend="ioredirectionref1">Redirect
	    <filename>stderr</filename></link> to
	    <filename>stdout</filename></para></listitem>

      <listitem><para><link linkend="cfd">Closing <firstterm>file
      descriptors</firstterm></link></para>

        <para><command>n&lt;&amp;-</command>
           Close input file descriptor
	   <firstterm>n</firstterm></para>
        <para><command>0&lt;&amp;-</command>,
	   <command>&lt;&amp;-</command>
           Close <filename>stdin</filename></para>
        <para><command>n&gt;&amp;-</command>
          Close output file descriptor
	  <firstterm>n</firstterm></para>
        <para><command>1&gt;&amp;-</command>,
	   <command>&gt;&amp;-</command>
	   Close <filename>stdout</filename></para></listitem>


         <listitem><para>
	    <command>&amp;&amp; </command>
	    <link linkend="logicaland">Logical AND
	    test operator</link></para></listitem>

         <listitem><para>
	    <command>Command &</command>
	    <link linkend="bgjob">Run job in
            <firstterm>background</firstterm></link></para></listitem>

         </itemizedlist></para>
<!-- ********************** -->



      <para><command># </command>
         <link linkend="hashmarkref">Hashmark</link>,
         special symbol beginning a script
         <firstterm>comment</firstterm></para>

      <para><command>#!</command>
         <link linkend="shabangref">Sha-bang</link>,
         special string starting a
         <link linkend="whatsascript">shell script</link></para>

<!-- ********************** -->
      <para><command>* </command> Asterisk
         <itemizedlist>

	 <listitem><para>
         <link linkend="asteriskref"><firstterm>Wild
         card</firstterm></link>,
	 in <link linkend="globbingref">globbing</link>
	 </para></listitem>

	 <listitem><para>
         <link linkend="asteriskref2">Any number of characters</link>
	 in a <link linkend="regexref">Regular Expression</link>
	 </para></listitem>
	    
	 <listitem><para>
            <command> ** </command>
         <link linkend="exponentiationref">Exponentiation</link>,
	 arithmetic operator
	 </para></listitem>

         </itemizedlist>
	 </para>
<!-- ********************** -->
      <para><command>% </command> Percent sign
         <itemizedlist>

	 <listitem><para>
         <link linkend="moduloref">Modulo</link>, division-remainder
         arithmetic operation
	 </para></listitem>

	 <listitem><para>
         <link linkend="pctpatref">Substring removal</link>
	   (pattern matching) operator</para></listitem>

         </itemizedlist>
	 </para>
<!-- ********************** -->

      <para><command>+ </command> Plus sign
         <itemizedlist>
         <listitem><para><link linkend="plusref"><firstterm>Character
           match</firstterm></link>, in an <link
           linkend="extregex">extended Regular
           Expression</link></para></listitem>
        <listitem><para><link linkend="paramaltv">Prefix to
	   <firstterm>alternate parameter</firstterm></link>, in
	   <firstterm>parameter substitution</firstterm></para></listitem>
        <listitem><para><command> ++ </command>
           <link linkend="plusplusref"><firstterm>C-style</firstterm>
           variable increment</link>, within <firstterm>double
           parentheses</firstterm></para></listitem>
         </itemizedlist></para>

      <para>* * *</para>

      <para><firstterm>Shell Variables</firstterm></para>

      <para><command>$_ </command>
        <link linkend="underscoreref">Last argument to previous
	command</link></para>
      <para><command>$- </command>
        <link linkend="flpref">Flags passed to script</link>, using <link
          linkend="setref">set</link></para>
      <para><command>$! </command>
         <link linkend="pidvarref"><firstterm>Process ID</firstterm>
         of last background job</link></para>
      <para><command>$? </command>
         <link linkend="exsref"><firstterm>Exit
         status</firstterm> of a command</link></para>
      <para><command>$@ </command>
         All the <firstterm>positional parameters</firstterm>, <link
         linkend="appref2">as <emphasis>separate</emphasis>
         words</link></para>
      <para><command> $* </command>
         All the <firstterm>positional parameters</firstterm>, <link
         linkend="appref">as a <emphasis>single</emphasis>
         word</link></para>
      <para><command>$$ </command>
         <link linkend="processidref">Process ID</link> of the
         script</para>
      <para><command>$# </command>
         <link linkend="clacountref">Number of arguments passed</link> to a
         <link linkend="functionref">function</link>, or to the script
         itself</para>
      <para><command>$0 </command>
         <link linkend="scrnameparam">Filename of the script</link></para>
      <para><command>$1 </command>
         <link linkend="posparamref1">First argument passed to script</link></para>
      <para><command>$9 </command>
         <link linkend="posparamref1">Ninth argument passed to script</link></para>
      <para><link linkend="specshvartab"><command>Table</command></link>
        of <firstterm>shell variables</firstterm></para>

<!-- End Characters and symbols -->

      <para>* * * * * *</para>

      <para><command>-a </command>
        <link linkend="compoundand">Logical AND</link>
	compound comparison test</para>
      <para><firstterm>Advanced Bash Scripting Guide</firstterm>,
         <link linkend="where_tarball">where to download</link></para>

      <para><link linkend="aliasref">Alias</link>
         <itemizedlist>
      <listitem><para><link linkend="unaliasref">Removing an
        <firstterm>alias</firstterm></link>, using
	<firstterm>unalias</firstterm></para></listitem>
          </itemizedlist></para>

      <para><link linkend="lcons1"><firstterm>And</firstterm> list</link>
         <itemizedlist>
      <listitem><para>
         <link linkend="anddefault">To supply default command-line
         argument</link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="anglebrac">Angle brackets</link>,
         <firstterm>escaped</firstterm>,
	 <command>\&lt; . . . \&gt; </command>
	 word boundary in a <link linkend="regexref">Regular
	 Expression</link></para>
      <para><link linkend="anonheredoc0">Anonymous
         <firstterm>here document</firstterm></link>, using
         <command>:</command></para>

<!-- ********************** -->
      <para><link linkend="arithexpref">Arithmetic expansion</link>
         <itemizedlist>
      <listitem><para><link linkend="arithexpvar1">
         variations of</link></para></listitem>
         </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="arops1">Arithmetic operators</link>
         <itemizedlist>
      <listitem><para><link linkend="arithopscomb">
         combination operators</link>, <firstterm>C</firstterm>-style</para>
	 <para><command> += </command>
	       <command> -= </command>
	       <command> *= </command>
               <command> /= </command>
	       <command> %= </command>
	 </para>

	 <note><para><link linkend="pluseqstr">In certain contexts</link>,
	   <command>+=</command> can also function as a <firstterm>string
	   concatenation</firstterm> operator.</para></note>

	    </listitem>
	 </itemizedlist></para>


      <para><link linkend="arrayref">Arrays</link></para>
         <itemizedlist>
	   <listitem><para><link linkend="arrayref">Bracket notation</link>
	      </para></listitem>
	   <listitem><para><link linkend="arrayappend0">Concatenating</link>,
	      <firstterm>example script</firstterm></para></listitem>
	   <listitem><para><link linkend="copyarray0">Copying</link>
	      </para></listitem>
	   <listitem><para><link
	     linkend="arraydeclare">Declaring</link></para>
           <para><varname>declare -a
		 array_name</varname></para></listitem>

	   <listitem><para><link linkend="arrayindir">Embedded
	     arrays</link></para></listitem>
	   <listitem><para><link linkend="emptyarray0">Empty
	     arrays, empty elements</link>, <firstterm>example
	     script</firstterm></para></listitem>
	   <listitem><para><link linkend="arrayindir">Indirect references</link>
	      </para></listitem>

	   <listitem>
	      <para><link linkend="arrayinit0">Initialization</link></para>
	      <para><varname>array=( element1 element2 ... elementN)</varname></para>
	      <para><link linkend="arrayassign0"><firstterm>Example
	        script</firstterm></link></para>
	      <para>Using <link linkend="arrayinitcs">command
	         substitution</link></para>
                 </listitem>

	   <listitem><para><link linkend="arrayinitcs">Loading a
	     file</link> into an array</para></listitem>
	   <listitem><para><link
	      linkend="arraymultidim">Multidimensional</link>,
              simulating</para></listitem>
	   <listitem><para><link linkend="arraynest">Nesting and
	      embedding</link></para></listitem>
	   <listitem><para><link linkend="arraynotation">Notation
	      and usage</link></para></listitem>
	   <listitem><para><link
	     linkend="arraynumelements">Number of elements in</link></para>
	     <para><varname>${#array_name[@]}</varname></para>
	     <para><varname>${#array_name[*]}</varname></para></listitem>
	   <listitem><para><link
	     linkend="arraysyntax">Operations</link></para></listitem>
           <listitem><para><link linkend="passarray">Passing
             an <firstterm>array</firstterm></link> to a
             function</para></listitem>
           <listitem><para>As <link linkend="retarray">
              <firstterm>return value</firstterm> from
	      a function</link></para></listitem>
	   <listitem><para><link
	     linkend="arrayspecialprops">Special properties</link>,
	     <firstterm>example script</firstterm></para></listitem>
	   <listitem><para><link
	     linkend="arraystringops">String operations</link>,
	     <firstterm>example script</firstterm></para></listitem>
	   <listitem><para><link
	     linkend="arrayunset"><firstterm>unset</firstterm> deletes array
	     elements</link></para></listitem>
         </itemizedlist>

<!-- ********************** -->
      <para><link linkend="awkref">awk</link> field-oriented text
         processing language
         <itemizedlist>
      <listitem><para><link linkend="awkrandomref">
         <varname>rand()</varname></link>,
	 random function</para></listitem>
      <listitem><para><link linkend="awkstringmanip2">String
        manipulation</link></para></listitem>
      <listitem><para><link linkend="exportawk">Using
	<firstterm>export</firstterm></link> to pass a variable to an
	embedded <firstterm>awk</firstterm> script</para></listitem>
         </itemizedlist></para>
<!-- ********************** -->

      <para>* * *</para>

      <para><link linkend="backticksref">Backquotes</link>,
         used in <link linkend="backquotesref">command
         substitution</link></para>
      <para><link linkend="base0">Base conversion</link>,
        <firstterm>example script</firstterm></para>

<!-- ********************** -->
      <para><link linkend="bashdef">Bash</link>
         <itemizedlist>

      <listitem><para><link linkend="bash3gotcha">Bad scripting
         practices</link></para></listitem>
      <listitem><para><link linkend="basicsrev0">Basics reviewed</link>,
        <firstterm>script example</firstterm></para></listitem>
      <listitem>
        <para><link linkend="clopts">Command-line
          options</link></para>
        <para><link
          linkend="optionstable"><command>Table</command></link></para>
	  </listitem>
      <listitem><para> <link linkend="bashcompat">Features that classic
        <firstterm>Bourne</firstterm> shell lacks</link></para></listitem>
      <listitem>
        <para><link
          linkend="internalvariables">Internal variables</link></para>
      </listitem>
      <listitem><para><link linkend="bash2ref">
        Version 2</link></para></listitem>
      <listitem><para><link linkend="bash3ref">
        Version 3</link></para></listitem>

         </itemizedlist></para>
<!-- ********************** -->


      <para><link
         linkend="bashsubshellref"><varname>$BASH_SUBSHELL</varname></link></para>
      <para><link linkend="basiccommands1">Basic commands</link>, external</para>
      <para><link linkend="batchprocref">Batch processing</link></para>

      <para><link linkend="bcref">bc</link>, calculator utility
         <itemizedlist>
      <listitem><para><link linkend="bcheredoc">In a <firstterm>here
        document</firstterm></link></para></listitem>
      <listitem><para><link linkend="bctemplate">Template</link>
        for calculating a script variable</para></listitem>
         </itemizedlist></para>

      <para><link linkend="bisonref">Bison</link> utility</para>
      <para><link linkend="bitwsops1">Bitwise operators</link></para>

      <para><link linkend="codeblockref">Blocks of code</link>
         <itemizedlist>
      <listitem>
        <para><link
          linkend="blockio">Redirection</link></para>
        <para><link
        linkend="blockio2"><firstterm>Script
        example</firstterm></link>:
	redirecting output of a a code block</para></listitem>
         </itemizedlist></para>

<!-- ********************** -->
      <para><link linkend="braceexpref">Brace expansion</link>
         <itemizedlist>
      <listitem><para><link
         linkend="braceexpref33">Extended</link>,
	   <replaceable>{a..z}</replaceable></para></listitem>
         </itemizedlist></para>
<!-- ********************** -->

      <para>Brackets, <command>[ ]</command>
         <itemizedlist>
      <listitem><para><link linkend="brackarray"><firstterm>Array</firstterm>
        element</link></para></listitem>
      <listitem><para><link linkend="bracketsref">Enclose character set
        to match</link> in a <firstterm>Regular
	Expression</firstterm></para></listitem>
      <listitem><para><link
        linkend="bracktest"><firstterm>Test</firstterm> construct</link></para>
      </listitem>
         </itemizedlist></para>

      <para>Brackets, <firstterm>curly</firstterm>, <command>{}</command>,
        used in</para>
         <itemizedlist>
      <listitem><para><link linkend="codeblockref">Code
        block</link></para></listitem>
      <listitem><para><link linkend="curlybracketsref">
         <firstterm>find</firstterm></link></para></listitem>
      <listitem><para><link linkend="escpcb"><firstterm>Extended Regular
	 Expressions</firstterm></link></para></listitem>
      <listitem><para><link linkend="bracketnotation"><firstterm>Positional
        parameters</firstterm></link></para></listitem>
      <listitem><para><link
      linkend="xargscurlyref"><firstterm>xargs</firstterm></link></para></listitem>
         </itemizedlist>

<!-- ********************** -->

      <para><link linkend="brkcont1">break</link>
         <firstterm>loop</firstterm> control command
	    <itemizedlist>
      <listitem><para><link linkend="breakparam">Parameter</link>
         (optional)</para></listitem>
	    </itemizedlist></para>

      <para><link linkend="builtinref">Builtins</link> in
         <firstterm>Bash</firstterm>
	    <itemizedlist>
      <listitem><para><link linkend="bltinfrk">Do not fork a subprocess</link>
         </para></listitem>
	    </itemizedlist></para>

      <para>* * *</para>

      <para><link linkend="caseesac1"><firstterm>case</firstterm>
         construct</link>
	    <itemizedlist>
      <listitem><para><link linkend="casecl">Command-line parameters</link>,
         handling</para></listitem>
      <listitem><para><link linkend="csglob">Globbing</link>,
         filtering strings with</para></listitem>
	    </itemizedlist></para>

      <para><link linkend="catref">cat</link>,
        con<firstterm>cat</firstterm>entate file(s)
	    <itemizedlist>
      <listitem><para><link linkend="catabuse">Abuse of</link></para></listitem>
      <listitem><para><link linkend="catscriptref"><firstterm>cat</firstterm>
         scripts</link></para></listitem>
      <listitem><para><link linkend="catlesseff">Less efficient than
        redirecting <filename>stdin</filename></link></para></listitem>
      <listitem><para><link linkend="readpiperef">Piping the output
        of</link>, to a <link linkend="readref">read</link></para></listitem>
      <listitem><para><link linkend="catuses">Uses of</link></para></listitem>
	    </itemizedlist></para>


      <para><link linkend="childref">Child processes</link></para>
      <para><link linkend="nullref">Colon</link>, <command>: </command>,
         equivalent to the <link linkend="trueref">true</link> Bash
         builtin</para>

      <para><link linkend="colorizingref">Colorizing scripts</link>
	    <itemizedlist>
         <listitem><para><link
	   linkend="coloriztable"><command>Table</command></link> of
	   color escape sequences</para></listitem>
         <listitem><para><link
	   linkend="coloriztempl">Template</link>,
	   colored text on colored background</para></listitem>
	    </itemizedlist></para>

      <para><link linkend="commaop">Comma operator</link>,
         linking commands or operations</para>

      <para><link linkend="commandsubref">Command substitution</link>
         <itemizedlist>
      <listitem>
        <para>
         <link linkend="csparens"><command>$( ... )</command></link>,
	   preferred notation</para>
      </listitem>
       <listitem><para><link
         linkend="backquotesref"><firstterm>Backquotes</firstterm></link></para></listitem>
       <listitem><para><link linkend="cstoolset">Extending the
         <firstterm>Bash</firstterm> toolset</link></para></listitem>
       <listitem><para><link linkend="cssubsh">Invokes a
         <firstterm>subshell</firstterm></link></para></listitem>
       <listitem><para><link linkend="csnest">Nesting</link></para></listitem>
       <listitem><para><link linkend="cstrnl">Removes trailing newlines</link>
         </para></listitem>
       <listitem><para><link linkend="csvl">Setting variable from loop output</link>
         </para></listitem>
       <listitem><para><link linkend="csws">Word splitting</link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="commenth">Comment headers</link>,
        special purpose</para>

      <para>Commenting out blocks of code
        <itemizedlist>
      <listitem><para>Using an <link
        linkend="cblock1"><firstterm>anonymous</firstterm> here
        document</link></para></listitem>
      <listitem><para>Using an <link linkend="comoutbl">
        <firstterm>if-then</firstterm> construct</link></para></listitem>
         </itemizedlist></para>



      <para><link linkend="ccomparison1">Compound comparison</link>
         operators</para>
      <para><link linkend="brkcont1">continue</link> loop control command</para>

<!-- ******************************************************************* -->
      <para><link linkend="controlcharref">Control characters</link>
         <itemizedlist>
      <listitem><para><link linkend="ctlcref">Control-C</link>,
         <firstterm>break</firstterm></para></listitem>
      <listitem><para><link linkend="ctldref">Control-D</link>,
         terminate / log out / erase</para></listitem>
      <listitem><para><link linkend="ctlhref">Control-H</link>,
         <firstterm>rubout</firstterm></para></listitem>
      <listitem><para><link linkend="ctlmref">Control-M</link>,
         Carriage return</para></listitem>
         </itemizedlist></para>
<!-- ******************************************************************* -->

      <para><link linkend="cstyle"><firstterm>C</firstterm>-style syntax
        </link>, for handling variables</para>

      <para>Curly brackets {}
           <itemizedlist>
      <listitem><para><link linkend="curlybracketsref">in
         <firstterm>find</firstterm> command</link></para></listitem>
      <listitem><para><link linkend="escpcb">in an
         <firstterm>Extended Regular
	 Expression</firstterm></link></para></listitem>
      <listitem><para><link linkend="xargscurlyref">in
         <firstterm>xargs</firstterm></link></para></listitem>
           </itemizedlist></para>

      <para>* * *</para>

      <para><link linkend="daemonref">Daemons</link>, in UNIX-type OS</para>

      <para><link linkend="dcref">dc</link>, calculator utility</para>

      <para><link linkend="ddref">dd</link>, <firstterm>data
        duplicator</firstterm> command
	  <itemizedlist>

      <listitem><para><link
        linkend="ddconversions">Conversions</link></para></listitem>
      <listitem><para><link linkend="ddcopy">Copying raw data</link>
        to/from devices</para></listitem>
      <listitem><para><link
        linkend="ddfdel">File deletion</link>,
        <firstterm>secure</firstterm></para></listitem>
      <listitem><para><link
        linkend="ddkeystrokes">Keystrokes</link>, capturing</para></listitem>
      <listitem><para><link
        linkend="ddoptions">Options</link></para></listitem>
      <listitem><para><link
        linkend="ddrandom">Random access</link> on a data
        stream</para></listitem>
      <listitem><para><link
        linkend="ddswap">Swapfiles</link>, initializing</para></listitem>
      <listitem><para><link linkend="ddlink">Thread on
        <firstterm>www.linuxquestions.org</firstterm></link></para></listitem>

	  </itemizedlist></para>

      <para><link linkend="debugging">Debugging scripts</link>
         <itemizedlist>
      <listitem><para><link
        linkend="debugtools">Tools</link></para></listitem>
      <listitem><para><link
        linkend="debugtrap"><firstterm>Trapping</firstterm> at
        exit</link></para></listitem>
      <listitem><para><link
        linkend="trapref1"><firstterm>Trapping</firstterm>
          signals</link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="numconstants">Decimal number</link>,
         Bash interprets numbers as</para>

      <para><link linkend="declare1ref">declare</link> builtin</para>
         <itemizedlist>
      <listitem><para><link
        linkend="declareopsref1">options</link></para></listitem>
         </itemizedlist>

      <para><link linkend="defparam">Default parameters</link></para>

<!-- ******************************************************************* -->
      <para><link linkend="devprocref"><filename
         class="directory">/dev</filename></link> directory

         <itemizedlist>
      <listitem><para><link
         linkend="devnullref"><filename>/dev/null</filename></link>
           pseudo-device file</para></listitem>

      <listitem><para><link
         linkend="urandomref"><filename>/dev/urandom</filename></link>
         pseudo-device file, generating pseudorandom numbers
         with</para></listitem>

      <listitem><para><link
         linkend="zerosref1"><filename>/dev/zero</filename></link>,
         pseudo-device file</para></listitem>
         </itemizedlist></para>
<!-- ******************************************************************* -->


      <para><link linkend="dialogref"><firstterm>dialog</firstterm></link>,
         utility for generating <firstterm>dialog</firstterm> boxes in
         a script</para>
      <para><link linkend="dirstackref"><varname>$DIRSTACK</varname></link>
         <firstterm>directory stack</firstterm></para>
      <para><link linkend="disabledcommref">Disabled commands</link>,
         in <firstterm>restricted shells</firstterm></para>
      <para><link linkend="doinref">do</link> keyword,
         begins execution of commands within a <link
	 linkend="loopref00">loop</link></para>
      <para><link linkend="doinref">done</link> keyword,
         terminates a loop</para>
      <para><link linkend="dosbatch1"><firstterm>DOS</firstterm> batch
         files</link>, converting to shell scripts</para>
      <para><link linkend="dosunixequiv"><firstterm>DOS</firstterm>
        commands</link>, UNIX equivalents of
        (<command>table</command>)</para>
      <para><link linkend="dotfilesref"><firstterm>dot files</firstterm></link>,
         <quote>hidden</quote> setup and configuration files</para>
      <para><link linkend="dblbrackets">Double brackets</link>
         <command>[[ ... ]]</command> <link linkend="ifthen">test</link>
         construct</para>
      <para><link linkend="dblquo">Double quotes</link>
      <command>" ... "</command> <firstterm>weak</firstterm> quoting</para>
      <para><link linkend="doublespace">Double-spacing a text
        file</link>, using <link linkend="sedref">sed</link></para>

      <para>* * *</para>

      <para><command>-e </command>
        <link linkend="rtif">File exists</link> test</para>

      <para><link linkend="echoref">echo</link>
         <itemizedlist>
      <listitem><para><link linkend="echogrepref">Feeding commands down
        a <firstterm>pipe</firstterm></link></para></listitem>
      <listitem><para><link linkend="echocs">Setting a variable</link>
        using <link linkend="commandsubref">command
        substitution</link></para></listitem>
      <listitem><para><link
        linkend="binecho"><filename>/bin/echo</filename></link>,
	external <firstterm>echo</firstterm> command</para></listitem>
         </itemizedlist></para>

      <para><link linkend="elifref1"><command>elif</command></link>, Contraction
         of <firstterm>else</firstterm> and <firstterm>if</firstterm></para>
      <para><link linkend="caseesac1">esac</link>, keyword terminating
        <firstterm>case</firstterm> construct</para>
      <para><link linkend="envref"><firstterm>Environmental</firstterm>
         variables</link></para>
      <para><link linkend="equalref"> -eq </link>,
         <firstterm>is-equal-to</firstterm> <link linkend="icomparison1">integer
	 comparison</link> test</para>
      <para><link linkend="spm">Escaped characters</link>,
         special meanings of</para>
      <para><link linkend="euidref"><varname>$EUID</varname></link>,
         <firstterm>Effective user ID</firstterm></para>

      <para><link linkend="evalref">eval</link>,
         Combine and <firstterm>evaluate</firstterm> expression(s),
	 with variable expansion
	 <itemizedlist>
      <listitem><para><link linkend="evaleff">Effects
        of</link>, <firstterm>Example script</firstterm></para></listitem>
      <listitem><para><link linkend="evalrisk">Risk of
        using</link></para></listitem>
	 </itemizedlist></para>

      <para><link linkend="usingexecref">exec</link> command,
         using in <link linkend="ioredirref">redirection</link></para>


<!-- ********************** -->
      <para>Exit and Exit status
        <itemizedlist>
      <listitem><para><link linkend="exitcommandref">exit</link>
         command</para></listitem>

      <listitem>
        <para><link linkend="exitstatusref">Exit status</link>
	  (<firstterm>exit code</firstterm>, <firstterm>return</firstterm>
	  status of a command)</para>
        <para><link linkend="exitcodesref"><command>Table</command></link>,
	  <firstterm>Exit
          codes</firstterm> with special meanings</para>
        <para><link linkend="excoor">Out of range</link></para>
         <para><link linkend="exitreturn1">
           Specified by a <firstterm>function
           return</firstterm></link></para>
         <para><link
           linkend="exitsuccess"><firstterm>Successful</firstterm></link>,
	   <command>0</command></para>
      </listitem>

        </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="exportref2">Export</link>,
         to make available variables to <link
         linkend="childref">child processes</link>
	 <itemizedlist>
      <listitem><para><link linkend="exportawk">Passing a variable
        to an embedded <firstterm>awk</firstterm>
	script</link></para></listitem>
	 </itemizedlist></para>

<!-- ********************** -->
      <para><link linkend="exprref">expr</link>,
         <firstterm>Expression</firstterm> evaluator
	   <itemizedlist>
      <listitem><para><link linkend="expextrsub">Substring
         extraction</link></para></listitem>
      <listitem><para><link linkend="substringindex2">Substring
         <firstterm>index</firstterm> (numerical position in
         string)</link></para></listitem>
      <listitem><para><link linkend="exprmatch">Substring
         matching</link></para></listitem>
	   </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="extregex">Extended <firstterm>Regular
         Expressions</firstterm></link>
	  <itemizedlist>
      <listitem><para><command>? </command> (question mark)
          <link linkend="quexregex">Match zero / one characters</link>
	  </para></listitem>
        <listitem><para><command>( ... ) </command>
          <link linkend="parengrps">Group
	  of expressions</link></para></listitem>
        <listitem><para><command>\{ N \}</command>
         <link linkend="escpcb"><quote>Curly</quote> brackets</link>,
         <firstterm>escaped</firstterm>,
	 number of character sets to match</para></listitem>
      <listitem><para><command>+ </command>
          <link linkend="plusref"><firstterm>Character
          match</firstterm></link></para></listitem>
	  </itemizedlist></para>

      <para>* * *</para>

      <para><link linkend="falseref">false</link>,
        returns <firstterm>unsuccessful</firstterm> (1) <link
        linkend="exitstatusref">exit status</link></para>
      <para><link linkend="fdref">File descriptors</link></para>
         <itemizedlist>
      <listitem><para><link linkend="cfd">Closing</link></para>

        <para><command>n&lt;&amp;-</command>
           Close input file descriptor <firstterm>n</firstterm></para>
        <para><command>0&lt;&amp;-</command>,
	   <command>&lt;&amp;-</command>
           Close <filename>stdin</filename></para>

        <para><command>n&gt;&amp;-</command>
          Close output file descriptor <firstterm>n</firstterm></para>
        <para><command>1&gt;&amp;-</command>,
	   <command>&gt;&amp;-</command>
	   Close <filename>stdout</filename></para>

      </listitem>

      <listitem><para><link linkend="fdref1">File handles in
        <firstterm>C</firstterm></link>, similarity to</para></listitem>

         </itemizedlist>

      <para><link linkend="findref">find</link>
         <itemizedlist>
      <listitem><para><command>{} </command>
        <link linkend="curlybracketsref">Curly
        brackets</link></para></listitem>
      <listitem><para><command>\; </command>
        <link linkend="findref0"><firstterm>Escaped</firstterm>
        semicolon</link></para></listitem>
	 </itemizedlist></para>

      <para><link linkend="filteroutp">Filter</link>,
         feeding output back to <emphasis>same</emphasis> filter</para>
      <para><link linkend="nofloatingpoint">Floating point numbers</link>,
         Bash does not recognize</para>
      <para><link linkend="foldref">fold</link>, a filter to wrap lines of
        text</para>
      <para><link linkend="forkref">Forking</link> a <firstterm>child</firstterm>
         process</para>
      <para><link linkend="forloopref1"><firstterm>for</firstterm>
         loops</link></para>

      <para><link linkend="functionref">Functions</link></para>
         <itemizedlist>
      <listitem><para><link linkend="passedargs">Arguments
         passed</link> referred to by position</para></listitem>
      <listitem><para><link linkend="captureretval">Capturing
        the return value</link> of a function
	using <link linkend="echoref">echo</link></para></listitem>
      <listitem><para><link linkend="functdefmust">Definition
         must precede</link> first call to function</para></listitem>
      <listitem><para><link linkend="exitreturn1">Exit
         status</link></para></listitem>
      <listitem>
        <para><link
           linkend="localref1">Local variables</link></para>
        <para>and <link
           linkend="locvarrecur">recursion</link></para></listitem>

      <listitem><para><link linkend="passarray">Passing
        an <firstterm>array</firstterm></link> to a
        function</para></listitem>
      <listitem><para><link
         linkend="funcpointers">Passing pointers</link>
	 to a function</para></listitem>
      <listitem><para><link
         linkend="recursionref0">Recursion</link></para></listitem>
      <listitem><para><link
         linkend="redstdinfunc1">Redirecting
	 <filename>stdin</filename></link>
	 of a function</para></listitem>

      <listitem>
         <para><link linkend="returnref">return</link></para>

         <para><link linkend="retarray">
           Returning an <firstterm>array</firstterm></link> from
	   a function</para>

         <para><link linkend="rvt"><firstterm>return</firstterm>
           range limits</link>, workarounds</para>
      </listitem>

      <listitem><para><link
         linkend="fshiftref"><firstterm>shift</firstterm>
	 arguments passed</link> to a function</para></listitem>
         </itemizedlist>

      <para>* * *</para>

      <para><link linkend="getopty">getopt</link>,
        <firstterm>external</firstterm> command for parsing script
        <firstterm>command-line</firstterm> arguments
	   <itemizedlist>
       <listitem><para><link linkend="getoptsimple1">Emulated
         in a script</link></para></listitem>
	   </itemizedlist></para>

      <para><link linkend="getoptsx">getopts</link>,
        Bash <firstterm>builtin</firstterm> for parsing script
        <firstterm>command-line</firstterm> arguments
	   <itemizedlist>
       <listitem><para><link
         linkend="getoptsopt"><varname>$OPTIND</varname> /
         <varname>$OPTARG</varname></link></para></listitem>
	   </itemizedlist></para>

      <para><link linkend="globbingref2">Globbing</link>,
         filename expansion</para>
      <para><link linkend="ge0ref"> -ge </link>,
         <firstterm>greater-than or equal</firstterm>
	 <link linkend="icomparison1">integer comparison</link> test</para>
      <para><link linkend="gt0ref"> -gt </link>,
         <firstterm>greater-than</firstterm> <link linkend="icomparison1">integer
	 comparison</link> test</para>
      <para><link linkend="groupsref"><varname>$GROUPS</varname></link>,
         <firstterm>Groups</firstterm> user belongs to</para>

      <para>* * *</para>

      <para><link linkend="hashref">Hashing</link>, creating lookup keys
         in a table
	   <itemizedlist>
	 <listitem><para><link linkend="hashex2_0"><firstterm>Example
	   script</firstterm></link></para></listitem>
	   </itemizedlist></para>

      <para><link linkend="headref">head</link>, <firstterm>echo</firstterm>
        to <filename>stdout</filename> lines at the beginning of a text
        file</para>
      <para><link linkend="helpref">help</link>, gives usage summary of
        a Bash <link linkend="builtinref">builtin</link></para>

<!-- ********************** -->
      <para><link linkend="heredocref"><firstterm>Here</firstterm>
         documents</link>

	 <itemizedlist>

      <listitem>
        <para><link linkend="anonheredoc0"><firstterm>Anonymous</firstterm>
           here documents</link>, using <command>:</command></para>
        <para><link linkend="cblock1">Commenting out</link>
	   blocks of code</para>
        <para><link linkend="hselfdoc">Self-documenting</link>
	   scripts</para>
      </listitem>
      <listitem><para><link
        linkend="bcheredoc"><firstterm>bc</firstterm> in a <firstterm>here
        document</firstterm></link></para></listitem>

      <listitem><para><link linkend="catscriptref"><firstterm>cat</firstterm>
         scripts</link></para></listitem>
      <listitem><para><link linkend="herecs">Command
         substitution</link></para></listitem>
      <listitem><para><link linkend="exscriptref"><firstterm>ex</firstterm>
         scripts</link></para></listitem>
      <listitem><para><link
         linkend="herefunc"><firstterm>Function</firstterm></link>,
	 supplying input to</para></listitem>

      <listitem>
        <para><link
           linkend="herestringsref"><firstterm>Here</firstterm>
           strings</link></para>
        <para><link linkend="hspre">Prepending text</link></para>
        <para><link linkend="hsread">Using
	   <firstterm>read</firstterm></link></para>
      </listitem>

      <listitem><para><link
      linkend="limitstringref"><firstterm>Limit</firstterm>
      string</link></para>
         <para><link linkend="indentedls">Closing <firstterm>limit
            string</firstterm></link> may not be indented</para>
         <para><link linkend="limitstrdash">Dash option</link>
           to limit string, <option>&lt;&lt;-LimitString</option>
           </para></listitem>
      <listitem><para><link linkend="herelit">Literal
         text output</link>,
	 for generating program code</para></listitem>

      <listitem>
         <para><link linkend="hereparamsub">Parameter
           substitution</link></para>
	 <para><link linkend="hereesc">Disabling</link>
	   <firstterm>parameter substitution</firstterm></para>
      </listitem>

      <listitem><para><link linkend="herepassp">Passing
         parameters</link></para></listitem>
      <listitem><para><link linkend="heretemp">Temporary
         files</link></para></listitem>
      <listitem><para><link linkend="vihere">Using
        <firstterm>vi</firstterm> non-interactively</link></para></listitem>
	 </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="homedirref"><varname>$HOME</varname></link>,
         <firstterm>user's home directory</firstterm></para>
      <para><link linkend="hostnameref"><varname>$HOSTNAME</varname></link>,
        system <firstterm>host name</firstterm></para>

      <para>* * *</para>

<!-- ********************** -->
      <para><link linkend="ifthen">if [ condition ]; then ...</link>
         <firstterm>test</firstterm> construct
	 <itemizedlist>

      <listitem>
        <para><link linkend="ifgrepref">if-grep</link>,
          <firstterm>if</firstterm> and <link linkend="grepref">grep</link>
          in combination</para>
        <para><link linkend="ifgrepfix">Fixup</link>
          for <firstterm>if-grep</firstterm> test</para>
      </listitem>

         </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="ifsref"><varname>$IFS</varname></link>,
         <firstterm>Internal field separator</firstterm> variable
	   <itemizedlist>
      <listitem><para><link linkend="ifsws">Defaults to
        <firstterm>whitespace</firstterm></link></para></listitem>
	   </itemizedlist></para>

      <para><link linkend="icomparison1">Integer comparison
         operators</link></para>
      <para><link linkend="doinref">in</link>,
         <firstterm>keyword</firstterm> preceding
         <varname>[list]</varname> in a <firstterm>for</firstterm>
         loop</para>
      <para><link linkend="inittabref">Initialization table</link>,
         <filename>/etc/inittab</filename></para>
      <para><link linkend="iitest">Interactive script</link>, test for</para>
      <para><link linkend="ioredirref">I/O redirection</link></para>

<!-- ********************** -->
      <para><link linkend="ivrref">Indirect referencing of variables</link>
         <itemizedlist>
      <listitem><para><link linkend="ivr2">New notation</link>, introduced
         in version 2 of Bash</para></listitem>
      <listitem><para><link linkend="varrefnew">
         Example script</link></para></listitem>
         </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="iterationref">Iteration</link></para>

      <para>* * *</para>

      <para><link linkend="jobidtable0">Job IDs</link>, table</para>
      <para><link linkend="jotref">jot</link>,
        Emit a sequence of integers. Equivalent to <link
        linkend="seqref">seq</link>.</para>

      <para>* * *</para>

      <para><link linkend="keywordref">Keywords</link></para>

      <para><link linkend="killref">kill</link>,
        terminate a process by <link linkend="processiddef">process ID</link>
	  <itemizedlist>
      <listitem><para><link
        linkend="zombieref">Options</link> (<option>-l</option>,
	<option>-9</option>)</para></listitem>
         </itemizedlist></para>

      <para><link linkend="killallref">killall</link>,
        terminate a process <emphasis>by name</emphasis></para>
      <para><link linkend="killall2ref"><firstterm>killall
         script</firstterm></link> in <filename
         class="directory">/etc/rc.d/init.d</filename></para>

      <para>* * *</para>

      <para><link linkend="le0ref"> -le </link>,
         <firstterm>less-than or equal</firstterm>
	 <link linkend="icomparison1">integer comparison</link> test</para>
      <para><link linkend="letref">let</link>,
        setting and carrying out arithmetic operations on variables</para>
      <para><link linkend="limitstringref">Limit string</link>,
         in a <link linkend="heredocref">here document</link></para>
      <para><link linkend="linenoref"><varname>$LINENO</varname></link>,
         variable indicating the <firstterm>line number</firstterm> where
         it appears in a script</para>

      <para><link linkend="linkref">Link</link>, file
         (using <firstterm>ln</firstterm> command)
	     <itemizedlist>
        <listitem><para><link
	  linkend="linkminvok">Invoking script with multiple names</link>,
          using <firstterm>ln</firstterm></para></listitem>
        <listitem><para><link
	  linkend="symlinkref"><firstterm>symbolic</firstterm>
	  links</link>, <firstterm>ln -s </firstterm></para></listitem>
             </itemizedlist></para>

      <para><link linkend="listconsref">List constructs</link>
        <itemizedlist>

      <listitem><para><link linkend="lcons1"><firstterm>And</firstterm>
        list</link></para></listitem>
      <listitem><para><link linkend="orlistref"><firstterm>Or</firstterm>
        list</link></para></listitem>
        </itemizedlist></para>

      <para><link linkend="localref1">Local variables</link>
         <itemizedlist>
      <listitem><para>and <link
        linkend="locvarrecur">recursion</link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="localization">Localization</link></para>

      <para><link linkend="logops1">Logical operators</link>
         (<varname>&amp;&amp;</varname>, <varname>||</varname>,
         etc.)</para>
      <para><link linkend="logoutfileref1">Logout file</link>,
         the <filename>~/.bash_logout</filename> file</para>


      <para><link linkend="loops1">Loops</link>
        <itemizedlist>

      <listitem><para><link linkend="brkcont1">break</link>
         loop control command</para></listitem>
      <listitem><para><link linkend="brkcont1">continue</link> loop
        control command</para></listitem>

      <listitem>
        <para><firstterm>C</firstterm>-style
	loop within <link linkend="dblparensref">double
	parentheses</link></para>
	<para><link
	  linkend="loopcstyle"><firstterm>for</firstterm> loop</link></para>
	<para><link
	  linkend="wloopcstyle"><firstterm>while</firstterm> loop</link></para>
	</listitem>

      <listitem><para><link linkend="doinref">do</link> (keyword),
         begins execution of commands within a loop</para></listitem>
      <listitem><para><link linkend="doinref">done</link> (keyword),
         terminates a loop</para></listitem>

      <listitem>
        <para><link linkend="forloopref1"><firstterm>for</firstterm>
           loops</link></para>
        <para><replaceable>for</replaceable> <varname>arg</varname>
          <replaceable>in</replaceable> <varname>[list]</varname>;
          <replaceable>do</replaceable></para>

        <para><link linkend="loopcs"><firstterm>Command
	  substitution</firstterm> to generate
	  <varname>[list]</varname></link></para>
        <para><link linkend="liglob">Filename expansion
	  in <varname>[list]</varname></link></para>
        <para><link linkend="multparaml">Multiple parameters
	  in each <varname>[list]</varname> element</link></para>
        <para><link linkend="omitlist">Omitting
	  <varname>[list]</varname></link>, defaults to
	  <link linkend="posparamref">positional parameters</link></para>
        <para><link linkend="paramli">Parameterizing
	   <varname>[list]</varname></link></para>
      <para><link
        linkend="loopredir">Redirection</link></para>
      </listitem>

      <listitem><para><link linkend="doinref">in</link>,
         (keyword) preceding [list] in a
         <firstterm>for</firstterm> loop</para></listitem>
      <listitem><para><link linkend="nestedloops">Nested
         loops</link></para></listitem>
      <listitem><para><link linkend="bgloop0">Running a
         loop <emphasis>in the background</emphasis></link>,
	 <firstterm>script example</firstterm></para></listitem>

      <listitem>
        <para>Semicolon required, when <firstterm>do</firstterm> is on first line
	  of loop</para>
	<para><link linkend="needsemicolon"><firstterm>for</firstterm>
	  loop</link></para>
	<para><link linkend="whileneedsemi"><firstterm>while</firstterm>
	  loop</link></para>
      </listitem>

      <listitem><para><link linkend="untilloopref">until</link> loop</para>
         <para><replaceable>until [ condition-is-true ]; do</replaceable>
	 </para></listitem>

      <listitem><para><link linkend="whileloopref">while</link>
        loop</para>
	<para><replaceable>while [ condition ]; do</replaceable></para>

	<para><link linkend="whilefunc">Function call</link>
	  inside test brackets</para>
	<para><link linkend="whmultcond">Multiple conditions</link></para>
	<para><link linkend="whilenobrackets">Omitting <firstterm>test
	  brackets</firstterm></link></para>
        <para><link
        linkend="whredir">Redirection</link></para>
        <para><link linkend="whilereadref2">
         <firstterm>while read</firstterm></link> construct</para>
	</listitem>

      <listitem><para><link linkend="chooseloop">Which type of loop to
        use</link></para></listitem>

        </itemizedlist></para>


      <para><link linkend="loopbackref">Loopback devices</link>,
         in <filename class="directory">/dev</filename> directory</para>
      <para><link linkend="lt0ref"> -lt </link>,
         <firstterm>less-than</firstterm> <link linkend="icomparison1">integer
	 comparison</link> test</para>

      <para>* * *</para>

      <para><link linkend="m4ref">m4</link>, macro processing language</para>
      <para><link linkend="machtyperef"><varname>$MACHTYPE</varname></link>,
         <firstterm>Machine type</firstterm></para>
      <para><link linkend="magnumref">Magic number</link>,
         marker at the head of a file indicating the file type</para>
      <para><link linkend="makefileref"><filename>Makefile</filename></link>,
         file containing the list of dependencies used by <link
         linkend="makeref">make</link> command</para>

      <para><link linkend="moduloref">Modulo</link>, arithmetic
         <firstterm>remainder</firstterm> operator
	    <itemizedlist>
          <listitem><para>Application: <link linkend="primes1">Generating
            prime numbers</link></para></listitem>
	    </itemizedlist></para>
      <para><link linkend="monthlypmt0">Mortgage calculations</link>,
        <firstterm>example script</firstterm></para>

      <para>* * *</para>

      <para><command>-n </command>
        <link linkend="stringnotnull">String not
        <firstterm>null</firstterm></link> test</para>
      <para><link linkend="namedpiperef">Named pipe</link>, a temporary
         FIFO buffer
	 <itemizedlist>
      <listitem><para><link linkend="zfifo"><firstterm>Example
         script</firstterm></link></para></listitem>
	 </itemizedlist></para>

      <para><link linkend="ncref">nc</link>, <firstterm>netcat</firstterm>,
        a toolkit for TCP and UDP ports</para>
      <para><link linkend="nequalref">-ne</link>,
         <firstterm>not-equal-to</firstterm> <link
	 linkend="icomparison1">integer comparison</link> test</para>
      <para><link linkend="notref">Negation operator</link>,
         <command>!</command>, reverses the sense of a <link
         linkend="ifthen">test</link></para>
      <para><link linkend="netstatref">netstat</link>, Network
         statistics</para>
      <para><link linkend="nlref">nl</link>, a filter to number lines of
        text</para>
      <para><link linkend="noclobberref"><firstterm>Noclobber</firstterm></link>,
         <option>-C</option> option to Bash to prevent overwriting
         of files</para>
      <para><link linkend="nullvar"><firstterm>null</firstterm> variable
        assignment</link>, avoiding</para>

      <para>* * *</para>

      <para><command>-o </command>
        <link linkend="compoundor">Logical OR</link>
	compound comparison test</para>
      <para><link linkend="odref">od</link>, <firstterm>octal
        dump</firstterm></para>
      <para><link linkend="oldpwd"><varname>$OLDPWD</varname></link>
         Previous working directory</para>

      <para>Operator
         <itemizedlist>
      <listitem><para><link linkend="operatordef">Definition
        of</link></para></listitem>
      <listitem><para><link
        linkend="opprecedence1">Precedence</link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="optionsref">Options</link>,
         passed to shell or script on command line or by <link
         linkend="setref">set</link> command</para>
      <para><link linkend="orlistref"><firstterm>Or</firstterm>
        list</link></para>
      <para><link linkend="orref">Or logical operator</link>,
         <command>||</command></para>

      <para>* * *</para>


<!-- ********************** -->
      <para><link linkend="paramsubref">Parameter
         substitution</link>
	   <itemizedlist>

      <listitem>
        <para><firstterm>${parameter+alt_value}</firstterm></para>
	<para><firstterm>${parameter:+alt_value}</firstterm></para>
        <para><link linkend="paramaltv">Alternate value</link>
          of parameter, if set</para>
      </listitem>
      <listitem>
        <para><firstterm>${parameter-default}</firstterm></para>
	<para><firstterm>${parameter:-default}</firstterm></para>
        <para><firstterm>${parameter=default}</firstterm></para>
	<para><firstterm>${parameter:=default}</firstterm></para>
      <para><link linkend="defparam1">Default
        parameters</link></para></listitem>
      <listitem>
        <para><firstterm>${!varprefix*}</firstterm></para>
        <para><firstterm>${!varprefix@}</firstterm></para>
      <para><link linkend="varprefixm">Parameter
        <emphasis>name</emphasis> match</link></para>
      </listitem>
      <listitem>
	 <para><firstterm>${parameter?err_msg}</firstterm></para>
         <para><link linkend="qerrmsg">Parameter-unset message</link></para>
      </listitem>
      <listitem>
        <para><firstterm>${parameter}</firstterm></para>
        <para><link linkend="pssub1">Value of
	<firstterm>parameter</firstterm></link></para>
      </listitem>

      <listitem><para><link linkend="pw0"><firstterm>Script
        example</firstterm></link></para></listitem>
      <listitem><para><link linkend="parsubtab"><command>Table</command></link>
        of <firstterm>parameter
        substitution</firstterm></para></listitem>

	   </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="parchildprobref">Parent / child process
         problem</link>, a <firstterm>child</firstterm> process cannot
         <link linkend="exportref">export</link> variables to a <link
         linkend="forkref">parent process</link></para>

<!-- ********************** -->
      <para>Parentheses
         <itemizedlist>
      <listitem><para><link linkend="parensref">Command
         group</link></para></listitem>
      <listitem><para><link linkend="parengrps">Enclose group</link>
	 of <firstterm>Extended Regular
	 Expressions</firstterm></para></listitem>
      <listitem><para><link linkend="dblparensref">Double parentheses</link>,
         in arithmetic expansion</para></listitem>
         </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="pathref"><varname>$PATH</varname></link>,
         the <firstterm>path</firstterm> (location of system
         binaries)</para>
      <para><link linkend="perlref">Perl</link>, programming language
         <itemizedlist>
      <listitem><para><link linkend="bashandperl0">Combined</link> in the
        same file with a <firstterm>Bash</firstterm> script</para></listitem>
      <listitem><para><link linkend="perlemb">Embedded</link> in a
        <firstterm>Bash</firstterm> script</para></listitem>
      <listitem><para><link linkend="evalx0">Using <firstterm>eval</firstterm>
        with</link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="processiddef">PID</link>,
        process ID</para>

<!-- ********************** -->
      <para><link linkend="piperef">Pipe</link>, <command>| </command>,
         a device for passing the output of a command to another command
         or to the shell

	   <itemizedlist>
      <listitem><para><link linkend="catabuse">Avoiding
        unnecessary commands</link> in a
        <firstterm>pipe</firstterm></para></listitem>
      <listitem><para><link linkend="pipefailref">Pipefail</link>,
         <firstterm>set -o pipefail</firstterm>
         option to indicate <link linkend="exitstatusref">exit status</link>
         within a <firstterm>pipe</firstterm></para></listitem>
      <listitem><para><link
        linkend="pipestatusref"><varname>$PIPESTATUS</varname></link>,
	<firstterm>exit status</firstterm> of last executed
	pipe</para></listitem>
      <listitem><para><link linkend="ucref">Piping output of a command</link>
         to a script</para></listitem>
      <listitem><para><link linkend="catlesseff">Redirecting
        <filename>stdin</filename></link>, rather than using
	<link linkend="catref">cat</link> in a
	<firstterm>pipe</firstterm></para></listitem>
	   </itemizedlist></para>
<!-- ********************** -->

      <para><link linkend="gotchas">Pitfalls</link>
         <itemizedlist>

      <listitem><para><link linkend="dashnredr"><command>-</command>
        (dash) is <emphasis>not</emphasis> redirection
        operator</link></para></listitem>
      <listitem><para><link linkend="doubleslashref"><command>//
        </command> (double forward slash)</link>, behavior of <link
        linkend="cdref">cd</link> command toward</para></listitem>
      <listitem><para><link linkend="binsh"><token>#!/bin/sh</token></link>
	script header disables <link
	linkend="bashcompat">extended <firstterm>Bash</firstterm> 
	features</link></para></listitem>
      <listitem><para><link linkend="catabuse">Abuse of
        <firstterm>cat</firstterm></link></para></listitem>
      <listitem><para><link linkend="cgiref"><firstterm>CGI</firstterm>
        programming</link>, using scripts for</para></listitem>
      <listitem><para>Closing <firstterm>limit string</firstterm>
        in a <firstterm>here document</firstterm>,
      <link linkend="indentedls">indenting</link></para></listitem>
      <listitem><para><link linkend="dosnewlines">DOS-type newlines
        (<token>\r\n</token>)</link> crash a script</para></listitem>
      <listitem><para><link linkend="evalrisk">eval</link>, risk of
        using</para></listitem>
      <listitem><para><link linkend="execperm">Execute permission
        lacking</link> for commands within a script</para></listitem>
      <listitem><para><link
         linkend="parchildprobref"><firstterm>Export</firstterm>
         problem</link>, <firstterm>child</firstterm> process
	 to <firstterm>parent</firstterm> process</para></listitem>
      <listitem><para><link linkend="lateverf">Extended
        <firstterm>Bash</firstterm> features</link> not
	available</para></listitem>
      <listitem><para><link linkend="failquote">Failing to
        <firstterm>quote</firstterm> variables</link>
	within <firstterm>test</firstterm> brackets</para></listitem>
      <listitem><para><link linkend="gnuref"><firstterm>GNU</firstterm>
         command set</link>, in cross-platform scripts</para></listitem>
      <listitem><para><link linkend="nullvar"><firstterm>null</firstterm>
        variable assignment</link></para></listitem>
      <listitem>
        <para><link linkend="numstrcompne">Numerical and string
          comparison operators</link> <emphasis>not</emphasis>
          equivalent</para>
        <para><link linkend="eqdif"><command>=</command>
          and <command>-eq</command></link> <emphasis>not</emphasis>
	  interchangeable</para>
      </listitem>
      <listitem><para><link linkend="omitsemicolon">Omitting
         terminal <firstterm>semicolon</firstterm></link>,
	 in a <firstterm>curly-bracketed</firstterm> <link
	 linkend="codeblockref">code block</link></para></listitem>
      <listitem>
        <para>Piping</para>
        <para><link linkend="pipeloop"><firstterm>echo</firstterm>
	   to a loop</link></para>
        <para><link linkend="badread0"><firstterm>echo</firstterm>
	   to <firstterm>read</firstterm></link></para>
        <para><link linkend="ptailgrep"><firstterm>tail</firstterm>
	   <option>-f</option> to <firstterm>grep</firstterm></link></para>
      </listitem>
      <listitem><para><link linkend="suidscr"><firstterm>suid</firstterm>
           commands inside a script</link></para></listitem>
      <listitem><para><link linkend="undocf">Undocumented
        <firstterm>Bash</firstterm> features</link>,
	danger of</para></listitem>
      <listitem><para><link linkend="uninitvar">Uninitialized
         variables</link></para></listitem>
      <listitem><para><link linkend="inappvn">Variable names</link>,
         inappropriate</para></listitem>
      <listitem><para><link linkend="varsubsh">Variables in a
        <firstterm>subshell</firstterm></link>, <firstterm>scope</firstterm>
	limited</para></listitem>
      <listitem><para><link linkend="wsbad">Whitespace</link>,
         misuse of</para></listitem>

	   </itemizedlist></para>

<!-- ********************** -->


      <para><link linkend="portabilityissues">Portability issues</link>
        in shell scripting
	   <itemizedlist>
      <listitem><para><link
	  linkend="setpum">Setting <firstterm>path</firstterm>
	  and <firstterm>umask</firstterm></link></para></listitem>
      <listitem><para><link
	  linkend="whatisref3">Using <firstterm>whatis</firstterm></link>
	  </para></listitem>
	   </itemizedlist></para>

<!-- *************************************************************** -->
      <para><link linkend="posparamref1">Positional parameters</link>

	   <itemizedlist>
      <listitem><para><link
      linkend="appref2"><varname>$@</varname></link>,
      as <firstterm>separate</firstterm> words</para></listitem>
      <listitem><para><link
      linkend="appref"><varname>$*</varname></link>,
      as a <firstterm>single</firstterm> word</para></listitem>
	   </itemizedlist></para>
<!-- *************************************************************** -->

      <para><link linkend="posix2ref"><acronym>POSIX</acronym></link>,
         <firstterm>Portable Operating System Interface /
         UNIX</firstterm>

         <itemizedlist>
      <listitem><para><link linkend="posixref">Character
         classes</link></para></listitem>
         </itemizedlist></para>


      <para><link linkend="ppidref"><varname>$PPID</varname></link>,
         <firstterm>process ID</firstterm> of parent process</para>
        <para><link linkend="opprecedence1">Precedence</link>, operator</para>
         <para><link
         linkend="prependref"><firstterm>Prepending</firstterm></link>
         lines at head of a file, <firstterm>script
         example</firstterm></para>


       <para>Prime numbers
          <itemizedlist>
       <listitem><para>Generating primes
         <link linkend="primes1">without using arrays</link></para></listitem>
       <listitem><para><link linkend="primes0">Sieve of
         Eratosthenes</link></para></listitem>
          </itemizedlist></para>

      <para><link linkend="printfref">printf</link>,
        <firstterm>formatted print</firstterm> command</para>
      <para><link linkend="procref2"><filename
        class="directory">/proc</filename></link> directory
          <itemizedlist>
      <listitem><para><link linkend="procrunning">Running processes</link>,
        files describing</para></listitem>
      <listitem><para><link linkend="procwarning">Writing to
        files in <filename class="directory">/proc</filename></link>,
	<emphasis>warning</emphasis></para></listitem>
           </itemizedlist></para>

<!-- *************************************************************** -->
      <para><link linkend="processref">Process</link>
         <itemizedlist>
      <listitem><para><link linkend="processiddef">Process
      ID</link> (PID)</para></listitem>
         </itemizedlist></para>
<!-- *************************************************************** -->

      <para><link linkend="processsubref">Process substitution</link>
         <itemizedlist>
      <listitem><para><link
         linkend="pcc2dir">To compare contents of
           directories</link></para></listitem>
      <listitem><para><link
         linkend="psfdstdin">To supply <filename>stdin</filename> of a
         command</link></para></listitem>
      <listitem><para><link
         linkend="commandsparens1">Template</link></para></listitem>
         </itemizedlist></para>
<!-- *************************************************************** -->
      <para>Prompt

         <itemizedlist>

      <listitem><para><link
         linkend="ps1ref"><varname>$PS1</varname></link>, <firstterm>Main
         prompt</firstterm>, seen at command
         line</para></listitem>

      <listitem><para><link linkend="secpromptref"><varname>$PS2</varname></link>,
         Secondary prompt</para></listitem>
         </itemizedlist></para>
<!-- *************************************************************** -->

      <para><link linkend="pseudocoderef">Pseudo-code</link>,
         as problem-solving method</para>
      <para><link linkend="pwdref"><varname>$PWD</varname></link>,
         Current working directory</para>

      <para>* * *</para>

      <para>Question mark, <command>? </command>
         <itemizedlist>
           <listitem><para><link linkend="quexregex">Character
             match</link> in an Extended <firstterm>Regular
             Expression</firstterm></para></listitem>
           <listitem><para><link linkend="quexwc">Single-character
	     <firstterm>wild card</firstterm></link>,
	     in <link
	     linkend="globbingref">globbing</link></para></listitem>
           <listitem><para>In a
              <link linkend="cstrinary"><firstterm>C</firstterm>-style
              Trinary operator</link></para></listitem>
         </itemizedlist></para>

<!-- *************************************************************** -->
      <para><link linkend="quotingdef">Quoting</link>
        <itemizedlist>
      
      <listitem><para><link linkend="quotingref">Character
        string</link></para></listitem>

      <listitem><para><link
        linkend="quotingvar">Variables</link></para>
        <para><link
          linkend="failquote">within <firstterm>test</firstterm>
          brackets</link></para></listitem>

        <listitem><para><link
          linkend="wsquo"><firstterm>Whitespace</firstterm></link>,
	  using <firstterm>quoting</firstterm> to
	  preserve</para></listitem>

        </itemizedlist></para>
<!-- *************************************************************** -->

      <para>* * *</para>

<!-- *************************************************************** -->
      <para>Random numbers

         <itemizedlist>

      <listitem><para><link
        linkend="urandomref"><filename>/dev/urandom</filename></link>
	</para></listitem>

      <listitem><para><link linkend="awkrandomref">
         <varname>rand()</varname></link>,
	 random function in <link
	 linkend="awkref">awk</link></para></listitem>

      <listitem><para><link
        linkend="randomvar01"><varname>$RANDOM</varname></link>, Bash
        function that returns a pseudorandom integer</para></listitem>

      <listitem><para><link linkend="daterandref">Random sequence
        generation</link>, using <link linkend="dateref">date</link>
        command</para></listitem>

      <listitem><para><link linkend="randstring0">Random string</link>,
        generating</para></listitem>

         </itemizedlist></para>

<!-- *************************************************************** -->



      <para><link linkend="rcsref">rcs</link></para>

<!-- *************************************************************** -->

      <para><link linkend="readref">read</link>, set value of a
        variable from <link
        linkend="stdinoutdef"><filename>stdin</filename></link>
         <itemizedlist>

      <listitem><para><link linkend="readarrow">Detecting
        <firstterm>arrow</firstterm> keys</link></para></listitem>
      <listitem><para><link
        linkend="readoptions">Options</link></para></listitem>
      <listitem><para><link linkend="readpiperef">Piping
        output of <firstterm>cat</firstterm></link>
        to <firstterm>read</firstterm></para></listitem>
      <listitem><para><link linkend="hsread"><quote>Prepending</quote>
	   text</link></para></listitem>
      <listitem><para><link linkend="badread0">
         Problems piping <firstterm>echo</firstterm></link>
	 to <firstterm>read</firstterm></para></listitem>
      <listitem><para><link linkend="readredir0">Redirection from a
        file</link> to <firstterm>read</firstterm></para></listitem>
      <listitem><para><link
        linkend="replyref"><varname>$REPLY</varname></link>,
	default <firstterm>read</firstterm> variable</para></listitem>
      <listitem><para><link linkend="readtimed">Timed
        input</link></para></listitem>
      <listitem><para><link linkend="whilereadref2">
         <firstterm>while read</firstterm></link>
         construct</para></listitem>
         </itemizedlist></para>

      <para><link linkend="recursionref">Recursion</link>
         <itemizedlist>
      <listitem><para><link linkend="locvarrecur">Local
      variables</link></para></listitem>
         </itemizedlist></para>


<!-- *************************************************************** -->
      <para>Redirection
         <itemizedlist>

      <listitem><para><link linkend="redirref">Code
         blocks</link></para></listitem>
      <listitem><para><link linkend="usingexecref">exec
        &lt;<filename>filename</filename></link>,</para>
	<para>to reassign
        <link linkend="fdref">file descriptors</link></para></listitem>
	 <listitem><para><link linkend="ioredirintro">Introductory-level
	   explanation</link> of <firstterm>I/O
	   redirection</firstterm></para></listitem>
      <listitem><para><link linkend="ioredirectionref2">
	   Open a file</link> for <emphasis>both</emphasis>
	   reading and writing</para>
           <para><filename>&lt;&gt;filename</filename>
	   </para></listitem>
      <listitem><para><link
        linkend="readredir0"><firstterm>read</firstterm>
        input redirected</link> from a file</para></listitem>
	 <listitem><para>
         <link linkend="ioredirectionref1">
	    <filename>stderr</filename> to
	    <filename>stdout</filename></link></para>
            <para><filename>2&gt;&amp;1 </filename></para></listitem>

      <listitem><para><link linkend="coxex"><filename>stdin</filename> /
         <filename>stdout</filename></link>,
         using <command> - </command></para></listitem>
      <listitem><para><link linkend="redstdinfunc1">
         <filename>stdin</filename>of a
         <firstterm>function</firstterm></link></para></listitem>
      <listitem><para><link linkend="ioredirectionref">
         <filename>stdout</filename> to a file</link></para>
	 <para><replaceable>&gt;</replaceable> ... <replaceable>&gt;&gt;</replaceable>
	 </para></listitem>

      <listitem><para>
        <link linkend="ioredirectionref1">
	<filename>stdout</filename> to
	<firstterm>file descriptor</firstterm></link>
	<firstterm>j</firstterm></para>
	<para><filename>&gt;&amp;j </filename></para></listitem>
      <listitem><para>
        <link linkend="ioredirectionref1">
	file descriptor<filename>i</filename> to
	<firstterm>file descriptor</firstterm></link>
	<firstterm>j</firstterm></para>
	<para><filename>i&gt;&amp;j </filename></para></listitem>

     <listitem><para>
         <link linkend="redirouterror2"><filename>stdout</filename>
	  of a command</link> to <filename>stderr</filename></para>
          <para><filename>&gt;&amp;2</filename></para></listitem>
     <listitem><para>
         <link linkend="redirouterror"><filename>stdout</filename>
         <emphasis>and</emphasis> <filename>stderr</filename>
	 of a command</link> to a file</para>
         <para><filename>&amp;&gt; </filename></para></listitem>
     <listitem><para>
         <link linkend="teeref">tee</link>, redirect to a file
	    output of command(s) partway through a <link
	    linkend="piperef">pipe</link></para></listitem>

         </itemizedlist></para>
<!-- *************************************************************** -->

      <para><link linkend="refcards">Reference Cards</link>
         <itemizedlist>
        <listitem><para><link linkend="misctab">Miscellaneous
	  constructs</link></para></listitem>
        <listitem><para><link linkend="parsubtab">Parameter
	  substitution/expansion</link></para></listitem>
        <listitem><para><link linkend="specshvartab">Special shell
           variables</link></para></listitem>
        <listitem><para><link linkend="stringopstab">String
	  operations</link></para></listitem>
        <listitem><para>Test operators</para>
	  <para><link linkend="bincomptab">Binary comparison</link></para>
	  <para><link linkend="filestab">Files</link></para>
       </listitem>
         </itemizedlist></para>

<!-- *************************************************************** -->

      <para><link linkend="regexref"><firstterm>Regular
         Expressions</firstterm></link>
	    <itemizedlist>
         <listitem><para><command>^ </command> (caret)
           <link linkend="beglineref">Beginning-of-line</link>
	   </para></listitem>
         <listitem><para><command>$ </command> (dollar sign)
        <link linkend="dollarsignref"><firstterm>Anchor</firstterm></link>
           </para></listitem>
	 <listitem><para><command>. </command> (dot)
           <link linkend="regexdot">Match single
	   character</link></para></listitem>
	 <listitem><para><command>* </command> (asterisk)
           <link linkend="asteriskref2">Any number of
	   characters</link></para></listitem>
      <listitem><para><command>[ ]</command> (brackets) <link
        linkend="bracketsref">Enclose character set
        to match</link></para></listitem>
      <listitem><para><command>\ </command> (backslash) <link
         linkend="regexbs">Escape</link>, interpret following
	 character literally</para></listitem>
         <listitem><para><command>\&lt; ... \&gt; </command>
	   (angle brackets, <firstterm>escaped</firstterm>)
           <link linkend="anglebrac">Word boundary</link></para></listitem>
         <listitem>
	   <para><link linkend="extregex">Extended</link>
             REs</para>
           <para><command>+ </command>
            <link linkend="plusref"><firstterm>Character
            match</firstterm></link></para>
            <para><command>\{ \} </command> <link linkend="escpcb">Escaped
              <quote>curly</quote> brackets</link></para>
            <para><command>[:   :] </command> <link
              linkend="posixref">POSIX character classes</link></para>
	 </listitem>
	    </itemizedlist></para>

      <para><link linkend="replyref"><varname>$REPLY</varname></link>,
         Default value associated with <link linkend="readref">read</link>
         command</para>
      <para><link linkend="restrictedshref">Restricted shell</link>,
         shell (or script) with certain commands disabled</para>
      <para><link linkend="returnref">return</link>,
         command that terminates a <link
         linkend="functionref">function</link></para>

      <para><link linkend="runpartsref">run-parts</link>
         <itemizedlist>
        <listitem><para><link linkend="runpartsref2">Running scripts
          in sequence</link>, without user intervention</para></listitem>
         </itemizedlist></para>

      <para>* * *</para>

      <para><link linkend="scoperef">Scope</link> of a variable,
         definition</para>
      <para><link linkend="invocationoptionsref">Script options</link>,
         set at command line</para>
      <para><link linkend="libroutines">Scripting routines</link>,
        library of useful definitions and <link
	linkend="functionref">functions</link></para>
      <para><link linkend="secpromptref">Secondary prompt</link>,
         <command><varname>$PS2</varname></command></para>

      <para><link linkend="securityissues">Security issues</link>
	   <itemizedlist>
      <listitem><para><link linkend="nmapref">nmap</link>,
        <firstterm>network mapper</firstterm>
	/ port scanner</para></listitem>
      <listitem><para><link linkend="sudoref">sudo</link></para></listitem>
      <listitem><para><link linkend="suidscr"><firstterm>suid</firstterm>
           commands inside a script</link></para></listitem>
      <listitem><para><link linkend="infectedscripts1">Viruses,
        trojans, and worms</link> in scripts</para></listitem>
      <listitem><para><link linkend="securitytips1">Writing
        secure scripts</link></para></listitem>
	   </itemizedlist></para>



      <para><link linkend="sedref">sed</link>,
         pattern-based programming language
	    <itemizedlist>
      <listitem><para><link
        linkend="sedbasictable"><command>Table</command></link>,
         basic operators</para></listitem>
      <listitem><para><link
        linkend="sedoptable"><command>Table</command></link>,
         examples of operators</para></listitem>
	   </itemizedlist></para>

      <para><link linkend="selectref">select</link>,
         construct for menu building
	    <itemizedlist>
      <listitem><para><link linkend="inlistomit"><userinput>in
         <replaceable>list</replaceable></userinput> omitted</link>
	 </para></listitem>
	    </itemizedlist></para>

      <para><link linkend="needsemicolon">Semicolon required</link>,
         when <link linkend="doinref">do</link>
         <firstterm>keyword</firstterm> is on first line of <link
	 linkend="forloopref1">loop</link>
             <itemizedlist>
      <listitem><para><link linkend="omitsemicolon">When
         terminating <firstterm>curly-bracketed</firstterm>
	 code block</link></para></listitem>
             </itemizedlist></para>

      <para><link linkend="seqref">seq</link>,
        Emit a sequence of integers. Equivalent to <link
        linkend="jotref">jot</link>.</para>

      <para><link linkend="setref">set</link>,
         Change value of internal script variables</para>

      <para><link linkend="whatsascript">Shell script</link>,
         definition of</para>
      <para><link linkend="shwrapper">Shell wrapper</link>,
         script embedding a command or utility</para>
      <para><link linkend="shiftref">shift</link>, reassigning
         <firstterm>positional parameters</firstterm></para>
	 <para><link linkend="shlvlref"><varname>$SHLVL</varname></link>,
            <firstterm>shell level</firstterm>, depth to which the shell
            (or script) is nested</para> 
      <para><link linkend="shoptref">shopt</link>,
        change <firstterm>shell options</firstterm></para>
      <para><link linkend="signald">Signal</link>,
         a message sent to a process</para>
      <para><link linkend="snglquo">Single quotes</link>
         (<command>' ... '</command>) <firstterm>strong</firstterm> <link
	 linkend="quotingref">quoting</link></para>
      <para><link linkend="socketref">Socket</link>, a communication
         node associated with an I/O port</para>

      <para>Sorting
         <itemizedlist>
      <listitem><para><link linkend="bubblesort">Bubble
        sort</link></para></listitem>
      <listitem><para><link linkend="insertionsort0">Insertion
        sort</link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="sourceref">source</link>,
        execute a script or, within a script, import a file
	  <itemizedlist>
      <listitem><para><link linkend="sourceparams">Passing positional
        parameters</link></para></listitem>
          </itemizedlist></para>

      <para><firstterm>Spam</firstterm>, dealing with
          <itemizedlist>
      <listitem><para><link linkend="spamlookup_0"><firstterm>Example
        script</firstterm></link></para></listitem>
      <listitem><para><link linkend="isspammer_0"><firstterm>Example
        script</firstterm></link></para></listitem>
      <listitem><para><link linkend="isspammer2_0"><firstterm>Example
        script</firstterm></link></para></listitem>
      <listitem><para><link linkend="whx0"><firstterm>Example
        script</firstterm></link></para></listitem>
          </itemizedlist></para>

      <para><link linkend="scharlist1">Special characters</link></para>
      <para>Stack, emulating a push-down, <link
        linkend="stackex0"><firstterm>Example
        script</firstterm></link></para>
      <para><link linkend="filesref1">Startup files</link>, Bash</para>

      <para><link linkend="stdinoutdef"><filename>stdin</filename>
         and <filename>stdout</filename></link></para>

<!-- *************************************************************** -->
      <para>Strings
         <itemizedlist>

      <listitem><para>
         <command>=~ </command>
      <link linkend="regexmatchref">String match operator</link>
        </para></listitem>

      <listitem><para><link
         linkend="scomparison1">Comparison</link></para></listitem>
      <listitem><para><link linkend="psorex1">Length</link></para>
         <para><replaceable>${#string}</replaceable></para></listitem>
      <listitem><para><link
         linkend="stringmanip">Manipulation</link></para></listitem>
      <listitem><para><link linkend="awkstringmanip2">Manipulation</link>,
         using <link linkend="awkref">awk</link></para></listitem>

      <listitem>
        <para><link
          linkend="protectliteral0">Protecting strings</link>
	  from expansion and/or reinterpretation,
	  <firstterm>script example</firstterm></para>
        <para><link
          linkend="unprotectliteral0"><firstterm>Unprotecting</firstterm>
            strings</link>,
	  <firstterm>script example</firstterm></para>
      </listitem>

      <listitem>
      <para>Substring extraction</para>
      <para><link linkend="substrextr01">${string:position}</link></para>
      <para><link
         linkend="substrextr02">${string:position:length}</link></para>
      <para><link linkend="expextrsub">Using
	 <firstterm>expr</firstterm></link>
      </para></listitem>

      <listitem><para><link linkend="substringindex2">Substring
         <firstterm>index</firstterm></link> (numerical position in
         string)</para></listitem>
      <listitem><para><link linkend="exprparen">Substring
         <firstterm>matching</firstterm></link>, using
         <link linkend="exprref">expr</link></para></listitem>

      <listitem>
        <para><link linkend="psorex1">Substring
           <firstterm>removal</firstterm></link></para>
      <para><link linkend="psorexsh">${var#Pattern}</link></para>
      <para><link linkend="psorexlo">${var##Pattern}</link></para>
      <para><link linkend="pctrep1">${var%Pattern}</link></para>
      <para><link linkend="pctrep2">${var%%Pattern}</link></para>
      </listitem>

      <listitem>
      <para>Substring replacement</para>
      <para><link linkend="substrrepl00">${string/substring/replacement}</link></para>
      <para><link linkend="substrrepl01">${string//substring/replacement}</link></para>
      <para><link linkend="substrrepl02">${string/#substring/replacement}</link></para>
      <para><link linkend="substrrepl03">${string/%substring/replacement}</link>
      </para>

      <para><link linkend="daysbetween0"><firstterm>Script
	  example</firstterm></link></para>
    </listitem>

        <listitem><para><link
	  linkend="stringopstab"><command>Table</command></link>
	  of <firstterm>string/substring</firstterm> manipulation and
	  extraction operators</para></listitem>

         </itemizedlist></para>
<!-- *************************************************************** -->

      <para><link linkend="snglquo"><firstterm>Strong</firstterm> quoting</link>
         <command>' ... '</command></para>

      <para><link linkend="scrstyle">Stylesheet</link>
        for writing scripts</para>

<!-- *************************************************************** -->
      <para><link linkend="subshellsref">Subshell</link>
         <itemizedlist>
      <listitem><para><link linkend="subshellparens1">Command list within
        parentheses</link></para></listitem>
      <listitem><para><link linkend="subshnlevref">Variables</link>,
        <varname>$BASH_SUBSHELL</varname> and
        <varname>$SHLVL</varname></para></listitem>
      <listitem><para><link linkend="varsubsh">Variables in a
        <firstterm>subshell</firstterm></link>, <firstterm>scope</firstterm>
	limited</para></listitem>
         </itemizedlist></para>
<!-- *************************************************************** -->

      <para><link linkend="suref">su</link> <firstterm>Substitute
        user</firstterm>, log on as a different user or as
	<firstterm>root</firstterm></para>
      <para><link linkend="suidref">suid</link> (<firstterm>set user
         id</firstterm>) file flag
	   <itemizedlist>
      <listitem><para><link linkend="suidscr"><firstterm>suid</firstterm>
         commands inside a script</link>, not advisable</para></listitem>
	 </itemizedlist></para>
       
      <para><link linkend="symlinkref">Symbolic links</link></para>

      <para><link linkend="swapfileref">Swapfiles</link></para>

      <para>* * *</para>

      <para><link linkend="tailref">tail</link>, <firstterm>echo</firstterm>
        to <filename>stdout</filename> lines at the (tail) end of a text
        file</para>
     <para><link linkend="teeref">tee</link>, redirect to a file
	output of command(s) partway through a <link
	linkend="piperef">pipe</link></para>

      <para><link linkend="terminalsref">Terminals</link>
         <itemizedlist>
      <listitem><para><link
        linkend="setserialref">setserial</link></para></listitem>
      <listitem><para><link
        linkend="settermref">setterm</link></para></listitem>
      <listitem><para><link linkend="sttyref">stty</link></para></listitem>
      <listitem><para><link linkend="wallref">wall</link></para></listitem>
         </itemizedlist></para>

      <para><firstterm>test</firstterm> command
         <itemizedlist>
      <listitem><para><link linkend="ttestref">Bash
        <firstterm>builtin</firstterm></link></para></listitem>
      <listitem><para><link linkend="usrbintest">external
        command</link>, <filename>/usr/bin/test</filename>
        (equivalent to <filename>/usr/bin/[</filename>)</para></listitem>
         </itemizedlist></para>

      <para><link linkend="testconstructs1">Test constructs</link></para>

<!-- *************************************************************** -->
      <para>Test operators
         <itemizedlist>

      <listitem><para><command>-a </command>
        <link linkend="compoundand">Logical AND</link>
	compound comparison</para></listitem>
      <listitem><para><command>-e </command>
        <link linkend="rtif">File exists</link></para></listitem>
      <listitem><para><command>-eq </command>
         <link linkend="equalref">is-equal-to</link> (integer
	 comparison)</para></listitem>
      <listitem><para><command>-f </command>
        <link linkend="regularfile">File is a <firstterm>regular</firstterm>
	file</link></para></listitem>
      <listitem><para><command>-ge </command>
         <link linkend="ge0ref">greater-than or equal</link>
	 (integer comparison)</para></listitem>
      <listitem><para><command>-gt </command>
         <link linkend="gt0ref">greater-than</link> (integer
	 comparison)</para></listitem>
      <listitem><para><command>-le </command>
         <link linkend="le0ref">less-than or equal</link>
	 (integer comparison)</para></listitem>
      <listitem><para><command>-lt </command>
         <link linkend="lt0ref">less-than</link>
	 (integer comparison)</para></listitem>
      <listitem><para><command>-n </command>
        <link linkend="stringnotnull">not-zero-length</link>
	(string comparison)</para></listitem>
      <listitem><para><command>-ne </command>
         <link linkend="nequalref">not-equal-to</link>
	 (integer comparison)</para></listitem>
      <listitem><para><command>-o </command>
        <link linkend="compoundor">Logical OR</link>
	compound comparison</para></listitem>
      <listitem><para><command>-u </command>
        <link linkend="suidref"><firstterm>suid</firstterm>
	flag set</link>, file test</para></listitem>
      <listitem><para><command>-z </command>
        <link linkend="stringnull">is-zero-length</link>
	(string comparison)</para></listitem>

	 <listitem><para><command>= </command>
           <link linkend="scomparison1">is-equal-to</link>
	   (string comparison)</para>
	           <para><command>== </command>
                      <link linkend="scomparison2">is-equal-to</link>
	              (string comparison)</para></listitem>
	 <listitem><para> <command>&lt; </command>
           <link linkend="ltref">less-than</link>
	   (string comparison)</para></listitem>
	 <listitem><para><command>&lt; </command>
            <link linkend="intlt">less-than</link>,
	    (integer comparison, within
	    <link linkend="dblparens">double parentheses</link>)
          </para></listitem>
	 <listitem><para><command>&lt;= </command>
            <link linkend="lteq">less-than-or-equal</link>,
	    (integer comparison, within
	    <firstterm>double parentheses</firstterm>)
          </para></listitem>
	 <listitem><para><command>&gt; </command>
            <link linkend="gtref">greater-than</link>
	    (string comparison)</para></listitem>
	 <listitem><para><command>&gt; </command>
            <link linkend="intgt">greater-than</link>,
            (integer comparison, within
            <firstterm>double parentheses</firstterm>)</para></listitem>
	 <listitem><para><command>&gt;= </command>
            <link linkend="gteq">greater-than-or-equal</link>,
	    (integer comparison, within
	    <firstterm>double parentheses</firstterm>)
          </para></listitem>
         <listitem><para><command>|| </command>
         <link linkend="orref">Logical OR </link></para></listitem>
         <listitem><para><command>&amp;&amp; </command>
	    <link linkend="logicaland">Logical AND</link></para></listitem>

      <listitem><para><command>! </command>
         <link linkend="notref">Negation operator</link>, inverts <link
	 linkend="exitstatusref">exit status</link> of a
	 test</para>
                <para><command>!= </command>
                   <link linkend="notequal">not-equal-to</link>
                   (string comparison)</para></listitem>

      <listitem>
        <para><command>Tables</command> of <firstterm>test</firstterm>
	  operators</para>
        <para><link linkend="bincomptab">Binary comparison</link></para>
        <para><link linkend="filestab">File</link></para>
      </listitem>

         </itemizedlist></para>
<!-- *************************************************************** -->
      <para>Timed input
         <itemizedlist>
      <listitem><para><link linkend="readtimed">Using
        <firstterm>read -t</firstterm></link></para></listitem>
      <listitem><para><link linkend="sttyto">Using
        <firstterm>stty</firstterm></link></para></listitem>
      <listitem><para><link linkend="timingloop">Using
        timing loop</link></para></listitem>
      <listitem><para><link linkend="tmoutref">Using
        <varname>$TMOUT</varname></link></para></listitem>

         </itemizedlist></para>

<!-- *************************************************************** -->
      <para><link linkend="assortedtips">Tips and hints</link>
        for Bash scripts
	   <itemizedlist>

      <listitem><para>Array, <link linkend="retarray">as
        <firstterm>return value</firstterm> from
	a function</link></para></listitem>

      <listitem>
        <para>Comment blocks</para>
        <para>Using <link linkend="cblock1"><firstterm>anonymous
	  here documents</firstterm></link></para>
        <para>Using <link linkend="comoutbl"> <firstterm>if-then</firstterm>
	constructs</link></para>
      </listitem>

      <listitem><para><link linkend="commenth">Comment headers</link>,
        special purpose</para></listitem>
      <listitem><para><link
        linkend="cstyle"><firstterm>C</firstterm>-style syntax </link>,
        for handling variables</para></listitem>
      <listitem><para><link linkend="doublespace">Double-spacing a text
        file</link></para></listitem>
      <listitem><para><link linkend="filteroutp">Filter</link>,
         feeding output back to <emphasis>same</emphasis>
         filter</para></listitem>
      <listitem><para>Function<link linkend="rvt">
        <firstterm>return</firstterm> value
	workarounds</link></para></listitem>
      <listitem><para><link linkend="ifgrepfix"><firstterm>if-grep</firstterm>
        test fixup</link></para></listitem>
      <listitem><para><link linkend="libroutines">Library</link>
        of useful definitions and
        <firstterm>functions</firstterm></para></listitem>
      <listitem><para><link linkend="nullvar"><firstterm>null</firstterm>
        variable assignment</link>, avoiding</para></listitem>
      <listitem><para><link linkend="passarray">Passing
        an <firstterm>array</firstterm></link> to a
        function</para></listitem>
      <listitem><para><link
        linkend="prependref"><firstterm>Prepending</firstterm></link>
        lines at head of a file</para></listitem>
      <listitem><para><link
        linkend="pseudocoderef">Pseudo-code</link></para></listitem>
      <listitem><para>Script<link linkend="scriptasemb"> as embedded
        command</link></para></listitem>
      <listitem><para><link linkend="rcsref">rcs</link></para></listitem>
      <listitem><para><link linkend="runpartsref2">Running scripts in
        sequence</link> without user intervention, using <link
	linkend="runpartsref">run-parts</link></para></listitem>
      <listitem>
        <para>Script <firstterm>portability</firstterm></para>
        <para><link
	  linkend="setpum">Setting <firstterm>path</firstterm>
	  and <firstterm>umask</firstterm></link></para>
        <para><link
	  linkend="whatisref3">Using <firstterm>whatis</firstterm></link>
	  </para>
      </listitem>

      <listitem><para><link
        linkend="setvaremb">Setting script variable</link>
	to a block of embedded <firstterm>sed</firstterm> or
	<firstterm>awk</firstterm> code</para></listitem>
      <listitem><para><link linkend="intparam">Testing a variable</link>
        to see if it contains only digits</para></listitem>
      <listitem><para><link
        linkend="trackingscr">Tracking script usage</link></para></listitem>
      <listitem><para><link
        linkend="widgetref">Widgets</link>, invoking from a
	script</para></listitem>

         </itemizedlist></para>


      <para><link linkend="tmoutref"><varname>$TMOUT</varname></link>,
         Timeout interval</para>

      <para><link linkend="trref">tr</link>, character translation filter
         <itemizedlist>
      <listitem><para><link
        linkend="trd2u">DOS to Unix text file
        conversion</link></para></listitem>
      <listitem><para><link linkend="troptions">Options</link></para></listitem>
      <listitem><para><link
        linkend="soundex0">Soundex</link>, <firstterm>example
        script</firstterm></para></listitem>
      <listitem><para><link
        linkend="trvariants">Variants</link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="trapref1"><firstterm>Trap</firstterm></link>,
         specifying an action upon receipt of a <link
         linkend="signald">signal</link></para>
      <para><link linkend="cstrinary">Trinary operator</link>,
         <firstterm>C</firstterm>-style</para>
      <para><link linkend="trueref">true</link>,
        returns <firstterm>successful</firstterm> (0) <link
        linkend="exitstatusref">exit status</link></para>
      <para><link linkend="declare1ref">typeset</link> builtin
         <itemizedlist>
      <listitem><para><link
         linkend="declareopsref1">options</link></para></listitem>
         </itemizedlist></para>

      <para>* * *</para>

      <para><link linkend="uidref"><varname>$UID</varname></link>,
         User ID number</para>
      <para><link linkend="unaliasref">unalias</link>,
        to remove an <link linkend="aliasref">alias</link></para>
      <para><link linkend="unameref">uname</link>,
        output system information</para>
      <para><link linkend="uninitvar">Uninitialized variables</link> </para>
      <para><link linkend="uniqref">uniq</link>,
        filter to remove duplicate lines from a sorted file</para>
      <para><link linkend="unsetref">unset</link>,
         delete a shell variable</para>
      <para><link linkend="untilloopref">until</link> loop</para>
         <para><firstterm>until [ condition-is-true ]; do</firstterm></para>

      <para>* * *</para>

      <para><firstterm>Variables</firstterm>

         <itemizedlist>

      <listitem><para><link linkend="arrayopsvars">Array operations on
        </link></para></listitem>
      <listitem>
        <para><link
          linkend="asnop1">Assignment</link></para>
        <para><link
          linkend="ex15_0"><firstterm>Script
          example</firstterm></link></para>
        <para><link
          linkend="ex16_0"><firstterm>Script
          example</firstterm></link></para>
        <para><link
          linkend="varunsetting"><firstterm>Script
          example</firstterm></link></para>
	</listitem>

      <listitem><para><link
        linkend="internalvariables"><firstterm>Bash</firstterm>
        internal variables</link></para></listitem>
      <listitem><para><link
        linkend="setvaremb">Block of <firstterm>sed</firstterm> or
	<firstterm>awk</firstterm> code</link>, setting a variable
	to</para></listitem>
      <listitem><para>
	<firstterm>C-style</firstterm>
        <link linkend="plusplusref">
        increment/decrement/trinary operations</link></para></listitem>
      <listitem><para>
        <link linkend="setref">Change value of internal script variables</link>
        using <firstterm>set</firstterm></para></listitem>
      <listitem><para><link linkend="declare1ref">declare</link>,
        to restrict the properties of variables</para></listitem>
      <listitem><para><link linkend="unsetref">Deleting a shell variable</link>
         using <firstterm>unset</firstterm></para></listitem>
      <listitem><para><link
        linkend="envref">Environmental</link></para></listitem>
      <listitem><para><link linkend="exprepl1">Expansion / Substring
        replacement</link> operators</para></listitem>

      <listitem>
        <para><link linkend="ivrref">Indirect
          referencing</link></para>
	<para><replaceable>eval variable1=\$$variable2</replaceable></para>

         <para><link linkend="ivr2">Newer notation</link></para>
	 <para><replaceable>${!variable}</replaceable></para>
       </listitem>

      <listitem><para><link linkend="psorex1">Length</link></para>
         <para><replaceable>${#var}</replaceable></para></listitem>
      <listitem><para><link
        linkend="lvalueref">lvalue</link></para></listitem>
      <listitem><para><link linkend="pssub1">Manipulating and
        expanding</link></para></listitem>
      <listitem><para><link linkend="varnameval"><firstterm>Name</firstterm>
        and <firstterm>value</firstterm> of a variable</link>,
	distinguishing between</para></listitem>
      <listitem><para><link linkend="nullvar"><firstterm>null</firstterm>
        variable assignment</link>, avoiding</para></listitem>
      <listitem>
        <para><link linkend="quotingvar">Quoting</link></para>
        <para><link
          linkend="failquote">within <firstterm>test</firstterm>
          brackets</link></para>
        <para><link linkend="quotingws">to preserve
	  <firstterm>whitespace</firstterm></link></para>
      </listitem>
      <listitem><para><link
        linkend="lvalueref">rvalue</link></para></listitem>
      <listitem><para><link
        linkend="varunsetting">Setting to <firstterm>null</firstterm>
        value</link></para></listitem>
      <listitem><para><link linkend="parvis">In
        <firstterm>subshell</firstterm></link>
	not visible to parent shell</para></listitem>
      <listitem><para>Testing a variable <link linkend="intparam">
        if it contains only digits</link></para></listitem>
      <listitem><para><link linkend="undvarerr">Undeclared</link>,
        error message</para></listitem>
      <listitem><para><link linkend="uninitvar1">Uninitialized</link>
        </para></listitem>
      <listitem><para><link
      linkend="unsetref">Unsetting</link></para></listitem>
      <listitem><para><link
      linkend="bvuntyped">Untyped</link></para></listitem>

         </itemizedlist></para>

      <para>* * *</para>

      <para><link linkend="waitref">wait</link>,
        suspend script execution
	   <itemizedlist>
       <listitem><para><link linkend="waithang">To remedy
         script hang</link></para></listitem>
         </itemizedlist></para>


      <para><link linkend="dblquo"><firstterm>Weak</firstterm> quoting</link>
      <command>" ... "</command></para>


      <para><link linkend="whileloopref">while</link> loop</para>
	 <para><firstterm>while [ condition ]; do</firstterm>
         <itemizedlist>
      <listitem><para><link linkend="whilereadref2">
         <firstterm>while read</firstterm></link>
         construct</para></listitem>
         </itemizedlist></para>

      <para><link linkend="whitespaceref">Whitespace</link>,
         spaces, tabs, and newline characters
         <itemizedlist>
      <listitem><para><link linkend="ifsws"><varname>$IFS</varname> defaults
        to</link></para></listitem>
      <listitem><para><link linkend="wsbad">Inappropriate use
        of</link></para></listitem>
      <listitem><para><link linkend="indentedls">Preceding closing
        <firstterm>limit string</firstterm></link> in a <firstterm>here
	document</firstterm>, error</para></listitem>
      <listitem><para><link linkend="wsbcomm">Preceding script
        comments</link></para></listitem>
        <listitem><para><link
          linkend="wsquo"><firstterm>Quoting</firstterm></link>,
	  to preserve <firstterm>whitespace</firstterm> within strings
	  or variables</para></listitem>
         </itemizedlist></para>

      <para><link linkend="widgetref">Widgets</link></para>

      <para>* * *</para>

      <para><link linkend="xargsref">xargs</link>,
         Filter for grouping arguments
         <itemizedlist>
      <listitem><para><link linkend="xargscurlyref">
         Curly brackets</link></para></listitem>
      <listitem><para><link linkend="xargslimargs">
         Limiting arguments passed</link></para></listitem>
      <listitem><para><link
         linkend="xargslimargs">Options</link></para></listitem>
      <listitem><para><link linkend="xargsws">
         Whitespace</link>, handling</para></listitem>
         </itemizedlist></para>

      <para>* * *</para>

      <para><link linkend="yesref">yes</link></para>

      <para>* * *</para>

      <para><command>-z </command>
        <link linkend="stringnull">String is
	<firstterm>null</firstterm></link></para>
      <para><link linkend="zombieref"><firstterm>Zombie</firstterm></link>,
         a process that has terminated, but not yet been killed by its
         parent</para>
