/etc/init.d/functions中的局部变量声明

时间:2016-10-26 19:42:02

标签: bash

在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 ...

我试图理解为什么有些局部变量是用等号定义的,有些则不是。这里发生了什么?这是多重声明和作业吗?

1 个答案:

答案 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