No. The expansion takes place before the command is actually run.
You can only disable the glob before running the command or by quoting the star.
$ # quote it
$ foo '*'
$ # or escape it
$ foo \*
$ # or disable the glob (noglob)
$ set -f
$ foo *
$ # alternative to set -f
$ set -o noglob
$ # undo it by
$ set +o noglob
While it is true a command itself can not turn off globbing, it is possible for a user to tell a Unix shell not to glob a particular command. This is usually accomplished by editing a shell's configuration files. Assuming the command foo can be found along the command path, the following would need to be added to the appropriate configuration file:
For the sh, bash and ksh shells:
alias foo='set -f;foo';foo(){ command foo "$@";set +f;}
For the csh and tcsh shells:
alias foo 'set noglob;\foo \!*;unset noglob'
For the zsh shell:
alias foo='noglob foo'
The command path does not have to be used. Say the command foo is stored in the directory ~/bin, then the above would become:
For the sh, bash and ksh shells:
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
For the csh and tcsh shells:
alias foo 'set noglob;$home/bin/foo \!*;unset noglob'
For the zsh shell:
alias foo='noglob ~/bin/foo'
All of the above was tested using Apple's OSX 10.9.2.
Note: When copying the above code, be careful about deleting any spaces. They may be significant.
Update:
User geira has pointed out that in the case of a bash shell
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
could be replaced with
reset_expansion(){ CMD="$1";shift;$CMD "$@";set +f;}
alias foo='set -f;reset_expansion ~/bin/foo'