LDP/LDP/guide/docbook/abs-guide/INDEX00.xml

3728 lines
147 KiB
XML

<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>;;&amp;</command> <command>;&amp;</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 &amp;</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>&amp;&amp;</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>