Linux 环境命令行参数

linux environment command line arguments

本文关键字:参数 命令行 环境 Linux      更新时间:2023-10-16

我是一名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

发生了什么事?

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