我使用system()
从C程序调用Unix上安装的实用程序。调用实用程序的输入具有以分号分隔的参数,如下所示:
snprintf(buffer, sizeof(buffer), ". /path/to/program/env.sh && utilityname command WKS#%s\;at=%s", strmnm,dte);
system(buffer);
问题是分号后的参数被忽略/视为下一个命令。我尝试使用“\
”进行转义\;
,但它不起作用。
答案 0 :(得分:3)
system
调用shell。在Unix上,最常见的是sh
的衍生物或csh
的衍生物。 POSIX仅指定sh
(感谢@KeithThompson)。两个shell系列都将未转义的;
视为命令分隔符。
要根据shell规则转义字符,可以在其前面加上反斜杠,或用引号将其括起来。 C对字符串中的引号和反斜杠有自己的规则,因此通常需要更多的反斜杠。单引号具有很好的属性,在C字符串中不需要反斜杠。
所以这些都应该有效:
"..... ';' ....."
"..... \";\" ....."
"..... \\; ....."