我正试图将标量值传递给系统命令,但一直有问题。我不知道为什么。这么晚了,任何帮助都很感激。
我得到的两个错误是
语法错误;
执行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{}
本质上是",具有额外的优势,您可以包含双引号字符而不必转义。