2

私は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") ;
4

1 に答える 1

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()通常はコマンド全体をエスケープするために使用され、少なくとも内部引用符やその他の不正な文字をエスケープできます$dn.

于 2012-08-21T13:19:54.860 に答える