Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中更多地使用bash命令回显字符串?_Perl_Bash - Fatal编程技术网

如何在Perl中更多地使用bash命令回显字符串?

如何在Perl中更多地使用bash命令回显字符串?,perl,bash,Perl,Bash,这就是我所尝试的: my $s = "s" x 1000; my $r = `echo $s |more`; 但它不工作,我的程序直接退出…请尝试使用以下命令: my $s = "s" x 1000; my $r = system("echo $s |more"); 将显示所有的's',在$r中,您将得到命令的结果(在本例中为0)。在您的示例中它不起作用,因为您从未打印$r。输出捕获在变量$r中。通过使用system(),您可以看到打印到STDOUT的输出,但是您无法(可能)按预期使用输出

这就是我所尝试的:

my $s = "s" x 1000;
my $r = `echo $s |more`;
但它不工作,我的程序直接退出…

请尝试使用以下命令:

my $s = "s" x 1000;
my $r = system("echo $s |more");

将显示所有的's',在
$r
中,您将得到命令的结果(在本例中为0)。

在您的示例中它不起作用,因为您从未打印
$r
。输出捕获在变量
$r
中。通过使用
system()
,您可以看到打印到STDOUT的输出,但是您无法(可能)按预期使用输出

只要做:

print $r;
更新:我把
say
改为
print
,因为“echo”已经给你换行了

如注释中所述,要转义shell元字符,可以使用


您还应该注意,
| more
在将shell的输出捕获到变量中时没有效果。这个过程很简单:
echo | more |$r
,你也可以跳过
more

如果
$s
包含特殊字符怎么办?是否有一个函数可以执行类似于shell的转义?quotemeta是一个错误的工具,因为它用于引用regexp特殊字符,而不是shell特殊字符。传递到bash时如何转义字符串?可以使用。如果你知道要寻找什么,你也可以自己逃离角色。