我在CentOS上的/etc/init.d/functions中find下面的代码。
status() { local base pid lock_file= pid_file= ...
声明了4个variables。 其中两个没有初始化,base和pid。 但其余的都是用空值,lock_file和pid_file初始化的。
我testing了下面的代码,发现没有区别。
local ab= echo "a is $a, length is ${#a}" echo "b is $b, length is ${#b}"
他们之间有什么分别吗?
是的,有一个区别。 考虑以下功能:
x() { local ab= echo ${aX} echo ${bX} }
在bash-4.x
调用这个函数会导致这个输出:
$ x X $
${parameter−word}
参数扩展扩展为扩展word
(在本例中为X
),如果参数未设置,或扩展为参数值(如果已设置)。
从示例输出中,显而易见的是, local a
将变量unset,而local b=
将其明确地设置为空(空)字符串。
编辑:
另一方面,在bash-3.x
你得到这个:
$ x $
在函数中set
的调用将验证bash-3.x
中的local a
是否将该变量初始化为空字符串。 然而,这似乎是一个错误。 从bash
changelog:
本文详细介绍了这个版本,bash-4.0-beta和之前的版本bash-4.0-alpha之间的变化。
…
即 修复了一个错误,导致使用空字符串创建局部变量而不是没有值。