## 36.6. The Unappreciated Bourne Shell ":" Operator

Some people think that the Bourne shell's : is a comment character. It isn't, really. It evaluates its arguments and returns a zero exit status (Section 35.12). Here are a few places to use it:

- Replace the Unix true command to make an endless while loop (Section 35.15). This is more efficient because the shell doesn't have to start a new process each time around the loop (as it does when you use `while true`):

  >     while :
  >     do
  >        commands
  >     done

  (Of course, one of the `commands` will probably be break, to end the loop eventually. This presumes that it is actually a savings to have the break test inside the loop body rather than at the top, but it may well be clearer under certain circumstances to do it that way.)

- When you want to use the else in an if ( Section 35.13) but leave the then empty, the : makes a nice "do-nothing" place filler:

  >     if something
  >     then :
  >     else
  >        commands
  >     fi

- If your Bourne shell doesn't have a true `#` comment character (but nearly all of them do nowadays), you can use : to "fake it." It's safest to use quotes so the shell won't try to interpret characters like `>` or `|` in your "comment":

  >     : 'read answer and branch if < 3 or > 6'

- Finally, it's useful with parameter substitution (Section 35.7) like `${``var``?}` or `${``var``=`default`}`. For instance, using this line in your script will print an error and exit if either the USER or HOME variables aren't set:

  >     : ${USER?} ${HOME?}

-- JP

Copyright © 2003 O'Reilly & Associates. All rights reserved.