忽略存储在参数perl中的字符串中的空格

时间:2015-10-09 19:27:05

标签: perl

我试图执行.VB脚本以及其他一些参数。

我正在呼叫system("$cmd"),其中

my $cmd = "Report.exe $app_env $rpt_Dir $eff_date";

my $rpt_Dir = "\\\\server\\folder\\Target Report\\test";

我遇到的问题是(我认为)"Target Report"之间的空格使得脚本将其视为2个参数。

我之所以没有用#34;"并将其作为参数传递而不是将其保存到变量,即路径根据日期而变化。

这不是我在.VB脚本中更改代码的第一选择。

3 个答案:

答案 0 :(得分:1)

您可以将一组参数传递给system。如果你这样做,你就不会被报价插值绊倒。

awk -F '[ :]' '{f = $3 ".txt"; print > f}' input.txt

答案 1 :(得分:1)

在Windows上,system调用使用cmd.exe来处理命令,因此您需要在包含空格的任何参数周围使用双引号

像这样设置$cmd

my $cmd = qq{Report.exe $app_env "$rpt_Dir" $eff_date};

qq{...}构造与普通的双引号相同,但它允许您选择自己的分隔符,这样您就不必转义任何嵌入的双引号

然后你可以写

system($cmd);

在单个标量变量周围加上引号是错误的

答案 2 :(得分:0)

您只需将$rpt_Dir变量括在单引号中即可:

my $cmd = "Report.exe $app_env '$rpt_Dir' $eff_date";

它将被视为一个单一的争论