PHP将变量传递给awk

lxg*_*eek 2 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
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)

Mic*_*ski 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;
Run Code Online (Sandbox Code Playgroud)

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