2

我试过命令

cat tmp/file{1..3} > newFile

并且工作完美

但是当我编译并执行以下c程序时

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

void main() {
   char command[40];
   int num_of_points = 3;
   sprintf(command,"cat tmp/file{1..%d} > file.Ver",num_of_points);
   system(command);
}

消息

cat: tmp/file{1..3}: No such file or directory

出现

似乎系统没有进行大括号扩展

4

2 回答 2

2

似乎系统没有进行大括号扩展

问题是由 调用的 shell system(),它不是 Bash,而是另一个不支持大括号扩展的 shell。


您仍然可以bash使用该选项调用-c以使用bashwith system()。例如:

system("bash -c 'echo The shell is: $SHELL'")

bash本身将在另一个 shell 之上运行(即:shellsystem()调用),但该echo命令肯定会在 Bash 中运行。

通过在您的代码中应用相同的原则:

sprintf(command,"bash -c 'cat tmp/file{1..%d} > file.Ver'",num_of_points);

将创建command您需要传递给的正确字符串system(),以便命令cat tmp/file{1..%d} > file.Ver在 Bash 中运行并执行大括号扩展。

于 2017-11-27T11:23:50.557 回答
0

system命令的手册页说:“system()通过调用 /bin/sh -c 命令执行命令中指定的命令”

所以它不会执行类似 bash 的大括号扩展。我建议你在一个循环中构建文件字符串cat,但要注意不要溢出command缓冲区。

于 2017-11-27T11:19:52.307 回答