参考:
linux中三种括号、三种引号的区别
linux下find命令通配符*和双引号的使用及区别
1. 结论
ls命令后接字符串不要加双引号;
find命令后接字符串要加双引号。
2. Linux双引号解析
Linux中双引号是一种转义符,其作用是保护特殊元字符和通配符不被shell解析,但是允许变量和命令的解析,以及转义符的解析。
重点在于:双引号可以保护通配符不被shell解析。
3. ls命令
不加双引号时,Linux中具有特殊含义的字符均保持他们的特殊含义,例如:
$ ls *.sh
*.sh
中的*
将被shell解析后再传递给ls命令,输出时会将当前目录中所有以.sh结尾的文件列出来
加上双引号后,*.sh
中的*
将不被shell解析,直接传递给ls命令,ls将直接对*.sh
进行处理,而ls命令不具备解析通配符的能力,因此下述命令将会报错。
$ ls "*.sh"
上述命令会提示 ls: cannot access ‘*.sh’: No such file or directory
4. find命令
有一文件夹,其结构如下图所示:
不加双引号时,Linux中具有特殊含义的字符均保持他们的特殊含义:
find -mindepth 1 -type d -name lcrp-*
lcrp-*
中的*
会由shell解析,第一条指令就等价于 find -mindepth 1 -type d -name lcrp-4-8
。上述指令输出为:
加上双引号后,lcrp-*
中的*
将不被shell解析,直接传递给find命令,find将直接对lcrp-*
进行处理, find命令本身具备解析通配符的能力,会在当前目录及下级目录下寻找lcrp-开头的文件夹。
find -mindepth 1 -type d -name "lcrp-*"
上述指令输出为:
5. 总结
所以shell下,通配符加上双引号就不会由shell直接解析,会给到对应指令去处理,如果不加双引号就会由shell先解析然后再给到指令使用,所以理解双引号的作用才是关键。