2

我正在尝试创建 bash 脚本来检查我的源代码以标记绝对 url,因为我们所有的开发人员在涉及内部链接时都应该使用相对 url。

我正在考虑创建一个 bash 脚本,然后可以将其作为我们预提交挂钩的一部分包含在内,因此使用 git grep 似乎也合乎逻辑。我一切正常,但是,我在使用 git grep 的正则表达式时遇到了一些困难。

这是我到目前为止所拥有的:

`# Set's the regex test & files
 readonly FORBIDDEN_RE="\((\|'\|\"\)\(http\|https\):\/\/\(www\.\)\?example\.com"
 readonly FORBIDDEN_FILES="'*.md' '*.html' ':!README.md'"

 # Adds double quotes around regex since without them git grep doesn't work, 
 # However, even trying to put the re_test variable in place of FORBIDDEN_RE
 # is not working in the actual git grep.
 # re_test="\"""$FORBIDDEN_RE""\""

if [ "$(git grep -n --cached -i -e "$FORBIDDEN_RE" -- "$FORBIDDEN_FILES")" != 0 ]; then
  git grep -n --cached -i -e "$FORBIDDEN_RE" -- "$FORBIDDEN_FILES"
  echo "ERROR: You're trying to make a commit that contains a hardcoded internal URL. Please make it relative."
  exit 1
fi`

这是我正在做的测试,如果我希望它们被正则表达式标记:

http://www.example.com- 未标记

(http://www.example.com- 标记(我们使用降价,所以这将是降价文件中的链接)

"http://www.example.com- 已标记(因为双引号表示这可能在 href 值中)

'http://www.example.com- 标记(因为这也可能表示 URL 在 href 值中)

http://example.com- 未标记

(http://example.com- 标记

"http://example.com- 标记

'http://example.com- 标记

(http://example.com?param=abc- 标记

"http://example.com?param=abc- 标记

'http://example.com?param=abc- 标记

(http://subdomain.example.com- 未标记

仅使用命令行 对我最有效的是:git grep -n --cached -i -e "\((\|'\|\"\)\(http\|https\):\/\/\(www\.\)\?example\.com" -- '*.html' '*.md' ':!README.md'

但是,由于我必须做的所有字符转义并在 bash 文件中执行此操作时尝试在正则表达式周围获取引号,我似乎无法在 bash 文件中使其工作。

我回显出什么$FORBIDDEN_RE是值,它似乎正在删除\"第一个捕获组中正在寻找“(”、单引号或双引号的值。这是$FORBIDDEN_RE我回显时的值: git grep -n --cached -i -e "\((\|'\|"\)\(http\|https\):\/\/\(www\.\)\?example\.com" -- '*.md' '*.html' ':!README.md'

有什么想法我做错了什么,或者如何使正则表达式更容易与 git grep 一起使用?

4

0 回答 0