我在尝试运行shell命令时检索正确的信息时遇到问题.当我在服务器上运行命令时,我得到了正确的输出,但是当它通过perl脚本运行时我得不到相同的结果.
$test = `pkginfo | grep TestPackage | awk '{print $2}'`;
print "$test\n";
Run Code Online (Sandbox Code Playgroud)
直接从shell运行时的输出是:
TestPackage
Run Code Online (Sandbox Code Playgroud)
虽然perl脚本的输出是:
application TestPackage Description
Run Code Online (Sandbox Code Playgroud)
为什么会有所不同?
该$2是由Perl的使插值awk只看到字符串print.尝试:
$test = qx( pkginfo | awk '/TestPackage/{print \$2}' );
print "$test";
Run Code Online (Sandbox Code Playgroud)
您还可以使用单引号作为分隔符来阻止插值qx:
$test = qx' pkginfo | awk \'/TestPackage/{print $2}\' ';
Run Code Online (Sandbox Code Playgroud)
请注意,$test除非您具有尾随换行符chop.
但是,调用awk来自perl不是非常Perl.虽然使用awk感觉更清洁,但最好做以下事情:
@test = map { m/^\S+\s+(\S+)/; $_ = $1 } grep { /TestPackage/ } qx( pkginfo );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |