9

In Bash, when I do:

foo="*"
echo $foo

It expands * to the contents of the current folder. How do I make sure it just prints a literal *?

The same, by the way, happens with a regular echo "$foo", it prints the contents of the current folder.

1 Answers1

16

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.

John1024
  • 74,655