0

在我的 Perl 程序中,我得到了一个变量,该变量具有以下内容:

echo -e \"use\nseveral\nlines\"

我想通过shell(使用exec)运行这个命令

echo -e "use\nseveral\nlines"

eval在将变量传递给 之前,我尝试了该变量exec,但这解释了\n并将它们更改为换行符。

编辑:

请注意,我得到了变量,并且无法控制它的输入方式。因此,鉴于变量是这样输入的,有没有办法“取消引用”它?

4

2 回答 2

1

在 Perl 中,您应该使用q{}or qq{}(或qx{}用于执行)来避免复杂的引号转义。

这应该对您有用(q{}用于避免插值\n):

my $str = q{echo -e "use\nseveral\nlines"};

现在,您可以使用以下命令执行它qx

qx{$str}
于 2013-09-19T04:09:30.663 回答
0

当你通过

echo -e \"use\nseveral\nlines\"

到 shell,它将以下三个参数传递给exec系统调用:

echo
-e
use\nseveral\nlines

如何创建最后一个字符串?这里有几种方法:

"use\\nseveral\\nlines"  # Escape \W chars in double-quoted strings.
'use\\nseveral\\nlines'  # Escape \ and delimiters in single-quoted strings
'use\nseveral\nlines'    #    ...although it's optional if unambiguous.

因此,相应的 Perl 命令将是

exec('echo', '-e', 'use\nseveral\nlines');

system('echo', '-e', 'use\nseveral\nlines');

open(my $fh, '-|', 'echo', '-e', 'use\nseveral\nlines');
my @output = <$fh>;
于 2013-09-19T12:57:57.287 回答