我试图从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解析执行操作符时是否遗漏了什么?
1条答案
按热度按时间kuarbcqp1#
{one,two,three}
表示法是一种bash-ism,它不能被PHP或grep扩展。当你在PHP中运行一个反引号命令时,它通过sh而不是bash来运行程序。因此,你失去了使用这种扩展的可能性。作为一种解决方案,你可以多次指定--exclude-dir
: