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

时间:2011-01-11 06:05:56

标签: linux bash function parentheses

我总是想知道他们用的是什么? 如果你永远不会把任何东西放在里面,似乎很难把它们放进去。

function_name () {
    #statements
}

function关键字放在函数的开头是否有任何收获/失败?

function function_name () {
    #statements
}

3 个答案:

答案 0 :(得分:46)

关键字function已被弃用,有利于function_name(),可移植性为POSIX spec

  

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

     

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

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

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

示例,这是合法的函数定义和调用:

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

答案 1 :(得分:10)

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

答案 2 :(得分:4)

如果没有function,则会在定义时发生别名扩展。 E.g:

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