title: How does "read" instruction works without arguments?
body: <p>I try to get dovecot mailbox size by this command <code>doveadm -f tab quota get -u test@example.com</code> which gives me this table:</p>
  
  <pre><code>Quota name  Type    Value   Limit   %
  User quota  STORAGE 627367  104857600   0
  User quota  MESSAGE 3217    -   0
  </code></pre>
  
  <p>I need to extract 627367 value. So I tried to use standard method:</p>
  
  <pre><code>$ doveadm -f tab quota get -u test@example.com | while read 
  &gt; do 
  &gt;     COL3=`awk '{print $3}'`
  &gt;     COL4=`awk '{print $4}'`
  &gt; done
  </code></pre>
  
  <p>COL3 and COL4 should give me description of value and value. I need to find out whether "COL3 == 'STORAGE'" and if yes echo COL4. Later I've noticed that <code>while read</code> without variable gives me data without header:</p>
  
  <pre><code>$ doveadm -f tab quota get -u test@example.com | while read 
  &gt; do 
  &gt;         cat
  &gt; done
  
  User quota  STORAGE 627367  104857600   0
  User quota  MESSAGE 3217    -   0
  </code></pre>
  
  <p>I found it interesting because I don't need to recognize header and I could analyze useful data. But it seemed not very easy. If I insert <code>echo</code> it says me that <code>while</code> run three times:</p>
  
  <pre><code>$ doveadm -f tab quota get -u test@example.com | while read 
  &gt; do 
  &gt;         echo "Test"
  &gt; done
  
  Test
  Test
  Test
  </code></pre>
  
  <p>With <code>awk</code> <code>while</code> runs two times:</p>
  
  <pre><code>$ doveadm -f tab quota get -u test@example.com | while read 
  &gt; do 
  &gt;         awk '{print $3}'
  &gt; done
  
  STORAGE
  MESSAGE
  </code></pre>
  
  <p>But when I start to parse result I found that <code>while</code> runs only one time:</p>
  
  <pre><code>$ doveadm -f tab quota get -u test@example.com | while read 
  &gt; do 
  &gt;         COL3=`awk '{print $3}'`
  &gt;         echo $COL3
  &gt; done
  
  STORAGE MESSAGE
  </code></pre>
  
  <p>So when I try to use</p>
  
  <pre><code>if [ "$COL3" == "STORAGE" ]
  then
      echo "Test"
  fi
  </code></pre>
  
  <p>it never works. I tried to compare with "MESSAGE" and even with "STORAGE MESSAGE". It not works.</p>
  
  <p>I didn't find any information what <code>read</code> do without any arguments. And I want to ask, have I use standard method and parse all lines including header or I can use <code>read</code> without arguments and try to parse getting data? And how I can do it?</p>