bash shell脚本函数定义中使用的括号“f(){}”是什么? 与使用“function”关键字不同吗?

我总是想知道他们用的是什么? 如果你不能把任何东西放在里面的话,似乎每次都把它们放进去。

function_name () { #statements } 

function关键字放在function的开头还有什么可以获得/失去的?

 function function_name () { #statements } 

Solutions Collecting From Web of "bash shell脚本函数定义中使用的括号“f(){}”是什么? 与使用“function”关键字不同吗?"

为了便于使用POSIX规范 ,关键字function已被弃用,以支持function_name()

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

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

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

请注意{ }不是必须的,所以如果你不打算使用关键字function (你不应该),那么()是必要的,所以解析器知道你正在定义一个函数。

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

 $ myfunc() for arg; do echo "$arg"; done; myfunc foo bar foo bar 

在你的第一个例子中,空括号是必需的,这样bash就知道它是一个函数定义(否则它看起来像一个普通的命令)。 在第二个例子中, ()是可选的,因为你已经使用了function

没有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