Perl系统调用必须将以下字符串发送到UnixShell
:
'"XYZ"'
在我的Perl脚本中,我使用了以下命令:
system("cleartool mkattr -replace ATTRIBUTE '"$attribute"' lbtype:$label");
除了使用引号字符外,所有内容都传递给Shell Unix
:
'
实际上,
cleartool mkattr -replace ATTRIBUTE
上面的命令被传递,因为它正是我想要的。 Perl变量$ attribute和$ label被很好地解释。 但我不知道该如何做才能获得:
'"XYZ"'
这里XYZ
是Perl变量$属性的值
操作系统为AIX (Unix)
,Shell
为ksh
。 cleartool是Clearcase的命令行界面,但没有必要的Clearcase技能来解决我的问题。
答案 0 :(得分:7)
如果您想执行系统命令并且不必使用任何shell语法(如重定向),那么使用system
的列表形式通常会更好更安全:
system(
'cleartool', 'mkattr', '-replace', 'ATTRIBUTE',
qq{"$attribute"}, qq{lbtype:$label}
);
# or, if you really want to pass both types of quotes:
system(
'cleartool', 'mkattr', '-replace', 'ATTRIBUTE',
qq{'"$attribute"'}, qq{lbtype:$label}
);
如果您想通过'"XYZ"'
或"XYZ"
,请问您的问题不明确。
答案 1 :(得分:1)
请参阅"Quote and Quote like Operators"并使用qq{...}
:
system(qq{cleartool mkattr -replace ATTRIBUTE '"$attribute"' lbtype:$label});
qq{...}
与"..."
完全相同,但您可以在字符串中使用双引号"
,而无需转义。
您可以在qq
之后直接使用任何字符,然后必须使用相同的字符来表示字符串结尾,即qqX...X
将以相同的方式工作。如果你的字符串包含Xes,你会遇到问题,所以不要这样做。
您还可以使用配对的字符作为分隔符({}
,()
,<>
),这是您通常会看到的内容。