我怎么能通过“^ |”作为可执行文件的参数?

时间:2017-10-28 14:30:44

标签: php regex command-prompt sift-tool

在PHP环境中,我试图执行sift(a grep-like program)以在两个字符串中的任何一个匹配时返回文件名。

// To return filenames having either string1 OR string2.
<?php
$cmd='sift.exe -l --blocksize=5000000 -Q string1^|string2 dir';
exec ($cmd);
?>

我猜我无法正确传递OR运算符(^|)。

为了匹配单个字符串,它可以正常工作:

// To return filenames having string1
<?php
$cmd='sift.exe -l --blocksize=5000000 -Q string1 dir';
exec ($cmd);
?>

请问任何建议?

2 个答案:

答案 0 :(得分:1)

管道符号由执行命令的shell解释。您需要转义管道符号,或引用模式参数。

以下是两种有效的解决方案:

$cmd='sift.exe -l --blocksize=5000000 -Q string1^\|string2 dir';

$cmd="sift.exe -l --blocksize=5000000 -Q 'string1^|string2' dir";

答案 1 :(得分:1)

正如Bill Karwin指出的那样,你必须逃脱命令中的一些角色。

PHP具有http://spark.apache.org/docs/latest/cluster-overview.html#components功能来处理这个问题,因此您的代码应如下所示:

i

您可以选择使用escapeshellcmd功能。

请查看此escapeshellarg,了解哪些字符需要转义。