命令输出和perl输出不同

问题描述:

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

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

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

TestPackage 

虽然从Perl脚本输出:

application TestPackage  Description 

为什么会变成这样有什么不同?

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

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

您还可以防止插补用单引号作为分隔符来qx

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

注意$test将有一个换行符,除非你chop它。

但是,从perl调用awk不是很普通。虽然使用awk感觉会更加清晰,它可能是更好的做一些事情,如:

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

我改变了命令\ $ 2和现在的一切工作。谢谢! – chopper 2013-03-15 16:26:26