title: What is indirect expansion? What does ${!var*} mean?
body: <p>I'm reading &quot;<em>Bash Guide for Beginners</em>&quot;.  It says:</p>
  <blockquote>
  <p>If the first character of <code>PARAMETER</code> is an exclamation point, Bash uses the value of the variable formed from the rest of <code>PARAMETER</code> as the name of the variable; this variable is then expanded and that value is used in the rest of the substitution, rather than the value of <code>PARAMETER</code> itself. This is known as indirect expansion.</p>
  </blockquote>
  <p>The example given is:</p>
  <blockquote>
  <pre><code>franky ~&gt; echo ${!N*}
  NNTPPORT NNTPSERVER NPX_PLUGIN_PATH
  </code></pre>
  </blockquote>
  <p>I don't quite understand here:</p>
  <blockquote>
  <p>the value of the variable formed from the rest of <code>PARAMETER</code></p>
  </blockquote>
  <p>As the <code>PARAMETER</code> is just <code>!N*</code>, then</p>
  <blockquote>
  <p>the rest of <code>PARAMETER</code></p>
  </blockquote>
  <p>is just <code>N*</code>.  How could this form a variable?  Did Bash search all possible commands there?</p>