perl中的单引号和双引号

perl中的单引号和双引号,perl,postgresql,quotes,double-quotes,Perl,Postgresql,Quotes,Double Quotes,我是perl的新手,我正在尝试从perl脚本执行操作系统命令 使用执行操作系统命令,命令如下 $cmd = "mycommand --add \"condition LIKE '%TEXT%' \""; 此命令用于将“add”之后包含的字符串插入数据库 问题是它在数据库中插入记录时,在%TEXT%周围没有单引号,如下所示: condition LIKE %TEXT% 如果在命令提示符下执行该命令,它将正确插入字符串 我应该如何格式化双引号和单引号,以便将其正确插入数据库 感谢您的帮助通过将命

我是perl的新手,我正在尝试从perl脚本执行操作系统命令

使用执行操作系统命令,命令如下

$cmd = "mycommand --add \"condition LIKE '%TEXT%' \"";
此命令用于将“add”之后包含的字符串插入数据库

问题是它在数据库中插入记录时,在
%TEXT%
周围没有单引号,如下所示:

condition LIKE %TEXT%
如果在命令提示符下执行该命令,它将正确插入字符串

我应该如何格式化双引号和单引号,以便将其正确插入数据库


感谢您的帮助

通过将命令放在单个字符串中,您正在使其通过系统外壳。(你没有提到它是cmd.exe还是bash或其他有趣的东西。)

建议:

  • 将系统命令创建为字符串数组将避免shell重新插入命令行。
    @cmd=('mycommand','--add',q(类似于'%TEXT%'的条件)

  • 在shell中添加额外的反斜杠以保护单引号。将
    echo
    预先添加到命令中有助于调试

  • (我个人最喜欢的)不要为你的数据库访问掏钱

  • qq
    用于双引号,
    q
    用于单引号


    通过这种方式,它接受整个命令

    顺便说一句,如果我在提示符中执行该命令,它将正确插入字符串,您可以通过打印
    $cmd
    $cmd=“mycommand--add\”条件(如“%TEXT%”)来判断
    $cmd
    中存储字符串
    mycommand--add“类似“%TEXT%”的条件”
    ,这将在unix系统上向命令传递args
    --add
    类似“%TEXT%”的条件。这就是您要传递的吗?您键入的命令行是什么样子的?正常工作的命令行是这样的:#mycommand--添加“类似于“%TEXT%”的条件”我猜源字符串中的
    \\'
    会被perl视为
    \'
    并传递给shell,shell会将其插入
    '
    作为参数传递给程序。
    IPC::Open3
    不像
    system()
    qx()
    ,没有shell解析。1和3是非常好的答案。@jordanm:查看IPC::Open3(v1.12)的第273行。在第4个及以后的参数上调用exec()。(1..3在第201行被移出。)exec()的文档确实表明,一个带有shell字符的字符串会在shell中产生一次旅行。我喜欢这样想:
    “…”
    qq“…”
    的缩写,
    q'.
    的缩写。
    $cmd = q{mycommand --add "condition LIKE '%TEXT%'"};