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

标签 shell perl ksh cleartool

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)Shellksh。 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}
);

参见 perldoc -f system

如果您想传递 '"XYZ"'"XYZ",您的问题并不清楚。

关于shell - Perl 系统调用必须准确地发送两个字符单引号和双引号 ' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329964/

相关文章:

shell - 使用 ksh 编辑 tomcats server.xml?

linux - 无法在 csh 中获取 bash 配置文件

perl - 复制第一个空行之前的所有内容

linux - bash sort -g 用于 Ubuntu 14.04LTS 中的 x.xxe+x 格式数字

perl - 为未定义的哈希值设置默认值

arrays - 为什么这些分配数组/列表的不同方法会产生不同的值?

ruby - Ruby "foo".hash 的 Perl 等价物是什么?

linux - 如何将命令行输出重定向到一个文件,但仍然在命令行中显示它们?

linux - 如何使用 GhostScript 避免标题截断 tiff。选择 于 tiff

linux - 将位串转换为文本值代码的 Shell 脚本