linux环境命令行参数

时间:2014-03-30 01:38:18

标签: c++ linux

我是一名Windows程序员,现在我正在学习在Linux环境中编程,我使用的是LinuxMint15。

我遇到了一个“怪异”的问题,即命令行参数不是我输入的内容。 该程序非常简单:

#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;
}

然后编译并运行它,它按我的意愿工作:

roy@xx ~ $ gcc -o cl test_cl.cpp
roy@xx ~ $ ./cl 1 2
cmd line=./cl 1 2 

但是当我在最后键入*时,它列出了文件夹中的所有文件名.....:

roy@xx ~ $ ./cl 1 2 *
cmd line=./cl 1 2 Public Template Video Picture Docs Desktop cl test_cl.cpp test.txt untitled

发生了什么事?

1 个答案:

答案 0 :(得分:2)

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