我有一个接收3个arugment的perl脚本。
第一个参数非常长,包含空格和引号,实际上我不知道它的大小可能是任何大小。为了分隔我的参数,我使用":“符号。
参见示例:./my_script.pl 2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x
问题是我丢失了双引号和spaces.See输出:
LOG The 1st input is:2MT54XAWKEARTTRRYYMMTEMP 2012 FEB 01
LOG Type is:Single
LOG Version is:123.x我的代码:
open (FD, ">file2.txt");
print FD @ARGV;
close FD;
my $str1=`cat file2.txt`;
my @argv_values = split(':',$str1);
$new_str = $argv_values[0];
$type = $argv_values[1];
$ver = $argv_values[2];发布于 2011-04-14 20:43:58
您的Perl程序不接收3个参数,它接收6个参数。只需将它们打印出来自己查看:
perl -le 'print for @ARGV' 2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x您的第一个参数(2MT5)不是“很长”,它只有4个字符。
不是Perl的问题,而是shell的问题。shell在空格上拆分参数,并处理双引号。如果您不希望它这样做,那么您必须引用任何包含空格或引号的参数:
./my_script.pl '2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x'发布于 2011-04-14 20:29:55
正是shell丢弃了这些字符。正确地传递参数(包括引用任何包含空格的引号,以及转义其中的任何引号),这将不是问题:
./my_script.pl "2MT5 4XAW KEAR TTRR YYMM \"TEMP 2012 FEB 01\"" "Single" "123.x"这样你就不需要费心去拆分和连接了。首先,你要把论点组织得恰到好处。
发布于 2011-04-14 20:36:19
当然,,
print一个项目列表时,它们将被简单地连接起来。要做你想做的事情,最简单的方法是使用print "@ARGV";,因为默认的列表分隔符是一个空格。
https://stackoverflow.com/questions/5663150
复制相似问题