Perl:语法错误不可打印的字符作为密钥.执行CMD查找错误



我正试图将标量值传递给系统命令,但一直有问题。我不知道为什么。这么晚了,任何帮助都很感激。

我得到的两个错误是

  • 语法错误;

  • 执行CMD find时出错

本质上,我试图传递一串命令(dbcommand;f;在命令"command"中返回;…)。

my $id_to_test = $ids[0];
my $cmd = q{command -c "dbcommand -a app-f fam -d db; f sub=a, device=};
$cmd .= q{$id_to_test};
$cmd .= q{, analog=A; echo -c on; echo -o A_value.txt; /DIS;"};
system $cmd;
#system('command-c "dbcommand-a app-f fam-d db; f sub=a, device=$id_to_test, analog=A; echo -c on; echo -o A_value.txt; /DIS;"');

所以现在我在做:

my $id_to_test = $ids[0];
my $cmd = 'command-c "dbcommand-a app-f fam -d db; f sub=a, device=';
$cmd .= "$id_to_test";
$cmd .= ', analog=A; echo -c on; echo -o A_value.txt; /DIS;"';
system $cmd;

,我得到错误:

  • 语法错误;CMD有无效字符——"dbcommand .Sh: f: command not found- c在- o A_value.txtsh:/DIS:没有这样的文件或目录
  • 命令不存在

如果我打印$cmd;相反,我的双引号前面也有斜杠,这不是我想要的:

command -c "dbcommand -a app -f fam -d db;查找sub=a, device=1234567, analog= a;Echo -c on;echo -o A_value.txt;/说, "

确保数组被填充:

我做的第一件事就是通过声明数组,打开文件,然后执行: 来确保正确地向数组添加值。
while (<$fh>) {
#Remove any newline characters from line using the chomp() command.
    chomp;
    push @ids, "$_";
#   print($ids[$index]);
#   $index = $index + 1;
#   print "$rown";
}
print join (", ", @ids);
my $array_size = @ids;
print("n" . $array_size);

当我执行perl脚本时,它在本地打印 *,一切都如预期的那样——值被打印出来,数组的大小为3。

123456789, 123456888, 123456789

3

然而,当我远程打印时,我只得到最后一个元素

, 123456789

3

即使数组的大小也是3

问题是当您使用单引号(没有插值)时,它将您的反斜杠视为字面反斜杠。在使用单引号时,我能想到的唯一需要反斜杠作为转义字符的情况是:

转义单引号本身或反斜杠:
print 'I said 'hello.'';

试试这样写:

my $cmd = 'command -c "dbcommand -a app-f fam -d db; f sub=a, device=' .
    $id_to_test . ', analog=A; echo -c on; echo -o A_value.txt; /DIS;';

也可以:

my $cmd = 'command -c "dbcommand -a app-f fam -d db; f sub=a, device=' .
    "$id_to_test, analog=A; echo -c on; echo -o A_value.txt; /DIS;";

(或者您可以将其包装在一个没有连接操作符的大""/q{}中)。

并且,正如其他人所暗示的,qq{}本质上是",具有额外的优势,您可以包含双引号字符而不必转义。

相关内容

  • 没有找到相关文章

最新更新