BashShellscript
Shellscriptgrep
執行不像在互動式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 呼叫相同的結果?
extglob
shell 選項啟用*([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