Command line zsh究竟是如何扩展globs的?

Command line zsh究竟是如何扩展globs的?,command-line,wildcard,zsh,glob,Command Line,Wildcard,Zsh,Glob,我有一个C程序,它通过遍历argv变量来显示命令行 #include <stdio.h> int main(int argc, char *argv[]){ int i = 0; printf("----------\n"); for(i = 0; i < argc; i++) printf("%s\n", argv[i]); return 0; } 输出: zsh: argument list too long: ./a.o

我有一个C程序,它通过遍历
argv
变量来显示命令行

#include <stdio.h>

int main(int argc, char *argv[]){
    int i = 0;
    printf("----------\n");
    for(i = 0; i < argc; i++)
        printf("%s\n", argv[i]);
    return 0;
}
输出:

zsh: argument list too long: ./a.out
但是,使用同一文件夹中的
***.h
glob调用
ls
grep
等程序时,不会出现任何问题。为什么调用我的程序时
zsh
失败?
zsh
如何扩展通配符


编辑:我正在cygwin上使用zsh。

我编译了您的代码,并以类似的方式在当前目录中执行它,它运行良好,没有任何错误消息。此外,我还发现有人发布了一条消息,提示zsh的源代码中不存在错误消息“参数列表太长”,因此实际上可能是操作系统问题:

您尝试运行的应用程序是Windows应用程序(包括mingw)还是Cygwin应用程序

定义命令行的长度。通常,它是由操作系统设置的,所有应用程序都受其限制,但在Cygwin上,为Cygwin编译的应用程序可以使用比Windows应用程序更大的缓冲区-请参阅示例讨论

如果不一定需要同时将所有文件作为ARG,可以使用xargs将文件名划分为适合ARG_MAX的块:

echo **/*.h | xargs ./a.out

是的,这是在Cygwin上运行的Windows可执行文件。为什么在命令行中使用双''而不是单''?
echo **/*.h | xargs ./a.out