【发布时间】:2014-12-25 09:48:39
【问题描述】:
使用单引号作为分隔符可以保护命令免受 Perl 的双引号内插,而是将其传递给 shell:
$perl_info = qx(ps $$); # that's Perl's $$
$shell_info = qx'ps $$'; # that's the new shell's $$
第一个示例中插入了什么?或者,第二个示例中没有插入什么?
【问题讨论】:
标签: perl interpolation
使用单引号作为分隔符可以保护命令免受 Perl 的双引号内插,而是将其传递给 shell:
$perl_info = qx(ps $$); # that's Perl's $$
$shell_info = qx'ps $$'; # that's the new shell's $$
第一个示例中插入了什么?或者,第二个示例中没有插入什么?
【问题讨论】:
标签: perl interpolation
$$ 是包含进程 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 中。因此,在第一个示例中,您使用perl 进程的进程ID 调用ps。在第二个示例中,您使用 shell 的进程 ID 调用 ps。
【讨论】: