解释这个shell脚本

时间:2013-04-30 18:08:51

标签: linux shell

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变量在此之后使用?

2 个答案:

答案 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>