在我的 Perl 程序中,我得到了一个变量,该变量具有以下内容:
echo -e \"use\nseveral\nlines\"
我想通过shell(使用exec
)运行这个命令
echo -e "use\nseveral\nlines"
eval
在将变量传递给 之前,我尝试了该变量exec
,但这解释了\n
并将它们更改为换行符。
编辑:
请注意,我得到了变量,并且无法控制它的输入方式。因此,鉴于变量是这样输入的,有没有办法“取消引用”它?
在 Perl 中,您应该使用q{}
or qq{}
(或qx{}
用于执行)来避免复杂的引号转义。
这应该对您有用(q{}
用于避免插值\n
):
my $str = q{echo -e "use\nseveral\nlines"};
现在,您可以使用以下命令执行它qx
:
qx{$str}
当你通过
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>;