我试图理解在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} --
的含义是什么?
答案 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
扩展局部变量来计算要执行的命令。