perl脚本参数包含双配额\\“

问题描述

|| 我有一个Perl脚本,可以接收3个结果。 第一个参数很长,包含空格和引号,我实际上不知道期望多大的大小。为了分隔参数,我使用\“:\”符号。 参见示例: ./my_script.pl 2MT5 4XAW KEAR TTRR YYMM \“ TEMP 2012 FEB 01 \”:单一:123.x 问题是我丢失了双引号和空格。请参见输出:
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];
    

解决方法

您的Perl程序不接收3个参数,而是接收6个参数。只需将它们打印出来即可自己查看:
perl -le \'print for @ARGV\' 2MT5 4XAW KEAR TTRR YYMM \"TEMP 2012 FEB 01\":Single:123.x
您的第一个参数(2MT5)不是\“ very long \”,它只有4个字符。 您没有Perl问题,而有外壳问题。 Shell在空格上分割args并处理双引号。如果您不希望它这样做,那么必须引用任何包含空格或引号的参数:
./my_script.pl \'2MT5 4XAW KEAR TTRR YYMM \"TEMP 2012 FEB 01\":Single:123.x\'
    ,是外壳丢弃这些字符。正确传递参数(包括用引号将包含空格的内容转义,并转义其中的任何引号),这样就不会出现问题:
./my_script.pl \"2MT5 4XAW KEAR TTRR YYMM \\\"TEMP 2012 FEB 01\\\"\" \"Single\" \"123.x\"
这样一来,您就无需再进行拆分和合并了。首先,您将正确组织参数。     ,当然,您会丢失双引号。这是标准的* NIX命令行行为,其中双引号表示您希望将其中的内容视为一个参数。 当您在项目列表中“ 5”时,它们将被简单地串联在一起。 做您打算做的最简单的方法是ѭ6,因为内插列表的默认列表分隔符是一个空格。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...