最近,我发现使用带/不带引号的grep会返回不同的结果。
grep [a-z] test
返回
插入内容
同时
grep '[a-z]' test
返回
你好
插入内容
再见
#!/ binbash
所以让我感到困惑的是,这两种用法之间有什么区别?
要引用的图案必须?
如果没有引用,shell首先解释[a-z]
,然后再将其传递给grep
。
[a-z]
被扩展为在工作目录中找到的所有filenames,它们由a和z之间的一个字母组成。
我敢打赌,如果您执行ls
,您会找到一个名称为t
的文件(在当前目录中),或仅在“插入内容”中出现的其他字母在其他字符串(文本行)中。如果在您的工作目录中有多个文件,但是恰好一个文件具有一个字母名称,如t
,则您的第一个命令将扩展为grep t test
。
所以-是的,您必须引用您的正则表达式,因此它将按原样传递给grep
,并且不由外壳程序处理。