【发布时间】:2015-10-06 07:42:00
【问题描述】:
我在我们的一些脚本中看到有一个连字符附加到一个 shell 变量。例如:
if [ -z ${X-} ]
变量旁边的这个连字符在这里有什么作用。 我在网上找不到任何文档。
【问题讨论】:
我在我们的一些脚本中看到有一个连字符附加到一个 shell 变量。例如:
if [ -z ${X-} ]
变量旁边的这个连字符在这里有什么作用。 我在网上找不到任何文档。
【问题讨论】:
Shell Parameter Expansion section of the manual里都有解释:
${parameter:-word}如果
parameter未设置或为 null,则替换word的扩展。否则,parameter的值将被替换。
就在这之前:
省略冒号会导致仅对未设置的参数进行测试。
所以:
${X-stuff}
扩展到:
X,则$X 的扩展stuff 如果 X 未设置。试试看:
$ unset X
$ echo "${X-stuff}"
stuff
$ X=
$ echo "${X-stuff}"
$ X=hello
$ echo "${X-stuff}"
hello
$
现在你的扩展是
${X-}
所以你猜如果设置了X,它扩展为$X,如果未设置X,则扩展为空字符串。
您为什么要这样做?对我来说,这似乎是set -u 的一种解决方法:
$ set -u
$ unset X
$ echo "$X"
bash: X: unbound variable
$ echo "${X-}"
$
最后,你的测试
if [ -z "${X-}" ]
(注意引号,它们是强制性的)测试X 是否为零(不管X 是否被设置,即使set -u 被使用)。
【讨论】:
-z是什么意思
help test:-z STRING如果字符串为空则为真。