Bash 如何初始化局部变量?将执行以下命令总是做同样的事情(当在函数内部使用时)?
local foo
local foo=
local foo=""
答案1
local foo=""
和local foo=
完全等价。在这两种情况下,等号的右侧都是空字符串。
local foo
和local foo=
是不同的:local foo
保留foo
未设置而local foo=
设置foo
为空字符串。更准确地说,local foo
创建一个局部变量,并且该变量最初未设置。随后的赋值foo=…
设置本地值,并且该赋值可以与该local
语句组合。证人:
bash-4.3$ demo () {
local unset empty=
echo "unset=\"${unset-(not set)}\" empty=\"${empty-(not set)}\""
}
bash-4.3$ demo
unset="(not set)" empty=""
这与 ksh 的行为相同(除了在 ksh 中您需要使用关键字typeset
而不是local
)。另一方面,在 zsh 中,local foo
设置foo
为空字符串。