2011-02-24 73 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解释它。