在RHEL上,/ etc / init.d / functions中的daemon()
函数定义如下:
daemon() {
# Test syntax.
local gotbase= force= nicelevel corelimit
local pid base= user= nice= bg= pid_file=
local cgroup=
nicelevel=0
... and so on ...
我试图理解为什么有些局部变量是用等号定义的,有些则不是。这里发生了什么?这是多重声明和作业吗?
答案 0 :(得分:3)
local varname
声明一个局部变量,但不会用任何值初始化它。
local varname=value
声明一个局部变量,并将其初始化为value
。您可以通过提供空value
将其初始化为空字符串,如
local varname=
因此,在您的示例中,pid
已声明但未初始化,而base
已声明并初始化为空字符串。
对于大多数用途,未设置的变量与具有空字符串的值之间没有太大区别。但是一些参数扩展操作符可以区分它们。 E.g。
${varname:-default}
如果default
未设置或为空,将扩展为varname
,但
${varname-default}
仅当default
未设置时,才会展开为varname
。所以,如果你使用
${base-default}
它会扩展为空字符串,而不是default
。