shell变量旁边的连字符是什么

时间:2015-10-06 07:42:00

标签: bash shell scripting

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

if [ -z ${X-} ]

变量旁边的这个连字符符号在这里做什么。 我在网上找不到任何文件。

1 个答案:

答案 0 :(得分:5)

所有这些都在Shell Parameter Expansion section of the manual中解释:

  

${parameter:-word}

     

如果parameter未设置或为null,则word的扩展将被替换。否则,parameter的值将被替换。

就在此之前:

  

省略冒号只会导致对未设置的参数进行测试。

所以:

${X-stuff}

扩展为:

  • 设置$XX的扩展
  • 如果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是否设置,即使使用了geom_boxplot(position=position_dodge(0)))。