Chinaunix

标题: 初学者问 [打印本页]

作者: liu3231    时间: 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($|" ;这段不太明白

谢谢了
作者: feeling    时间: 2003-04-17 15:31
标题: 初学者问
"(^|$1($|"  ???

我也不明白!!!
作者: feeling    时间: 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的末尾部分的话,就没有符合 : 在它后面,否则就一定有。
作者: feeling    时间: 2003-04-17 15:51
标题: 初学者问
注:
该函数pathmunge () 的第一个参数一定是一个路径信息,如/home/yourname
就是函数原形里面的 $1
作者: woodie    时间: 2003-04-17 15:58
标题: 初学者问
当":"与""联用时,系统自动将它转换为笑脸符:
egrep是grep的扩展版本,支持更多的扩展语法。
"(^|:)$1($|:)"--(这里使用了全角括号)将会匹配一下四种情况:
1:
$1:   --在行首
1   --在行尾
$1    --$1的内容单独一行
整个一句的目的是检测路径$1内容是否已经包含在变量$PATH中,但$1作为路径名的一部分则不算。
作者: liu3231    时间: 2003-04-17 16:37
标题: 初学者问
感谢feeling和woodie的解答,不好意思闹出笑话。
意思我基本明白了。我还想追问一下
  1. (^|:)$1($|:)
复制代码

想这样的格式和代码我以后怎么用啊,现在我只是明白了在这个函数中的作用。能否再具体点一个字符一个字符的介绍一下,或者那有这方面的电子书
介绍一下。
谢谢了
作者: liu3231    时间: 2003-04-17 16:39
标题: 初学者问
感谢feeling和woodie的解答,不好意思闹出笑话。
意思我基本明白了。我还想追问一下
  1. (^|:)$1($|:)
复制代码

想这样的格式和代码我以后怎么用啊,现在我只是明白了在这个函数中的作用。能否再具体点一个字符一个字符的介绍一下,或者那有这方面的电子书
介绍一下。
谢谢了
作者: woodie    时间: 2003-04-17 17:46
标题: 初学者问
小括号用于正则表达式的分组;
“|”这里是"或"的意思,“a|b”匹配a或b;
“^”匹配行首;
“$”匹配行尾。
作者: feeling    时间: 2003-04-17 17:52
标题: 初学者问

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

作者: liu3231    时间: 2003-04-18 12:59
标题: 初学者问
我以完全明白,谢谢两位啦!




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