Perl 系统调用必须将以下字符串发送到 UnixShell
:
'"XYZ"'
在我的 Perl 脚本中,我使用了以下命令:
system("cleartool mkattr -replace ATTRIBUTE '"$attribute"' lbtype:$label");
一切都很好地传递给 Shell Unix
,除了引号字符的使用:
'
确实,
cleartool mkattr -replace ATTRIBUTE
上面的命令被传递了,因为它正是我想要的。 Perl 变量 $attribute 和 $label 被很好地解释了。 但我不知道该怎么做才能获得:
'"XYZ"'
这里的XYZ
是Perl变量$attribute的值
操作系统是 AIX (Unix)
,Shell
是 ksh
。 cleartool 是 Clearcase 的命令行界面,但不需要 Clearcase 技能来解决我的问题。
最佳答案
如果你想执行系统命令并且不必使用任何 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"
,您的问题并不清楚。
关于shell - Perl 系统调用必须准确地发送两个字符单引号和双引号 ' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329964/