我使用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单行中使用单引号和双引号?
答案 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序列来表示单引号。这可能是最有效且易于阅读的解决方案。