LinuxSir.cn,穿越时空的Linuxsir!

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

为什么这里必须用“\”而不是直接用通配符?

[复制链接]
发表于 2004-3-4 08:55:32 | 显示全部楼层 |阅读模式
RHCE的教材是这样说的:In this case the * is expanded by the shell.If the pattern matches a single filename in the current directory(such as mbar or mfram),the expanded name will be passed to find as a parameter.哪位大侠解释一下。

[lsg@student lsg]$ find . -name m*
find: paths must precede expression
Usage: find [path...] [expression]
[lsg@student lsg]$ find . -name m\*
./mbox
./message
./messages.1
./mail
./mail/mail-trash
./html/admin/modules
……
发表于 2004-3-4 11:06:04 | 显示全部楼层
\ 是转意符号,
当我们使用find . -name m* 时 find 认为要找的是"m*"这个字符串 当然无法找到了
当我们使用find . -name m\* 时,"\"使"*"转意为特殊通配符,相当于所有以"m"开头的字符串。
 楼主| 发表于 2004-3-4 11:14:57 | 显示全部楼层
哦,这样我就明白了
发表于 2004-3-4 16:29:56 | 显示全部楼层
1,可以找到

/home/javalee:touch aaa\*
/home/javalee:ls
aaa*  Desktop  mybackup  myperl  myshell   tmp~
abc   funlib   mydoc     mysoft   tmp
/home/javalee:find aaa*
aaa*
/home/javalee:find aaa\*
aaa*
星号只有在""双引号内才起作用!因为shell里的元字符跟find是有区别的
/home/javalee:find $(pwd) -name "aa*" -maxdepth 1
/home/javalee/aaa*
/home/javalee:find $(pwd) -name aaa* -maxdepth 1
/home/javalee/aaa
/home/javalee:rm aaa\*
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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