让我们看一个片段:
set -o nounset
var="${var}something"
echo $var
它失败并出现错误:
unset.sh: line 3: var: unbound variable
但是,当我使用+=
运算符时
set -o nounset
var+=something
echo $var
它运行没有错误并打印:
something
对我来说,这样的行为似乎有点出乎意料。可以吗?应该var+=something
和var=${var}something
行为相似还是它们不同是可以的?
这里要注意的是, shell 将 POSIX选项
bash
的范围限制为仅显式扩展变量。nounset
也就是说,
nounset
只有当您尝试显式扩展未设置的变量时,shell 选项才会生效。这发生在 中var="${var}something"
,但不在var+=something
.该语句
var+=something
没有提及$var
,因此没有任何未设置变量的显式扩展。在我看来,这就是它的方式是可以的
bash
,原因有两个:nounset
指的是变量的显式扩展。+=
扩展,因此 POSIX shell 选项不需要影响它。如果您需要在向其
var
附加值之前检查是否已定义,请使用类似(即使用内置测试进行
-v
测试),或者,如果您依赖于nounset
捕获未设置变量的实际用途,请使用var=${var}something
语法。