命令输出和perl输出不同

时间:2013-03-15 16:12:19

标签: perl shell

我在尝试运行shell命令时检索正确的信息时遇到问题。当我在服务器上运行命令时,我得到了正确的输出,但是当它通过perl脚本运行时,我得不一样。

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

直接从shell运行时的输出是:

TestPackage

虽然perl脚本的输出是:

application TestPackage       Description

为什么会有所不同?

1 个答案:

答案 0 :(得分:5)

perl正在插入$2,以便awk只能看到字符串print。尝试:

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

您还可以使用单引号作为qx的分隔符来阻止插值:

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

请注意$test除非chop,否则会有一个尾随换行符。

但是,从awk调用perl并不是很有意义。虽然使用awk感觉更清洁,但最好做一些事情:

@test = map { m/^\S+\s+(\S+)/; $_ = $1 } grep { /TestPackage/ } qx( pkginfo );