使用单引号作为分隔符可以保护命令不受Perl的双引号插值的影响,而是将其传递给shell:
$perl_info = qx(ps $$); # that's Perl's $$
$shell_info = qx'ps $$'; # that's the new shell's $$
第一个例子中插入了什么?或者,在第二个例子中没有插入什么?
答案 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
。