#!/usr/bin/perl
$command="lscpu | grep -i Architecture";
#$arch = system($command);
@SplitArch = split(/:/, system($command));
print @SplitArch[1];
我得到的结果是:
Architecture: x86_64
我希望唯一会显示的是:
x86_64
#!/usr/bin/perl
$command="lscpu | grep -i Architecture";
#$arch = system($command);
@SplitArch = split(/:/, system($command));
print @SplitArch[1];
我得到的结果是:
Architecture: x86_64
我希望唯一会显示的是:
x86_64
这并不像你认为的那样。该system
函数运行命令并返回其退出状态;所以在你的情况下,这个:
system($command)
打印Architecture: x86_64
,所以这个:
@SplitArch = split(/:/, system($command));
打印Architecture: x86_64
并设置@SplitArch
为(0)
.
print @SplitArch[1]
然后什么也不打印,因为@SplitArch
只有一个元素。(顺便说一句,您可能打算写$SplitArch[1]
而不是@SplitArch[1]
,但这既不是这里也不是那里。)
由于您显然打算捕获 的输出$command
,请使用`...`
或qx/.../
代替:
@SplitArch = split(/:/, `$command`);
如果要获取命令的输出,则应使用qx{}
运算符:
my @SplitArch = split /:/ qx{$command};
并且要打印数组索引 #1 处的值,您应该使用$
Sigil,因为您期望一个标量值:
print $SplitArch[1], "\n";
我相信 System 的返回值是命令的退出值,而不是输出。
你也许应该这样做:
$output = `$command`;
@SplitArch = split(/:/, $output);
希望这可以帮助。
已经给出的解释—— 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);
优点: