什么" $(NO_EXPORT:+ - n"做什么?

时间:2015-12-27 03:25:05

标签: bash

我试图理解在openwrt

下的uci.sh中的含义

第30行发生错误。

if [-z "$CONFIG_APPEND" ]; then
..
 export ${NO_EXPORT:+-n} CONFIG_LIST_STATE=
...
fi

上面示例中export ${NO_EXPORT:+-n}做了什么?

问题2:

append() {
  local var="$1"
  local value="$2"
  local sep="${3:- }"

  eval "export ${NO_EXPORT:+-n} -- \"$var=\${var:+\${var}\${value:+\$sep}}\$value\""
}

eval "export ${NO_EXPORT:+-n} --的含义是什么?

1 个答案:

答案 0 :(得分:2)

如果设置了${NO_EXPORT:+-n},则

-n评估为NO_EXPORT,否则为空字符串。有关所有这些变量扩展,请参阅http://tldp.org/LDP/abs/html/parameter-substitution.html

所以这个:

export ${NO_EXPORT:+-n} CONFIG_LIST_STATE=

几乎相当于:

if [ "$NO_EXPORT" ]
then
    export -n CONFIG_LIST_STATE=
else
    export CONFIG_LIST_STATE=
fi

(不同之处在于第一种形式也优雅地处理未设置NO_EXPORT的情况,但如果未设置NO_EXPORT且使用set -u,则第二种形式将失败将未定义的变量视为错误。)

eval是相同的,它只是使用eval扩展局部变量来计算要执行的命令。