全部博文(298)
分类: Python/Ruby
2012-04-20 21:02:18
通配符’*’的使用
1. 在/etc/profile文件里面有两段脚本
(1) 查看字符串是否为另一字符串的字串
pathmunge(){ case ":${PATH}:" in *:"$1":*) exec;; *) } |
由于PATH环境变量格式为/usr/local/bin:/sbin:/usr/bin;为了找出$1时候在PATH路径中,我们使得STR=:/usr/local/bin:/sbin:/usr/bin:,在路径前后都增加冒号,然后利用shell的通配符*,如果$1=/sbin,那么*:"$1":*可以匹配到,第一个*扩展为:/usr/local/bin,第二个*扩展为/usr/bin:,在PATH路径两边加:就是为了防止$1出现在PATH路径的两边。 而最后一个选项*可以扩展任何值,所以无论怎样都可以执行,如果前面的case选项都没有匹配到那么执行最后的*选项。 注:在case选择中可以使用通配符匹配 |
(2) 匹配某文件夹下文件
if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi
|
在判断目录/etc/profile.d存在的时候,要执行该目录下的shell脚本,默认shell脚本文件后缀为sh,所以/etc/profile.d/*.sh可以在shell通配符*的帮助下,扩展为该目录下的所以shell脚本,然后判断是否可读,使用’.’命令来执行脚本。 问题1:我们知道””在shell为引用,在双引号里面的除了”、`、$、\四个要使用原始意义的时候需要转义之外,其他字符都保持原始意义,那么*也不再作为shell的通配符了,可是下面的脚本一样能够正常执行: #! /bin/bash if [ -d /etc/profile.d ]; then for i in "/etc/profile.d/*.sh "; do echo $i done unset i fi
但是下面的脚本不能够正常运行 #! /bin/bash ls "/etc/profile.d/*.sh " 是否仅仅在for i in "/etc/profile.d/*.sh "的时候能够正常执行呢?? 问题2:在使用交互式shell的时候,命令 $ ls " *" 不能够正常使用,但是 $ ls * 能够正常使用表明shell的双引号引用发挥了作用。 |