【问题标题】:What is a hyphen beside a shell variableshell变量旁边的连字符是什么
【发布时间】:2015-10-06 07:42:00
【问题描述】:

我在我们的一些脚本中看到有一个连字符附加到一个 shell 变量。例如:

if [ -z ${X-} ]

变量旁边的这个连字符在这里有什么作用。 我在网上找不到任何文档。

【问题讨论】:

标签: bash shell scripting


【解决方案1】:

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是什么意思
  • @ArielGabison,见help test-z STRING如果字符串为空则为真。
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 2015-11-11
  • 2018-02-19
  • 1970-01-01
  • 2011-07-06
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多