环境变量 命令行参数
Linux下有关环境变量的相关知识
定义
- 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,通常具有全局特性。
环境变量的全局属性是指什么?
我们所运行的进程,都是子进程,bash
本身在启动的时候,会从操作系统的配置文件中读取环境变量信息。并且父进程会以环境变量表
的形式,将环境变量信息传递给子进程。因此,环境变量具有全局性。
(如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找)。
一些常见的环境变量
*可以同通过echo $VAR_NAME
的方式查看环境变量
- 使用
export Var_Name = Var_Value
来在当前进程中添加环境变量,如果这个进程是bash
,那么bash
的所有子进程都会认识它。 - 对于
bash
可以使用unset Var_Name
来取消一个环境变量。 $PATH
:保存的是Linux的指令路径。在运行指令时,会去遍历PYTH内的路径,去寻找该指令。并且,路径之间使用:
去分割。这也就是命令不需要带路径的原因。$HOME
:存储该用户的家目录。$SHELL
:当前Shell的路径env
查看所有的环境变量。history
记录历史指令SSH_TTY
记录了当前设备文件- 使用getenv(
Var_Name
)来获取想要的环境变量。运用,我们可以使用它来获得当前使用的用户的属性,从而可以实现类似基于用户不同而产生的”多态”。
…
命令行参数的由来
对于一个c语言的main()
函数来说,它具有int argc
和 char *argv[]
,两个参数。
main()函数并不是最开始调用的,main函数也要被其他函数调用。
对于一个空的main()函数而言,它的
*argv[0]
记录着它自身程序的名称的字符串,例如./myexe
。agrc
代表的是*argv[]
指针当中元素的个数,默认是是1
,因为默认*argv[0]
就记录着一个值。后者保存的,则是命令函参数。
- 例如,我在运行一个程序时,输入了以下内容:
./myexe -a -b
。 - 那么,bash会将它按照空格进行拆分,即命令行解析。
- 因此,
./myexe -a -b
这一个字符串被拆分为了三个,分别是./myexe
,-a
,-b
,因此,4被传递给了argc
,而*argv[]
就是用于记录他们字符串地址的指针数组。 - 我们可以使用
strcmp()
等字符串比较函数获得参数信息。从而判断当前程序要执行的逻辑。
- 例如,我在运行一个程序时,输入了以下内容:
总结
命令行参数(main(int argc,char *argv[])
)的重要功能,可以为程序提供选项
从而能根据选项表现出不同的功能。并且命令行参数是指针数组
的形式存储起来的。
环境变量的组织方式
main()函数不止可以包含以上参数,还可以包含*char env[]
。并且它的存储结构和*argv[]
完全相同,只不过存储的是环境变量。至此,一个main()
函数就包含了两张表。
环境变量表中最后是NULL。
每个指针指向一个以’\0’结尾的环境字符串,可以使用%s
来打印它。
本地变量
当我们在shell中输入 a=1
的时候,我们就创建了一个本地变量。
- 可以通过
echo
来打印它。 - 也可以使用
set
命令查看本地变量。 - 本地变量只在
bash
中有用,不能被继承。 - 可以通过
export
直接升级为全局变量。
对于bash
命令来说
- 常规命令 – 通过创建子进程完成的。
- 内建命令 – bash亲自执行,类似于bash调用了自己写的,或者系统提供的函数。(例如:cd)
环境变量 命令行参数
https://weihehe.top/2024/07/14/环境变量/