2017-06-15 88 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)並不重要,但是...並不是每個人都這樣做。 –

相關問題