linux之命令加单引号和不加的区别

技术文档网 2021-04-25

假设家目录为/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

相关文章

  1. wget批量下载gitlab uploads的文件和图片

    背景 下载gitlab的uploads文件,因为wiki可以直接clone,但是上传的文件和图片却无法下载(除非你有gitlab的服务器权限) 之前尝试用写Java工具下载 遍历所有的.md文件

  2. shell/设置外网访问权限

    /sbin/route add default gw 10.94.144.1 该网段的默认路由地址即路由器的地址为10.xxx.xxx.1 而路由器是可以访问外网的 由于静态路由在网卡启动时会删除,所

  3. shell/文件权限操作

    文件安全与权限 文件类型 d 目录 l 符号连接 s 套接字文件 b 块设备文件 c 字符设备文件 p 命名管道文件 普通文件 改变权限 符号模式 chmod [who] operator

  4. shell/条件测试

    测试语法 test condition #或 [ condition ] 使用方括号时,要注意在条件两边加上空格。 文件测试 测试状态: 符号 释义 -d 是否是目录 -f 是否

  5. 常用shell命令

    常用命令 查找类 find / -name "export.sh" which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文

随机推荐

  1. wget批量下载gitlab uploads的文件和图片

    背景 下载gitlab的uploads文件,因为wiki可以直接clone,但是上传的文件和图片却无法下载(除非你有gitlab的服务器权限) 之前尝试用写Java工具下载 遍历所有的.md文件

  2. shell/设置外网访问权限

    /sbin/route add default gw 10.94.144.1 该网段的默认路由地址即路由器的地址为10.xxx.xxx.1 而路由器是可以访问外网的 由于静态路由在网卡启动时会删除,所

  3. shell/文件权限操作

    文件安全与权限 文件类型 d 目录 l 符号连接 s 套接字文件 b 块设备文件 c 字符设备文件 p 命名管道文件 普通文件 改变权限 符号模式 chmod [who] operator

  4. shell/条件测试

    测试语法 test condition #或 [ condition ] 使用方括号时,要注意在条件两边加上空格。 文件测试 测试状态: 符号 释义 -d 是否是目录 -f 是否

  5. 常用shell命令

    常用命令 查找类 find / -name "export.sh" which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文