PHP将变量传递给awk

时间:2012-08-21 13:16:57

标签: php awk

我是一个使用PHP的新人。我想在PHP中使用awk。 我有一个名为a的文件。内容是:

www.b.com * record=600,IN,A,1.2.3.4record=600,IN,A,5.6.7.8
www.1.com u record=600,IN,A,1.2.3.4
www.1.com w record=600,IN,A,1.2.3.4

现在我使用PHP来处理它。

<?php


        $dn = "www.1.com";

        $hello = shell_exec("awk '{ if ( $1==".$dn.")print $1}' a") ;
        echo $hello;
?>

它不起作用 - 你能告诉我为什么吗? 如果我以其他方式使用它,它确实有用。

$hello = shell_exec("awk '{ if ( $1==\"www.b.com\")print $1}' a") ;

1 个答案:

答案 0 :(得分:6)

awk$dn视为字符串文字,因此您需要引用awk中的字符串,这是您在测试示例中所做的:

$dn = "www.1.com";

$hello = shell_exec("awk '{ if ( $1==\"".$dn."\")print $1}' a") ;
// ---------------------------------^^^-------^^^
// Surround in escaped double quotes...
echo $hello;

如果字符串$dn来自任何类型的用户或浏览器输入,请务必先使用escapeshellarg()escapeshellcmd()正确转义它。由于escapeshellarg()添加了单引号,这可能在这里没有用,但通常用于转义整个命令的escapeshellcmd()至少可以转义任何内部引号或其他可能出现的错误字符{ {1}}。