没有\ n的系统api调用中的echo命令?

时间:2018-02-12 12:43:35

标签: c linux sh

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


void echoIt()
{
    char* cmd_1 = "echo -ne {\"key\":\"value\"} > outFile";
    char* cmd_2 = "echo -ne ,{\"key1\":\"value1\"} >> outFile";

    system(cmd_1);
    system(cmd_2);
}

int main(int argc, char **argv)
{
    echoIt();
}

输出有2行,选项-ne是删除\ n,它也出现在outFile

root@userx:/home/userx/work/lab/test# cat outFile 

    -ne {key:value}
    -ne ,{key1:value1}

预期结果在同一行:

{key:value} ,{key1:value1}

如何获得它?

2 个答案:

答案 0 :(得分:3)

我要接受你的话,你有一个具体的理由为什么你必须使用子shell,而不是直接打开文件。 -n的{​​{1}}和-e选项不属于便携式shell规范。通常,它们在您习惯使用的交互式shell中工作,但在用于解释echo命令行的非交互式shell中工作。

在现代(2001年后)操作系统上,最好使用system而不是printf

echo

会做你想要的。如果 在字符串后面需要换行符,system("printf '%s' '{\"key\":\"value\"}' > outFile"); system("printf '%s' ',{\"key\":\"value\"}' >> outFile"); 只能在第一个参数中理解C样式的反斜杠转义:

printf

密切关注所有这些例子中的引用。

答案 1 :(得分:2)

echo -n ...是非标准的。每the POSIX standard for echo

  

...如果第一个操作数是-n,或者任何操作数包含&lt;反斜杠&gt;字符,结果是实现定义的。

当您需要控制格式时,

echo不是发出输出的好方法。