据我所知,在使用带有 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
在该位置可能出现零次或多次)。
你仍然应该总是但请引用你的正则表达式!