我总是想知道他们用的是什么? 如果你永远不会把任何东西放在里面,似乎很难把它们放进去。
function_name () {
#statements
}
将function
关键字放在函数的开头是否有任何收获/失败?
function function_name () {
#statements
}
答案 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