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 e
5个文件的信息,可见用引号括起来之后,才把*
号作为通配符使用的
参考: