2

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

操作系统命令用 执行IPC::Open3,命令如下

$cmd = "mycommand --add \"condition LIKE '%TEXT%' \"";

该命令应该将包含在“add”之后的字符串插入到数据库中。

问题是它在没有单引号的情况下将记录插入数据库%TEXT%,如下所示:

condition LIKE %TEXT%

如果我在命令提示符下执行命令,它会正确插入字符串。

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

谢谢您的帮助

4

2 回答 2

5

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

建议:

  1. 将系统命令创建为字符串数组将避免 shell 重新插入命令行。 @cmd = ('mycommand', '--add', q(condition LIKE '%TEXT%'));

  2. 添加额外的反斜杠以保护 shell 中的单引号。预先添加echo到您的命令可以帮助调试....

  3. (我个人最喜欢的)不要为您的数据库访问而掏腰包。 use DBI.

于 2013-03-01T21:34:07.723 回答
0
$cmd = q{mycommand --add "condition LIKE '%TEXT%'"};

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

这样,它就可以使用整个命令。

于 2013-03-02T06:21:16.103 回答