linux之命令加单引号和不加的区别 - pod4g/tool GitHub Wiki

假设家目录为/home/work/,家目录下含有下列文件

a b c d e

则执行ls *

shell会把*号置换为当前命令下的所有文件,所以就相当于执行ls a b c d e

在比如,执行:

find ~ -name *

则会报错:

find: paths must precede expression: b
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

因为shell会把*号替换为当前命令下的所有文件,所以相当于执行:

fin ~ -name a b c d e

这显然是不符合find命令的语法的,所以报错

删除除了a文件之外的所有文件,则再次执行:

find ~ -name *

则会输出正确的结果,因为shell会把*号替换为a,则上述命令相当于:

find ~ -name a

这是正确的find语法,所以会给出正确的结果

如果拒绝shell对*进行解释,则只需加上引号即可,我们再此把删除的文件创建好,执行:

find ~ -name '*'

则会列出a b c d e5个文件的信息,可见用引号括起来之后,才把*号作为通配符使用的

参考:

  1. http://confusedday.blogbus.com/logs/6685298.html
  2. https://unix.stackexchange.com/questions/170179/whats-the-difference-between-using-single-quotes-or-not-in-find-command