免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1983 | 回复: 9
打印 上一主题 下一主题

[网络相关] 这个脚本如何理解 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-16 17:06 |只看该作者 |倒序浏览
[ "${-#*x}" == "$-" ] && {
        fw() {
                fw__exec "$@"
        }
} || {
        fw() {
                local os=$-
                set +x
                fw__exec "$@"
                local rc=$?
                set -$os
                return $rc
        }
}


特别  这里:    [ "${-#*x}" == "$-" ]

哪里 有可以帮助理解的资料

论坛徽章:
0
2 [报告]
发表于 2013-12-16 17:09 |只看该作者
[ "${-#*x}" == "$-" ] 如果是TRUE

执行下面的语句块,其实就是定义了fw函数
{
        fw() {
                fw__exec "$@"
        }
}

如果是FALSE,则执行
{
        fw() {
                local os=$-
                set +x
                fw__exec "$@"
                local rc=$?
                set -$os
                return $rc
        }
}
fw函数又是另外一个样子了。

论坛徽章:
0
3 [报告]
发表于 2013-12-16 17:15 |只看该作者
[ "${-#*x}" == "$-" ]

变量 $- 去掉第一次出现的x左边的部分,如果和 $- 相等,返回0。

然后 fw() 函数的内容就是怎样怎样,

如果不相等,返回非零,然后fw()函数的内容又变了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2013-12-16 17:20 |只看该作者
goldenfort 发表于 2013-12-16 17:06
特别  这里:    [ "${-#*x}" == "$-" ]

哪里 有可以帮助理解的资料

第一选择肯定是你所用 shell 的手册了。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
5 [报告]
发表于 2013-12-16 17:34 |只看该作者
搜索 shell 变量替换应该能找到所要的内容。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2013-12-16 17:43 |只看该作者
回复 4# MMMIX


    有手册,也不知道从哪里看,只能从头到尾仔细看下去。没有十天半月,不一定能找到 叙述的地方。
    这所有  shell  都没有   关键字  和运算符   列表,

    除非从头开始从手册练习,不象其它语言, 有问题,一查 关键字,  或运算符   就清楚了。
    而且 各个版本 ,差异比较大。

    所以极难学会。

    诞生于  内存 和硬盘 非常  贵的  年代,  到处都是  特殊符号, 极难搜索  和 记忆。

    容易懂的语言里,都很少有 特殊符号,


    不过工作中, 还得使用,  原来开源的方案  是装在 embedded  系统上的,为了省 flash,  所以 有很多 shell  脚本。


     象makefile   vi  shell   这些 都是  诞生于   存储空间  极度 紧缺  的年代, 都比较难于 理解 和学习

  

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2013-12-16 17:53 |只看该作者
回复 3# animama88


    $-  在  ash   里 , 和  #@  等类似吗? 有特殊意思吗?

比如   $#  表示 参数的 个数?

论坛徽章:
1
技术图书徽章
日期:2014-03-24 15:21:15
8 [报告]
发表于 2013-12-16 18:02 |只看该作者
[ "${-#*x}" == "$-" ]
一层层分解:
[]:测试其中的表达的返回值为True或False。
$-:shell当前的配置,你可以使用echo $-查看。
${-#*x}:这个是shell的字符串匹配模式,通用的格式为${var#pattern}。pattern是匹配模式,可以是正则表达式。一个#代表如果pattern匹配variable的开始部分,从variable的开始处删除字符直到第一个匹配的位置,包括匹配部分,返回剩余部分。也就是删除原字符串从开头处到最近匹配的所有字符。

所以这一段代码就是看看shell是否配置了x以及之前的选项,根据不同情况定义不同的fw()。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2013-12-16 18:30 |只看该作者
goldenfort 发表于 2013-12-16 17:43
有手册,也不知道从哪里看,只能从头到尾仔细看下去。没有十天半月,不一定能找到 叙述的地方。


还是不会看啊。先看大纲,了解下有什么内容,然后根据需要直接搜索,找到详细解释的位置仔细看。

论坛徽章:
0
10 [报告]
发表于 2013-12-16 21:20 |只看该作者
回复 6# goldenfort


    说明你懒, 资料多如麻, http://www.gnu.org/software/bash/manual/bash.htm  这个你粗略看看,每天坚持读30mins 就够你用了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP