如何理解"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]
表示文件名扩展 — 它将匹配名称为 C
、a
或 t
的任何文件。在您的情况下,您似乎有一个名为 a
的文件,因此您的命令扩展为:
grep --color a <<<"nixCraft"
请注意,如果没有文件名与该模式匹配,则文件名扩展将失败,并且行为将取决于 Bash 设置。在这种情况下,默认行为是将其作为参数传递给命令,这样您的命令将有效地
grep --color '[Cat]' <<<"nixCraft"
所有这三个字母都会被着色。如果这实际上是您想要的行为——如果您想要匹配所有这三个字母——那么您应该使用'[Cat]'
(带引号)而不是 Bash 命令中的 [Cat]
。
正常情况下,它按预期工作:
但是,由于您使用了 "naked" 模式 [Cat]
,因此 shell:
会对其进行文件名扩展
在这种情况下,bash
已将 [Cat]
解释为文件 C
、a
或 t
中的任何一个。在上面的例子中,只有 a
存在,所以命令变成了:
grep --color a <<<"nixCraft"
这就是为什么您只看到红色的 a
。
要解决此问题,只需保护模式免受 shell:
grep --color '[Cat]' <<<"nixCraft"
我读过这个 tweet,但无法弄清楚这个语句的含义:
grep --color [Cat] <<<"nixCraft"
执行这条语句后,输出:
[root@localhost command]# grep --color [Cat] <<<"nixCraft"
nixCraft
只有字母a
是红色的。
我提到了 bash manual,但不明白为什么只有 a
是彩色的。谁能解释一下这个说法?非常感谢!
[Cat]
表示文件名扩展 — 它将匹配名称为 C
、a
或 t
的任何文件。在您的情况下,您似乎有一个名为 a
的文件,因此您的命令扩展为:
grep --color a <<<"nixCraft"
请注意,如果没有文件名与该模式匹配,则文件名扩展将失败,并且行为将取决于 Bash 设置。在这种情况下,默认行为是将其作为参数传递给命令,这样您的命令将有效地
grep --color '[Cat]' <<<"nixCraft"
所有这三个字母都会被着色。如果这实际上是您想要的行为——如果您想要匹配所有这三个字母——那么您应该使用'[Cat]'
(带引号)而不是 Bash 命令中的 [Cat]
。
正常情况下,它按预期工作:
但是,由于您使用了 "naked" 模式 [Cat]
,因此 shell:
在这种情况下,bash
已将 [Cat]
解释为文件 C
、a
或 t
中的任何一个。在上面的例子中,只有 a
存在,所以命令变成了:
grep --color a <<<"nixCraft"
这就是为什么您只看到红色的 a
。
要解决此问题,只需保护模式免受 shell:
grep --color '[Cat]' <<<"nixCraft"