运行引用的shell命令

时间:2013-09-19 03:58:02

标签: perl bash readline

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

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

我想通过shell运行此命令(使用exec

echo -e "use\nseveral\nlines"

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

编辑:

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

2 个答案:

答案 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>;