我已阅读此tweet,但无法弄清楚此声明的含义:
grep --color [Cat] <<<"nixCraft"
执行此语句后,输出:
[root@localhost command]# grep --color [Cat] <<<"nixCraft"
nixCraft
只有字母a
为红色。
我已经提到了bash manual,但无法理解为什么只有a
被着色。谁能解释这个说法?非常感谢提前!
答案 0 :(得分:2)
[Cat]
表示文件名扩展 - 它将匹配名称为C
,a
或t
的任何文件。在您的情况下,您似乎有一个名为a
的文件,因此您的命令会扩展为:
grep --color a <<<"nixCraft"
请注意,如果没有文件名与该模式匹配,则文件名扩展将失败,并且行为将取决于Bash设置。在这种情况下,默认行为是将其作为参数传递给命令,这样您的命令实际上就是
grep --color '[Cat]' <<<"nixCraft"
这三个字母都是彩色的。如果这实际上是您想要的行为 - 如果您希望所有这三个字母都匹配 - 那么您应该使用'[Cat]'
(带引号)而不是{在你的Bash命令中{1}}。
答案 1 :(得分:2)
通常,它按预期工作:
但是,因为你已经使用过&#34;裸体&#34;模式[Cat]
,它受shell的文件扩展限制:
在这种情况下,bash
已将[Cat]
解释为任意文件C
,a
或t
。在上面的情况中,只有a
存在,因此命令变为:
grep --color a <<<"nixCraft"
这就是为什么你只看到a
为红色的原因。
要解决此问题,只需保护模式不受外壳影响:
grep --color '[Cat]' <<<"nixCraft"