linux - 为什么 bash 文档建议引用通配符?

标签 linux bash wildcard

在一些手册(包括官方 GNU/Linux 命令行工具 tldp.org )中建议使用单引号(或双引号)以避免 bash 解释通配符或正则表达式符号,如插入符 (^) 和美元 ($) .

但在某些示例中,没有必要使用单引号/双引号。例如:

(1)

$ touch 'fo*'

$ touch fo*

在两种命令行形式中创建相同的文件 fo*

(2)

$ grep '^foo' file.txt

$ grep ^foo file.txt

两者都在 file.txt 行的开头搜索 foo 作为字符串。

如果 bash 实际上不首先解释某些通配符和正则表达式符号,为什么手册建议使用单引号/双引号来避免 bash 解释?

最佳答案

如果当前目录下有一个名为foo的文件,那么touch 'fo*' touches fo*,但是 touch fo* 将扩展为 touch foo 并改为触摸它。

如果设置了 nullglob 选项并且不存在匹配 fo* 的文件名,touch fo* 将扩展为 touch 并提示缺少操作数。

如果设置了 failglob 选项并且不存在匹配 fo* 的文件名,touch fo* 将立即导致错误。

关于linux - 为什么 bash 文档建议引用通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38152760/

相关文章:

c - 为什么从以下代码中删除 sprintf() 会导致段错误?如何处理?

python - 如何在我的 WSGI apache 上为 Django 执行多个进程?

linux - 当你给它一个服务的默认端口号时返回一个服务名称的脚本

mysql - 使用通配符查找 MySQL 数据库中的重复数据

java - 返回类型为 'T' 且方法参数包含通配符时,返回类型与方法参数冲突

linux - 将 memcpy 用于 64 位 linux 将内容清零

linux - 管理 cron 作业创建的日志文件

Bash 读取行缓冲区溢出

regex - 用于备份服务器上传文件夹的 Bash 脚本

javascript - 使用类名的一部分作为 css 变量