如何在C系统函数中转义分号

时间:2014-12-11 20:32:52

标签: c unix

我使用system()从C程序调用Unix上安装的实用程序。调用实用程序的输入具有以分号分隔的参数,如下所示:

snprintf(buffer, sizeof(buffer), ". /path/to/program/env.sh && utilityname command WKS#%s\;at=%s", strmnm,dte);
            system(buffer);

问题是分号后的参数被忽略/视为下一个命令。我尝试使用“\”进行转义\;,但它不起作用。

1 个答案:

答案 0 :(得分:3)

system调用shell。在Unix上,最常见的是sh的衍生物或csh的衍生物。 POSIX仅指定sh(感谢@KeithThompson)。两个shell系列都将未转义的;视为命令分隔符。

要根据shell规则转义字符,可以在其前面加上反斜杠,或用引号将其括起来。 C对字符串中的引号和反斜杠有自己的规则,因此通常需要更多的反斜杠。单引号具有很好的属性,在C字符串中不需要反斜杠。

所以这些都应该有效:

"..... ';' ....."

"..... \";\" ....."

"..... \\; ....."