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

Min*_*int 37 linux bash function parentheses

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

function_name () {
    #statements
}
Run Code Online (Sandbox Code Playgroud)

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

function function_name () {
    #statements
}
Run Code Online (Sandbox Code Playgroud)

Sie*_*geX 49

该关键字function已被弃用,有利于POSIX规范的function_name()可移植性

函数是用户定义的名称,用作使用新位置参数调用复合命令的简单命令.使用"函数定义命令"定义函数.

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

fname() compound-command[io-redirect ...]
Run Code Online (Sandbox Code Playgroud)

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

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

$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar
foo
bar
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 10

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

  • @Mint:您不能在括号内放置任何内容,并且在调用函数时不会使用它们,但您仍然可以将位置参数传递给函数.`foo(){echo"$ 1"; }; foo你好` (3认同)

Cir*_*四事件 7

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

alias a=b
# Gets expanded to "b() { echo c; }" :
a() { echo c; }
b
# => c
# Gets expanded to b:
a
# => c
Run Code Online (Sandbox Code Playgroud)

随着function然而,别名扩展不会在定义时发生,因此别名“隐藏”的定义:

alias a=b
function a { echo c; }
b
# => command not found
# Gets expanded to b:
a
# => command not found
unalias a
a
# => c
Run Code Online (Sandbox Code Playgroud)

  • 这不是“function”关键字的一个功能——它只是别名以它们一贯的方式工作,*仅对行中的第一个单词*执行文本替换。如果有人创建了一个名为“function”的别名,它仍然会在这里扩展。 (4认同)