如何将参数从perl脚本传递给bash脚本

时间:2011-09-06 17:29:03

标签: perl grep arguments

我试图在perl中使用grep,但我必须从perl中重新使用它们与grep选项一起使用它,我这样做

#!/usr/bin/perl 
system(grep -c $ARGV[0] $ARGV[1]);

这会引发错误,如何实现?

3 个答案:

答案 0 :(得分:7)

system('grep', '-c', $ARGV[0], $ARGV[1]);

但请考虑这是否是您想要做的。 Perl可以在不调用外部程序的情况下自行完成很多事情。

答案 1 :(得分:0)

system()的参数必须是字符串(或字符串列表)。尝试:

#!/usr/bin/perl 
system("grep -c $ARGV[0] $ARGV[1]");

答案 2 :(得分:0)

您可能无法获得对该代码的期望。来自perldoc -f system

The return value is the exit status of the program as returned by 
the "wait" call.  

system实际上不会从grep向您提供计数,只是grep进程的返回值。

为了能够使用perl中的值,请使用qx()或反引号。 E.g。

my $count  = `grep -c ... `;
# or
my $count2 = qx(grep -c ...);

请注意,这会在号码后面显示换行符,例如“6 \ n” 个。

但是,为什么不使用所有perl?

my $search = shift;
my $count;
/$search/ and $count++ while (<>);
say "Count is $count";

但是,钻石操作员open执行的隐式<>在错误的手中可能是危险的。您可以使用三参数打开手动打开文件:

use autodie;
my ($search, $file) = @ARGV;
my $count;
open my $fh, '<', $file;
/$search/ and $count++ while (<$fh>);
say "Count is $count";