环境变量 命令行参数

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 argcchar *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命令来说

  1. 常规命令 – 通过创建子进程完成的。
  2. 内建命令 – bash亲自执行,类似于bash调用了自己写的,或者系统提供的函数。(例如:cd)

环境变量 命令行参数
https://weihehe.top/2024/07/14/环境变量/
作者
weihehe
发布于
2024年7月14日
许可协议