#!/usr/bin/perl
$command="lscpu | grep -i Architecture";
#$arch = system($command);
@SplitArch = split(/:/, system($command));
print @SplitArch[1];
我得到的结果是:
Architecture: x86_64
我希望唯一可以显示的是:
x86_64
答案 0 :(得分:4)
这不符合你的想法。 The system
function运行命令并返回其退出状态;所以在你的情况下,这个:
system($command)
打印Architecture: x86_64
,所以:
@SplitArch = split(/:/, system($command));
打印Architecture: x86_64
并将@SplitArch
设置为(0)
。
print @SplitArch[1]
不打印,因为@SplitArch
只有一个元素。 (顺便说一下,你可能想写$SplitArch[1]
而不是@SplitArch[1]
,但这既不在这里也不在那里。)
由于您显然打算捕获$command
的输出,请改为使用`...`
or qx/.../
:
@SplitArch = split(/:/, `$command`);
答案 1 :(得分:1)
如果要获取命令的输出,则应使用qx{}
运算符:
my @SplitArch = split /:/ qx{$command};
要在数组索引#1处打印值,您应该像预期的标量值一样使用$
Sigil:
print $SplitArch[1], "\n";
答案 2 :(得分:0)
我认为System的返回值是命令的退出值,而不是输出。
您应该这样做:
$output = `$command`;
@SplitArch = split(/:/, $output);
希望这有帮助。
答案 3 :(得分:0)
已经给出了解释 - system
没有返回您的想法 - 我只是提供替代解决方案。
open(my $LSCPU, '-|', 'lscpu') or die $!;
while (<$LSCPU>) {
chomp;
my ($key, $val) = split(/:\s*/, $_, 2);
if ($key eq 'Architecture') {
print "$val\n";
last;
}
}
close($LSCPU);
优点: