免费注册 查看新帖 |

Chinaunix

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

初学者问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-17 15:24 |只看该作者 |倒序浏览
在/etc/profile文件里看到一个函数不太明白,请教各位了
pathmunge () {
        if ! echo $PATH | /bin/egrep -q "(^|$1($|" ; then
           if [ "$2" = "after" ] ; then
              PATH=$PATH1
           else
              PATH=$1PATH
           fi
        fi
}

关键是 if ! echo $PATH | /bin/egrep -q "(^|$1($|" ;这段不太明白

谢谢了

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
2 [报告]
发表于 2003-04-17 15:31 |只看该作者

初学者问

"(^|$1($|"  ???

我也不明白!!!

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
3 [报告]
发表于 2003-04-17 15:48 |只看该作者

初学者问


  1. pathmunge () {
  2.   if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
  3.     if [ "$2" = "after" ] ; then
  4.       PATH=$PATH:$1
  5.     else
  6.       PATH=$1:$PATH
  7.     fi
  8.   fi
  9. }

复制代码


差不多明白了,就是不知道能不能说明白

你 echo $PATH 一下,就可能大致看出什么意思了。
应该属于正则表达式的范畴吧。


  1.     if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
复制代码


1. if 没有什么好说的吧
2. ! 是用来取反的,就是将后面语句 echo $PATH | /bin/egrep... 结果取反了;
3. echo $PATH 是打印变量PATH值的 (有些诲人不倦吧!)
4. | 竖线就是管道啦
5. egrep -q 是静态的输出(只输出是否找到的结果),如果发现就返回0,没有就返回-1 ;
6. 问题在这里:
  1. (^|:)$1($|:)
复制代码

    将给定的该函数的第一个参数拿过来格式化一下,其实就是判断该函数第一个参数是否是环境变量PATH里面已有的部分
         ^|:   如果该路径是在变量PATH的开始部分的话,就没有符合 : 在它前面,否则就一定有。
         $|:   如果该路径是在变量PATH的末尾部分的话,就没有符合 : 在它后面,否则就一定有。

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
4 [报告]
发表于 2003-04-17 15:51 |只看该作者

初学者问

注:
该函数pathmunge () 的第一个参数一定是一个路径信息,如/home/yourname
就是函数原形里面的 $1

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-04-17 15:58 |只看该作者

初学者问

当":"与""联用时,系统自动将它转换为笑脸符:
egrep是grep的扩展版本,支持更多的扩展语法。
"(^|:)$1($|:)"--(这里使用了全角括号)将会匹配一下四种情况:
1:
$1:   --在行首
1   --在行尾
$1    --$1的内容单独一行
整个一句的目的是检测路径$1内容是否已经包含在变量$PATH中,但$1作为路径名的一部分则不算。

论坛徽章:
0
6 [报告]
发表于 2003-04-17 16:37 |只看该作者

初学者问

感谢feeling和woodie的解答,不好意思闹出笑话。
意思我基本明白了。我还想追问一下
  1. (^|:)$1($|:)
复制代码

想这样的格式和代码我以后怎么用啊,现在我只是明白了在这个函数中的作用。能否再具体点一个字符一个字符的介绍一下,或者那有这方面的电子书
介绍一下。
谢谢了

论坛徽章:
0
7 [报告]
发表于 2003-04-17 16:39 |只看该作者

初学者问

感谢feeling和woodie的解答,不好意思闹出笑话。
意思我基本明白了。我还想追问一下
  1. (^|:)$1($|:)
复制代码

想这样的格式和代码我以后怎么用啊,现在我只是明白了在这个函数中的作用。能否再具体点一个字符一个字符的介绍一下,或者那有这方面的电子书
介绍一下。
谢谢了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-04-17 17:46 |只看该作者

初学者问

小括号用于正则表达式的分组;
“|”这里是"或"的意思,“a|b”匹配a或b;
“^”匹配行首;
“$”匹配行尾。

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
9 [报告]
发表于 2003-04-17 17:52 |只看该作者

初学者问


  1. (^|:)$1($|:)   
  2. 1. 符号 "^"、"$"在正则表达式中分别标识记录首、尾;
  3. 2. (^|:)是符号 "^"、":" 二者取其一的意思;
  4. 3. ($|:)是符号 "$"、":" 二者取其一的意思;
  5. 4. (^|:)$1($|:)  就是一系列可能的组合,如 ^$1:、^$1$、:$1:、:$1$等;
复制代码

论坛徽章:
0
10 [报告]
发表于 2003-04-18 12:59 |只看该作者

初学者问

我以完全明白,谢谢两位啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP