2016-10-26 2 views
0

На RHEL, то daemon() функция /etc/init.d/functions определяется следующим образом:Локальная переменная декларация в /etc/init.d/functions

daemon() { 
    # Test syntax. 
    local gotbase= force= nicelevel corelimit 
    local pid base= user= nice= bg= pid_file= 
    local cgroup= 
    nicelevel=0 
    ... and so on ... 

Я пытаюсь понять, почему некоторые локальных переменных определяются с помощью знака равенства, а некоторые другие - нет. Что тут происходит? Является ли это множественной декларацией и присваиванием?

ответ

3
local varname 

объявляет локальную переменную, но не инициализирует ее никаким значением.

local varname=value 

объявляет локальную переменную, а также инициализирует его value. Вы можете инициализировать его в пустую строку, предоставляя пустой value, как в

local varname= 

Таким образом, в вашем примере, pid объявлена, но не инициализирована, а base объявляется и инициализируется в пустую строку.

Для большинства целей не существует большой разницы между неустановленной переменной и наличием пустой строки в качестве значения. Но некоторые из операторов расширения параметров могут различать их. Например.

${varname:-default} 

будет расширяться default если varname не установлен или пуст, но

${varname-default} 

будет расширяться default только если varname снята с охраны. Так что если вы используете

${base-default} 

он будет расширяться до пустой строки, а не default.

Смежные вопросы