/lib/functions.sh 中 append() 函数用来将某个 “名字” 附加到一个字符串上,其定义如下:
[Bash shell] 纯文本查看 复制代码 append() {
local var="$1"
local value="$2"
local sep="${3:- }"
eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
}
使用方法:
测试代码:
[Bash shell] 纯文本查看 复制代码 #!/bin/sh
. /lib/functions.sh
DOMAIN=
name2="www"
append DOMAIN "$name2"
echo $DOMAIN
name2="groad"
append DOMAIN "$name2"
echo $DOMAIN
name2="net"
append DOMAIN "$name2"
echo $DOMAIN
运行输出:
# sh append.sh
www
www groad
www groad net
append() 函数解析:
append() 函数一般接收两个参数。一般情况下,第 1 个参数用以不断接收第 2 个参数传递过来的字符串,就像不断挂接火车厢一样。如果只是接 2 个参数,那么每个字串之间使用一个空格隔开,这个从语句 local sep="${3:- }" 可以看出。因此,我们可以用第 3 个参数来指定间隔符,比如稍微修改一下测试程序的代码:
[Bash shell] 纯文本查看 复制代码 #!/bin/sh
. /lib/functions.sh
DOMAIN=
name2="www"
append DOMAIN "$name2" "."
echo $DOMAIN
name2="groad"
append DOMAIN "$name2" "."
echo $DOMAIN
name2="net"
append DOMAIN "$name2" "."
echo $DOMAIN
那么输出为:
再回头看 append() 函数中的最后一句代码:
${NO_EXPORT:+-n} ,表示如果已经定义了 NO_EXPORT 且该变量不为空时使用 export 的 -n 参数,即取消后续变量的全局性(即在子 shell 中不可用)。
单独双横杠意味着后续的 \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\" 这部分内容不作为 export 的参数,而是独立部分。这句话的意思是,如果 var 为空,那么直接将 $value 赋值给 var ;如果不为空,那么它将后接第 3 个参数(不传递则默认为空格)和第 2 个参数($value)。
|