#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}
如何获得它?
答案 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
不是发出输出的好方法。