【问题标题】:What is being interpolated below下面插值的是什么
【发布时间】: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


    【解决方案1】:

    $$ 是包含进程 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

    【讨论】:

    • (长评论已删除)...我们不会因为作为家庭作业而关闭家庭作业问题。仍然悬而未决的问题应该得到答案。我试图提供 OP 将来可能自己学习的链接。确保他完成自己的工作并获得他支付的教育费用不是我的责任。我试图在那个方向帮助他。剩下的就是他的工作了。
    • 对不起,我不是批评你的回答,只是想知道你是否注意到了
    • :) 没问题。虽然我没有注意到。我只是假设这是另一个可以通过知道去哪里寻找来回答的问题。
    猜你喜欢
    • 2015-10-23
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    相关资源
    最近更新 更多