Perl系统调用必须准确发送两个字符单引号和双引号'"

Mar*_*tin 1 shell perl ksh cleartool

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

'"XYZ"'
Run Code Online (Sandbox Code Playgroud)

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

system("cleartool mkattr -replace ATTRIBUTE '"$attribute"' lbtype:$label");
Run Code Online (Sandbox Code Playgroud)

Shell Unix除了两个引用字符的使用外,一切都很好地传递给了:

'
Run Code Online (Sandbox Code Playgroud)

确实,

cleartool mkattr -replace ATTRIBUTE
Run Code Online (Sandbox Code Playgroud)

传递上面的命令,因为它正是我想要的.Perl变量$ attribute和$ label被很好地解释.但我不知道该怎样做才能获得:

'"XYZ"'
Run Code Online (Sandbox Code Playgroud)

这里XYZ是Perl变量$属性OS是价值AIX (Unix)和Shell为ksh.cleartool是Clearcase的命令行界面,但修复我的问题不需要Clearcase技能.

tin*_*ita 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}
);
Run Code Online (Sandbox Code Playgroud)

见perldoc -f系统

你的问题不清楚你是否想通过'"XYZ"'或"XYZ".

  • @shawnhcorey会有所不同.这取决于OP是否真的想要将引号传递给程序 (4认同)