如何在命令行转义','签名?



当我在perl脚本中执行时(源代码):

`perl -d:DebugHooks::DbInteract='s;e [@DB::stack,@DB::goto_frames]' -e '1'`

该模块有两个参数:

s;e [@DB::goto_frames
@DB::stack];

但我只想得到一个:

s;e [@DB::goto_frames,@DB::stack];

如何逃离","标志?

必须是您的模块在逗号上进行拆分,而不是perl或shellbash下运行以下操作,我在@ARGV中只得到一个参数:

$ perl -w -E 'say join "n", ("---", @ARGV, "---")' 's;e [@DB::stack,@DB::goto_frames]'
---
s;e [@DB::stack,@DB::goto_frames]
---

编辑:

我被纠正了。它被perl用逗号分隔,大概是为了允许向一个模块传递多个参数,正如我在./Devel/DbInteract.pm创建的一个模块所证明的那样,该模块包含:

package Devel::DbInteract;
use strict;
use warnings;
use 5.010;
sub import {
  say 'Received ' . scalar @_ . ' params:';
  say join "n", @_;
} 
1;

并运行命令:

$ PERL5LIB=. perl -d:DbInteract='s;e [@DB::stack,@DB::goto_frames]' -e ''
Received 3 params:
Devel::DbInteract
s;e [@DB::stack
@DB::goto_frames]

根据询问者答案中链接的来源判断,似乎没有任何转义值的规定或任何其他方式来防止这种分裂。那么,您的选择是通过join将参数重新组合在一起来解决它,或者向perl源提交一个补丁来添加转义余量。

Perl不关心转义:https://github.com/Perl/perl5/blob/blead/perl.c#L3240-L3264

-d标志只是将next作为零行号添加到脚本中:

use Devel::DbInteract split(/,/,q{s;e [@DB::stack,@DB::goto_frames]});

有些人建议我使用比修补perl更简单的方法。在我的情况下只使用=>

`perl -d:DebugHooks::DbInteract='s;e [@DB::stack => @DB::goto_frames]' -e '1'`

最新更新