0

シェルコマンドを実行しようとすると、正しい情報を取得する際に問題が発生します。サーバーでコマンドを実行すると正しい出力が得られますが、perlスクリプトを実行すると同じ出力が得られません。

$test = `pkginfo | grep TestPackage | awk '{print $2}'`;
print "$test\n";

シェルから直接実行した場合の出力は次のとおりです。

TestPackage

perlスクリプトからの出力は次のとおりです。

application TestPackage       Description

なぜこれが違うのでしょうか?

4

1 に答える 1

5

$2perl によって補間されているためawk、文字列のみが表示されますprint。試す:

$test = qx( pkginfo | awk '/TestPackage/{print \$2}' );
print "$test";

への区切り文字として一重引用符を使用して、補間を防ぐこともできますqx

$test = qx' pkginfo | awk \'/TestPackage/{print $2}\' ';

$test改行しない限り、末尾に改行があることに注意してくださいchop

しかし、awkfromの呼び出しperlはあまり危険ではありません。を使用awkするとかなりクリーンに感じますが、次のようなことを行う方がよい場合があります。

@test = map { m/^\S+\s+(\S+)/; $_ = $1 } grep { /TestPackage/ } qx( pkginfo );
于 2013-03-15T16:16:32.530 に答える