带单引号的 Perl 单行代码

发布于 2024-10-19 04:51:50 字数 749 浏览 9 评论 0原文

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

I use a Perl one-liner to create an SQL statement, but I am not able to include single quotes.

This is what I want: Take the first field and add quotes to it.

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

I tried a few different ways, but it didn't work for me.

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

Here is another interesting issue.

It is printing a single quote with the print statement, but if I assign a value to the variable and print, it's not working.

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

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

How can we use single and double quotes in Perl one-liners?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

迷荒 2024-10-26 04:51:50

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

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

You can't use single quotes alone. You need to escape them correctly using '\'' This works:

$ echo "a,b" | perl -F',' -lane 'print "'\''$F[0]'\''";'
'a'
梨涡少年 2024-10-26 04:51:50

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

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

q//qq// 运算符在单行代码中也很有用。

You need to learn how your shell treats quotes.
I would just use the ASCII value for ':

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

q// and qq// operators can also be useful in one-liners.

音盲 2024-10-26 04:51:50

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

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 解释它。

Use a variable with the octal value:

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

Also, a slight modification of your attempt #1 would work:

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

That uses double quotes for the outer set and escapes the dollar sign to prevent the shell from interpreting it.

情归归情 2024-10-26 04:51:50

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

Placing the script in double quotes rather than single quotes will allow you to use single quotes inside the script without having to escape or use ANSI sequences to represent the single quote. This is likely the most effective and easily-readable solution.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文