我是一个使用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
Run Code Online (Sandbox Code Playgroud)
现在我使用PHP来处理它.
<?php
        $dn = "www.1.com";
        $hello = shell_exec("awk '{ if ( $1==".$dn.")print $1}' a") ;
        echo $hello;
?>
Run Code Online (Sandbox Code Playgroud)
它不起作用 - 你能告诉我为什么吗?如果我以其他方式使用它,它确实有用.
$hello = shell_exec("awk '{ if ( $1==\"www.b.com\")print $1}' a") ;
Run Code Online (Sandbox Code Playgroud)
    awk看作$dn是一个字符串文字,所以你需要引用里面的字符串awk,这是你在测试例中所做的:
$dn = "www.1.com";
$hello = shell_exec("awk '{ if ( $1==\"".$dn."\")print $1}' a") ;
// ---------------------------------^^^-------^^^
// Surround in escaped double quotes...
echo $hello;
Run Code Online (Sandbox Code Playgroud)
如果字符串$dn来自任何类型的用户或浏览器输入,请务必使用escapeshellarg()或escapeshellcmd()首先正确地将其转义.由于escapeshellarg()添加单引号,这可能在这里没有用,但escapeshellcmd()通常用于转义整个命令,至少可以转义任何内部引号或其他可能出现的错误字符$dn.