使用--exclude-dir选项从PHP执行grep时出现问题

6ie5vjzr  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(125)

我试图从PHP应用程序运行grep搜索,但其中一个选项出现问题。grep命令如下所示:

grep -rn --exclude-dir={img,node_modules,vendor} -E "14847"

这个命令返回了预期的结果。但是,如果我以交互方式打开PHP并运行以下行:

print `grep -rn --exclude-dir={img,node_modules,vendor} -E "14847"`;

我得到的结果是在node_modules目录中找到的。有趣的是,如果我去掉花括号和逗号,只排除node_modules,那么它将工作并排除这些结果。我还可以为每个要排除的目录单独列出--exclude-dir选项(但让我们暂时忽略这一点)。因此,它似乎与处理花括号或逗号有关。我曾尝试用反斜杠转义这两个字符,但不幸的是没有成功。PHP解析执行操作符时是否遗漏了什么?

kuarbcqp

kuarbcqp1#

{one,two,three}表示法是一种bash-ism,它不能被PHP或grep扩展。当你在PHP中运行一个反引号命令时,它通过sh而不是bash来运行程序。因此,你失去了使用这种扩展的可能性。作为一种解决方案,你可以多次指定--exclude-dir

print `grep -rn --exclude-dir=img --exlude-dir=node_module --exclude-dir=vendor -E "14847"`;

相关问题