1.config_get的理解
config_get() {
case "$3" in
"") eval echo "\${CONFIG_${1}_${2}:-\${4}}";;
*) eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";;
esac
}
解释:
${NO_EXPORT:+-n} evaluates to -n
if NO_EXPORT
is set, otherwise to the empty string
${NO_EXPORT:+-n}可以这么理解:当NO_EXPORT定义时等于-n,没有定义时为空
export ${NO_EXPORT:+-n} CONFIG_LIST_STATE=
跟下面的是相同的意思
if [ "$NO_EXPORT" ]
then
export -n CONFIG_LIST_STATE=
else
export CONFIG_LIST_STATE=
fi
出处:https://stackoverflow.com/questions/34477314/what-does-no-export-n-do
2.config_foreach的理解
config_foreach() {
local ___function="$1"
[ "$#" -ge 1 ] && shift
local ___type="$1"
[ "$#" -ge 1 ] && shift
local section cfgtype
[ -z "$CONFIG_SECTIONS" ] && return 0
for section in ${CONFIG_SECTIONS}; do
config_get cfgtype "$section" TYPE
[ -n "$___type" -a "x$cfgtype" != "x$___type" ] && continue
eval "$___function \"\$section\" \"\$@\""
done
}
如:config_foreach mwan3_set_policies_iptables policy
可以简单理解为函数调用:mwan3_set_policies_iptables policy
3.append的理解:
定义:
append() {
local var="$1"
local value="$2"
local sep="${3:- }"
eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
}
用法:
append CONFIG_SECTIONS "$name"
简单理解为:设置环境变量