Bash

Shellscriptgrep執行不像在互動式shell中那樣工作

  • December 13, 2018

必須處理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 呼叫相同的結果?

extglobshell 選項啟用*([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

引用自:https://unix.stackexchange.com/questions/487728