为什么shell不需要函数参数? 添加功能的示例如下,添加num1和num2。 我的意思是你不在行函数addition()的()中写入参数。
addition()
{
echo $(($num1+$num2))
}
答案 0 :(得分:2)
如果你的问题是为什么这个函数有效,它如何得到num1和num2变量?“,答案是:它从父中获取那些变量上下文,例如,这将回显hello Jack
:
hello() {
echo hello $name
}
name=Jack
hello
您可以重写函数以使用这样的位置参数:
hello() {
echo hello $1
}
hello Jack
根据为什么不在函数声明中写变量名:这就是bash
的制作方式。从手册页:
Shell Function Definitions
A shell function is an object that is called like a simple command and
executes a compound command with a new set of positional parameters.
Shell functions are declared as follows:
name () compound-command [redirection]
function name [()] compound-command [redirection]
This defines a function named name. The reserved word function
is optional. If the function reserved word is supplied, the
parentheses are optional. The body of the function is the com‐
pound command compound-command (see Compound Commands above).
....
也就是说,函数声明必须采用其中一种解释形式,不使用()
关键字时必须使用function
(中间没有变量名称),否则可选。
答案 1 :(得分:1)
从联系手册:
执行函数时,函数的参数将成为执行期间的位置参数。更新特殊参数#以反映更改。特殊参数0不变。
在CS术语中,bash函数不使用formal parameters,因为位置参数总是在应用函数时(并且仅在何时)设置:
$ ##
$ # Show the function arguments
$ showParams() {
> printf '%s\n' "$@"
$ }
$ showParams 1 2 3
1
2
3
$ set -- 1 2 3
$ printf '%s\n' "$@"
1
2
3
$ showParams # Here you can see the parameters in the shell are not set in the function application:
$
...但这也意味着bash不支持关键字参数。
您可能还希望阅读联机帮助页中位置参数下的部分。
答案 2 :(得分:1)
Shell函数不需要原型,因为
$#
,因此函数体可以处理可变函数。