我在CentOS上的/etc/init.d/functions中找到了以下代码。
status() {
local base pid lock_file= pid_file=
...
声明了4个变量。 其中两个没有初始化,base和pid。 但其余的用空值lock_file和pid_file初始化。
我测试了以下代码,发现没有差异。
local a b=
echo "a is $a, length is ${#a}"
echo "b is $b, length is ${#b}"
他们之间有什么不同吗?
答案 0 :(得分:3)
是的,是的区别。考虑以下功能:
x() {
local a b=
echo ${a-X}
echo ${b-X}
}
在bash-4.x
中调用此函数会产生以下输出:
$ x
X
$
如果参数未设置,则${parameter−word}
parameter expansion会扩展为word
(在本例中为X
),如果已设置,则扩展为参数值。
从示例输出中可以看出,local a
未设置变量a
,而local b=
显式将其设置为空(null)字符串。
修改强>
另一方面,在bash-3.x
上你得到了这个:
$ x
$
在函数内调用set
可验证local a
中的bash-3.x
是否将该变量初始化为空字符串。然而,这似乎是一个错误。来自bash
更改日志:
本文档详细介绍了此版本bash-4.0-beta之间的变化, 和以前的版本,bash-4.0-alpha。
...
即修复了导致使用空创建局部变量的错误 字符串表示值而不是值。