我在尝试运行shell命令时检索正确的信息时遇到问题。当我在服务器上运行命令时,我得到了正确的输出,但是当它通过perl脚本运行时,我得不一样。
$test = `pkginfo | grep TestPackage | awk '{print $2}'`;
print "$test\n";
直接从shell运行时的输出是:
TestPackage
虽然perl脚本的输出是:
application TestPackage Description
为什么会有所不同?
答案 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 );