bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Issues when func name is the same with an alias


From: Bernd Eggink
Subject: Re: Issues when func name is the same with an alias
Date: Wed, 04 Aug 2010 18:14:21 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.7) Gecko/20100713 Thunderbird/3.1.1

Am 04.08.2010 16:38, schrieb Clark J. Wang:
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.

The function *body* as part of the definition is a compound command. The definition as a whole constitutes a simple comand. You can see that function definitions are not listed under "compound commands", but adhere to the definition of simple commands:

"A simple command is a sequence of optional variable assignments followed by blank-separated words and redirections, and terminated by a control operator."

Some lines above '(' is listed as a control operator.

The only questionable term is "...a sequence of optional variable assignments followed by...", as it appears that variable assignments are not allowed before a function definition.

I suppose that is just a documentation issue. Can anybody comment on this?

Regards,
Bernd

--
Bernd Eggink
http://sudrala.de



reply via email to

[Prev in Thread] Current Thread [Next in Thread]