命令输出和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);
我改变了命令\ $ 2和现在的一切工作。谢谢! – chopper 2013-03-15 16:26:26