What are the parentheses used for in a bash shell script function definition like "f () {}"? Is it different than using the "function" keyword?
I'v always wondered what they're used for? Seems silly to put them in every ti开发者_高级运维me if you can never put anything inside them.
function_name () {
#statements
}
Also is there anything to gain/lose with putting the function
keyword at the start of a function?
function function_name () {
#statements
}
The keyword function
has been deprecated in favor of function_name()
for portability with the POSIX spec
A function is a user-defined name that is used as a simple command to call a compound command with new positional parameters. A function is defined with a "function definition command".
The format of a function definition command is as follows:
fname() compound-command[io-redirect ...]
Note that the { }
are not mandatory so if you're not going to use the keyword function
(and you shouldn't) then the ()
are necessary so the parser knows you're defining a function.
Example, this is a legal function definition and invocation:
$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar
foo
bar
The empty parentheses are required in your first example so that bash knows it's a function definition (otherwise it looks like an ordinary command). In the second example, the ()
is optional because you've used function
.
Without function
, alias expansion happens at definition time. E.g.:
alias a=b
# Gets expanded to "b() { echo c; }" :
a() { echo c; }
b
# => c
# Gets expanded to b:
a
# => c
With function
however, alias expansion does not happen at definition time, so the alias "hides" the definition:
alias a=b
function a { echo c; }
b
# => command not found
# Gets expanded to b:
a
# => command not found
unalias a
a
# => c
精彩评论