2011-02-24 34 views
2

我使用Perl單線程來創建一個SQL語句,但我不能包含單引號。單引號的Perl單線程

這就是我想要的:採取第一個提交併添加引號。

echo "a,b" | perl -F',' -lane 'print $F[0];' 
'a' 

我嘗試了幾種不同的方式,但它對我無效。

1.

echo "a,b" | perl -F',' -lane 'print qq('$F[0]');' 
[0] 

2.

echo "a,b" | perl -F',' -lane 'print q('$F[0]');' 
[0] 

這裏是另一個有趣。

它正在用print語句打印一個單引號,但是如果我給該變量賦值並打印它不起作用。

perl -lwe "print q(i'am);" 
i'am 

perl -lwe "$b=q(didn't); print $b" 

你能幫助我瞭解我們如何能在Perl的單行使用單引號和雙引號?

回答

15

你不能單獨使用單引號。您需要正確地逃離他們使用'\''這工作:

$ echo "a,b" | perl -F',' -lane 'print "'\''$F[0]'\''";' 
'a' 
+0

@ eugene-y是的。只需刪除其中一個,例如'echo「a,b」| perl -F','-lane'print「$ F [0]'\''」;'' – dogbane 2011-02-24 15:09:42

8

您需要了解您的shell如何處理引號。
我只想用ASCII碼值'

echo "a,b" | perl -F',' -lane 'print "$F[0]\047";' 
a' 

q//qq//運營商也可以在單行有用。

0

放置腳本在雙引號而不是單引號將允許您使用腳本中單引號,而不必逃避或使用ANSI序列來表示單引號。這可能是最有效且易讀的解決方案。

+0

如果您的單引號的數量與單引號數量相同或更多,則使用雙引號的可讀性更高您的代碼中的標量。由於在單引號內部有3個字符可以轉義''',並且只有1個字符可以在雙引號內部轉義''''。如果這是另一回事,或者如果你已經寫了太多的一行代碼來回去改變它,單引號可以更具可讀性。 – 2011-02-24 19:55:53

2

使用一個變量與八進制值:

echo "a,b" | perl -F',' -lane '$sq="\047"; print "$sq$F[0]$sq";' 

而且,你嘗試#稍加改進1將工作:

echo "a,b" | perl -F',' -lane "print qq{'\$F[0]'};" 

使用雙引號外集和逃脫美元符號以防止shell解釋它。