9

我使用 Perl 单行语句创建 SQL 语句,但不能包含单引号。

这就是我想要的:获取第一个字段并为其添加引号。

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 单行语句中使用单引号和双引号?

4

4 回答 4

21

您不能单独使用单引号。您需要使用以下方法正确转义它们'\''

$ echo "a,b" | perl -F',' -lane 'print "'\''$F[0]'\''";'
'a'
于 2011-02-24T14:52:43.157 回答
13

您需要了解您的 shell 如何处理引号。
我只会将 ASCII 值用于'

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

q//qq//运算符也可用于单行。

于 2011-02-24T14:47:50.280 回答
3

使用具有八进制值的变量:

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

此外,对您的尝试 #1 稍作修改即可:

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

这对外部集使用双引号并转义美元符号以防止外壳解释它。

于 2011-02-24T23:41:37.063 回答
1

将脚本放在双引号而不是单引号中将允许您在脚本中使用单引号,而无需转义或使用 ANSI 序列来表示单引号。这可能是最有效且易于阅读的解决方案。

于 2011-02-24T16:24:39.300 回答