      <para>This index / glossary / quick-reference lists many of the
	important topics covered in the text. Terms are arranged
	in <emphasis>approximate</emphasis> ASCII sorting order,
	<emphasis>modified as necessary</emphasis> 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)
         <itemizedlist>
         <listitem>
	   <para>
	   <link linkend="beglineref">Beginning-of-line</link>,
	   in a <link linkend="regexref">Regular Expression</link>
	   </para>
	 </listitem>

         <listitem>
      <para><command>^</command></para>
      <para><command>^^</command></para>
      <para><link linkend="casemodparamsub">Uppercase
       conversion</link> in <firstterm>parameter
       substitution</firstterm></para>
	 </listitem>
         </itemizedlist>
	 </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 <link linkend="dblparensref">double
	 parentheses</link>
          </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>

        <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>

      <listitem><para><command>;;&</command> <command>;&</command>
        <link linkend="ncterm">Terminators</link> in
	a <firstterm>case</firstterm> option (<link
	linkend="bash4ref">version 4+</link> of Bash).</para></listitem>

	   </itemizedlist></para>


      <para><command>:</command> Colon
	   <itemizedlist>

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

         <listitem><para><link
         linkend="nullref"><firstterm>null</firstterm>
	 command</link>, equivalent to the
         <link linkend="trueref">true</link> Bash
         builtin</para></listitem>

	 <listitem><para>Used in an <link linkend="anonheredoc0">anonymous
	 here document</link></para></listitem>

	 <listitem><para>Used in an <link linkend="coloninfunction">otherwise
	 empty function</link></para></listitem>

	 <listitem><para>Used as a <link linkend="fstrangeref">function
	 name</link></para></listitem>

	   </itemizedlist></para>



      <para><command>! </command>
         <link linkend="notref">Negation operator</link>, inverts <link
	 linkend="negcond">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>
	   <itemizedlist>
	     <listitem><para><link
	       linkend="quotingbsl"><firstterm>Double-quoting</firstterm>
	       the <firstterm>backslash</firstterm> (<command>\</command>)
	       character</link></para></listitem>
	   </itemizedlist>
	 </para>

      <para><command>,</command>
        <itemizedlist>
	 <listitem><para>
         <link linkend="commaop">Comma operator</link>
	 </para></listitem>
         <listitem>
            <para><command>,</command></para>
            <para><command>,,</command></para>
            <para><link linkend="casemodparamsub">Lowercase
            conversion</link> in <firstterm>parameter
            substitution</firstterm></para>
	 </listitem>
         </itemizedlist>
	 </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>
        <link linkend="bracketarith">Integer expansion</link>
	(deprecated)</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>${!#}</command></para>
         <para><link linkend="lastargref">Final <firstterm>positional
           parameter</firstterm></link>.
	   (This is an <firstterm>indirect reference</firstterm> to
	   <link linkend="clacountref">$#</link>.)</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="strq">String expansion</link>,
	using <firstterm>escaped</firstterm> characters.</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>

	 <listitem><para>
            <command> ** </command>
	 Extended <firstterm>globbing</firstterm>
         <link linkend="globstarref">file-match operator</link>
	 </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
           <link linkend="dblparensref">double
           parentheses</link></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>Address database, <link linkend="ex30">script
        example</link></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="agram2">Anagramming</link></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="logops1"><firstterm>And</firstterm> logical
        operator</link> <command>&&</command></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="faarchiving1">Archiving</link>
         <itemizedlist>
      <listitem><para><link linkend="rpmref">rpm</link></para></listitem>
      <listitem><para><link linkend="tarref">tar</link></para></listitem>
         </itemizedlist></para>
<!-- ********************** -->
      <para><link linkend="arithexpref">Arithmetic expansion</link>
         <itemizedlist>
      <listitem><para><link linkend="arxs">
         <firstterm>exit status</firstterm> of</link></para></listitem>
      <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="assocarr">Associative arrays</link>
	      </para>
	      <para><link linkend="assocarrtst">more efficient</link>
	      than conventional arrays</para>
	      </listitem>
	   <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>Special properties,
	     <link linkend="arrayspecialprops">example
	     script</link></para></listitem>
	   <listitem><para>String operations,
	     <link linkend="arraystringops">example
	     script</link></para></listitem>
	   <listitem><para><link
	     linkend="arrayunset"><firstterm>unset</firstterm> deletes array
	     elements</link></para></listitem>
         </itemizedlist>

      <para><link linkend="readarrow">Arrow keys</link>, detecting</para>

      <para>ASCII
         <itemizedlist>
      <listitem><para><link
        linkend="asciidef">Definition</link></para></listitem>
      <listitem><para><link linkend="asciitable">
        Scripts for generating ASCII table</link></para></listitem>
         </itemizedlist>
      </para>

<!-- ********************** -->
      <para><link linkend="awk">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>Backlight, <link linkend="backlight">setting the
        brightness</link></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>
      <listitem>
        <para><link linkend="bash4ref">Version 4</link></para>
        <para><link linkend="bash41">Version 4.1</link></para>
        <para><link linkend="bash42">Version 4.2</link></para>
      </listitem>

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


      <para><link linkend="sample-bashrc">.bashrc</link></para>
      <para><link
         linkend="bashsubshellref"><varname>$BASH_SUBSHELL</varname></link></para>
      <para><link linkend="basiccommands1">Basic commands</link>, external</para>
      <para><link linkend="dosbatch1">Batch files</link>,
        <firstterm>DOS</firstterm></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="biblio">Bibliography</link></para>
      <para><link linkend="bisonref">Bison</link> utility</para>

      <para><link linkend="bitwsops1">Bitwise operators</link>
         <itemizedlist>
        <listitem><para><link linkend="base64">Example script</link>
        </para></listitem>
         </itemizedlist>
      </para>

      <para><link linkend="blockdevref">Block devices</link>
        <itemizedlist> 
	  <listitem><para><link linkend="blockdevtest">testing
	    for</link></para></listitem>
        </itemizedlist> 
       </para>

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

      <para><link linkend="bfs">Bootable flash drives</link>, creating</para>

<!-- ********************** -->
      <para><link linkend="braceexpref">Brace expansion</link>
         <itemizedlist>
      <listitem><para><link
         linkend="braceexpref33">Extended</link>,
	   <replaceable>{a..z}</replaceable></para></listitem>
      <listitem><para><link
         linkend="braceexpref3">Parameterizing</link>
	 </para></listitem>
      <listitem><para>With <link
      linkend="braceexpref4">increment and
      zero-padding</link> (new feature in Bash, <link linkend="bash4ref">version
      4</link>)</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="chardevref">Character devices</link>
        <itemizedlist>
	  <listitem><para><link linkend="chardevtest">testing
	  for</link></para></listitem>
        </itemizedlist>
      </para>

      <para><link linkend="checksumref">Checksum</link></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>Cycling through the background colors, <link
           linkend="showallc">example script</link></para></listitem>
         <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="bash-options">Command-line options</link></para>

      <para><link linkend="cnfh">command_not_found_handle ()</link>
        <firstterm>builtin</firstterm> error-handling function
	(<link linkend="bash4ref">version 4+</link> of Bash)</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="communications">Communications and
        hosts</link></para>
      <para><link linkend="ccomparison1">Compound comparison</link>
         operators</para>

<!-- ************************************************************ -->
      <para><link linkend="facompression1">Compression utilities</link>
         <itemizedlist>
      <listitem><para><link linkend="bzipref">bzip2</link></para></listitem>
      <listitem><para><link
        linkend="compressref">compress</link></para></listitem>
      <listitem><para><link linkend="gzipref">gzip</link></para></listitem>
      <listitem><para><link linkend="zipref">zip</link></para></listitem>
         </itemizedlist></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="ctlgref">Control-G</link>,
         <userinput>BEL</userinput>
         (<firstterm>beep</firstterm>)</para></listitem>
      <listitem><para><link linkend="ctlhref">Control-H</link>,
         <firstterm>rubout</firstterm></para></listitem>
      <listitem><para><link linkend="ctljref">Control-J</link>,
         <firstterm>newline</firstterm></para></listitem>
      <listitem><para><link linkend="ctlmref">Control-M</link>,
         carriage return</para></listitem>
         </itemizedlist></para>
<!-- ***************************************************************** -->

      <para><link linkend="coprocref">Coprocesses</link></para>
      <para><link linkend="cronref">cron</link>, scheduling
        <firstterm>daemon</firstterm></para>
      <para><link linkend="cstyle"><firstterm>C</firstterm>-style syntax
        </link>, for handling variables</para>

      <para><link linkend="cwsolver">Crossword puzzle solver</link></para>
      <para><link linkend="gronsfeld">Cryptography</link></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="dateref">date</link></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><emphasis>Raspberry Pi</emphasis>,
      <link linkend="rpsdcard01">script for preparing a bootable SD
      card</link>
	</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>
      <para><link linkend="declarecasemod">case-modification</link>
        options (<link linkend="bash4ref">version 4+</link> of Bash)
	</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="devfileref">Device file</link></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>
         <itemizedlist>
      <listitem><para>and <link linkend="dblbraev">evaluation of
        <firstterm>octal/hex</firstterm> constants</link></para></listitem>
         </itemizedlist>

      <para><link linkend="dblparensref">Double parentheses</link>
      <command>(( ... )) </command> arithmetic expansion/evaluation
      construct</para>

      <para><link linkend="dblquo">Double quotes</link>
      <command>" ... "</command> <firstterm>weak</firstterm> quoting
	   <itemizedlist>
	     <listitem><para><link
	       linkend="quotingbsl"><firstterm>Double-quoting</firstterm>
	       the <firstterm>backslash</firstterm> (<command>\</command>)
	       character</link></para></listitem>
	   </itemizedlist>
      </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">elif</link>,
        Contraction of <firstterm>else</firstterm>
        and <link linkend="ifthen">if</link></para>
      <para><link linkend="elseref">else</link></para>
      <para>Encrypting files, using <link
        linkend="opensslref">openssl</link></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="primes0">Eratosthenes,
         Sieve of</link>, algorithm for generating prime numbers</para>

      <para><link linkend="spm">Escaped characters</link>,
         special meanings of
	 <itemizedlist>
	   <listitem><para>Within <link linkend="strq">$' ... '</link>
	   string expansion</para></listitem>
	   <listitem><para><link linkend="unicoderef2">Used with
	   <firstterm>Unicode</firstterm> characters</link></para></listitem>
          </itemizedlist>
	   </para>

      <para><link
        linkend="fstabref"><filename>/etc/fstab</filename></link>
        (filesystem mount) file</para>
      <para><link
        linkend="datafilesref1"><filename>/etc/passwd</filename></link>
        (user account) file</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="evalforced">Forces
        <firstterm>reevaluation</firstterm></link> of
	arguments</para></listitem>
      <listitem><para>And <link linkend="evalindref">indirect
      references</link></para></listitem>
      <listitem><para><link linkend="evalrisk">Risk of
        using</link></para></listitem>
      <listitem><para><link linkend="samorse">Using
        <firstterm>eval</firstterm> to convert <firstterm>array</firstterm>
	elements into a command list</link></para></listitem>
      <listitem><para><link linkend="arrchoice0">Using
        <firstterm>eval</firstterm> to select among
        variables</link></para></listitem>
	 </itemizedlist></para>

      <para><link linkend="dblbraev">Evaluation of
        <firstterm>octal/hex</firstterm> constants within
	[[ ... ]]</link></para>

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

      <para><link linkend="exercises">Exercises</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="gotchaexitvalanamalies">Anomalous</link>
        </para>
        <para><link linkend="excoor">Out of range</link></para>
        <para><link linkend="pipeex"><firstterm>Pipe</firstterm></link>
	   exit status</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>
         <para><link
           linkend="sysexitsref"><filename>/usr/include/sysexits.h</filename></link>,
	   system file listing C/C++ standard exit codes</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="factorref">factor</link>, decomposes an
        integer into its prime factors
	  <itemizedlist>
       <listitem><para>Application: <link linkend="primes2">Generating
            prime numbers</link></para></listitem>
	  </itemizedlist></para>

      <para><link linkend="falseref">false</link>,
        returns <firstterm>unsuccessful</firstterm> (1) <link
        linkend="exitstatusref">exit status</link></para>

      <para><link linkend="fieldref">Field</link>, a group of characters
        that comprises an item of data</para>

      <para><link linkend="filearchiv">Files / Archiving</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="opensslref">File encryption</link></para>

      <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="filterdef">Filter</link>
         <itemizedlist>
      <listitem><para><link linkend="filterdash">Using <token>-</token>
        with file-processing utility as a filter</link></para></listitem>
      <listitem><para><link linkend="filteroutp">
         Feeding output of a filter back to <emphasis>same</emphasis>
	 filter</link></para></listitem>
	 </itemizedlist></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="colonfname"><firstterm>Colon</firstterm></link>
	as function name</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="passedargs">Positional
         parameters</link></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>Multiple <firstterm>return values</firstterm> from
         a function,
	   <link linkend="stddev">example script</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>
      <listitem><para><link
         linkend="fstrangeref">Unusual function
         names</link></para></listitem>
         </itemizedlist>

      <para>* * *</para>

      <para>Games and amusements
        <itemizedlist>
	  <listitem><para><link
	    linkend="agram">Anagrams</link></para></listitem>
	  <listitem><para><link
	    linkend="agram2">Anagrams</link>, again</para></listitem>
	  <listitem><para><link
	    linkend="bingo">Bingo Number Generator</link></para></listitem>
	  <listitem><para><link linkend="cwsolver">Crossword puzzle
	    solver</link></para></listitem>
	  <listitem><para><link
	    linkend="cryptoquote">Crypto-Quotes</link></para></listitem>
	  <listitem><para><link
	    linkend="cards">Dealing a deck of cards</link></para></listitem>
	  <listitem><para><link
	    linkend="fifteen">Fifteen Puzzle</link></para></listitem>
	  <listitem><para><link
	    linkend="horserace">Horse race</link></para></listitem>
	  <listitem><para><link
	    linkend="ktour">Knight's Tour</link></para></listitem>
	  <listitem><para><link linkend="lifeslow"><quote>Life</quote>
	    game</link></para></listitem>
	  <listitem><para><link
	    linkend="msquare">Magic Squares</link></para></listitem>
	  <listitem><para><link linkend="musicscr">Music-playing
	    script</link></para></listitem>
	  <listitem><para><link linkend="nim">Nim</link></para></listitem>
	  <listitem><para><link
	    linkend="brownian">Pachinko</link></para></listitem>
	  <listitem><para><link
	    linkend="qky">Perquackey</link></para></listitem>
	  <listitem><para><link
	    linkend="petals">Petals Around the Rose</link></para></listitem>
	  <listitem><para><link
	    linkend="bashpodder">Podcasting</link></para></listitem>
	  <listitem><para><link linkend="poem">Poem</link></para></listitem>
	  <listitem><para><link linkend="speech00">Speech
	    generation</link></para></listitem>
	  <listitem><para><link
	    linkend="hanoi">Towers of Hanoi</link></para>
	    <para><link linkend="hanoi2">Graphic
	    version</link></para>
	    <para><link linkend="hanoi2a">Alternate graphic
	    version</link></para>
	    </listitem>
        </itemizedlist></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="scoperef">Global</link>
        variable</para>

      <para><link linkend="globbingref2">Globbing</link>,
         filename expansion
	   <itemizedlist>
         <listitem><para><link linkend="handlingfnames">Handling
	 filenames correctly</link></para></listitem>
         <listitem><para><link linkend="asteriskref"><firstterm>Wild
         cards</firstterm></link></para></listitem>
        <listitem><para><link linkend="wdotfilewc">Will not match
          <filename>dot files</filename></link></para></listitem>
	   </itemizedlist></para>

      <para><link linkend="goldenratio">Golden Ratio</link>
        (<firstterm>Phi</firstterm>)</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="groffref"><firstterm>groff</firstterm></link>,
        text markup and formatting language</para>
      <para><link linkend="gronsfeld">Gronsfeld cipher</link></para>
      <para><link linkend="groupsref"><varname>$GROUPS</varname></link>,
         <firstterm>Groups</firstterm> user belongs to</para>
      <para><link linkend="gzipref">gzip</link>, compression utility</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>Calculating the <link linkend="goldenratio">Golden
          Ratio</link></para>
        <para><link linkend="hspre">Prepending text</link></para>
        <para><link linkend="hsloop">As the <filename>stdin</filename> of a
	  <firstterm>loop</firstterm></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="exclls"><token>!</token> as a
         <firstterm>limit string</firstterm></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="histcommands">History commands</link></para>

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

      <para>* * *</para>

<!-- ********************** -->
      <para><link linkend="rcsref"><varname>$Id</varname>
        parameter</link>, in <firstterm>rcs</firstterm> (Revision Control
	System)</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="codeblockref">Inline group</link>,
        i.e., code block</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 <link linkend="bash2ref">version 2</link> of Bash (<link
         linkend="varrefnew"> example script</link>)</para></listitem>
         </itemizedlist></para>
<!-- ********************** -->


      <para><link linkend="iptablesref">iptables</link>,
        packet filtering and firewall utility
         <itemizedlist>
      <listitem><para><link linkend="iptables01">Usage
        example</link></para></listitem>
      <listitem><para><link linkend="iptables02">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>.
	  <itemizedlist>
       <listitem><para><link linkend="jotrandom">Random sequence
         generation</link></para></listitem>
         </itemizedlist></para>
      <para><link linkend="jabh">Just another Bash hacker!</link></para>

      <para>* * *</para>

      <para><link linkend="keywordref">Keywords</link>
	  <itemizedlist>
      <listitem><para><link linkend="missingkeyword">error</link>,
        if missing</para></listitem>
	  </itemizedlist></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="lastpiperef">lastpipe</link> shell
        option</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
        <itemizedlist>
      <listitem><para><firstterm>C-style</firstterm>
        <link linkend="ex46">increment and decrement
        operators</link></para></listitem>
        </itemizedlist></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="isomountref0">Loopback device</link>,
         mounting a file on a <link linkend="blockdevref">block
	 device</link></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>Loopback devices
         <itemizedlist>
      <listitem><para><link linkend="loopbackref">In <filename
        class="directory">/dev</filename> directory</link></para></listitem>
      <listitem><para><link
        linkend="isomountref0">Mounting an ISO image</link></para></listitem>
      </itemizedlist></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="manref">man</link>, <firstterm>manual
        page</firstterm> (lookup)
         <itemizedlist>
      <listitem><para><link linkend="maned"><firstterm>Man page</firstterm>
         editor</link> (script)</para></listitem>
         </itemizedlist>
      </para>

      <para><link linkend="mapfileref">mapfile</link> builtin,
        loads an array with a text file</para>
      <para><link linkend="mathc">Math commands</link></para>
      <para><link linkend="metameaningref">Meta-meaning</link></para>

      <para><link linkend="samorse">Morse code training</link> script</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 network 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="networkprogramming">Network programming</link></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="logops1"><firstterm>NOT</firstterm> logical
        operator</link>, <command>!</command></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>Obfuscation
         <itemizedlist>
      <listitem><para><link
        linkend="colonfname"><firstterm>Colon</firstterm></link>
	as function name</para></listitem>
      <listitem><para><link
        linkend="homework">Homework assignment</link></para></listitem>
      <listitem><para><link linkend="jabh">Just another Bash
        hacker!</link></para>
        </listitem>
         </itemizedlist>
	 </para>

      <para><link linkend="octalref">octal</link>, base-8 numbers</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><link linkend="opensslref">openssl</link> encryption
        utility</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"><firstterm>Or</firstterm> 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="casemodparamsub">
        <firstterm>Case modification</firstterm></link>
	(<link linkend="bash4ref">version 4+</link> of
	Bash).</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)
         <itemizedlist>
      <listitem><para>Appending directories to <varname>$PATH</varname>
      <link linkend="pathappend">using the <varname>+=</varname>
        operator</link>.</para></listitem>
         </itemizedlist></para>

      <para><link linkend="pathnameref">Pathname</link>,
        a <filename>filename</filename> that incorporates the complete
	<firstterm>path</firstterm> of a given file.
         <itemizedlist>
      <listitem><para><link linkend="pathmanagement">Parsing
      <firstterm>pathnames</firstterm></link></para></listitem>
         </itemizedlist></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>
         </itemizedlist></para>

      <para><link linkend="qky"><emphasis>Perquackey</emphasis>-type
        anagramming game</link> (<emphasis>Quackey</emphasis> script)</para>

      <para><link linkend="petals"><emphasis>Petals Around the
        Rose</emphasis></link></para>

      <para><link linkend="processiddef">PID</link>,
        <firstterm>Process ID</firstterm>, an identification
	number assigned to a running process.</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="comminpipe"><firstterm>Comments</firstterm> embedded
	within</link></para></listitem>
      <listitem><para><link linkend="pipeex">Exit status</link>
         of a pipe</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="quotingbsl"><firstterm>Double-quoting</firstterm>
        the <firstterm>backslash</firstterm> (<command>\</command>)
        character</link></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>
      <firstterm>Exit status</firstterm>,
      <link linkend="gotchaexitvalanamalies">anomalous</link>
      </para></listitem>

      <listitem><para>
      <firstterm>Exit status</firstterm>
      <link linkend="arxs1">of arithmetic expression <emphasis>not</emphasis>
      equivalent to an <firstterm>error code</firstterm></link>
      </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><firstterm>let</firstterm> misuse:
         <link linkend="letbad">attempting to set string variables</link>
	 </para></listitem>
      <listitem><para><link linkend="rvtcaution2">Multiple echo
        statements</link> in a <link linkend="rvt">function whose
	output is captured</link></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> (however, this problem
	   <link linkend="goodread0">can be circumvented</link>)</para>

        <para><link linkend="ptailgrep"><firstterm>tail</firstterm>
	   <option>-f</option> to <firstterm>grep</firstterm></link></para>
      </listitem>
      <listitem><para>Preserving <firstterm>whitespace</firstterm>
        within a variable, <link linkend="varsplitting">unintended
	consequences</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>Updates to <firstterm>Bash</firstterm>
        <link linkend="updatebreaks">breaking older
        scripts</link></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="badread0">Subshell in <firstterm>while-read</firstterm>
	loop</link></para></listitem>
      <listitem><para><link linkend="wsbad">Whitespace</link>,
         misuse of</para></listitem>

	   </itemizedlist></para>

<!-- ********************** -->
    <para>Pointers</para>
         <itemizedlist>
      <listitem><para><link
         linkend="fdref1">and file descriptors</link></para></listitem>
      <listitem><para><link
         linkend="funcpointers">and functions</link></para></listitem>
      <listitem><para><link linkend="irrref">and <firstterm>indirect
         references</firstterm></link></para></listitem>
      <listitem><para><link linkend="pointerref">and
         <firstterm>variables</firstterm></link></para></listitem>
         </itemizedlist>
<!-- ********************** -->


      <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="testsuite0">A <firstterm>test suite</firstterm>
	  script</link> (Bash versus classic Bourne
	  shell)</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>
      <listitem><para><link linkend="passedargs">in
        functions</link></para></listitem>
	   </itemizedlist></para>
<!-- *************************************************************** -->

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

         <itemizedlist>
      <listitem><para><link
        linkend="posix3ref"><option>--posix</option>
        option</link></para></listitem>
      <listitem><para><link
        linkend="posix3ref">1003.2 standard</link></para></listitem>
      <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="primes2">using the <firstterm>factor</firstterm>
         command</link></para></listitem>
       <listitem><para>Generating primes
         <link linkend="primes1">using the <firstterm>modulo</firstterm>
         operator</link></para></listitem>
       <listitem><para>Sieve of Eratosthenes, <link
         linkend="primes0">example script</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="childref2">Child
        process</link></para></listitem>
      <listitem><para><link linkend="parentref">Parent
        process</link></para></listitem>
      <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>
      <listitem><para><link
         linkend="goodread0"><firstterm>while-read</firstterm> loop
	 without a
	 <firstterm>subshell</firstterm></link></para></listitem>
         </itemizedlist></para>
<!-- *************************************************************** -->
      <para><link linkend="tabexpansion">Programmable completion</link>
        (tab expansion)</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><link linkend="qky">Quackey</link>, a
        <emphasis>Perquackey</emphasis>-type anagramming game (script)</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 (ternary) 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="jotrandom">Random sequence
         generation</link>, using <link
         linkend="jotref">jot</link></para></listitem>

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

         </itemizedlist></para>

<!-- *************************************************************** -->
      <para>Raspberry Pi (single-board computer)

         <itemizedlist>

      <listitem><para><link
        linkend="rpsdcard01">Script for preparing a bootable SD card</link>
	</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="readlineref">readline</link> library</para>

      <para><link linkend="recursionref">Recursion</link>
         <itemizedlist>
      <listitem><para><link
        linkend="recursiondemo0">Demonstration of</link></para></listitem>
      <listitem><para><link
        linkend="factorialref">Factorial</link></para></listitem>
      <listitem><para><link linkend="fiboref">Fibonacci
        sequence</link></para></listitem>
      <listitem><para><link linkend="locvarrecur">Local
        variables</link></para></listitem>
      <listitem><para><link linkend="scriptrecursion">Script
        calling itself recursively</link></para></listitem>
      <listitem><para><link linkend="hanoiref">Towers
        of Hanoi</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="semaphoreref">Semaphore</link></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
         <itemizedlist>
      <listitem><para><link linkend="undvarerr">set -u</link>,
        Abort script with error message if attempting to use
	an <firstterm>undeclared</firstterm> variable.</para></listitem>
         </itemizedlist>
	   </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>Simulations
         <itemizedlist>
      <listitem><para><link linkend="brownianref">Brownian
        motion</link></para></listitem>
      <listitem><para><link linkend="brownianref">Galton
        board</link></para></listitem>
      <listitem><para><link
        linkend="horseraceref">Horserace</link></para></listitem>
      <listitem><para><link
      linkend="liferef"><emphasis>Life</emphasis></link>,
        game of</para></listitem>
      <listitem><para><link linkend="cannonref">PI</link>,
         approximating by firing cannonballs</para></listitem>
      <listitem><para><link linkend="stackex0">Pushdown
        <firstterm>stack</firstterm></link></para></listitem>
          </itemizedlist></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
        <itemizedlist>
        <listitem><para><link
	  linkend="stackdefref">Definition</link></para></listitem>
        <listitem><para>Emulating a <firstterm>push-down stack</firstterm>,
          <link linkend="stackex0">example script</link></para></listitem>
          </itemizedlist></para>

      <para>Standard Deviation, <link linkend="stddev">example script</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><link linkend="stopwatch">Stopwatch</link>,
        example script</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="stringnotnull"><firstterm>Null</firstterm>
        string</link>, testing for</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><firstterm>strchr()</firstterm>, <link
        linkend="substringindex2">equivalent of</link></para>
      </listitem>

      <listitem>
      <para><firstterm>strlen()</firstterm>, <link
        linkend="strlen">equivalent of</link></para>
      </listitem>

      <listitem>
      <para><link linkend="stringsref">strings</link> command,
        find printable strings in a binary or data file</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>Variables in a <firstterm>subshell</firstterm></para>

	<para><link linkend="varsubsh"><firstterm>scope</firstterm>
	  limited</link>, but ...</para>

        <para> ... <link linkend="subshtmp">can be accessed outside
          the subshell?</link>
	</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="tabexpansion">Tab completion</link></para>
      <para>Table lookup, <link linkend="resistor">script
        example</link></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="tarref">tar</link>, archiving utility</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="terminalssys1">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="tputref">tput</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><link linkend="textproc">Text and text file
        processing</link></para>
      <para><link linkend="timedate">Time / Date</link></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>
	<para><firstterm>Associative</firstterm> array
	<link linkend="assocarrtst">more efficient</link>
	than a numerically-indexed array</para></listitem>

      <listitem><para><link linkend="captureretval">Capturing
        the return value</link> of a function, using
	<firstterm>echo</firstterm></para></listitem>

      <listitem><para><link linkend="cgiscript"><firstterm>CGI</firstterm>
        programming</link>, using scripts for</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 manipulating variables</para></listitem>

      <listitem><para><link linkend="doublespace">Double-spacing a text
        file</link></para></listitem>

      <listitem><para>Filenames prefixed with a dash,
        <link linkend="dashrem">removing</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><varname>$PATH</varname>,
        appending to, <link linkend="pathappend">using the
        <varname>+=</varname> operator</link>.</para></listitem>
      <listitem><para><link
        linkend="prependref"><firstterm>Prepending</firstterm></link>
        lines at head of a file</para></listitem>
      <listitem><para><link linkend="progressbar">Progress
        bar</link> template</para></listitem>
      <listitem><para><link
        linkend="pseudocoderef">Pseudo-code</link></para></listitem>
      <listitem><para><link linkend="rcsref">rcs</link></para></listitem>
      <listitem><para><link
        linkend="devnullredirect">Redirecting a <firstterm>test</firstterm>
	to <filename>/dev/null</filename</link> to suppress output</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<link linkend="scriptasemb"> as embedded
        command</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>Speeding up script execution by <link
         linkend="lcall">disabling <firstterm>unicode</firstterm></link>
	 </para></listitem>
      <listitem><para>Subshell variable,
        <link linkend="subshtmp">accessing outside the subshell</link>
	</para></listitem>
      <listitem><para><link linkend="intparam">Testing a variable</link>
        to see if it contains only digits</para></listitem>
      <listitem><para><link linkend="devnullredirect">Testing whether
        a command exists</link>, using <link
        linkend="typeref">type</link></para></listitem>
      <listitem><para><link
        linkend="trackingscr">Tracking script
        usage</link></para></listitem>
      <listitem><para><link
         linkend="goodread0"><firstterm>while-read</firstterm> loop
	 without a
	 <firstterm>subshell</firstterm></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="tokenref">Token</link>, a symbol that may
        expand to a <link linkend="keywordref">keyword</link> or
        command</para>
      <para><link linkend="tputref">tput</link>, terminal-control
        command</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><firstterm>Trinary (ternary)</firstterm> operator,
         <firstterm>C</firstterm>-style,
	 <userinput>var>10?88:99</userinput>
         <itemizedlist>
      <listitem><para><link linkend="cstrinary">in
        <firstterm>double-parentheses</firstterm>
        construct</link></para></listitem>
      <listitem><para><link linkend="ex46">in <firstterm>let</firstterm>
        construct</link></para></listitem>
         </itemizedlist></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="unicoderef">Unicode</link>, encoding standard
        for representing letters and symbols
         <itemizedlist>
      <listitem><para><link
         linkend="lcall">Disabling <firstterm>unicode</firstterm></link>
	 to optimize script</para></listitem>
         </itemizedlist></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 modify 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="intvarref">Integer</link></para></listitem>
      <listitem><para><link
	linkend="bvuntyped">Integer / string</link> (variables are
	untyped)</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="stringnotnull"><firstterm>Null</firstterm>
        string</link>, testing for</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="wsquo">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="typingref">Typing</link>,
        restricting the properties of a variable</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="varsplitting">Unquoted
	variable</link>,
	<firstterm>splitting</firstterm></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="whloopc">C-style syntax</link>
        </para></listitem>
      <listitem><para><link linkend="whilefunc">Calling a
        <firstterm>function</firstterm> within
        <firstterm>test</firstterm> brackets</link></para></listitem>
      <listitem><para><link linkend="whmultcond">Multiple
         conditions</link></para></listitem>
      <listitem><para><link linkend="whilenobrackets">Omitting
        <firstterm>test</firstterm> brackets</link></para></listitem>
      <listitem>
        <para><link linkend="whilereadref2">
           <firstterm>while read</firstterm></link>
           construct
	</para>
	<para><link linkend="goodread0">Avoiding a
	  <firstterm>subshell</firstterm></link></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>
      <listitem><para><link linkend="wsposix">[:space:]</link>,
        <firstterm>POSIX</firstterm> character class</para></listitem>
         </itemizedlist></para>

      <para><link linkend="whoref">who</link>, information about logged on users
          <itemizedlist>
        <listitem><para><link linkend="wref">w</link></para></listitem>
	<listitem><para><link
	  linkend="whoamiref">whoami</link></para></listitem>
        <listitem><para><link linkend="lognameref">logname</link></para></listitem>
         </itemizedlist></para>

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

      <para><link linkend="wildcarddef">Wild card</link> characters
         <itemizedlist>
      <listitem><para><link linkend="asteriskref">Asterisk
        *</link></para></listitem>
      <listitem><para>In <link linkend="liglob">
        <replaceable>[list]</replaceable> constructs</link>
        </para></listitem>
      <listitem><para><link linkend="wildcardqu">Question mark
        ?</link></para></listitem>
      <listitem><para><link linkend="wdotfilewc">Will not match
        <filename>dot files</filename></link></para></listitem>
         </itemizedlist></para>

      <para>Word splitting
         <itemizedlist>
      <listitem><para><link
        linkend="wsplitref">Definition</link></para></listitem>
      <listitem><para><link
        linkend="csws">Resulting from <firstterm>command
	substitution</firstterm></link></para></listitem>
         </itemizedlist></para>

      <para><link linkend="shwrapper">Wrapper</link>, shell</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>Processes arguments <link
         linkend="xargsoneatatime">one at a time</link></para></listitem>
      <listitem><para><link linkend="xargsws">
         Whitespace</link>, handling</para></listitem>
         </itemizedlist></para>

      <para>* * *</para>

      <para><link linkend="yesref">yes</link>
        <itemizedlist>
      <listitem><para><link
        linkend="yesemu">Emulation</link></para></listitem>	
        </itemizedlist></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 <link
	 linkend="killref">killed</link> by its
         <link linkend="parentref">parent</link></para>
