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