LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1223|回复: 8

/''*|\./''* 以及 expr "$1" : ':[0-9][0-9]*$'

[复制链接]
发表于 2007-6-17 00:10:58 | 显示全部楼层 |阅读模式
while [ x"$1" != x ]; do  
    case "$1" in
    # '' required to prevent cpp from treating "/*" as a C comment.
   [color="Red"] /''*|\./''*)   

还有
[color="Red"]expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1

这是startx里面的两句,请问上面红色的这些符号分别代表什么意思?
谢谢!
发表于 2007-6-17 22:36:49 | 显示全部楼层
我也不太明白两个''是什么意思,不过你可以尝试下这个:ls ''* 或者 ls /''* 以及 ls \./''*
回复 支持 反对

使用道具 举报

发表于 2007-6-17 23:06:17 | 显示全部楼层
/''*|\./''*:

看上面的注释,这是说本来是要写/*|\./*)的,就是匹配所有以"/"或"./"开头的字符串,但是/*又是C语言的注释起始标志,这个 startx可能使用了C的宏展开程序cpp,所以/*会让cpp迷惑。在/和*之间加上没有意义的'',就解决了这个问题。

关于第2个,看看man expr就知道了。
回复 支持 反对

使用道具 举报

发表于 2007-6-17 23:09:28 | 显示全部楼层
# '' required to prevent cpp from treating "/*" as a C comment.
这不有一个注释吗,谁解释一下。''可能没有用处吧,跟null string一样?
就等同于 /*|\./*) , 这里期望参数是一个脚本或程序。如 /a.sh or ./a.sh

第二个 man expr 就有答案了。这里是判断是否可以作为DISPLAY参数的值。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-18 12:32:53 | 显示全部楼层
Post by hppyhjh
# '' required to prevent cpp from treating "/*" as a C comment.
这不有一个注释吗,谁解释一下。''可能没有用处吧,跟null string一样?
就等同于 /*|\./*) , 这里期望参数是一个脚本或程序。如 /a.sh or ./a.sh


问题就在于此,我不明白startx为什么期望带这样的参数呢(如 /a.sh or ./a.sh)?下面是startx的一个简介:
[color="Blue"]startx 只是xinit的一个前端工具,它所做的只是设置好一些变量,资源。然后再用xinit 启动X window.
xinit的命令格式:
xinit [ [client] clientargs] [-- [server] [display] serverargs]

其实startx后面如果跟参数的话,也是这样的:startx [ [client] clientargs] [-- [server] [display] serverargs]
这样我就不能理解上面的这个case里面的东东与这些参数是如何对应的
回复 支持 反对

使用道具 举报

发表于 2007-6-18 17:34:43 | 显示全部楼层
client / server 都是一个可执行文件,分别用于启动客户端和服务器端,所以是文件路径的格式。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-21 09:05:00 | 显示全部楼层
我还是不太理解这个expr ,这儿还有另外一个例子:
if expr "$F" : '[[:alnum:]_-]\+$' > /dev/null 2>&1; then
expr似乎是评估:前后两个东东,返回一个数值,那他是怎么评估的呢?
还有在这个语句里面,那个_ - + $分别代表什么意思呢?我看了一下例子,他似乎代表的是这样的文件名:90im-scim
回复 支持 反对

使用道具 举报

发表于 2007-6-21 22:31:00 | 显示全部楼层
那是用正则表达式匹配,关于正则表达式,可以man grep。
可以多用不同的内容和模式试试下面的命令,就知道怎么匹配了:
bumpy:~$ if expr abcd-123_ : [[:alnum:]_-]\\+$; then echo Match; else echo No match; fi
9
Match
bumpy:~$ if expr abcd-123_.txt : [[:alnum:]_-]\\+$; then echo Match; else echo No match; fi
0
No match
bumpy:~$
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-21 22:50:08 | 显示全部楼层
谢谢roamingo!
我也试了一下,[[:alnum:]_-]\+$ 代表的似乎是一个字符串,这些字符串是由常规的(没有特殊含义的)字母或者数字或者符号组成的,如果这字符串里面有如 . # * 等就不符后规则,返回值为零,程序推出。

这是Xsession里面的语句,难怪他说,允许系统管理员将Xsession.d文件夹里的文件命名为如abcd.old 等文件名,以暂时不启动这些程序。这个脚本就是干这个的。

这个表达式有点奇怪,是不是那个$表示的最末尾?但那个\ 和 +就不是那么好理解了
回复 支持 反对

使用道具 举报

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

本版积分规则

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