Autoconf文档推荐这个片段的可移植性:
# 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
variables?
:$ {TMPDIR = / tmp}表示:
:在bash中为null命令,但如果TMPDIR的内容为空,shell将/ tmp分配给TMPDIR变量
“:$ {TMPDIR = / tmp}”这行代码调用了“:”shell内建的函数,它只用一个参数 – “$ {TMPDIR = / tmp}” 参数扩展结果 。
这个参数展开给TMPDIR变量赋予“/ tmp”,如果它未被设置(之前没有设置任何东西,甚至是空字符串),然后展开为TMPDIR的值,被“:”内建忽略。