如何理解"grep --color [Cat] <<<"nixCraft""?

How to understand "grep --color [Cat] <<<"nixCraft""?

我读过这个 tweet,但无法弄清楚这个语句的含义:

grep --color [Cat] <<<"nixCraft"

执行这条语句后,输出:

[root@localhost command]# grep --color [Cat] <<<"nixCraft"
nixCraft

只有字母a是红色的。

我提到了 bash manual,但不明白为什么只有 a 是彩色的。谁能解释一下这个说法?非常感谢!

[Cat] 表示文件名扩展 — 它将匹配名称为 Cat 的任何文件。在您的情况下,您似乎有一个名为 a 的文件,因此您的命令扩展为:

grep --color a <<<"nixCraft"

请注意,如果没有文件名与该模式匹配,则文件名扩展将失败,并且行为将取决于 Bash 设置。在这种情况下,默认行为是将其作为参数传递给命令,这样您的命令将有效地

grep --color '[Cat]' <<<"nixCraft"

所有这三个字母都会被着色。如果这实际上是您想要的行为——如果您想要匹配所有这三个字母——那么您应该使用'[Cat]'(带引号)而不是 Bash 命令中的 [Cat]

正常情况下,它按预期工作:

但是,由于您使用了 "naked" 模式 [Cat],因此 shell:

会对其进行文件名扩展

在这种情况下,bash 已将 [Cat] 解释为文件 Cat 中的任何一个。在上面的例子中,只有 a 存在,所以命令变成了:

grep --color a <<<"nixCraft"

这就是为什么您只看到红色的 a

要解决此问题,只需保护模式免受 shell:

grep --color '[Cat]' <<<"nixCraft"