2017-06-15 83 views
1

我看到一个solr shell script以下行的意思是:

if [ -z ${GC_TUNE+x} ]; then 
    GC_TUNE=('-XX:NewRatio=3' 

我得到上述声明的目的,但不是很确定是什么意思通过${GC_TUNE+x}

+1

谁写的代码可能是指'的人[-z “$ {GC_TUNE + X}”]',顺便说一句。 –

+1

......没有引号,'[-z]'被解释为'[-n -z]' - 因为它在询问'-z'是否是空字符串(因为'-n'是当* GC_TUNE'为空时,只有一个参数传递给'test'),而不是“$ {GC_TUNE + x}”是否计算为空字符串。由于结果是真实的,最终的结果仍然是原作者的意思,但它是一个令人惊讶/误导性理由的正确结果,而在引用到位的情况下,它会以正确的原因*返回正确的结果。 –

回答

4

如果设置了GC_TUNE,则该值为x。否则它将是空的。

我喜欢保留this page这样的场合!

这里有一个快速演示:

#!/bin/bash 
echo begin 
unset foo 
echo ${foo+bar} # unset, so this expands to nothing 
foo=baz 
echo ${foo+bar} # is set, so it expands to the value of the variable 
echo end 

输出:

begin 

baz 
end 
+0

这很奇怪。 echo $ foo也扩展为无。那么为什么要在那里添加+栏?基本上,即使我从 – user2250246

+1

以上的所有地方删除+栏,我也可以得到相同的结果。因此,您可以区分'unset foo'和'foo =“”'。它对人的眼睛看起来可能相同,但出于某种原因可能需要区别对待。 – miken32

+1

另外,'$ {foo + x}'保证可以扩展为空字符串或'x' - 那里的角落情况比你只需要扩展'$ foo'少得多(对于任意值'foo',可以包含空格,通配符等)。如果你以安全和理智的方式编写你的代码(引用适当的地方和c)并不重要,但是...并不是每个人都这样做。 –

相关问题