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
变量在此之后使用?
答案 0 :(得分:2)
:$ {TMPDIR = / tmp}表示:
:在bash中是null命令,但如果TMPDIR的内容为null,则shell将/ tmp赋值给TMPDIR变量
答案 1 :(得分:0)
“$ {TMPDIR = / tmp}”行正在调用":" shell built-in,它没有任何作用,只有一个参数 - 结果为“$ {TMPDIR = / tmp}”parameter expansion。< / p>
此参数扩展将“/ tmp”分配给TMPDIR变量,如果它未设置(之前未设置为任何内容,甚至是空字符串),然后扩展为TMPDIR的值,“:”内置后将忽略该值。 / p>