如何正确逃脱嵌套的特殊字符

时间:2015-04-03 15:45:58

标签: c string

我需要将下面的示例句子保存为名为demo.sh的文件。

#!/usr/bin/env bash   
xmessage This is "first sentence"
xmessage This is 'second sentence'
xmessage This is {third sentence}

我在C中使用的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    system("sudo bash -c 'printf \"#!/usr/bin/env bash\n\" > /usr/share/applications/demo.sh'");
    return 0;
}

我可以将上面4个句子的第一句写入文件中。但其他句子包含single quotesdouble quotesline ending character等特殊字符。这很难逃脱,因为sudo命令需要有两个嵌套的部分,我试图分别由'"包裹。

如何逃避句子并写出文件?有一些功能会很棒,因为实际上文件超过4个句子并且有很多特殊字符。

作为一个注释,我知道我可以使用C的I / O函数,我想通过一个使用systemsudo和{{printf的{​​{1}}命令来编写文件。 1}}。

1 个答案:

答案 0 :(得分:0)

我不是最好的方法,但你可以使用一个char []变量用于系统命令,sprintf()函数可以在这个变量中分割和写入命令

这是一个例子

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char command[128];

    /* Generate string */
    sprintf(command, "sudo bash -c %s %s bash\n > /usr/share/applications/demo.sh'", 
        "'printf", "#!/usr/bin/env");

    system(command);
    return 0;
}