目录
1.命令行参数
2. 环境变量
2.1 概念
2.2 Linux中的环境变量
2.2.1 常见环境变量
2.2.2 获取环境变量的方法
3.理解环境变量的产生
1.命令行参数
直接上代码演示:
1 #include<stdio.h>
2
3 int main(int argc,char* argv[]) //int main(int argc, char **argv) 指针形式,完全等价
4 {
5 printf("参数个数: %d\\n", argc);
6
7 for (int i = 0; i < argc; i++)
8 {
9 printf("argv[%d] = %s\\n", i, argv[i]);
10 }
11 return 0;
12 }

-
argv[0] 永远存在,至少为 1。
-
argv[argc] 固定为 NULL,也就是说最后一定以空指针结尾
argc 是命令行参数的个数,argv 是参数字符串数组,它们让你可以在程序启动时传入配置和数据,会以空格文分隔符,从键盘读取。
通过命令行参数可以实现多选项功能:
1 #include<stdio.h>
2 #include<string.h>
3
4 int main(int argc,char* argv[])
5 {
6 for (int i = 0; i < argc; i++)
7 {
8 if (strcmp(argv[i], "-l") == 0) { printf("Version1\\n"); }
9 else if (strcmp(argv[i], "-p") == 0) { printf("Version2\\n"); }
10 }
11
12 return 0;
13 }

2. 环境变量
2.1 概念
环境变量(Environment Variables) 是操作系统为了简化程序配置而设计的全局键值对机制,是系统级变量,保存和系统启动和运行的核心参数,具有全局性。
2.2 Linux中的环境变量
2.2.1 常见环境变量
PATH : 指定命令的搜索路径 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) SHELL : 当前Shell,它的值通常是/bin/bash
echo $NAME #可以查看配置的环境变量

说明:./code 能够执行,code不能执行的原因就是没有指定路径,而ls,pwd,which在任何地方都能执行就是因为配置了环境变量,所以which的本质就是查找对应的环境变量。
PATH中添加环境变量
PATH=$PATH:[添加的路径]
如果我们将/home/yyx/lesonenvivar20添加到PATH当中,code就能够执行了。

注意:如果直接PATH="XXXX",原内容会被XXXX覆盖,不过仅仅是做内存级修改,退出重新登陆后会恢复。
env #查看全部的环境变量,不含本地变量

比如其中的HISTSIZE=1000,说的就是只记录最近使用的历史命令1000条,history可以查看。
OLDPWD就是最近上一次的路径,cd-就是通过它来实现的。
2.2.2 获取环境变量的方法
| environ 全局变量 | 直接操作整个环境变量数组 | extern char **environ; |
| getenv() 函数 | 通过键名获取单个值,最常用 | getenv("PATH") |
| main() 的 envp 参数 | 通过 main 函数的第三个参数接收 | int main(int argc, char *argv[], char *envp[]) |
environ的用法:
#include <stdio.h>
extern char **environ; // 声明外部变量
int main() {
char **env = environ;
while (*env != NULL) {
printf("%s\\n", *env);
env++;
}
return 0;
}
可以通过C库函数提供的getenv来获取环境变量。
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 // 获取HOME
7 char *home = getenv("HOME");
8 if (home != NULL) {
9 printf("HOME = %s\\n", home);
10 }
11
12 // 获取 PATH
13 char *path = getenv("PATH");
14 if (path != NULL) {
15 printf("PATH = %s\\n", path);
16 }
17
18 return 0;
19 }
export #设置新的环境变量,也可以将本地变量修改为环境变量
set #显示本地定义的shell变量和环境变量
unset #清楚环境变量
echo$ #显示变量的值
[变量名]=[] #定义本地变量,只在bash内部有效,子进程不继承,等号两边不能有空格
2.2.3 getenv的三种用法
putenv("MY_VAR=hello"); #添加新环境变量(不存在时)
putenv("PATH=/custom/bin"); #修改已有环境变量(存在时)
putenv("MY_VAR"); #删除环境变量(传入不带 = 的字符串)
3.理解环境变量的产生
结论:任何进程的启动,都会存在两张表
1.命令行参数表
2.环境变量表
命令行参数表:当在shell命令行输入命令字符串时,通过解析构建argv数组,也就是命令行参数表,最后以NULL结束。
环境变量表:当一个进程启动时,他会从特定的配置文件中读取环境变量,然后构建环境变量表char* env[],如果它继续创建子进程的话,子进程会“继承”下来这些环境变量,在创建,在继承,所以环境变量具有全局属性。
![]()
![]()
每一次登陆时,会走上面这个路径扫描文件获取环境变量,如果在特定文件内部做修改,增加环境变量,此时就不单单是内存级修改,下次登陆时不再恢复。
完~
网硕互联帮助中心






评论前必须登录!
注册