具有系统功能的c程序中的大括号扩展

brace expansion in c program with system function

我试过命令

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

出现

系统好像没有进行大括号展开

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

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

It seems like system does not make brace expansion

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


您仍然可以使用选项 -c 调用 bash,以便将 bashsystem() 一起使用。例如:

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

bash 本身将 运行 在另一个 shell 之上(即:shell system() 调用),但是 echo 命令肯定会 运行 in Bash.

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

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

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