我怎样才能通过“^|”作为可执行文件的参数?
How may I pass "^|" as an argument for an executable?
在 PHP 环境中,如果两个字符串中的任何一个匹配,我正在尝试对 return 文件名执行筛选 (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);
?>
有什么建议吗?
管道符号由执行您的命令的 shell 解释。您要么需要转义管道符号,要么引用模式参数。
这里有两个有效的解决方案:
$cmd='sift.exe -l --blocksize=5000000 -Q string1^\|string2 dir';
$cmd="sift.exe -l --blocksize=5000000 -Q 'string1^|string2' dir";
正如 Bill Karwin 所指出的,您必须在命令中转义某些字符。
PHP 有 escapeshellcmd 函数来处理这个问题,所以你的代码应该如下所示:
$cmd = 'sift.exe -l --blocksize=5000000 -Q string1^|string2 dir';
$escapedCommand = escapeshellcmd($cmd);
exec ($escapedCommand);
您可以选择使用 escapeshellarg 函数。
看这个question看看哪些字符需要转义。
在 PHP 环境中,如果两个字符串中的任何一个匹配,我正在尝试对 return 文件名执行筛选 (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);
?>
有什么建议吗?
管道符号由执行您的命令的 shell 解释。您要么需要转义管道符号,要么引用模式参数。
这里有两个有效的解决方案:
$cmd='sift.exe -l --blocksize=5000000 -Q string1^\|string2 dir';
$cmd="sift.exe -l --blocksize=5000000 -Q 'string1^|string2' dir";
正如 Bill Karwin 所指出的,您必须在命令中转义某些字符。
PHP 有 escapeshellcmd 函数来处理这个问题,所以你的代码应该如下所示:
$cmd = 'sift.exe -l --blocksize=5000000 -Q string1^|string2 dir';
$escapedCommand = escapeshellcmd($cmd);
exec ($escapedCommand);
您可以选择使用 escapeshellarg 函数。
看这个question看看哪些字符需要转义。