我正在编写一个perl脚本,我需要将perl变量传递给反引号,并且该变量应该在双引号内声明为反引号.例如:我的$ variable =`df -Ph | grep -i"$ var1"`
我想你所问的是你有一些包含shell元字符(如引号和斜杠)的东西.您希望在shell命令中使用它,但您不希望字面上对元字符进行处理.例如...
my $search = q[don't look now];
my @results = `df -Ph | grep -i $search`
Run Code Online (Sandbox Code Playgroud)
有几种方法可以解决这个问题.而不是摆弄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`
Run Code Online (Sandbox Code Playgroud)
或者你可以用\Q和做到\E.
my $search = q[don't look now];
my @results = `df -Ph | grep -i \Q$search\E`
Run Code Online (Sandbox Code Playgroud)
相反,我建议尽可能避免使用shell,它会引入不兼容性和安全漏洞.你需要df在shell中做,但在Perl中做grep.
my $search = q[don't look now];
my @results = grep /\Q$search\E/i, `df -Ph`;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1917 次 |
| 最近记录: |