我有这个非常简单的c程序:
#include <stdio.h>
int main (int argc, char ** argv){
printf ("%s\n",argv[1]);
}
在Linux / bash上运行时如下:
./a.out *
我得到以下输出:
a.c
为什么呢?
答案 0 :(得分:6)
因为*
是一个glob字符,它扩展到当前目录中的文件列表。
如果你想传递文字*
,你需要引用或转义它:
./a.out '*'
答案 1 :(得分:2)
我不知道,但是当运行具有全局字符的命令行时,例如*或?,命令行解释器首先展开字符,然后才运行该程序。
例如,如果你的程序是:
#include <stdio.h>
int main (int argc, char ** argv){
int i;
printf ("argc=%d\n",argc);
for (i=0;i<argc;i++){
printf("%d: %s\n",i,argv[i]);
}
}
你可以这样运行:
./a.out *
,然后输出将是:
argc=4
0: ./a.out
1: a.c
2: a.c~
3: a.out
当然,输出将取决于当前目录的内容。