首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >perl脚本参数包含双配额“

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

Stack Overflow用户
提问于 2011-04-14 20:22:15
回答 3查看 1.6K关注 0票数 0

我有一个接收3个arugment的perl脚本。

第一个参数非常长,包含空格和引号,实际上我不知道它的大小可能是任何大小。为了分隔我的参数,我使用":“符号。

参见示例:./my_script.pl 2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x

问题是我丢失了双引号和spaces.See输出:

代码语言:javascript
复制
LOG The 1st input is:2MT54XAWKEARTTRRYYMMTEMP 2012 FEB 01

LOG Type is:Single

LOG Version is:123.x

我的代码:

代码语言:javascript
复制
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];
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-14 20:43:58

您的Perl程序不接收3个参数,它接收6个参数。只需将它们打印出来自己查看:

代码语言:javascript
复制
perl -le 'print for @ARGV' 2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x

您的第一个参数(2MT5)不是“很长”,它只有4个字符。

不是Perl的问题,而是shell的问题。shell在空格上拆分参数,并处理双引号。如果您不希望它这样做,那么您必须引用任何包含空格或引号的参数:

代码语言:javascript
复制
./my_script.pl '2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x'
票数 3
EN

Stack Overflow用户

发布于 2011-04-14 20:29:55

正是shell丢弃了这些字符。正确地传递参数(包括引用任何包含空格的引号,以及转义其中的任何引号),这将不是问题:

代码语言:javascript
复制
./my_script.pl "2MT5 4XAW KEAR TTRR YYMM \"TEMP 2012 FEB 01\"" "Single" "123.x"

这样你就不需要费心去拆分和连接了。首先,你要把论点组织得恰到好处。

票数 3
EN

Stack Overflow用户

发布于 2011-04-14 20:36:19

当然,,

  • ,你去掉了双引号。这是标准的*NIX命令行行为,其中双引号表示您希望将其中的内容视为一个参数。
  • ,当你print一个项目列表时,它们将被简单地连接起来。

要做你想做的事情,最简单的方法是使用print "@ARGV";,因为默认的列表分隔符是一个空格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5663150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档