Linux中ls和find命令后接的通配符字符串要不要加双引号?

参考:
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先解析然后再给到指令使用,所以理解双引号的作用才是关键。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吮指原味张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值