Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell Perl系统调用必须准确地发送单引号和双引号“”两个字符_Shell_Perl_Ksh_Cleartool - Fatal编程技术网

Shell Perl系统调用必须准确地发送单引号和双引号“”两个字符

Shell Perl系统调用必须准确地发送单引号和双引号“”两个字符,shell,perl,ksh,cleartool,Shell,Perl,Ksh,Cleartool,Perl系统调用必须向UnixShell发送以下字符串: 在我的Perl脚本中,我使用了以下命令: system("cleartool mkattr -replace ATTRIBUTE '"$attribute"' lbtype:$label"); 除了引号字符的两种用法外,所有内容都可以很好地传递给Shell Unix: ' 的确 cleartool mkattr -replace ATTRIBUTE 上面的命令被传递,因为它正是我想要的。 Perl变量$attribute和$labe

Perl系统调用必须向UnixShell发送以下字符串:

在我的Perl脚本中,我使用了以下命令:

system("cleartool mkattr -replace ATTRIBUTE '"$attribute"' lbtype:$label");
除了引号字符的两种用法外,所有内容都可以很好地传递给Shell Unix:

'
的确

cleartool mkattr -replace ATTRIBUTE
上面的命令被传递,因为它正是我想要的。 Perl变量$attribute和$label得到了很好的解释。 但我不知道该怎么做才能准确地获得:

'"XYZ"'
这里XYZ是Perl变量$attribute的值 OS是AIX Unix,Shell是ksh。cleartool是Clearcase的命令行界面,但不需要Clearcase技能来解决我的问题。

请参阅并使用qq{…}:

qq{…}与…完全相同,只是您可以在字符串中使用双引号,而无需转义它们

您可以直接在qq后面使用任何字符,然后必须使用相同的字符表示字符串的结尾,即qqX…X将以相同的方式工作。如果您的字符串包含X,您将遇到问题,因此不要这样做

您还可以使用成对字符作为分隔符{},这是您通常会看到的。

请查看并使用qq{…}:

qq{…}与…完全相同,只是您可以在字符串中使用双引号,而无需转义它们

您可以直接在qq后面使用任何字符,然后必须使用相同的字符表示字符串的结尾,即qqX…X将以相同的方式工作。如果您的字符串包含X,您将遇到问题,因此不要这样做


您还可以使用成对字符作为分隔符{},这是您通常会看到的。

如果您希望执行系统命令,并且不必使用任何shell语法(如重定向),通常使用系统的列表形式更好、更安全:

系统 “cleartool”、“mkattr”、“替换”、“属性”, qq{$attribute},qq{lbtype:$label} ; 或者,如果您确实希望传递这两种类型的引号: 系统 “cleartool”、“mkattr”、“替换”、“属性”, qq{'$attribute'},qq{lbtype:$label} ; 看


您的问题不清楚是否要传递“XYZ”或XYZ。

如果您要执行系统命令,并且不必使用任何shell语法(如重定向),通常使用系统的列表形式更好、更安全:

系统 “cleartool”、“mkattr”、“替换”、“属性”, qq{$attribute},qq{lbtype:$label} ; 或者,如果您确实希望传递这两种类型的引号: 系统 “cleartool”、“mkattr”、“替换”、“属性”, qq{'$attribute'},qq{lbtype:$label} ; 看


您的问题不清楚您是否要传递“XYZ”或XYZ。

显示的带有system…的Perl代码甚至不应该编译,因为$attribute变量之前的应终止上一个字符串。您确定您正在使用的是该代码吗?您如何不得到运行时错误?您确定它不是systemclear…但是。$att属性…你不能在没有这样的运算符的情况下连接字符串。我的问题不清楚我想传递的是'XYZ'而不是XYZ。我不得不怀疑你是否必须发送准确的字符串。看起来你试图建立一个命令行,并将文字引号与语法引号混淆。systemcleartool,mkattr,-replace,ATTRIBUTE,$att您可能需要的是属性,lbtype$标签。显示的带有system…的Perl代码甚至不应该编译,因为$attribute变量之前的应终止上一个字符串。您确定这就是您正在使用的代码吗?您怎么没有得到运行时错误?您确定它不是systemclear…但是“$attribute…您不能conca”tenate字符串,没有那样的运算符。我的问题不清楚我想传递的是'XYZ'而不是XYZ。我想知道您是否必须发送准确的字符串。看起来您试图建立一个命令行,并将文字引号与语法引号混淆。systemcleartool,mkattr,-replace,ATTRIBUTE,$ATTRIBUTE,lbtype$label是专业的宝贝你想要什么。qq{$attribute}可以用$attribute替换。@shawnhcorey这会有所不同。这取决于OP是否真的要将引号传递给程序或not@GerhardBarnardOP说“XYZ”应该传递给shell。但至少我不清楚cleartool应该得到什么。@tinita同意。当shell com中出现一个引号字符串时曼德,我怀疑有XY问题。@shawncorey:问题可能不清楚,但qq{$attribute}肯定不等于$attribute。你的评论不正确。qq{$attribute}可以用$attribute替换。@shawnhcorey这会有所不同。这取决于OP是否真的要将引号传递给程序或not@GerhardBarnardOP说“XYZ”应该传递给shell。但至少我不清楚cleartool应该得到什么。@tinita同意。当shell com中出现一个引号字符串时曼德,我怀疑是XY问题。@shawncorey:这个问题可能不清楚,但qq{$attribute}肯定不是等价的
到$attribute。你的评论不正确。我从你的回答中学到了很多,非常感谢。但结果总是一样的。我丢失了字符:',它被替换为:,我测试了许多其他可能性。。。转义引号,双引号,两者。。。qq将所有内容都保留为反斜杠,但不保留一个引号。@Martin:那不是真的。qq//不会保留反斜杠,也不会删除单引号。在你们把这些值传递给系统之前,试着打印它们。我从你们的答案中学到了很多,非常感谢。但结果总是一样的。我丢失了字符:',它被替换为:,我测试了许多其他可能性。。。转义引号,双引号,两者。。。qq将所有内容都保留为反斜杠,但不保留一个引号。@Martin:那不是真的。qq//不会保留反斜杠,也不会删除单引号。在将值传递给系统之前,请尝试打印这些值。
'"XYZ"'
system(qq{cleartool mkattr -replace ATTRIBUTE '"$attribute"' lbtype:$label});