必须处理ack
不可用或不可安装的环境,此命令尝试限制仅相关文件以通过 C++ 项目查找字符串:
grep pattern --color -- /project/path/**/*.*([chCH]|cc|cxx|[ch]pp|py)
这样就可以完成工作了。现在,为了给它带来更多的商品,目标是将其放入 shell 脚本中。假设它的名字是wrapped_grep
。以下是 的内容wrapped_grep
:
#!/usr/bin/env bash
shopt -s extglob # enable advanced pattern matching
grep $1 --color -- /project/path/**/*.*([chCH]|cc|cxx|[ch]pp|py)
但尝试启动wrapped_grep pattern
不会提供任何输出,即使等效的直接 grep 查询确实按预期找到了匹配项。
此脚本中缺少什么来提供与直接 grep 调用相同的结果?
答案1
shell选项extglob
启用*([chCH]|cc|cxx|[ch]pp|py)
表达式的一部分,但该**/
部分需要globstar
选项
globstar If set, the pattern ** used in a pathname expansion con‐ text will match all files and zero or more directories and subdirectories. If the pattern is followed by a /, only directories and subdirectories match.
所以你可能需要
shopt -s extglob globstar