Bash 局部变量初始化

Bash 局部变量初始化

Bash 如何初始化局部变量?将执行以下命令总是做同样的事情(当在函数内部使用时)?

local foo
local foo=
local foo=""

答案1

local foo=""local foo=完全等价。在这两种情况下,等号的右侧都是空字符串。

local foolocal 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为空字符串。

相关内容