问题引入
文件路径如下,目的是获取lcrp-4-8目录,但是4-8会发生变化,所以考虑使用通配符:
分别使用如下指令
find -mindepth 1 -type d -name lcrp-* ,可以匹配到lcrp-4-8文件夹
find -mindepth 1 -type d -name "lcrp-*" ,会输出多个lcrp-开头的文件
原因分析
对比以上两条指令,唯一的区别就是lcrp-*加不加双引号的区别
不加双引号指令:
*号会由shell解析,第一条指令就等价于 find -mindepth 1 -type d -name lcrp-4-8 ,如果目录下有多个lcrp-开头的文件夹,该指令将会报错,如果当前文件夹下没有lcrp-开头的文件,那么传给find的就是空,指令就等价于find -mindepth 1 type d -name
提示信息如下:
find: paths must precede expression: lcrp-4-8 ===》就是说第二个目录lcrp-4-8前面没有指定-name,实际上此时的指令等价于 find -mindepth 1 -type d -name lcrp-1-1 lcrp-4-8 也即是说shell会先解释*号再执行find指令
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]
加双引号指令:
这个参数lcrp-*会原封不动的传递给find, find命令本身具备解析通配符的能力,会在当前目录及下级目录下寻找lcrp-开头的文件夹
总结
所以shell下*号加双引号就不会由shell直接解析,会给到对应指令去处理,如果不加双引号就会由shell先解析然后再给到指令使用,所以理解*号什么时候处理才是关键/
参考链接: