2013-04-30 90 views
2

Autoconf的文檔建議這個片段的可移植性:解釋這個shell腳本

 # Create a temporary directory $tmp in $TMPDIR (default /tmp). 
     # Use mktemp if possible; otherwise fall back on mkdir, 
     # with $RANDOM to make collisions less likely. 
     : ${TMPDIR=/tmp} 
     { 
     tmp=` 
      (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null 
     ` && 
     test -n "$tmp" && test -d "$tmp" 
     } || { 
     tmp=$TMPDIR/foo$$-$RANDOM 

     (umask 077 && mkdir "$tmp") 
     } || exit $? 

我不明白的第一行:

爲什麼它有:開始?

爲什麼在此之後使用TMPDIR變量?

+3

你可能想看看這個其他[問題和答案](http://stackoverflow.com/questions/7444504/explanation-of-this-use-of-the-colon-operator):) – summea 2013-04-30 18:12:06

+1

@summea謝謝你! – qdii 2013-04-30 18:13:00

回答

2

:$ {TMPDIR =/TMP}意味着:

:是在bash空命令,但殼分配的/ tmp到TMPDIR變量如果TMPDIR的內容爲空

0

的「$ {TMPDIR =/tmp}「行正在調用":" shell built-in,它不執行任何操作,只有一個參數 - 」$ {TMPDIR =/tmp}「的結果爲」parameter expansion「。

此參數展開爲TMPDIR變量賦值「TMPDIR」,如果它未被設置(之前未設置任何值,甚至是空字符串),然後展開爲TMPDIR的值,該值由「:」內建值忽略。