我一直想知道它们是干什么用的?如果您永远无法将任何东西放入其中,那么每次都放入它们似乎很愚蠢。
function_name () {
#statements
}
function
将关键字放在函数的开头还有什么好处/损失?
function function_name () {
#statements
}
我一直想知道它们是干什么用的?如果您永远无法将任何东西放入其中,那么每次都放入它们似乎很愚蠢。
function_name () {
#statements
}
function
将关键字放在函数的开头还有什么好处/损失?
function function_name () {
#statements
}
该关键字function
已被弃用,以支持POSIX 规范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