2013-04-30 88 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的值,该值由“:”内建值忽略。