*

Universally known as asterisk; commonly referred to by mathematicians and computer scientists as star. Among hackers, it is sometimes known as splat.

AMG: Not called astronaut or squishy bug nearly often enough [L1 ].

As a mathematical operator

Used in the expr command as the multiplication operator, and evaluates to the product of its operands (which have to be numbers, either integers or floating point).

expr { $a * $b }

The mathop command version can multiply any number of (numerical) arguments together. In the edge cases, given one argument, it returns that; given zero arguments, it returns the multiplicative identity (1).

set foo {3 4 8 22}
::tcl::mathop::* {*}$foo
# => 2112
::tcl::mathop::* 42
# => 42
::tcl::mathop::*
# => 1

As with all mathop commands, * can be made a lot more accessible by using namespace path, which means you don't need to write all those namespace qualifiers.

namespace path {::tcl::mathop ::tcl::mathfunc}
* {*}$foo
# => 2112
# if you do it like this, you are a silly person
set * $foo
* {*}${*}
# => 2112

In regular expression syntax

* is used as a quantifier in regular expression syntax (historically, it's known as the "Kleene star" after Stephen Cole Kleene, who laid the foundation for, among other things, regular expressions). In this context, it means "match zero or more occurrences of the previous atom".

# the string 'foo' *does* have zero or more 'a's in it
regexp {a*} foo
# => 1
# so does the empty string; in fact, *all* strings contain zero or more 'a's
regexp {a*} {}
# => 1
# do all the following strings match {ca*r}? yes, they do
::tcl::mathop::* {*}[lmap a {cr car caar caaar caaaar} { regexp {ca*r} $a }]
# => 1
# looking at what's matched shows the difference between strings containing 'a's and those not containing 'a's
regexp -all -inline {a*} foo
# => {} {} {}
regexp -all -inline {a*} tanstaafl
# => {} a {} {} {} aa {} {}

In string match syntax

In the string match command, * means "match any sequence of characters in a string, including a null string" (it is a simplified form of the regular expression quantified atom .*, which signifies the same match). The same holds for other commands that use patterns based on string match, such as info vars.

string match *.bar foo.bar
# => 1
string match *.bar* .barbarian
# => 1
info vars ar*
# => argv argv0 argc

In glob syntax

In a glob pattern, * means "[match] any sequence of zero or more characters" (which is basically the same thing as with string match).

glob -nocomplain *.bar
# => (a list, possibly empty, containing any file names with the ".bar" extension you have in your current working directory.)