曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3002|回复: 0
打印 上一主题 下一主题

[系统应用] [functions]append

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2014-12-4 21:49:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/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\""             
} 



使用方法:
  1. append "$name1" "$name2"
复制代码


测试代码:
[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


那么输出为:
# sh append.sh
www
www.groad
www.groad.net

再回头看 append() 函数中的最后一句代码:

${NO_EXPORT:+-n} ,表示如果已经定义了 NO_EXPORT 且该变量不为空时使用 export 的 -n 参数,即取消后续变量的全局性(即在子 shell 中不可用)。

单独双横杠意味着后续的  \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\" 这部分内容不作为 export 的参数,而是独立部分。这句话的意思是,如果 var 为空,那么直接将 $value 赋值给 var ;如果不为空,那么它将后接第 3 个参数(不传递则默认为空格)和第 2 个参数($value)。




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 01:32 , Processed in 0.091785 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表