grep --include = *。{cpp,cc,cxx}如果括号中只有一个条目,则不起作用

时间:2017-05-16 21:17:49

标签: bash grep gnu

我使用grep -F -e "function1" --include=*.{cpp,c} . -r -n查找function1的使用情况,但后来意识到我可以加快速度,因此我从c移除了--include,但之后它无法正常工作

为什么?

这不起作用 - > grep -F -e "function1" --include=*.{cpp} . -r -n

它会跑,但不会返回任何东西。如果我添加第二个项目,即--include=*.{cpp,dsafjlsadfsaldf},那么它可以正常工作。

2 个答案:

答案 0 :(得分:2)

您依赖shell的“大括号扩展”功能。引用Bash手册,

  

正确形成的大括号扩展必须包含不带引号的开括号和右大括号, 和至少一个未加引号的逗号 或有效的序列表达式

没有任何逗号,该文本不符合大括号扩展的条件。

答案 1 :(得分:1)

观察:

$ echo {a,b}
a b
$ echo {a}
{a}

换句话说,只有在大括号内还有两个元素时,大括号扩展才有效。如果您只有一个元素,请不要使用大括号。

同样,但要解决您正在使用的特定选项:

$ echo  --include=*.{cpp,c} 
--include=*.cpp --include=*.c
$ echo  --include=*.{cpp} 
--include=*.{cpp}

要让后者正常工作,请删除大括号:

$ echo  --include=*.cpp
--include=*.cpp