Perl单行单引号

时间:2011-02-24 14:40:48

标签: perl shell quoting

我使用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 个答案:

答案 0 :(得分:17)

您不能单独使用单引号。您需要使用'\''正确地转义它们。这有效:

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

答案 1 :(得分:10)

您需要了解外壳如何处理报价 我只想使用'的ASCII值:

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

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

答案 2 :(得分: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解释它。

答案 3 :(得分:0)

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