下面插入的是什么

时间:2014-10-29 15:39:10

标签: perl interpolation

使用单引号作为分隔符可以保护命令不受Perl的双引号插值的影响,而是将其传递给shell:

$perl_info = qx(ps $$); # that's Perl's $$
$shell_info = qx'ps $$'; # that's the new shell's $$

第一个例子中插入了什么?或者,在第二个例子中没有插入什么?

1 个答案:

答案 0 :(得分:4)

$$是包含进程ID的Perl特殊变量。这在perlvar

中有记录

例如:

perl -e 'print "$$\n"';

正如您在此处看到的,双引号语义有效,因此$$被插入到也包含\n的字符串中。打印时,它将打印您的perl进程ID。

在第一个示例中,如果您的perl进程为4683,则您将向shell发送以下内容:ps 4683

在第二个示例中,文字ps $$正被发送到shell。在bash中,$$扩展为shell的进程ID。这在The Bash Reference Manual, Special Parameters中有记录。因此,在第一个示例中,您使用ps进程的进程ID重新调用perl。在第二个示例中,您使用shell的进程ID调用ps