2015-10-06 36 views
1

我在我們的一些腳本中看到,有一個連接到殼變量的連字符。例如:什麼是殼變量旁邊的連字符

if [ -z ${X-} ] 

什麼變量旁邊這個連字符符號在這裏做。 我無法在網上找到任何文檔。

+3

這一切都在手冊的[_Shell參數擴展_部分](http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)中進行了解釋。 –

回答

4

這一切都在Shell Parameter Expansion section of the manual解釋:

${parameter:-word}

如果parameter是設置或者爲空,的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-}" 

$ 

最後,在測試X

if [ -z "${X-}" ] 

(注意引號,是強制性的)測試是否是零(不管X是否被設置,即使使用set -u)。

+0

請解釋'-z'意思是什麼 –

+1

@ArielGabizon,請參閱'help test':_'-z STRING'如果字符串爲空,則爲真._ –

相關問題