2014-10-29 23 views
-3

使用單引號作爲分隔符可以保護Perl的雙引號內插的命令,它傳遞到外殼改爲:什麼被插入下面

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

什麼被插在第一個例子?或者,第二個例子中沒有插入什麼?

回答

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中有記錄。因此,在第一個示例中,您使用perl進程的進程標識調用ps。在第二個示例中,您使用shell的進程標識調用ps

+0

你注意到這是一個功課題嗎? – ysth 2014-10-29 15:59:36

+4

(已刪除長評語)...我們不做家庭作業題目。而且仍然存在的問題應該可以得到答案。我試圖提供OP將來可能自己研究的鏈接。確保他從事自己的工作並獲得他所支付的教育並不是我的責任。我試圖幫助他朝那個方向努力。剩下的就是他的工作。 – DavidO 2014-10-29 16:22:46

+0

對不起,我沒有批評你的回答,只是想知道你是否注意到 – ysth 2014-10-29 16:40:11