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