使用管道时无法理解带有正则表达式的 grep 的输出

使用管道时无法理解带有正则表达式的 grep 的输出

据我所知,在使用带有 grep 的正则表达式时应该使用单引号,否则 shell 会将其解释为 glob(通配符)字符并执行文件名扩展,但在下面的例子中,即使搜索字符串不在引号中,shell 也会将其视为正则表达式。

sh-4.3$ ls                                                                                                                                                                      
main.sh  test1  test2  test3.sh  test34  test3a                                                                                                                                 
sh-4.3$ ls | grep test3y*                                                                                                                                                       
test3.sh                                                                                                                                                                        
test34                                                                                                                                                                          
test3a                                                                                                                                                                          
sh-4.3$ 

我不明白为什么会发生这种情况。

答案1

这是有效的,因为您的表达式test3y*与目录中的任何文件名都不匹配,所以它不会扩展为任何内容,而是传递给grep字面意思使正则表达式有效(y*=y在该位置可能出现零次或多次)。

你仍然应该总是但请引用你的正则表达式!

相关内容