在主代码之前或函数中的局部变量之前,在脚本中初始化 bash 变量的值是否有任何优点/缺点,然后再将实际值分配给它?
我是否需要做这样的事情:
init()
{
name=""
name=$1
}
init "Mark"
Run Code Online (Sandbox Code Playgroud)
是否有使用垃圾值初始化变量(如果未初始化)以及对变量值产生负面影响的风险?
Kus*_*nda 22
将一个空字符串分配给一个变量,然后立即将另一个变量字符串分配给它没有任何好处。为 shell 变量赋值将完全覆盖其先前的值。
据我所知,没有任何建议说您应该将变量显式初始化为空字符串。事实上,这样做可能会在某些情况下掩盖错误(如果在 下运行set -u
,错误会很明显,见下文)。
未设置的变量,自脚本启动以来未使用或通过在其unset
上运行命令显式取消设置,将没有值。这样一个变量的值将是什么。如果用作"$myvariable"
,您将获得相当于""
,并且永远不会获得“垃圾数据”。
如果 shell 选项nounset
设置为set -o nounset
或set -u
,则引用未设置的变量将导致 shell 产生错误(并且非交互式 shell 将终止):
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
Run Code Online (Sandbox Code Playgroud)
或者,在bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
Run Code Online (Sandbox Code Playgroud)
如果变量的名称对应于现有的环境变量,则 Shell 变量将由环境初始化。
如果您希望使用的变量可能会以这种方式由环境初始化(如果不需要),那么您可以在脚本的主要部分之前明确取消设置它:
unset myvariable # unset so that it doesn't inherit a value from the environment
Run Code Online (Sandbox Code Playgroud)
这也会将它作为环境变量删除,或者,您可以简单地忽略它的初始值并用赋值覆盖它(这也会使环境变量值改变)。
您永远不会在 shell 变量中遇到未初始化的垃圾(除非如前所述,垃圾已存在于同名的环境变量中)。