2014-03-30 64 views
0

我是一名Windows程序员,现在我正在学习在Linux环境下编程,我使用LinuxMint15。linux环境命令行参数

我遇到了一个“奇怪”的问题,命令行参数不是我输入的。 程序是超级简单:

#include <stdio.h> 
int main(int argc, char* argv[]) 
{ 
    printf("cmd line="); 
    for(int i=0;i<argc;i++){ 
     printf("%s ", argv[i]); 
    } 
    printf("\n"); 
    return 0; 
} 

然后编译并运行它,它的作品,因为我想:

[email protected] ~ $ gcc -o cl test_cl.cpp 
[email protected] ~ $ ./cl 1 2 
cmd line=./cl 1 2 

但是,当我在最后输入一个*,它的文件夹中列出的所有文件名.....:

[email protected] ~ $ ./cl 1 2 * 
cmd line=./cl 1 2 Public Template Video Picture Docs Desktop cl test_cl.cpp test.txt untitled 

发生了什么事?

回答

2

大多数Linux shell专门处理字符?*。特别是,它们用于匹配文件名称的匹配模式。在这种情况下,shell将*扩展为当前目录中的所有文件,然后将该列表作为命令行参数发送到您的程序。如果你想要一个文字*,你需要用\*转义它或用'*'引用它。

+0

感谢您的及时答复,是的,我注意到\\ *的作品,但我不知道是否有某个地方可以改变shell的默认行为? – roy

+2

不,你不想改变shell的默认行为。你需要你的shell像其他人(和POSIX标准)一样行事! –