如何在双引号内将perl变量传递给反引号

时间:2015-08-07 03:12:10

标签: perl

我正在编写一个perl脚本,我需要将perl变量传递给反引号,并且该变量应该在双引号内声明为反引号。 ex:my $ variable =`df -Ph | grep -i" $ var1"`

1 个答案:

答案 0 :(得分:5)

认为你要问的是你有一些包含shell元字符(如引号和斜杠)的东西。您希望在shell命令中使用它,但您不希望字面上处理元字符。例如......

my $search = q[don't look now];
my @results = `df -Ph | grep -i $search`

有几种方法可以解决这个问题。而不是摆弄shell引用,最简单的是逃避所有的元字符。 Perl有quotemeta来做这件事。

my $search = q[don't look now];
my $q_search = quotemeta($search);  # don\'t\ look\ now
my @results = `df -Ph | grep -i $q_search`

或者您可以使用\Q\E

来完成此操作
my $search = q[don't look now];
my @results = `df -Ph | grep -i \Q$search\E`

相反,我建议尽可能避免使用shell,它会引入不兼容性和安全漏洞。你需要在shell中执行df,但是在Perl中执行grep。

my $search = q[don't look now];
my @results = grep /\Q$search\E/i, `df -Ph`;