44

我一直想知道它们是干什么用的?如果您永远无法将任何东西放入其中,那么每次都放入它们似乎很愚蠢。

function_name () {
    #statements
}

function将关键字放在函数的开头还有什么好处/损失?

function function_name () {
    #statements
}
4

3 回答 3

56

该关键字function已被弃用,以支持POSIX 规范function_name()的可移植性

函数是用户定义的名称,用作简单命令以调用具有新位置参数的复合命令。用“函数定义命令”定义函数。

函数定义命令的格式如下:

fname() compound-command[io-redirect ...]

请注意,这{ }不是强制性的,因此如果您不打算使用关键字function(而且您不应该),那么()是必要的,因此解析器知道您正在定义一个函数。

例如,这是一个合法的函数定义和调用:

$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar
foo
bar
于 2011-01-11T06:10:21.120 回答
11

在您的第一个示例中需要空括号,以便 bash 知道它是一个函数定义(否则它看起来像一个普通命令)。在第二个示例中,()是可选的,因为您使用了function.

于 2011-01-11T06:09:04.603 回答
7

如果没有function,别名扩展会在定义时发生。例如:

alias a=b
# Gets expanded to "b() { echo c; }" :
a() { echo c; }
b
# => c
# Gets expanded to b:
a
# => c

function但是,别名扩展不会在定义时发生,因此别名“隐藏”了定义:

alias a=b
function a { echo c; }
b
# => command not found
# Gets expanded to b:
a
# => command not found
unalias a
a
# => c
于 2015-07-10T06:59:47.810 回答