在C中使用shell脚本的变量

时间:2016-12-06 20:45:56

标签: c bash shell sed

我在C中有一个shell脚本,定义为

#define SHELLSCRIPT "\
sed 's/./& \
inserted text \
  /20' fileA.txt > fileB.txt \
"

当在终端上运行此shell脚本时,它会在偏移量为20的fileB.txt中插入文本inserted text。现在,我想要20 fileA.txtfileB.txt从变量中提取。

我该怎么做?我尝试了以下

#define SHELLSCRIPT "\
    sed 's/./& \
    inserted text \
      /$i' fileA.txt > fileB.txt \
    "

在我运行上面的shell脚本之前的C中,我运行了system("i=20");但是我在下面遇到了这个错误

sed: 1: "s/./& this comment has ...": bad flag in substitute command: '$'

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

当你运行system()时,它每次都会启动一个新的shell。因此i=20运行的shell与运行sed命令的shell不同。

而不是脚本文本中的$i,而是将%d放在那里。然后,您可以将其用作sprintf的格式字符串,它可以将命令格式化为单独的变量。

#define SHELLSCRIPT "\
    sed 's/./& \
    inserted text \
      /%d' fileA.txt > fileB.txt \
    "

char command[500];
sprintf(command, SHELLSCRIPT, 20);
system(command);

答案 1 :(得分:1)

如何更换脚本命令

#define SHELLSCRIPT "\
    sed 's/./& \
    inserted text \
      /%d' %s > %s \
    "

然后在执行命令之前用变量替换:

char cmd[100 +1];
sprintf(cmd, SHELLSCRIPT , 20, "file1", "file2");
system(cmd)