When a pattern such as abc* is used unquoted in the shell, the shell will try to match it against the available filenames (this is called "filename generation" but is often referred to as "globbing"). If it fails to match any filename, most sh-like shells will leave the pattern unexpanded and pass it to the utility as is.
Example:
$ touch xyz
$ touch abc*
$ tree
.
|-- abc*
`-- xyz
0 directory, 2 files
$ touch xyz*
$ tree
.
|-- abc*
`-- xyz
0 directory, 2 files
The touch xyz* command did not create a file called xyz*, because the filename xyz matched the pattern. The touch utility was therefore called with the xyz filename.
In the bash shell, setting the failglob shell option with shopt -s failglob will make the shell complain if a shell glob does not match anything:
$ shopt -s failglob
$ touch 123*
bash: no match: 123*
The equivalent option is turned on by default in the zsh shell.
Setting the nullglob shell option in bash (or NULL_GLOB in zsh) would make the pattern disappear if it doesn't match a filename:
$ shopt -s nullglob
$ touch fo*
usage: touch [-acm] [-d ccyy-mm-ddTHH:MM:SS[.frac][Z]] [-r file]
[-t [[cc]yy]mmddHHMM[.SS]] file ...
(we get an error from touch since it was called without any arguments)
To guarantee that the pattern is used as a string (as it is), and not used for globbing, you should quote it:
$ touch "file*"
$ touch "file**"
$ touch "file***"
$ tree
.
|-- file*
|-- file**
`-- file***
0 directory, 3 files
Not quoting the filenames in this example would have given you only one file called file* (if the directory was initially empty), since the file** and file*** patterns matches that first file* name.
shopt -s nullglob.rm abc*where there is no file matchingabc*will give the error messagerm: cannot remove 'abc*': No such file or directory. So if there is no match (whatever the command) the*will be just a symbol. Hence your question title is incorrect.