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

时间:2015-01-13 02:17:17

标签: bash

我已阅读此tweet,但无法弄清楚此声明的含义:

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

执行此语句后,输出:

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

只有字母a为红色。

我已经提到了bash manual,但无法理解为什么只有a被着色。谁能解释这个说法?非常感谢提前!

2 个答案:

答案 0 :(得分:2)

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

grep --color a <<<"nixCraft"

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

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

这三个字母都是彩色的。如果这实际上是您想要的行为 - 如果您希望所有这三个字母都匹配 - 那么您应该使用'[Cat]'(带引号)而不是{在你的Bash命令中{1}}。

答案 1 :(得分:2)

通常,它按预期工作:

enter image description here

但是,因为你已经使用过&#34;裸体&#34;模式[Cat],它受shell的文件扩展限制:

enter image description here

在这种情况下,bash已将[Cat]解释为任意文件Cat。在上面的情况中,只有a存在,因此命令变为:

grep --color a <<<"nixCraft"

这就是为什么你只看到a为红色的原因。

要解决此问题,只需保护模式不受外壳影响:

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