On Wed, Aug 4, 2010 at 8:27 PM, Bernd Eggink<monoped@sudrala.de> wrote:
Am 04.08.2010 12:39, schrieb Clark J. Wang:
I was testing the precedence between functions and aliases so I tried like
this (with bash 4.1.5):
$ cat rc
alias foo='echo this is the alias'
foo()
{
builtin echo 'this is the function'
}
foo
$ source rc
bash: confusing-aliases-2.sh: line 4: syntax error near unexpected token
`('
bash: confusing-aliases-2.sh: line 4: `foo()'
$
Seems like I must explicitly use the `function' keyword to define foo()
for
this scenario. Is that the correct behavior?
The man page says "The first word of a simple command, if unquoted, is
checked to see if has an alias". Therefore 'foo' in your function
declaration is replaced by 'echo this is the alias'. Unfortunately, you
can't quote the function name in the declaration, so you have to either use
'function' or say "unalias foo" first.
Function definitions are not simple commands. Actually, func definition
syntax is listed under the *Compound Commands* section in bash2.05b's man
page and in bash3+ it's been moved to a separate section.