Shellscript `grep` 执行不像在交互式 shell 中那样工作

Shellscript `grep` 执行不像在交互式 shell 中那样工作

必须处理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

相关内容