我在我们的一些脚本中看到,shell 变量附加了一个连字符。例如:
if [ -z ${X-} ]
变量旁边的这个连字符在这里做什么。
我在网上找不到任何相关文档。
最佳答案
这一切都在 Shell Parameter Expansion section of the manual 中进行了解释:
在此之前有:
所以:
${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
)。关于bash - 什么是shell变量旁边的连字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32964357/