Chinaunix

标题: 这个脚本如何理解 [打印本页]

作者: goldenfort    时间: 2013-12-16 17:06
标题: 这个脚本如何理解
[ "${-#*x}" == "$-" ] && {
        fw() {
                fw__exec "$@"
        }
} || {
        fw() {
                local os=$-
                set +x
                fw__exec "$@"
                local rc=$?
                set -$os
                return $rc
        }
}


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

哪里 有可以帮助理解的资料
作者: animama88    时间: 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函数又是另外一个样子了。

作者: animama88    时间: 2013-12-16 17:15
[ "${-#*x}" == "$-" ]

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

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

如果不相等,返回非零,然后fw()函数的内容又变了。
作者: MMMIX    时间: 2013-12-16 17:20
goldenfort 发表于 2013-12-16 17:06
特别  这里:    [ "${-#*x}" == "$-" ]

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

第一选择肯定是你所用 shell 的手册了。
作者: seesea2517    时间: 2013-12-16 17:34
搜索 shell 变量替换应该能找到所要的内容。
作者: goldenfort    时间: 2013-12-16 17:43
回复 4# MMMIX


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

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

    所以极难学会。

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

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


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


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

  


作者: goldenfort    时间: 2013-12-16 17:53
回复 3# animama88


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

比如   $#  表示 参数的 个数?
作者: baobozhao    时间: 2013-12-16 18:02
[ "${-#*x}" == "$-" ]
一层层分解:
[]:测试其中的表达的返回值为True或False。
$-:shell当前的配置,你可以使用echo $-查看。
${-#*x}:这个是shell的字符串匹配模式,通用的格式为${var#pattern}。pattern是匹配模式,可以是正则表达式。一个#代表如果pattern匹配variable的开始部分,从variable的开始处删除字符直到第一个匹配的位置,包括匹配部分,返回剩余部分。也就是删除原字符串从开头处到最近匹配的所有字符。

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

作者: MMMIX    时间: 2013-12-16 18:30
goldenfort 发表于 2013-12-16 17:43
有手册,也不知道从哪里看,只能从头到尾仔细看下去。没有十天半月,不一定能找到 叙述的地方。


还是不会看啊。先看大纲,了解下有什么内容,然后根据需要直接搜索,找到详细解释的位置仔细看。
作者: wuxiaobo_2009    时间: 2013-12-16 21:20
回复 6# goldenfort


    说明你懒, 资料多如麻, http://www.gnu.org/software/bash/manual/bash.htm  这个你粗略看看,每天坚持读30mins 就够你用了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2