前几天在使用grep命令时出现了让我疑惑的现象.
我尝试通过 [:alpha:] 关键字来搜索文件中的所有英文字母.
首先我们看下原文件:
[root@server ~]# cat test
Hello
insert something
good
bye
#!/binbash
123abckkk
现在看看命令输出:
[root@server ~]# grep [[:alpha:]] test
insert something
这明显不是期望输出, 于是我尝试加了对单引号:
[root@server ~]# grep '[[:alpha:]]' test
Hello
insert something
good
bye
#!/binbash
123abckkk
这次的输出是对了, 但是是什么原因导致错误的匹配是 t 呢?
网上搜寻一番无果后, 我最后在sof提问并得到了网友的解答.
[[:alpha:]] 如果没有使用引号将其引用, 在传递给 grep 命令之前 shell 会先去解释它
而这个括号表达式由 shell 来解释是在当前目录下寻找文件名为单字母的文件
随后我查看了一下目录, 果然有一个名为 t 的文件
所以在 grep 命令使用括号表达式时, 最稳妥的处理方式是用引号将其引用.
至于单引号还是双引号, 这个得根据搜索需求来确定了, CSDN 上应该也有不少相关的文章, 大家可以自行搜索.