C 如何正确转义嵌套的特殊字符

C 如何正确转义嵌套的特殊字符,c,string,C,String,我需要将下面的例句保存为一个名为demo.sh的文件 我在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; } 我可

我需要将下面的例句保存为一个名为demo.sh的文件

我在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;
}
我可以把上面四句话中的第一句写进文件。但其他句子包含特殊字符,如单引号、双引号和行尾字符。这很难转义,因为sudo命令需要有两个嵌套的部分,我试图用“和”分别包装它们

我怎样才能逃过这些句子,把它们写进档案里?这将是伟大的,有一些功能,因为实际上该文件是超过4句话,并有许多特殊字符


作为说明,我知道我可以使用C的I/O函数,我想用一个系统命令来编写文件,该命令使用sudo、printf和一行字符串。

我不认为这是最好的方法,但你可以使用一个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;
}

使用系统实际上与在终端中输入这些命令是一样的,不这样做的原因是什么?在测试期间,程序无法写入/usr/share/applications/location,因为它属于root用户。我看到使用sudobash-c的方式正在终端中工作。所以我想把终端移植到C程序中。对于简单的句子来说,它非常棒,但是每当句子包含特殊字符时,它就变得非常复杂。这不是将它移植到C,这只是通过C程序执行相同的bash命令。我可能使用了错误的术语,但你是对的。我正在用C编写一个终端命令文件。谢谢你的提示。我修改了你的代码,但每当我到第二行,它看起来很可怕。我不得不在第二句双引号转义中使用3个反斜杠。sprintfcommand,sudobash-c%s%s>/usr/share/applications/demo.sh',printf,\/usr/bin/env\\nxmessage这是\\\第一句\\\\;我不知道为什么需要3个反斜杠。
#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;
}