2014-07-26 39 views
1

我試圖使用以下一行來打印我的apache2訪問日誌日期。在單引號內顯示​​值,但在雙引號內顯示​​爲Array對象。我的命令如下Perl在引號內自動引導

sudo perl -ane 'print $F[3] . "\n" ' /var/log/apache2/access.log | head -n 10 

輸出

[21/Jul/2014:09:16:05 
[21/Jul/2014:09:16:05 
[21/Jul/2014:11:32:55 
[21/Jul/2014:11:32:55 
[21/Jul/2014:11:32:59 
[21/Jul/2014:11:33:02 
[21/Jul/2014:11:33:02 
[21/Jul/2014:11:33:10 
[21/Jul/2014:11:33:14 
[21/Jul/2014:11:33:14 

sudo perl -ane "print $F[3] . \"\n\" " /var/log/apache2/access.log | head -n 10 

輸出

ARRAY(0x195fca8) 
ARRAY(0x1960128) 
ARRAY(0x195fca8) 
ARRAY(0x195fd38) 
ARRAY(0x1960128) 
ARRAY(0x195fca8) 
ARRAY(0x195fd38) 
ARRAY(0x1960128) 
ARRAY(0x195fca8) 
ARRAY(0x195fd38) 

當我嘗試陣列解引用它示出了一個。

sudo perl -ane "print @{$F[3]} . \"\n\" " /var/log/apache2/access.log | head -n 10 

輸出

1 
1 
1 
1 
1 
1 
1 
1 
1 
1 

我使用的ubuntu 12.04 64位與guake終端。

回答

5

當您使用雙引號$獲取插值Bash而不是Perl。這就是爲什麼會發生這種情況。

例子:

a='foo bar'; perl -le "print \"$a\"" 
foo bar 
+0

爲什麼是\」?需要ü可以解釋我更PLZ @Tiago – xtreak

+0

'\ 「'需要因爲Perl需要'」'但bash將不會傳遞到perl這'a ='foo bar'; perl -le「print q($ a)」' – Tiago

+0

謝謝@Tiago – xtreak