Bash 局部变量初始化

Cyk*_*ker 3 shell bash function variable

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

local foo
local foo=
local foo=""
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 6

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=""
Run Code Online (Sandbox Code Playgroud)

这与 ksh 的行为相同(除了在 ksh 中您需要使用关键字typeset而不是local)。另一方面,在 zsh 中,local foo设置foo为空字符串。