Linux命令行参数

张开发
2026/4/19 3:22:07 15 分钟阅读

分享文章

Linux命令行参数
main函数可以有参数吗1 核心概念main函数的两个参数C 语言的main函数可以带两个标准参数用来接收程序运行时的命令行输入int main(int argc, char *argv[])1.argc(argument count)含义命令行参数的个数包含程序名本身特性argc ≥ 1永远不会为 0因为argv[0]一定是程序名例子运行./code a b c d时argc 5./codeabcd共 5 个参数2.argv(argument vector)含义字符串指针数组存储所有命令行参数结构argv[0]程序名如./codeargv[1] ~ argv[argc-1]用户输入的参数argv[argc]固定为NULL作为数组结束标志例子运行./code a b c d时argv[0] ./code argv[1] a argv[2] b argv[3] c argv[4] d argv[5] NULL2 代码逐行解读#include stdio.h int main(int argc, char *argv[]) { // 打印参数个数 printf(argc: %d\n, argc); int i 0; // 遍历所有参数并打印 for(; i argc; i) { printf(argv[%d]-%s\n, i, argv[i]); } return 0; }运行结果对应图中输入./code a b c dargc: 5 argv[0]-./code argv[1]-a argv[2]-b argv[3]-c argv[4]-d3 关键细节参数本质是字符串哪怕是单个字符如a在argv中也是以字符串形式存储的空格是参数的分隔符系统自动完成解析你不需要手动处理命令行输入Linux 的bashshell 会自动把输入的命令按空格拆分填充到argc和argv中argv[0]的特殊性永远指向程序名即使你不输入任何额外参数argc1argv[0]依然存在数组结束标志argv[argc]一定是NULL这是 C 语言的标准规定用来安全遍历参数数组4 为什么需要命令行参数所有 Linux 命令如ls -l /home、cat file.txt本质都是 C 语言写的程序命令行的-l、/home、file.txt就是通过argc和argv传递给程序的程序通过判断argv中的参数实现不同的功能比如ls加-l就显示详细信息5 问题解答问题 1VS2022 有没有命令行参数✅有用法和 Linux 完全一致编译运行时在 VS 的「项目属性 → 调试 → 命令行参数」中输入参数程序运行时argc和argv会自动填充这些参数问题 2cat file.txt和cat file.txt的区别命令原理对argc/argv的影响cat file.txtfile.txt是命令行参数cat程序通过argv[1]拿到文件名主动打开文件读取argc2argv[1] file.txtcat file.txt是 shell 的重定向符号由 bash 把文件内容输入到cat的标准输入cat本身不感知文件名argc1argv只有cat程序名cat直接从标准输入读内容6 常见误区❌ 误区 1argc只算用户输入的参数不算程序名✅ 正确argc包含程序名所以./code a的argc2❌ 误区 2argv是二维字符数组✅ 正确argv是指针数组每个元素是指向字符串的指针数组最后以NULL结尾❌ 误区 3main函数必须带这两个参数✅ 正确main可以不带参数int main()此时无法接收命令行参数7 自己消化在shell中我们看似写的命令就是一行字符实际上它是C语言可执行程序Linux 下几乎所有 shell 命令本质都是用 C 语言写的可执行程序你在终端敲的每一行命令都是在运行一个 C 程序而命令行参数就是通过main函数的argc/argv传递进去的每一个ls、cat、rm都是提前编译好的 C 语言二进制可执行文件存放在/bin、/usr/bin等系统目录里。以ls为例所以我们传的命令行参数其实就是在ls程序内部通过判断argv[1]是不是-1来决定是否显示详细信息通过argv[2]来决定要查看哪个目录。命令行参数就是给 Linux 命令 “加选项、传数据” 的小尾巴。

更多文章