Let us define `foo`:

 $ foo="*"

Now, try echo without quotes:

 $ echo $foo
 File1 File2

The replacement of `*` with a list of filenames is called _pathname expansion_. It can be suppressed with with double-quotes:

 $ echo "$foo"
 *

In addition, double-quotes will prevent _brace expansion_, _tilde expansion_, and _word splitting_.

For completeness, try echo with single quotes:

 $ echo '$foo'
 $foo

Single quotes prevent the shell from making any substitutions at all.